diff options
Diffstat (limited to 'core')
45 files changed, 525 insertions, 488 deletions
diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java index 499644fd9..8bfb15025 100644 --- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java +++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/BatchDeployer.java @@ -33,8 +33,8 @@ import org.slf4j.ext.XLoggerFactory; * The Class {@link BatchDeployer} deploys an Apex model held as an XML or Json file onto an Apex engine. It uses the * EngDep protocol to communicate with the engine, with the EngDep protocol being carried on Java web sockets. * - * This deployer is a simple command line deployer that reads the communication parameters and the location of the Apex - * model file as arguments. + * <p>This deployer is a simple command line deployer that reads the communication parameters and the location of the + * Apex model file as arguments. * * @author Liam Fallon (liam.fallon@ericsson.com) */ @@ -55,8 +55,9 @@ public class BatchDeployer { */ public static void main(final String[] args) { if (args.length != NUM_ARGUMENTS) { - LOGGER.error("invalid arguments: " + Arrays.toString(args)); - LOGGER.error("usage: Deployer <server address> <port address> <Apex Model file location>"); + String message = "invalid arguments: " + Arrays.toString(args) + + "usage: Deployer <server address> <port address> <Apex Model file location>"; + LOGGER.error(message); return; } @@ -112,7 +113,7 @@ public class BatchDeployer { * @throws IOException on IO exceptions from the operating system */ public void deployModel(final String modelFileName, final boolean ignoreConflicts, final boolean force) - throws ApexException, IOException { + throws ApexException, IOException { engineServiceFacade.deployModel(modelFileName, ignoreConflicts, force); } @@ -126,7 +127,7 @@ public class BatchDeployer { * @throws IOException on IO exceptions from the operating system */ public void deployModel(final AxPolicyModel policyModel, final boolean ignoreConflicts, final boolean force) - throws ApexException, IOException { + throws ApexException, IOException { engineServiceFacade.deployModel(policyModel, ignoreConflicts, force); } diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java index 5fc7dc8c6..d0af94930 100644 --- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java +++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/DeploymentClient.java @@ -20,6 +20,8 @@ package org.onap.policy.apex.core.deployment; +import com.google.common.eventbus.Subscribe; + import java.net.URI; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -35,8 +37,6 @@ import org.onap.policy.apex.core.protocols.Message; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; -import com.google.common.eventbus.Subscribe; - /** * The Class DeploymentClient handles the client side of an EngDep communication session with an * Apex server. It runs a thread to handle message sending and session monitoring. It uses a sending @@ -84,7 +84,7 @@ public class DeploymentClient implements Runnable { */ @Override public void run() { - LOGGER.debug("engine<-->deployment to \"ws://" + host + ":" + port + "\" thread starting . . ."); + LOGGER.debug("engine<-->deployment to \"ws://{}:{}\" thread starting . . .", host, port); // Set up the thread name thisThread = Thread.currentThread(); @@ -104,7 +104,7 @@ public class DeploymentClient implements Runnable { return; } // Loop forever, sending messages as they appear on the queue - while (true) { + while (started) { try { final Message messageForSending = sendQueue.take(); sendMessage(messageForSending); @@ -143,9 +143,7 @@ public class DeploymentClient implements Runnable { thisThread.interrupt(); // Wait for the thread to stop - while (thisThread != null && thisThread.isAlive()) { - ThreadUtilities.sleep(CLIENT_STOP_WAIT_INTERVAL); - } + ThreadUtilities.sleep(CLIENT_STOP_WAIT_INTERVAL); // Close the Web Services connection service.stopConnection(); diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/EngineServiceFacade.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/EngineServiceFacade.java index f0616e20a..9b24bcd96 100644 --- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/EngineServiceFacade.java +++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/EngineServiceFacade.java @@ -50,12 +50,11 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; /** - * The Class Deployer deploys an Apex model held as an XML file onto an Apex engine. It uses the - * EngDep protocol to communicate with the engine, with the EngDep protocol being carried on Java - * web sockets. + * The Class Deployer deploys an Apex model held as an XML file onto an Apex engine. It uses the EngDep protocol to + * communicate with the engine, with the EngDep protocol being carried on Java web sockets. * - * This deployer is a simple command line deployer that reads the communication parameters and the - * location of the XML model file as arguments. + * <p>his deployer is a simple command line deployer that reads the communication parameters and the location of the XML + * model file as arguments. * * @author Liam Fallon (liam.fallon@ericsson.com) */ @@ -63,6 +62,10 @@ public class EngineServiceFacade { // Get a reference to the logger private static final XLogger LOGGER = XLoggerFactory.getXLogger(EngineServiceFacade.class); + // Repeated string constants + private static final String RECEIVED_FROM_SERVER = " received from server"; + private static final String FAILED_RESPONSE = "failed response "; + // The default message timeout and timeout increment (the amount of time between polls) in // milliseconds private static final int CLIENT_START_WAIT_INTERVAL = 100; @@ -125,12 +128,12 @@ public class EngineServiceFacade { // Get engine service information to see what engines we're dealing with final GetEngineServiceInfo engineServiceInfo = new GetEngineServiceInfo(null); LOGGER.debug("sending get engine service info message {} to server {}:{} . . .", engineServiceInfo, - hostName, port); + hostName, port); client.sendMessage(engineServiceInfo); LOGGER.debug("sent get engine service info message to server {}:{} . . .", hostName, port); - final EngineServiceInfoResponse engineServiceInfoResponse = - (EngineServiceInfoResponse) getResponse(engineServiceInfo); + final EngineServiceInfoResponse engineServiceInfoResponse = (EngineServiceInfoResponse) getResponse( + engineServiceInfo); if (engineServiceInfoResponse.isSuccessful()) { engineServiceKey = engineServiceInfoResponse.getEngineServiceKey(); engineKeyArray = engineServiceInfoResponse.getEngineKeyArray(); @@ -187,30 +190,29 @@ public class EngineServiceFacade { * * @param modelFileName the name of the model file containing the model to deploy * @param ignoreConflicts true if conflicts between context in polices is to be ignored - * @param force true if the model is to be applied even if it is incompatible with the existing - * model + * @param force true if the model is to be applied even if it is incompatible with the existing model * @throws ApexException on Apex errors * @throws IOException on IO exceptions from the operating system */ public void deployModel(final String modelFileName, final boolean ignoreConflicts, final boolean force) - throws ApexException, IOException { + throws ApexException, IOException { if (engineServiceKey == null || engineKeyArray == null || engineKeyArray.length == 0) { LOGGER.error("cound not deploy apex model, deployer is not initialized"); throw new ApexDeploymentException("cound not deploy apex model, deployer is not initialized"); } // Get the model file as a string - URL apexModelURL = ResourceUtils.getLocalFile(modelFileName); - if (apexModelURL == null) { - apexModelURL = ResourceUtils.getUrlResource(modelFileName); - if (apexModelURL == null) { + URL apexModelUrl = ResourceUtils.getLocalFile(modelFileName); + if (apexModelUrl == null) { + apexModelUrl = ResourceUtils.getUrlResource(modelFileName); + if (apexModelUrl == null) { LOGGER.error("cound not create apex model, could not read from XML file {}", modelFileName); throw new ApexDeploymentException( - "cound not create apex model, could not read XML file " + modelFileName); + "cound not create apex model, could not read XML file " + modelFileName); } } - deployModel(modelFileName, apexModelURL.openStream(), ignoreConflicts, force); + deployModel(modelFileName, apexModelUrl.openStream(), ignoreConflicts, force); } /** @@ -219,12 +221,11 @@ public class EngineServiceFacade { * @param modelFileName the name of the model file containing the model to deploy * @param modelInputStream the stream that holds the Apex model * @param ignoreConflicts true if conflicts between context in polices is to be ignored - * @param force true if the model is to be applied even if it is incompatible with the existing - * model + * @param force true if the model is to be applied even if it is incompatible with the existing model * @throws ApexException on model deployment errors */ public void deployModel(final String modelFileName, final InputStream modelInputStream, - final boolean ignoreConflicts, final boolean force) throws ApexException { + final boolean ignoreConflicts, final boolean force) throws ApexException { // Read the policy model from the stream final ApexModelReader<AxPolicyModel> modelReader = new ApexModelReader<>(AxPolicyModel.class); modelReader.setValidateFlag(!ignoreConflicts); @@ -243,20 +244,19 @@ public class EngineServiceFacade { * * @param apexPolicyModel the name of the model to deploy * @param ignoreConflicts true if conflicts between context in polices is to be ignored - * @param force true if the model is to be applied even if it is incompatible with the existing - * model + * @param force true if the model is to be applied even if it is incompatible with the existing model * @throws ApexException on model deployment errors */ public void deployModel(final AxPolicyModel apexPolicyModel, final boolean ignoreConflicts, final boolean force) - throws ApexException { + throws ApexException { // Write the model into a byte array final ByteArrayOutputStream baOutputStream = new ByteArrayOutputStream(); final ApexModelWriter<AxPolicyModel> modelWriter = new ApexModelWriter<>(AxPolicyModel.class); modelWriter.write(apexPolicyModel, baOutputStream); // Create and send Update message - final UpdateModel umMessage = - new UpdateModel(engineServiceKey, baOutputStream.toString(), ignoreConflicts, force); + final UpdateModel umMessage = new UpdateModel(engineServiceKey, baOutputStream.toString(), ignoreConflicts, + force); LOGGER.debug("sending update message {} to server {}:{} . . .", umMessage, hostName, port); client.sendMessage(umMessage); @@ -264,12 +264,10 @@ public class EngineServiceFacade { // Check if we got a response final Response response = getResponse(umMessage); - if (response.isSuccessful()) { - LOGGER.debug(response.toString()); - } else { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + if (!response.isSuccessful()) { + LOGGER.warn(FAILED_RESPONSE + "{} received from server {}:{}", response.getMessageData(), hostName, port); + throw new ApexException(FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + hostName + + ':' + port); } } @@ -287,12 +285,11 @@ public class EngineServiceFacade { // Check if we got a response final Response response = getResponse(startEngineMessage); - if (response.isSuccessful()) { - LOGGER.debug(response.toString()); - } else { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexDeploymentException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + if (!response.isSuccessful()) { + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + + hostName + ':' + port; + LOGGER.warn(message); + throw new ApexDeploymentException(message); } } @@ -310,12 +307,11 @@ public class EngineServiceFacade { // Check if we got a response final Response response = getResponse(stopEngineMessage); - if (response.isSuccessful()) { - LOGGER.debug(response.toString()); - } else { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexDeploymentException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + if (!response.isSuccessful()) { + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + + hostName + ':' + port; + LOGGER.warn(message); + throw new ApexDeploymentException(message); } } @@ -330,18 +326,17 @@ public class EngineServiceFacade { final StartPeriodicEvents startPerioidicEventsMessage = new StartPeriodicEvents(engineKey); startPerioidicEventsMessage.setMessageData(Long.toString(period)); LOGGER.debug("sending start perioidic events {} to server {}:{} . . .", startPerioidicEventsMessage, hostName, - port); + port); client.sendMessage(startPerioidicEventsMessage); LOGGER.debug("sent start perioidic events message to server {}:{} . . .", hostName, port); // Check if we got a response final Response response = getResponse(startPerioidicEventsMessage); - if (response.isSuccessful()) { - LOGGER.debug(response.toString()); - } else { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexDeploymentException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + if (!response.isSuccessful()) { + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + + hostName + ':' + port; + LOGGER.warn(message); + throw new ApexDeploymentException(message); } } @@ -354,18 +349,17 @@ public class EngineServiceFacade { public void stopPerioidicEvents(final AxArtifactKey engineKey) throws ApexDeploymentException { final StopPeriodicEvents stopPerioidicEventsMessage = new StopPeriodicEvents(engineKey); LOGGER.debug("sending stop perioidic events {} to server {}:{} . . .", stopPerioidicEventsMessage, hostName, - port); + port); client.sendMessage(stopPerioidicEventsMessage); LOGGER.debug("sent stop perioidic events message to server {}:{} . . .", hostName, port); // Check if we got a response final Response response = getResponse(stopPerioidicEventsMessage); - if (response.isSuccessful()) { - LOGGER.debug(response.toString()); - } else { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexDeploymentException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + if (!response.isSuccessful()) { + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + + hostName + ':' + port; + LOGGER.warn(message); + throw new ApexDeploymentException(message); } } @@ -385,9 +379,10 @@ public class EngineServiceFacade { // Check if we got a response final Response response = getResponse(engineStatusMessage); if (!response.isSuccessful()) { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + hostName + + ':' + port; + LOGGER.warn(message); + throw new ApexException(message); } final ByteArrayInputStream baInputStream = new ByteArrayInputStream(response.getMessageData().getBytes()); @@ -406,16 +401,17 @@ public class EngineServiceFacade { public String getEngineInfo(final AxArtifactKey engineKey) throws ApexException { final GetEngineInfo engineInfoMessage = new GetEngineInfo(engineKey); LOGGER.debug("sending get engine information message {} to server {}:{} . . .", engineInfoMessage, hostName, - port); + port); client.sendMessage(engineInfoMessage); LOGGER.debug("sent get engine information message to server {}:{} . . .", hostName, port); // Check if we got a response final Response response = getResponse(engineInfoMessage); if (!response.isSuccessful()) { - LOGGER.warn("failed response {} received from server {}:{}", response.getMessageData(), hostName, port); - throw new ApexException( - "failed response " + response.getMessageData() + " received from server" + hostName + ':' + port); + String message = FAILED_RESPONSE + response.getMessageData() + RECEIVED_FROM_SERVER + hostName + + ':' + port; + LOGGER.warn(message); + throw new ApexException(message); } return response.getMessageData(); @@ -437,8 +433,8 @@ public class EngineServiceFacade { // Wait for the required amount of milliseconds for the response from the Apex server Message receivedMessage = null; - for (int timeWaitedSoFar = 0; receivedMessage == null && timeWaitedSoFar < timeoutTime; timeWaitedSoFar += - REPLY_MESSAGE_TIMEOUT_INCREMENT) { + for (int timeWaitedSoFar = 0; receivedMessage == null + && timeWaitedSoFar < timeoutTime; timeWaitedSoFar += REPLY_MESSAGE_TIMEOUT_INCREMENT) { try { receivedMessage = client.getReceiveQueue().poll(REPLY_MESSAGE_TIMEOUT_INCREMENT, TimeUnit.MILLISECONDS); } catch (final InterruptedException e) { @@ -446,7 +442,7 @@ public class EngineServiceFacade { Thread.currentThread().interrupt(); LOGGER.warn("reception of response from server interrupted {}:{}", hostName, port, e); throw new ApexDeploymentException( - "reception of response from server interrupted " + hostName + ':' + port, e); + "reception of response from server interrupted " + hostName + ':' + port, e); } } @@ -459,9 +455,9 @@ public class EngineServiceFacade { // Check instance is a response message if (!(receivedMessage instanceof Response)) { LOGGER.warn("response received from server is of incorrect type {}, should be of type {}", - receivedMessage.getClass().getName(), Response.class.getName()); + receivedMessage.getClass().getName(), Response.class.getName()); throw new ApexDeploymentException("response received from server is of incorrect type " - + receivedMessage.getClass().getName() + ", should be of type " + Response.class.getName()); + + receivedMessage.getClass().getName() + ", should be of type " + Response.class.getName()); } // Cast the response message @@ -471,16 +467,16 @@ public class EngineServiceFacade { if (!responseMessage.getResponseTo().equals(sentMessage)) { LOGGER.warn("response received is not response to sent message " + sentMessage.getAction()); throw new ApexDeploymentException( - "response received is not correct response to sent message " + sentMessage.getAction()); + "response received is not correct response to sent message " + sentMessage.getAction()); } // Check if successful if (responseMessage.isSuccessful()) { LOGGER.debug("response received: {} message was succssful: {}", sentMessage.getAction(), - responseMessage.getMessageData()); + responseMessage.getMessageData()); } else { LOGGER.debug("response received: {} message failed: {}", sentMessage.getAction(), - responseMessage.getMessageData()); + responseMessage.getMessageData()); } return responseMessage; diff --git a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/PeriodicEventManager.java b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/PeriodicEventManager.java index bfaece4c6..a1db5ef07 100644 --- a/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/PeriodicEventManager.java +++ b/core/core-deployment/src/main/java/org/onap/policy/apex/core/deployment/PeriodicEventManager.java @@ -48,8 +48,9 @@ public class PeriodicEventManager { */ public static void main(final String[] args) { if (args.length != NUM_ARGUMENTS) { - LOGGER.error("invalid arguments: " + Arrays.toString(args)); - LOGGER.error("usage: Deployer <server address> <port address> <start/stop> <periods in ms>"); + String message = "invalid arguments: " + Arrays.toString(args) + + "\nusage: Deployer <server address> <port address> <start/stop> <periods in ms>"; + LOGGER.error(message); return; } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameterConstants.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameterConstants.java index 1678f57c7..96a83f3a6 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameterConstants.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/EngineParameterConstants.java @@ -28,7 +28,7 @@ public abstract class EngineParameterConstants { public static final String EXECUTOR_GROUP_NAME = "EXECUTOR_PARAMETERS"; /** - * Private default constructor to prevent subclassing + * Private default constructor to prevent subclassing. */ private EngineParameterConstants() { // Prevents subclassing diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/context/ApexInternalContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/context/ApexInternalContext.java index 85e45f718..8bbb333b5 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/context/ApexInternalContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/context/ApexInternalContext.java @@ -63,7 +63,7 @@ public final class ApexInternalContext implements AxConceptGetter<ContextAlbum> private Distributor contextDistributor = null; // The key of the current policy, used to return the correct policy context album to the user - private final AxArtifactKey currentPolicyKey = null; + private AxArtifactKey currentPolicyKey = null; /** * Constructor, instantiate the context object from the Apex model. diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/ApexEngine.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/ApexEngine.java index b25192cd0..b2978a0c0 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/ApexEngine.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/ApexEngine.java @@ -46,7 +46,7 @@ public interface ApexEngine { * The amount of milliseconds to wait for the current Apex engine to timeout on engine stop * requests. If the timeout is exceeded, the stop aborts. */ - int APEX_ENGINE_STOP_EXECUTION_WAIT_TIMEOUT = 3000; + int STOP_EXECUTION_WAIT_TIMEOUT = 3000; /** The wait increment (or pause time) when waiting for the Apex engine to stop. */ int APEX_ENGINE_STOP_EXECUTION_WAIT_INCREMENT = 100; diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java index 3497ed660..6f2bab0b9 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/ApexEngineImpl.java @@ -56,6 +56,11 @@ public class ApexEngineImpl implements ApexEngine { // Logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(ApexEngineImpl.class); + // Recurring string constants + private static final String UPDATE_MODEL = "updateModel()<-"; + private static final String START = "start()<-"; + private static final String STOP = "stop()<-"; + // The artifact key of this engine private final AxArtifactKey key; @@ -63,7 +68,7 @@ public class ApexEngineImpl implements ApexEngine { private AxEngineState state = AxEngineState.STOPPED; // call back listeners - private final Map<String, EnEventListener> eventListeners = new LinkedHashMap<String, EnEventListener>(); + private final Map<String, EnEventListener> eventListeners = new LinkedHashMap<>(); // The context of this engine private ApexInternalContext internalContext = null; @@ -105,15 +110,14 @@ public class ApexEngineImpl implements ApexEngine { if (apexModel != null) { LOGGER.entry("updateModel()->" + key.getId() + ", apexPolicyModel=" + apexModel.getKey().getId()); } else { - LOGGER.warn("updateModel()<-" + key.getId() + ", Apex model not set"); - throw new ApexException( - "updateModel()<-" + key.getId() + ", Apex model is not defined, it has a null value"); + LOGGER.warn(UPDATE_MODEL + key.getId() + ", Apex model not set"); + throw new ApexException(UPDATE_MODEL + key.getId() + ", Apex model is not defined, it has a null value"); } // The engine must be stopped in order to do a model update if (!state.equals(AxEngineState.STOPPED)) { - throw new ApexException("updateModel()<-" + key.getId() - + ", cannot update model, engine should be stopped but is in state " + state); + throw new ApexException(UPDATE_MODEL + key.getId() + + ", cannot update model, engine should be stopped but is in state " + state); } // Create new internal context or update the existing one @@ -126,12 +130,10 @@ public class ApexEngineImpl implements ApexEngine { internalContext.update(apexModel); } } catch (final ContextException e) { - LOGGER.warn( - "updateModel()<-" + key.getId() + ", error setting the context for engine \"" + key.getId() + "\"", - e); - throw new ApexException( - "updateModel()<-" + key.getId() + ", error setting the context for engine \"" + key.getId() + "\"", - e); + LOGGER.warn(UPDATE_MODEL + key.getId() + ", error setting the context for engine \"" + key.getId() + "\"", + e); + throw new ApexException(UPDATE_MODEL + key.getId() + ", error setting the context for engine \"" + + key.getId() + "\"", e); } // Set up the state machines @@ -140,13 +142,13 @@ public class ApexEngineImpl implements ApexEngine { // always set up as new stateMachineHandler = new StateMachineHandler(internalContext); } catch (final StateMachineException e) { - LOGGER.warn("updateModel()<-" + key.getId() + ", error setting up the engine state machines \"" - + key.getId() + "\"", e); - throw new ApexException("updateModel()<-" + key.getId() + ", error setting up the engine state machines \"" - + key.getId() + "\"", e); + LOGGER.warn(UPDATE_MODEL + key.getId() + ", error setting up the engine state machines \"" + key.getId() + + "\"", e); + throw new ApexException(UPDATE_MODEL + key.getId() + ", error setting up the engine state machines \"" + + key.getId() + "\"", e); } - LOGGER.exit("updateModel()<-" + key.getId()); + LOGGER.exit(UPDATE_MODEL + key.getId()); } /* @@ -159,16 +161,18 @@ public class ApexEngineImpl implements ApexEngine { LOGGER.entry("start()" + key); if (state != AxEngineState.STOPPED) { - LOGGER.warn("start()<-" + key.getId() + "," + state + ", cannot start engine, engine not in state STOPPED"); - throw new ApexException( - "start()<-" + key.getId() + "," + state + ", cannot start engine, engine not in state STOPPED"); + String message = START + key.getId() + "," + state + + ", cannot start engine, engine not in state STOPPED"; + LOGGER.warn(message); + throw new ApexException(message); } if (stateMachineHandler == null || internalContext == null) { - LOGGER.warn("start()<-" + key.getId() + "," + state - + ", cannot start engine, engine has not been initialized, its model is not loaded"); - throw new ApexException("start()<-" + key.getId() + "," + state - + ", cannot start engine, engine has not been initialized, its model is not loaded"); + String message = START + key.getId() + "," + state + + ", cannot start engine, engine has not been initialized, its model is not loaded"; + LOGGER.warn(message); + throw new ApexException(START + key.getId() + "," + state + + ", cannot start engine, engine has not been initialized, its model is not loaded"); } // Set up the state machines @@ -177,10 +181,10 @@ public class ApexEngineImpl implements ApexEngine { stateMachineHandler.start(); engineStats.engineStart(); } catch (final StateMachineException e) { - LOGGER.warn("updateModel()<-" + key.getId() + ", error starting the engine state machines \"" + key.getId() - + "\"", e); - throw new ApexException("updateModel()<-" + key.getId() + ", error starting the engine state machines \"" - + key.getId() + "\"", e); + String message = UPDATE_MODEL + key.getId() + ", error starting the engine state machines \"" + key.getId() + + "\""; + LOGGER.warn(message, e); + throw new ApexException(message, e); } // OK, we are good to go @@ -199,15 +203,14 @@ public class ApexEngineImpl implements ApexEngine { LOGGER.entry("stop()->" + key); // Stop the engine if it is in state READY, if it is in state EXECUTING, wait for execution to finish - for (int increment = APEX_ENGINE_STOP_EXECUTION_WAIT_TIMEOUT; increment > 0; increment = - APEX_ENGINE_STOP_EXECUTION_WAIT_INCREMENT) { + for (int increment = STOP_EXECUTION_WAIT_TIMEOUT; increment > 0; increment = STOP_EXECUTION_WAIT_TIMEOUT) { synchronized (state) { switch (state) { // Already stopped case STOPPED: - throw new ApexException("stop()<-" + key.getId() + "," + state - + ", cannot stop engine, engine is already stopped"); + throw new ApexException(STOP + key.getId() + "," + state + + ", cannot stop engine, engine is already stopped"); // The normal case, the engine wasn't doing anything or it was executing case READY: case STOPPING: @@ -222,13 +225,13 @@ public class ApexEngineImpl implements ApexEngine { state = AxEngineState.STOPPING; break; default: - throw new ApexException("stop()<-" + key.getId() + "," + state - + ", cannot stop engine, engine is in an undefined state"); + throw new ApexException(STOP + key.getId() + "," + state + + ", cannot stop engine, engine is in an undefined state"); } } } - throw new ApexException("stop()<-" + key.getId() + "," + state + ", cannot stop engine, engine stop timed out"); + throw new ApexException(STOP + key.getId() + "," + state + ", cannot stop engine, engine stop timed out"); } /* @@ -240,8 +243,8 @@ public class ApexEngineImpl implements ApexEngine { public void clear() throws ApexException { LOGGER.entry("clear()->" + key); if (state != AxEngineState.STOPPED) { - throw new ApexException( - "clear" + "()<-" + key.getId() + "," + state + ", cannot clear engine, engine is not stopped"); + throw new ApexException("clear" + "()<-" + key.getId() + "," + state + + ", cannot clear engine, engine is not stopped"); } // Clear everything @@ -263,8 +266,7 @@ public class ApexEngineImpl implements ApexEngine { @Override public EnEvent createEvent(final AxArtifactKey eventKey) { if (state != AxEngineState.READY && state != AxEngineState.EXECUTING) { - LOGGER.warn( - "createEvent()<-" + key.getId() + "," + state + ", cannot create event, engine not in state READY"); + LOGGER.warn("createEvent()<-{},{}, cannot create event, engine not in state READY", key.getId(), state); return null; } @@ -287,21 +289,21 @@ public class ApexEngineImpl implements ApexEngine { public boolean handleEvent(final EnEvent incomingEvent) { boolean ret = false; if (incomingEvent == null) { - LOGGER.warn("handleEvent()<-" + key.getId() + "," + state + ", cannot run engine, incoming event is null"); + LOGGER.warn("handleEvent()<-{},{}, cannot run engine, incoming event is null", key.getId(), state); return ret; } synchronized (state) { if (state != AxEngineState.READY) { - LOGGER.warn("handleEvent()<-" + key.getId() + "," + state - + ", cannot run engine, engine not in state READY"); + LOGGER.warn("handleEvent()<-{},{}, cannot run engine, engine not in state READY", key.getId(), state); return ret; } state = AxEngineState.EXECUTING; } - LOGGER.debug("execute(): triggered by event " + incomingEvent.toString()); + String message = "execute(): triggered by event " + incomingEvent.toString(); + LOGGER.debug(message); // By default we return a null event on errors EnEvent outgoingEvent = null; @@ -311,7 +313,7 @@ public class ApexEngineImpl implements ApexEngine { engineStats.executionExit(); ret = true; } catch (final StateMachineException e) { - LOGGER.warn("handleEvent()<-" + key.getId() + "," + state + ", engine execution error: ", e); + LOGGER.warn("handleEvent()<-{},{}, engine execution error: ", key.getId(), state, e); // Create an exception return event outgoingEvent = createExceptionEvent(incomingEvent, e); @@ -321,8 +323,8 @@ public class ApexEngineImpl implements ApexEngine { try { synchronized (eventListeners) { if (eventListeners.isEmpty()) { - LOGGER.debug("handleEvent()<-" + key.getId() + "," + state - + ", There is no listener registered to recieve outgoing event: " + outgoingEvent); + LOGGER.debug("handleEvent()<-{},{}, There is no listener registered to recieve outgoing event: {}", + key.getId(), state, outgoingEvent); } for (final EnEventListener axEventListener : eventListeners.values()) { axEventListener.onEnEvent(outgoingEvent); @@ -403,11 +405,10 @@ public class ApexEngineImpl implements ApexEngine { */ @Override public Map<AxArtifactKey, Map<String, Object>> getEngineContext() { - final Map<AxArtifactKey, Map<String, Object>> currentContext = - new LinkedHashMap<AxArtifactKey, Map<String, Object>>(); + final Map<AxArtifactKey, Map<String, Object>> currentContext = new LinkedHashMap<>(); for (final Entry<AxArtifactKey, ContextAlbum> contextAlbumEntry : internalContext.getContextAlbums() - .entrySet()) { + .entrySet()) { currentContext.put(contextAlbumEntry.getKey(), contextAlbumEntry.getValue()); } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/StateMachineHandler.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/StateMachineHandler.java index 5ade06537..636f87af3 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/StateMachineHandler.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/engine/impl/StateMachineHandler.java @@ -124,10 +124,11 @@ public class StateMachineHandler { try { smExecutor.prepare(); } catch (final StateMachineException e) { - final String stateMachineID = smExecutor.getContext().getKey().getId(); - LOGGER.warn("start()<-" + key.getId() + ", start failed, state machine \"" + stateMachineID + "\"", e); + final String stateMachineId = smExecutor.getContext().getKey().getId(); + String message = "start()<-" + key.getId() + ", start failed, state machine \"" + stateMachineId + "\""; + LOGGER.warn(message, e); throw new StateMachineException( - "start()<-" + key.getId() + ", start failed, state machine \"" + stateMachineID + "\"", e); + message, e); } } @@ -158,7 +159,7 @@ public class StateMachineHandler { // Run the state machine try { LOGGER.debug("execute(): state machine \"{}\" execution starting . . .", stateMachineExecutor); - final EnEvent outputObject = stateMachineExecutor.execute(event.getExecutionID(), event); + final EnEvent outputObject = stateMachineExecutor.execute(event.getExecutionId(), event); LOGGER.debug("execute()<-: state machine \"{}\" execution completed", stateMachineExecutor); return outputObject; @@ -180,8 +181,8 @@ public class StateMachineHandler { try { smExecutor.cleanUp(); } catch (final StateMachineException e) { - final String smID = smExecutor.getContext().getKey().getId(); - LOGGER.warn("stop()<-clean up failed, state machine \"" + smID + "\" cleanup failed", e); + final String smId = smExecutor.getContext().getKey().getId(); + LOGGER.warn("stop()<-clean up failed, state machine \"" + smId + "\" cleanup failed", e); } } LOGGER.exit("stop()<-"); diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/event/EnEvent.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/event/EnEvent.java index 109240c0d..7c49af965 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/event/EnEvent.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/event/EnEvent.java @@ -51,6 +51,9 @@ public class EnEvent extends HashMap<String, Object> { // Logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(EnEvent.class); + // Repeasted string constants + private static final String NULL_KEYS_ILLEGAL = "null keys are illegal on method parameter \"key\""; + // The definition of this event in the Apex model private final AxEvent axEvent; @@ -65,7 +68,7 @@ public class EnEvent extends HashMap<String, Object> { // An identifier for the current event execution. The default value here will always be a random // number, and should // be reset - private long executionID = rand.nextLong(); + private long executionId = rand.nextLong(); // A string holding a message that indicates why processing of this event threw an exception private String exceptionMessage; @@ -122,7 +125,7 @@ public class EnEvent extends HashMap<String, Object> { * * @return the event key */ - public String getID() { + public String getId() { return axEvent.getKey().getId(); } @@ -135,8 +138,8 @@ public class EnEvent extends HashMap<String, Object> { * * @return the currently set value for the ExecutionID for this event. */ - public long getExecutionID() { - return executionID; + public long getExecutionId() { + return executionId; } /** @@ -146,10 +149,10 @@ public class EnEvent extends HashMap<String, Object> { * particular input event. The default initialised value for the ExecutionID is always unique in * a single JVM. * - * @param executionID the new value for the ExecutionID for this event. + * @param executionId the new value for the ExecutionID for this event. */ - public void setExecutionID(final long executionID) { - this.executionID = executionID; + public void setExecutionId(final long executionId) { + this.executionId = executionId; } /** @@ -194,8 +197,9 @@ public class EnEvent extends HashMap<String, Object> { // Check if this key is a parameter on our event final AxField eventParameter = axEvent.getParameterMap().get(key); if (eventParameter == null) { - LOGGER.warn("parameter with key " + key + " not defined on this event"); - throw new EnException("parameter with key " + key + " not defined on this event"); + String message = "parameter with key " + key + " not defined on this event"; + LOGGER.warn(message); + throw new EnException(message); } // Get the item @@ -250,15 +254,17 @@ public class EnEvent extends HashMap<String, Object> { @Override public Object put(final String key, final Object incomingValue) { if (key == null) { - LOGGER.warn("null keys are illegal on method parameter \"key\""); - throw new EnException("null keys are illegal on method parameter \"key\""); + String message = NULL_KEYS_ILLEGAL; + LOGGER.warn(message); + throw new EnException(message); } // Check if this key is a parameter on our event final AxField eventParameter = axEvent.getParameterMap().get(key); if (eventParameter == null) { - LOGGER.warn("parameter with key \"" + key + "\" not defined on event \"" + getName() + "\""); - throw new EnException("parameter with key \"" + key + "\" not defined on event \"" + getName() + "\""); + String message = "parameter with key \"" + key + "\" not defined on event \"" + getName() + "\""; + LOGGER.warn(message); + throw new EnException(message); } // We allow null values @@ -296,15 +302,16 @@ public class EnEvent extends HashMap<String, Object> { @Override public Object remove(final Object key) { if (key == null) { - LOGGER.warn("null keys are illegal on method parameter \"key\""); - throw new EnException("null keys are illegal on method parameter \"key\""); + LOGGER.warn(NULL_KEYS_ILLEGAL); + throw new EnException(NULL_KEYS_ILLEGAL); } // Check if this key is a parameter on our event final AxField eventParameter = axEvent.getParameterMap().get(key); if (eventParameter == null) { - LOGGER.warn("parameter with key " + key + " not defined on this event"); - throw new EnException("parameter with key " + key + " not defined on this event"); + String message = "parameter with key " + key + " not defined on this event"; + LOGGER.warn(message); + throw new EnException(message); } final Object removedValue = super.remove(key); diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/Executor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/Executor.java index 4c969f76e..9941c6de8 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/Executor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/Executor.java @@ -37,13 +37,13 @@ import org.onap.policy.apex.model.basicmodel.concepts.AxConcept; * @author Sven van der Meer (sven.van.der.meer@ericsson.com) * @author Liam Fallon (liam.fallon@ericsson.com) * - * @param <IN> type of the incoming entity - * @param <OUT> type of the outgoing entity - * @param <SUBJECT> type that is the subject of execution - * @param <CONTEXT> context holding the context of execution + * @param <I> type of the incoming entity + * @param <O> type of the outgoing entity + * @param <S> type that is the subject of execution + * @param <C> context holding the context of execution */ -public interface Executor<IN, OUT, SUBJECT, CONTEXT> { +public interface Executor<I, O, S, C> { /** * Save the subject and context of the executor. * @@ -52,7 +52,7 @@ public interface Executor<IN, OUT, SUBJECT, CONTEXT> { * @param executorSubject the executor subject, the subject of execution * @param executorContext the executor context, the context in which execution takes place */ - void setContext(Executor<?, ?, ?, ?> parent, SUBJECT executorSubject, CONTEXT executorContext); + void setContext(Executor<?, ?, ?, ?> parent, S executorSubject, C executorContext); /** * Prepares the processing. @@ -64,23 +64,23 @@ public interface Executor<IN, OUT, SUBJECT, CONTEXT> { /** * Executes the executor, running through its context in its natural order. * - * @param executionID the execution ID of the current APEX execution policy thread + * @param executionId the execution ID of the current APEX execution policy thread * @param incomingEntity the incoming entity that triggers execution * @return The outgoing entity that is the result of execution * @throws StateMachineException on an execution error * @throws ContextException on context errors */ - OUT execute(long executionID, IN incomingEntity) throws StateMachineException, ContextException; + O execute(long executionId, I incomingEntity) throws StateMachineException, ContextException; /** * Carry out the preparatory work for execution. * - * @param executionID the execution ID of the current APEX execution policy thread + * @param executionId the execution ID of the current APEX execution policy thread * @param incomingEntity the incoming entity that triggers execution * @throws StateMachineException on an execution error * @throws ContextException on context errors */ - void executePre(long executionID, IN incomingEntity) throws StateMachineException, ContextException; + void executePre(long executionId, I incomingEntity) throws StateMachineException, ContextException; /** * Carry out the post work for execution, the returning entity should be set by the child @@ -119,42 +119,42 @@ public interface Executor<IN, OUT, SUBJECT, CONTEXT> { * * @return The subject for the executor */ - SUBJECT getSubject(); + S getSubject(); /** * Get the context of the executor. * * @return The context for the executor */ - CONTEXT getContext(); + C getContext(); /** * Get the incoming object of the executor. * * @return The incoming object for the executor */ - IN getIncoming(); + I getIncoming(); /** * Get the outgoing object of the executor. * * @return The outgoing object for the executor */ - OUT getOutgoing(); + O getOutgoing(); /** * Save the next executor for this executor. * * @param nextExecutor the next executor */ - void setNext(Executor<IN, OUT, SUBJECT, CONTEXT> nextExecutor); + void setNext(Executor<I, O, S, C> nextExecutor); /** * Get the next executor to be run after this executor completes its execution. * * @return The next executor */ - Executor<IN, OUT, SUBJECT, CONTEXT> getNext(); + Executor<I, O, S, C> getNext(); /** * Set parameters for this executor, overloaded by executors that use parameters. diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateExecutor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateExecutor.java index 9cf7d90e3..28ea13ea7 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateExecutor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateExecutor.java @@ -171,13 +171,13 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap * java.lang.Object) */ @Override - public StateOutput execute(final long executionID, final EnEvent incomingEvent) + public StateOutput execute(final long executionId, final EnEvent incomingEvent) throws StateMachineException, ContextException { this.lastIncomingEvent = incomingEvent; // Check that the incoming event matches the trigger for this state if (!incomingEvent.getAxEvent().getKey().equals(axState.getTrigger())) { - throw new StateMachineException("incoming event \"" + incomingEvent.getID() + "\" does not match trigger \"" + throw new StateMachineException("incoming event \"" + incomingEvent.getId() + "\" does not match trigger \"" + axState.getTrigger().getId() + "\" of state \"" + axState.getId() + "\""); } @@ -188,7 +188,7 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap // There may be no task selection logic, in which case just return the default task if (taskSelectExecutor != null) { // Fire the task selector to find the task to run - taskKey = taskSelectExecutor.execute(executionID, incomingEvent); + taskKey = taskSelectExecutor.execute(executionId, incomingEvent); } // If there's no task selection logic or the TSL returned no task, just use the default @@ -201,7 +201,7 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap final TreeMap<String, Object> incomingValues = new TreeMap<>(); incomingValues.putAll(incomingEvent); final Map<String, Object> taskExecutionResultMap = - taskExecutorMap.get(taskKey).execute(executionID, incomingValues); + taskExecutorMap.get(taskKey).execute(executionId, incomingValues); final AxTask task = taskExecutorMap.get(taskKey).getSubject(); // Check if this task has direct output @@ -220,7 +220,7 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap // Execute the state finalizer logic to select a state output and to adjust the // taskExecutionResultMap stateOutputName = - finalizerLogicExecutor.execute(incomingEvent.getExecutionID(), taskExecutionResultMap); + finalizerLogicExecutor.execute(incomingEvent.getExecutionId(), taskExecutionResultMap); } // Now look up the the actual state output @@ -240,8 +240,8 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap stateOutput.copyUnsetFields(incomingEvent); // Set the ExecutionID for the outgoing event to the value in the incoming event. - if (stateOutput != null && stateOutput.getOutputEvent() != null) { - stateOutput.getOutputEvent().setExecutionID(incomingEvent.getExecutionID()); + if (stateOutput.getOutputEvent() != null) { + stateOutput.getOutputEvent().setExecutionId(incomingEvent.getExecutionId()); } // That's it, the state execution is complete @@ -262,7 +262,7 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap * java.lang.Object) */ @Override - public final void executePre(final long executionID, final EnEvent incomingEntity) throws StateMachineException { + public final void executePre(final long executionId, final EnEvent incomingEntity) throws StateMachineException { throw new StateMachineException("execution pre work not implemented on class"); } @@ -384,5 +384,7 @@ public class StateExecutor implements Executor<EnEvent, StateOutput, AxState, Ap * engine. ExecutorParameters) */ @Override - public void setParameters(final ExecutorParameters parameters) {} + public void setParameters(final ExecutorParameters parameters) { + // Not implemented in this class + } } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateFinalizerExecutor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateFinalizerExecutor.java index 687c3b305..1c225f7b8 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateFinalizerExecutor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateFinalizerExecutor.java @@ -36,17 +36,20 @@ import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; /** - * This abstract class executes state finalizer logic in a state of an Apex policy and is - * specialized by classes that implement execution of state finalizer logic. + * This abstract class executes state finalizer logic in a state of an Apex policy and is specialized by classes that + * implement execution of state finalizer logic. * * @author Sven van der Meer (sven.van.der.meer@ericsson.com) * @author Liam Fallon (liam.fallon@ericsson.com) */ public abstract class StateFinalizerExecutor - implements Executor<Map<String, Object>, String, AxStateFinalizerLogic, ApexInternalContext> { + implements Executor<Map<String, Object>, String, AxStateFinalizerLogic, ApexInternalContext> { // Logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(StateFinalizerExecutor.class); + // Repeated string constants + private static final String EXECUTE_POST_SFL = "execute-post: state finalizer logic \""; + // Hold the state and context definitions private Executor<?, ?, ?, ?> parent = null; private AxState axState = null; @@ -81,7 +84,8 @@ public abstract class StateFinalizerExecutor */ @Override public void setContext(final Executor<?, ?, ?, ?> incomingParent, - final AxStateFinalizerLogic incomingFinalizerLogic, final ApexInternalContext incomingInternalContext) { + final AxStateFinalizerLogic incomingFinalizerLogic, + final ApexInternalContext incomingInternalContext) { this.parent = incomingParent; axState = (AxState) parent.getSubject(); this.finalizerLogic = incomingFinalizerLogic; @@ -96,41 +100,39 @@ public abstract class StateFinalizerExecutor @Override public void prepare() throws StateMachineException { LOGGER.debug("prepare:" + finalizerLogic.getId() + "," + finalizerLogic.getLogicFlavour() + "," - + finalizerLogic.getLogic()); + + finalizerLogic.getLogic()); argumentOfClassNotNull(finalizerLogic.getLogic(), StateMachineException.class, "task logic cannot be null."); } /* * (non-Javadoc) * - * @see org.onap.policy.apex.core.engine.executor.Executor#execute(java.lang.long, - * java.lang.Object) + * @see org.onap.policy.apex.core.engine.executor.Executor#execute(java.lang.long, java.lang.Object) */ @Override - public String execute(final long executionID, final Map<String, Object> newIncomingFields) - throws StateMachineException, ContextException { - throw new StateMachineException( - "execute() not implemented on abstract StateFinalizerExecutionContext class, only on its subclasses"); + public String execute(final long executionId, final Map<String, Object> newIncomingFields) + throws StateMachineException, ContextException { + throw new StateMachineException("execute() not implemented on abstract StateFinalizerExecutionContext class, " + + "only on its subclasses"); } /* * (non-Javadoc) * - * @see org.onap.policy.apex.core.engine.executor.Executor#executePre(java.lang.long, - * java.lang.Object) + * @see org.onap.policy.apex.core.engine.executor.Executor#executePre(java.lang.long, java.lang.Object) */ @Override - public final void executePre(final long executionID, final Map<String, Object> newIncomingFields) - throws StateMachineException, ContextException { + public final void executePre(final long executionId, final Map<String, Object> newIncomingFields) + throws StateMachineException, ContextException { LOGGER.debug("execute-pre:" + finalizerLogic.getLogicFlavour() + "," + getSubject().getId() + "," - + finalizerLogic.getLogic()); + + finalizerLogic.getLogic()); // Record the incoming fields this.incomingFields = newIncomingFields; // Get state finalizer context object - executionContext = new StateFinalizerExecutionContext(this, executionID, axState, getIncoming(), - axState.getStateOutputs().keySet(), getContext()); + executionContext = new StateFinalizerExecutionContext(this, executionId, axState, getIncoming(), + axState.getStateOutputs().keySet(), getContext()); } /* @@ -142,7 +144,7 @@ public abstract class StateFinalizerExecutor public final void executePost(final boolean returnValue) throws StateMachineException, ContextException { if (!returnValue) { String errorMessage = "execute-post: state finalizer logic execution failure on state \"" + axState.getId() - + "\" on finalizer logic " + finalizerLogic.getId(); + + "\" on finalizer logic " + finalizerLogic.getId(); if (executionContext.getMessage() != null) { errorMessage += ", user message: " + executionContext.getMessage(); } @@ -152,23 +154,20 @@ public abstract class StateFinalizerExecutor // Check a state output has been selected if (getOutgoing() == null) { - LOGGER.warn("execute-post: state finalizer logic \"" + finalizerLogic.getId() - + "\" did not select an output state"); - throw new StateMachineException("execute-post: state finalizer logic \"" + finalizerLogic.getId() - + "\" did not select an output state"); + String message = EXECUTE_POST_SFL + finalizerLogic.getId() + "\" did not select an output state"; + LOGGER.warn(message); + throw new StateMachineException(message); } if (!axState.getStateOutputs().keySet().contains(getOutgoing())) { - LOGGER.warn( - "execute-post: state finalizer logic \"" + finalizerLogic.getId() + "\" selected output state \"" - + getOutgoing() + "\" that does not exsist on state \"" + axState.getId() + "\""); - throw new StateMachineException( - "execute-post: state finalizer logic \"" + finalizerLogic.getId() + "\" selected output state \"" + LOGGER.warn(EXECUTE_POST_SFL + finalizerLogic.getId() + "\" selected output state \"" + getOutgoing() + + "\" that does not exsist on state \"" + axState.getId() + "\""); + throw new StateMachineException(EXECUTE_POST_SFL + finalizerLogic.getId() + "\" selected output state \"" + getOutgoing() + "\" that does not exsist on state \"" + axState.getId() + "\""); } - LOGGER.debug("execute-post:" + finalizerLogic.getId() + ", returning state output \"" + getOutgoing() - + " and fields " + incomingFields); + LOGGER.debug("execute-post:{}, returning state output \"{}\" and fields {}", finalizerLogic.getId(), + getOutgoing(), incomingFields); } /* @@ -244,14 +243,13 @@ public abstract class StateFinalizerExecutor /* * (non-Javadoc) * - * @see - * org.onap.policy.apex.core.engine.executor.Executor#setNext(org.onap.policy.apex.core.engine. + * @see org.onap.policy.apex.core.engine.executor.Executor#setNext(org.onap.policy.apex.core.engine. * executor.Executor) */ @Override - public void setNext(final Executor<Map<String, Object>, String, AxStateFinalizerLogic, ApexInternalContext> - incomingNextExecutor) { - this.nextExecutor = incomingNextExecutor; + public void setNext( + final Executor<Map<String, Object>, String, AxStateFinalizerLogic, ApexInternalContext> inNextEx) { + this.nextExecutor = inNextEx; } /* @@ -267,10 +265,10 @@ public abstract class StateFinalizerExecutor /* * (non-Javadoc) * - * @see - * org.onap.policy.apex.core.engine.executor.Executor#setParameters(org.onap.policy.apex.core. - * engine. ExecutorParameters) + * @see org.onap.policy.apex.core.engine.executor.Executor#setParameters(org.onap.policy.apex.core. engine. + * ExecutorParameters) */ @Override - public void setParameters(final ExecutorParameters parameters) {} + public void setParameters(final ExecutorParameters parameters) { + } } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateMachineExecutor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateMachineExecutor.java index 07ef8d6d6..97d51bf78 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateMachineExecutor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateMachineExecutor.java @@ -128,7 +128,7 @@ public class StateMachineExecutor implements Executor<EnEvent, EnEvent, AxPolicy * java.lang.Object) */ @Override - public EnEvent execute(final long executionID, final EnEvent incomingEvent) + public EnEvent execute(final long executionId, final EnEvent incomingEvent) throws StateMachineException, ContextException { // Check if there are any states on the state machine if (stateExecutorMap.size() == 0) { @@ -147,7 +147,7 @@ public class StateMachineExecutor implements Executor<EnEvent, EnEvent, AxPolicy incomingEvent.getKey(), firstExecutor.getSubject().getKey()), incomingEvent); while (true) { // Execute the state - stateOutput = stateExecutor.execute(executionID, stateOutput.getOutputEvent()); + stateOutput = stateExecutor.execute(executionId, stateOutput.getOutputEvent()); if (stateOutput == null) { throw new StateMachineException("state execution failed, invalid state output returned"); } @@ -175,7 +175,7 @@ public class StateMachineExecutor implements Executor<EnEvent, EnEvent, AxPolicy * java.lang.Object) */ @Override - public final void executePre(final long executionID, final EnEvent incomingEntity) throws StateMachineException { + public final void executePre(final long executionId, final EnEvent incomingEntity) throws StateMachineException { throw new StateMachineException("execution pre work not implemented on class"); } @@ -291,5 +291,7 @@ public class StateMachineExecutor implements Executor<EnEvent, EnEvent, AxPolicy * engine. ExecutorParameters) */ @Override - public void setParameters(final ExecutorParameters parameters) {} + public void setParameters(final ExecutorParameters parameters) { + // Not implemented in this class + } } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateOutput.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateOutput.java index 65cb0d2b8..837347174 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateOutput.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/StateOutput.java @@ -34,8 +34,7 @@ import org.onap.policy.apex.model.policymodel.concepts.AxStateOutput; import org.onap.policy.apex.model.utilities.Assertions; /** - * This class is the output of a state, and is used by the engine to decide what the next state for - * execution is. + * This class is the output of a state, and is used by the engine to decide what the next state for execution is. * * @author Liam Fallon (liam.fallon@ericsson.com) */ @@ -104,14 +103,14 @@ public class StateOutput { * @throws StateMachineException on errors populating the event fields */ public void setEventFields(final Map<String, AxField> incomingFieldDefinitionMap, - final Map<String, Object> eventFieldMap) throws StateMachineException { + final Map<String, Object> eventFieldMap) throws StateMachineException { Assertions.argumentNotNull(incomingFieldDefinitionMap, "incomingFieldDefinitionMap may not be null"); Assertions.argumentNotNull(eventFieldMap, "eventFieldMap may not be null"); if (!incomingFieldDefinitionMap.keySet().equals(eventFieldMap.keySet())) { throw new StateMachineException( - "field definitions and values do not match for event " + outputEventDef.getId() + '\n' - + incomingFieldDefinitionMap.keySet() + '\n' + eventFieldMap.keySet()); + "field definitions and values do not match for event " + outputEventDef.getId() + '\n' + + incomingFieldDefinitionMap.keySet() + '\n' + eventFieldMap.keySet()); } for (final Entry<String, Object> incomingFieldEntry : eventFieldMap.entrySet()) { final String fieldName = incomingFieldEntry.getKey(); @@ -119,8 +118,8 @@ public class StateOutput { // Check if this field is a field in the event if (!outputEventDef.getFields().contains(fieldDef)) { - throw new StateMachineException( - "field \"" + fieldName + "\" does not exist on event \"" + outputEventDef.getId() + "\""); + throw new StateMachineException("field \"" + fieldName + "\" does not exist on event \"" + + outputEventDef.getId() + "\""); } // Set the value in the output event @@ -129,8 +128,8 @@ public class StateOutput { } /** - * This method copies any fields that exist on the input event that also exist on the output - * event if they are not set on the output event. + * This method copies any fields that exist on the input event that also exist on the output event if they are not + * set on the output event. * * @param incomingEvent The incoming event to copy from */ @@ -141,18 +140,14 @@ public class StateOutput { final String fieldName = incomingField.getKey(); // Check if the field exists on the outgoing event - if (!outputEventDef.getParameterMap().containsKey(fieldName)) { - continue; - } + if ((!outputEventDef.getParameterMap().containsKey(fieldName)) - // Check if the field is set on the outgoing event - if (outputEvent.containsKey(fieldName)) { - continue; - } + // Check if the field is set on the outgoing event + || (outputEvent.containsKey(fieldName)) - // Now, check the fields have the same type - if (!incomingEvent.getAxEvent().getParameterMap().get(fieldName) - .equals(outputEvent.getAxEvent().getParameterMap().get(fieldName))) { + // Now, check the fields have the same type + || (!incomingEvent.getAxEvent().getParameterMap().get(fieldName) + .equals(outputEvent.getAxEvent().getParameterMap().get(fieldName)))) { continue; } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskExecutor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskExecutor.java index de2f7b821..814f257f7 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskExecutor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskExecutor.java @@ -101,7 +101,8 @@ public abstract class TaskExecutor public void prepare() throws StateMachineException { LOGGER.debug("prepare:" + axTask.getKey().getId() + "," + axTask.getTaskLogic().getLogicFlavour() + "," + axTask.getTaskLogic().getLogic()); - argumentOfClassNotNull(axTask.getTaskLogic().getLogic(), StateMachineException.class, "task logic cannot be null."); + argumentOfClassNotNull(axTask.getTaskLogic().getLogic(), StateMachineException.class, + "task logic cannot be null."); } /* @@ -111,7 +112,7 @@ public abstract class TaskExecutor * java.lang.Object) */ @Override - public Map<String, Object> execute(final long executionID, final Map<String, Object> newIncomingFields) + public Map<String, Object> execute(final long executionId, final Map<String, Object> newIncomingFields) throws StateMachineException, ContextException { throw new StateMachineException( "execute() not implemented on abstract TaskExecutor class, only on its subclasses"); @@ -124,7 +125,7 @@ public abstract class TaskExecutor * java.lang.Object) */ @Override - public final void executePre(final long executionID, final Map<String, Object> newIncomingFields) + public final void executePre(final long executionId, final Map<String, Object> newIncomingFields) throws StateMachineException, ContextException { LOGGER.debug("execute-pre:" + getSubject().getTaskLogic().getLogicFlavour() + "," + getSubject().getKey().getId() + "," + getSubject().getTaskLogic().getLogic()); @@ -157,7 +158,7 @@ public abstract class TaskExecutor // Get task context object executionContext = - new TaskExecutionContext(this, executionID, getSubject(), getIncoming(), getOutgoing(), getContext()); + new TaskExecutionContext(this, executionId, getSubject(), getIncoming(), getOutgoing(), getContext()); } /* @@ -228,7 +229,8 @@ public abstract class TaskExecutor + "\" are unwanted for task \"" + axTask.getKey().getId() + "\""); } - LOGGER.debug("execute-post:" + axTask.getKey().getId() + ", returning fields " + outgoingFields.toString()); + String message = "execute-post:" + axTask.getKey().getId() + ", returning fields " + outgoingFields.toString(); + LOGGER.debug(message); } /* diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskSelectExecutor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskSelectExecutor.java index cda0ac549..5d24f0d4a 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskSelectExecutor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/TaskSelectExecutor.java @@ -104,7 +104,7 @@ public abstract class TaskSelectExecutor implements Executor<EnEvent, AxArtifact * java.lang.Object) */ @Override - public AxArtifactKey execute(final long executionID, final EnEvent newIncomingEvent) + public AxArtifactKey execute(final long executionId, final EnEvent newIncomingEvent) throws StateMachineException, ContextException { throw new StateMachineException("execute() not implemented on class"); } @@ -116,7 +116,7 @@ public abstract class TaskSelectExecutor implements Executor<EnEvent, AxArtifact * java.lang.Object) */ @Override - public final void executePre(final long executionID, final EnEvent newIncomingEvent) throws StateMachineException { + public final void executePre(final long executionId, final EnEvent newIncomingEvent) throws StateMachineException { LOGGER.debug("execute-pre:" + axState.getKey().getId() + "," + axState.getTaskSelectionLogic().getLogicFlavour() + "," + axState.getTaskSelectionLogic().getLogic()); @@ -126,7 +126,7 @@ public abstract class TaskSelectExecutor implements Executor<EnEvent, AxArtifact outgoingTaskKey = new AxArtifactKey(); // Get task selection context object - executionContext = new TaskSelectionExecutionContext(this, executionID, getSubject(), getIncoming(), + executionContext = new TaskSelectionExecutionContext(this, executionId, getSubject(), getIncoming(), getOutgoing(), getContext()); } diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java index be1b311c2..460639b90 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/StateFinalizerExecutionContext.java @@ -58,7 +58,7 @@ public class StateFinalizerExecutionContext { public final AxStateFacade subject; /** the execution ID for the current APEX policy execution instance. */ - public final Long executionID; + public final Long executionId; /** * The list of state outputs for this state finalizer. The purpose of a state finalizer is to @@ -99,7 +99,7 @@ public class StateFinalizerExecutionContext { * Instantiates a new state finalizer execution context. * * @param stateFinalizerExecutor the state finalizer executor that requires context - * @param executionID the execution ID for the current APEX policy execution instance + * @param executionId the execution ID for the current APEX policy execution instance * @param axState the state definition that is the subject of execution * @param fields the fields to be manipulated by the state finalizer * @param stateOutputNames the state output names, one of which will be selected by the state @@ -107,13 +107,13 @@ public class StateFinalizerExecutionContext { * @param internalContext the execution context of the Apex engine in which the task is being * executed */ - public StateFinalizerExecutionContext(final StateFinalizerExecutor stateFinalizerExecutor, final long executionID, + public StateFinalizerExecutionContext(final StateFinalizerExecutor stateFinalizerExecutor, final long executionId, final AxState axState, final Map<String, Object> fields, final Set<String> stateOutputNames, final ApexInternalContext internalContext) { subject = new AxStateFacade(axState); // Execution ID is the current policy execution instance - this.executionID = executionID; + this.executionId = executionId; this.fields = fields; this.stateOutputNames = stateOutputNames; @@ -150,7 +150,7 @@ public class StateFinalizerExecutionContext { * @throws ContextRuntimeException if the context album does not exist on the state for this * executor */ - public ContextAlbum getContextAlbum(final String contextAlbumName) throws ContextRuntimeException { + public ContextAlbum getContextAlbum(final String contextAlbumName) { // Find the context album final ContextAlbum foundContextAlbum = context.get(contextAlbumName); diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java index a9a157082..4a9e83063 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskExecutionContext.java @@ -52,18 +52,18 @@ public class TaskExecutionContext { // CHECKSTYLE:OFF: checkstyle:VisibilityModifier Logic has access to these field /** A constant <code>boolean true</code> value available for reuse e.g., for the return value */ - public final Boolean TRUE = true; + public final Boolean isTrue = true; /** * A constant <code>boolean false</code> value available for reuse e.g., for the return value */ - public final Boolean FALSE = false; + public final Boolean isFalse = false; /** A facade to the full task definition for the task logic being executed. */ public final AxTaskFacade subject; /** the execution ID for the current APEX policy execution instance. */ - public final Long executionID; + public final Long executionId; /** * The incoming fields from the trigger event for the task. The task logic can access these @@ -97,21 +97,21 @@ public class TaskExecutionContext { * Instantiates a new task execution context. * * @param taskExecutor the task executor that requires context - * @param executionID the execution ID for the current APEX policy execution instance + * @param executionId the execution ID for the current APEX policy execution instance * @param axTask the task definition that is the subject of execution * @param inFields the in fields * @param outFields the out fields * @param internalContext the execution context of the Apex engine in which the task is being * executed */ - public TaskExecutionContext(final TaskExecutor taskExecutor, final long executionID, final AxTask axTask, + public TaskExecutionContext(final TaskExecutor taskExecutor, final long executionId, final AxTask axTask, final Map<String, Object> inFields, final Map<String, Object> outFields, final ApexInternalContext internalContext) { // The subject is the task definition subject = new AxTaskFacade(axTask); // Execution ID is the current policy execution instance - this.executionID = executionID; + this.executionId = executionId; // The input and output fields this.inFields = Collections.unmodifiableMap(inFields); @@ -147,7 +147,7 @@ public class TaskExecutionContext { * @throws ContextRuntimeException if the context album does not exist on the task for this * executor */ - public ContextAlbum getContextAlbum(final String contextAlbumName) throws ContextRuntimeException { + public ContextAlbum getContextAlbum(final String contextAlbumName) { // Find the context album final ContextAlbum foundContextAlbum = context.get(contextAlbumName); diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java index 3194e3fce..63052348a 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/executor/context/TaskSelectionExecutionContext.java @@ -52,18 +52,18 @@ public class TaskSelectionExecutionContext { // CHECKSTYLE:OFF: checkstyle:VisibilityModifier Logic has access to these field /** A constant <code>boolean true</code> value available for reuse e.g., for the return value */ - public final Boolean TRUE = true; + public final Boolean isTrue = true; /** * A constant <code>boolean false</code> value available for reuse e.g., for the return value */ - public final Boolean FALSE = false; + public final Boolean isFalse = false; /** A facade to the full state definition for the task selection logic being executed. */ public final AxStateFacade subject; /** the execution ID for the current APEX policy execution instance. */ - public final Long executionID; + public final Long executionId; /** * The incoming fields from the trigger event for the state. The task selection logic can access @@ -96,21 +96,21 @@ public class TaskSelectionExecutionContext { * Instantiates a new task selection execution context. * * @param taskSelectExecutor the task selection executor that requires context - * @param executionID the execution identifier + * @param executionId the execution identifier * @param axState the state definition that is the subject of execution * @param incomingEvent the incoming event for the state * @param outgoingKey the outgoing key for the task to execute in this state * @param internalContext the execution context of the Apex engine in which the task is being * executed */ - public TaskSelectionExecutionContext(final TaskSelectExecutor taskSelectExecutor, final long executionID, + public TaskSelectionExecutionContext(final TaskSelectExecutor taskSelectExecutor, final long executionId, final AxState axState, final EnEvent incomingEvent, final AxArtifactKey outgoingKey, final ApexInternalContext internalContext) { // The subject is the state definition subject = new AxStateFacade(axState); // Execution ID is the current policy execution instance - this.executionID = executionID; + this.executionId = executionId; // The events inFields = incomingEvent; @@ -153,7 +153,7 @@ public class TaskSelectionExecutionContext { * @throws ContextRuntimeException if the context album does not exist on the state for this * executor */ - public ContextAlbum getContextAlbum(final String contextAlbumName) throws ContextRuntimeException { + public ContextAlbum getContextAlbum(final String contextAlbumName) { // Find the context album final ContextAlbum foundContextAlbum = context.get(contextAlbumName); diff --git a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/monitoring/EventMonitor.java b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/monitoring/EventMonitor.java index c1c9ce949..de2639dcb 100644 --- a/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/monitoring/EventMonitor.java +++ b/core/core-engine/src/main/java/org/onap/policy/apex/core/engine/monitoring/EventMonitor.java @@ -44,7 +44,8 @@ public class EventMonitor { * @param userArtifactStack the keys of the artifacts using the event at the moment */ public void monitorGet(final AxField eventParameter, final Object value, final AxConcept[] userArtifactStack) { - LOGGER.trace(monitor("GET", userArtifactStack, eventParameter, value)); + String monitorGetString = monitor("GET", userArtifactStack, eventParameter, value); + LOGGER.trace(monitorGetString); } /** @@ -55,7 +56,8 @@ public class EventMonitor { * @param userArtifactStack the keys of the artifacts using the event at the moment */ public void monitorSet(final AxField eventParameter, final Object value, final AxConcept[] userArtifactStack) { - LOGGER.trace(monitor("SET", userArtifactStack, eventParameter, value)); + String monitorSetString = monitor("SET", userArtifactStack, eventParameter, value); + LOGGER.trace(monitorSetString); } /** @@ -67,7 +69,8 @@ public class EventMonitor { */ public void monitorRemove(final AxField eventParameter, final Object removedValue, final AxConcept[] userArtifactStack) { - LOGGER.trace(monitor("REMOVE", userArtifactStack, eventParameter, removedValue)); + String monitorRemoveString = monitor("REMOVE", userArtifactStack, eventParameter, removedValue); + LOGGER.trace(monitorRemoveString); } /** diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/JavaHandlingException.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/JavaHandlingException.java index f6ef68105..63bd1c477 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/JavaHandlingException.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/JavaHandlingException.java @@ -40,19 +40,19 @@ public class JavaHandlingException extends Exception { /** * Instantiates a new Java handling exception. * - * @param e the exception to wrap + * @param exception the exception to wrap */ - public JavaHandlingException(final Exception e) { - super(e); + public JavaHandlingException(final Exception exception) { + super(exception); } /** * Instantiates a new Java handling exception. * * @param message the message - * @param e the exception to wrap + * @param exception the exception to wrap */ - public JavaHandlingException(final String message, final Exception e) { - super(message, e); + public JavaHandlingException(final String message, final Exception exception) { + super(message, exception); } } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/classes/ClassUtils.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/classes/ClassUtils.java index 919d1b122..16a3369fb 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/classes/ClassUtils.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/classes/ClassUtils.java @@ -22,6 +22,7 @@ package org.onap.policy.apex.core.infrastructure.java.classes; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.net.URL; @@ -44,6 +45,9 @@ public abstract class ClassUtils { // Get a reference to the logger private static final XLogger LOGGER = XLoggerFactory.getXLogger(ClassUtils.class); + // Repeated string constants + private static final String CLASS_PATTERN = "\\.class$"; + // The boot directory in Java for predefined JARs private static final String SUN_BOOT_LIBRARY_PATH = "sun.boot.library.path"; @@ -89,16 +93,13 @@ public abstract class ClassUtils { try { final Class<?> nullclassloader = Class.forName("sun.misc.Launcher"); if (nullclassloader != null) { - // There a long way and a short way, Short way: causes a warning that cannot be suppressed - // URL[] moreurls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); - // long way: - Method m = nullclassloader.getMethod("getBootstrapClassPath"); - if (m != null) { - final Object cp = m.invoke(null, (Object[]) null); + Method mmethod = nullclassloader.getMethod("getBootstrapClassPath"); + if (mmethod != null) { + final Object cp = mmethod.invoke(null, (Object[]) null); if (cp != null) { - m = cp.getClass().getMethod("getURLs"); - if (m != null) { - final URL[] moreurls = (URL[]) (m.invoke(cp, (Object[]) null)); + mmethod = cp.getClass().getMethod("getURLs"); + if (mmethod != null) { + final URL[] moreurls = (URL[]) (mmethod.invoke(cp, (Object[]) null)); if (moreurls != null && moreurls.length > 0) { if (urls.length == 0) { urls = moreurls; @@ -130,10 +131,8 @@ public abstract class ClassUtils { // JARs are processed as well else if (url.getFile().endsWith(".jar")) { classNameSet.addAll(processJar(urlFile)); - } else { - // It's a resource or some other non-executable thing - continue; } + // It's a resource or some other non-executable thing } } catch (final Exception e) { LOGGER.warn("could not get the names of Java classes", e); @@ -168,9 +167,7 @@ public abstract class ClassUtils { } else if (child.getName().endsWith(".class") && !child.getName().contains("$")) { // Process the ".class" file classNameSet.add( - child.getAbsolutePath().replace(rootDir, "").replaceFirst("\\.class$", "").replace('/', '.')); - } else { - continue; + child.getAbsolutePath().replace(rootDir, "").replaceFirst(CLASS_PATTERN, "").replace('/', '.')); } } return classNameSet; @@ -194,7 +191,7 @@ public abstract class ClassUtils { fileName = fileName.substring(classesPos + CLASSES_TOKEN.length()); } - return fileName.replaceFirst("\\.class$", "").replace('/', '.'); + return fileName.replaceFirst(CLASS_PATTERN, "").replace('/', '.'); } /** @@ -202,9 +199,9 @@ public abstract class ClassUtils { * * @param jarFile the JAR file * @return a set of class names - * @throws Exception on errors processing JARs + * @throws IOException on errors processing JARs */ - public static Set<String> processJar(final File jarFile) throws Exception { + public static Set<String> processJar(final File jarFile) throws IOException { // Pass the file as an input stream return processJar(new FileInputStream(jarFile.getAbsolutePath())); } @@ -214,9 +211,9 @@ public abstract class ClassUtils { * * @param jarInputStream the JAR input stream * @return a set of class names - * @throws Exception on errors processing JARs + * @throws IOException on errors processing JARs */ - public static Set<String> processJar(final InputStream jarInputStream) throws Exception { + public static Set<String> processJar(final InputStream jarInputStream) throws IOException { // The return set final TreeSet<String> classPathSet = new TreeSet<>(); @@ -229,7 +226,7 @@ public abstract class ClassUtils { // Iterate over each entry in the JAR for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) { if (!entry.isDirectory() && entry.getName().endsWith(".class") && !entry.getName().contains("$")) { - classPathSet.add(entry.getName().replaceFirst("\\.class$", "").replace('/', '.')); + classPathSet.add(entry.getName().replaceFirst(CLASS_PATTERN, "").replace('/', '.')); } } zip.close(); @@ -243,7 +240,7 @@ public abstract class ClassUtils { */ public static void main(final String[] args) { for (final String clz : getClassNames()) { - System.out.println("Found class: " + clz); + LOGGER.info("Found class: {}", clz); } } } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java index 7a0b6048e..464a601e1 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java @@ -69,8 +69,8 @@ public class SingleClassBuilder { */ public void compile() throws JavaHandlingException { // Get the list of compilation units, there is only one here - final List<? extends JavaFileObject> compilationUnits = - Arrays.asList(new SingleClassCompilationUnit(className, sourceCode)); + final List<? extends JavaFileObject> compilationUnits = Arrays + .asList(new SingleClassCompilationUnit(className, sourceCode)); // Allows us to get diagnostics from the compilation final DiagnosticCollector<JavaFileObject> diagnosticListener = new DiagnosticCollector<>(); @@ -80,8 +80,8 @@ public class SingleClassBuilder { // Set up the target file manager and call the compiler singleFileManager = new SingleFileManager(compiler, new SingleClassByteCodeFileObject(className)); - final JavaCompiler.CompilationTask task = - compiler.getTask(null, singleFileManager, diagnosticListener, null, null, compilationUnits); + final JavaCompiler.CompilationTask task = compiler.getTask(null, singleFileManager, diagnosticListener, null, + null, compilationUnits); // Check if the compilation worked if (!task.call()) { @@ -104,9 +104,9 @@ public class SingleClassBuilder { builder.append("\n"); } - LOGGER.warn("error compiling Java code for class \"" + className + "\": " + builder.toString()); - throw new JavaHandlingException( - "error compiling Java code for class \"" + className + "\": " + builder.toString()); + String message = "error compiling Java code for class \"" + className + "\": " + builder.toString(); + LOGGER.warn(message); + throw new JavaHandlingException(message); } } @@ -120,12 +120,12 @@ public class SingleClassBuilder { * @throws ClassNotFoundException the byte code for the class is not found in the class loader * @throws JavaHandlingException the java handling exception if the Java class source code is not compiled */ - public Object createObject() - throws InstantiationException, IllegalAccessException, ClassNotFoundException, JavaHandlingException { + public Object createObject() throws InstantiationException, IllegalAccessException, ClassNotFoundException, + JavaHandlingException { if (singleFileManager == null) { - LOGGER.warn("error instantiating instance for class \"" + className + "\": code may not be compiled"); - throw new JavaHandlingException( - "error instantiating instance for class \"" + className + "\": code may not be compiled"); + String message = "error instantiating instance for class \"" + className + "\": code may not be compiled"; + LOGGER.warn(message); + throw new JavaHandlingException(message); } return singleFileManager.getClassLoader(null).findClass(className).newInstance(); diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java index 4b7225267..043657854 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java @@ -35,7 +35,7 @@ import javax.tools.SimpleJavaFileObject; * basis for {@code JavaFileObject} implementations. Subclasses can override the implementation and specification of any * method of this class as long as the general contract of {@code JavaFileObject} is obeyed. * - * This class holds the byte code for a single class in memory. + * <p>This class holds the byte code for a single class in memory. * * @author Liam Fallon (liam.fallon@ericsson.com) */ diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleFileManager.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleFileManager.java index cd14b1a06..066765504 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleFileManager.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleFileManager.java @@ -34,7 +34,7 @@ import javax.tools.StandardJavaFileManager; * is an implementation of {@code JavaFileManager} that forwards the {@code JavaFileManager} methods to a given file * manager. * - * This class instantiates and forwards those requests to a {@link StandardJavaFileManager} instance to act as a + * <p>This class instantiates and forwards those requests to a {@link StandardJavaFileManager} instance to act as a * {@code JavaFileManager} for a Java single file, managing class loading for the class. * * @author Liam Fallon (liam.fallon@ericsson.com) diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageHolder.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageHolder.java index f74ffa0b3..243e057be 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageHolder.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageHolder.java @@ -33,9 +33,9 @@ import org.slf4j.ext.XLoggerFactory; * implementation. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message being handled by a message holder instance + * @param <M> the generic type of message being handled by a message holder instance */ -public class MessageHolder<MESSAGE> implements Serializable { +public class MessageHolder<M> implements Serializable { private static final int HASH_PRIME = 31; private static final int FOUR_BYTES = 32; @@ -50,7 +50,7 @@ public class MessageHolder<MESSAGE> implements Serializable { private final InetAddress senderHostAddress; // Sequence of message in the message holder - private final List<MESSAGE> messages; + private final List<M> messages; /** * Constructor, create the message holder. @@ -69,7 +69,7 @@ public class MessageHolder<MESSAGE> implements Serializable { * * @return the messages */ - public List<MESSAGE> getMessages() { + public List<M> getMessages() { return messages; } @@ -78,7 +78,7 @@ public class MessageHolder<MESSAGE> implements Serializable { * * @param message the message to add */ - public void addMessage(final MESSAGE message) { + public void addMessage(final M message) { if (!messages.contains(message)) { messages.add(message); } else { @@ -160,9 +160,6 @@ public class MessageHolder<MESSAGE> implements Serializable { } else if (!messages.equals(other.messages)) { return false; } - if (creationTime != other.creationTime) { - return false; - } - return true; + return creationTime == other.creationTime; } } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageListener.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageListener.java index c8b132423..0aab650d3 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageListener.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessageListener.java @@ -27,16 +27,16 @@ import org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock.M * implements this interface. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> of message of any given type that is being listened for and handled + * @param <M> of message of any given type that is being listened for and handled */ -public interface MessageListener<MESSAGE> { +public interface MessageListener<M> { /** * This method is called when a message block is received on a web socket and is to be forwarded to a listener. * * @param data the message data containing a message */ - void onMessage(MessageBlock<MESSAGE> data); + void onMessage(MessageBlock<M> data); /** * This method is called when a string message is received on a web socket and is to be forwarded to a listener. diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingService.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingService.java index 7e91b95ea..352e70806 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingService.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingService.java @@ -25,9 +25,9 @@ package org.onap.policy.apex.core.infrastructure.messaging; * messaging. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the type of message being passed by an implementation of Apex messaging + * @param <M> the type of message being passed by an implementation of Apex messaging */ -public interface MessagingService<MESSAGE> { +public interface MessagingService<M> { /** * Start the messaging connection. @@ -51,7 +51,7 @@ public interface MessagingService<MESSAGE> { * * @param messageHolder The message holder holding the messages to be sent */ - void send(MessageHolder<MESSAGE> messageHolder); + void send(MessageHolder<M> messageHolder); /** * Send a string message on the connection. @@ -65,12 +65,12 @@ public interface MessagingService<MESSAGE> { * * @param messageListener the message listener */ - void addMessageListener(MessageListener<MESSAGE> messageListener); + void addMessageListener(MessageListener<M> messageListener); /** * Removes the message listener. * * @param messageListener the message listener */ - void removeMessageListener(MessageListener<MESSAGE> messageListener); + void removeMessageListener(MessageListener<M> messageListener); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingServiceFactory.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingServiceFactory.java index 1d08fac74..b38b32f0e 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingServiceFactory.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/MessagingServiceFactory.java @@ -30,9 +30,9 @@ import org.onap.policy.apex.core.infrastructure.messaging.impl.ws.server.Message * A factory class to create a "server" or "client" type Messaging Service. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message to be handled by this messaging service + * @param <M> the generic type of message to be handled by this messaging service */ -public class MessagingServiceFactory<MESSAGE> { +public class MessagingServiceFactory<M> { /** * Create a web socket server instance and returns to the caller. @@ -40,7 +40,7 @@ public class MessagingServiceFactory<MESSAGE> { * @param address the address of the server machine * @return the messaging service */ - public MessagingService<MESSAGE> createServer(final InetSocketAddress address) { + public MessagingService<M> createServer(final InetSocketAddress address) { return new MessageServerImpl<>(address); } @@ -50,7 +50,7 @@ public class MessagingServiceFactory<MESSAGE> { * @param uri the URI of the server to connect to * @return an instance of {@link MessagingService} */ - public MessagingService<MESSAGE> createClient(final URI uri) { + public MessagingService<M> createClient(final URI uri) { if (uri == null) { throw new IllegalArgumentException("URI cannot be null"); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/RawMessageHandler.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/RawMessageHandler.java index 7e9a31a4f..e0bf0ea6b 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/RawMessageHandler.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/RawMessageHandler.java @@ -20,6 +20,8 @@ package org.onap.policy.apex.core.infrastructure.messaging.impl.ws; +import com.google.common.eventbus.Subscribe; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; @@ -38,19 +40,20 @@ import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; -import com.google.common.eventbus.Subscribe; - /** - * The Class RawMessageHandler handles raw messages being received on a Java web socket and forwards - * the messages to the DataHandler instance that has subscribed to the RawMessageHandler instance. + * The Class RawMessageHandler handles raw messages being received on a Java web socket and forwards the messages to the + * DataHandler instance that has subscribed to the RawMessageHandler instance. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message being received + * @param <M> the generic type of message being received */ -public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESSAGE>, Runnable { +public class RawMessageHandler<M> implements WebSocketMessageListener<M>, Runnable { // The logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(RawMessageHandler.class); + // Repeated string constants + private static final String RAW_MESSAGE_LISTENING_INTERRUPTED = "raw message listening has been interrupted"; + // The amount of time to sleep during shutdown for the thread of this message handler to stop private static final int SHUTDOWN_WAIT_TIME = 10; @@ -58,13 +61,13 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS private static final long QUEUE_POLL_TIMEOUT = 50; // A queue that temporarily holds message blocks - private final BlockingQueue<MessageBlock<MESSAGE>> messageBlockQueue = new LinkedBlockingDeque<>(); + private final BlockingQueue<MessageBlock<M>> messageBlockQueue = new LinkedBlockingDeque<>(); // A queue that temporarily holds message blocks private final BlockingQueue<String> stringMessageQueue = new LinkedBlockingDeque<>(); // Client applications that have subscribed for messages - private final MessageBlockHandler<MESSAGE> dataHandler = new MessageBlockHandler<MESSAGE>("data-processor"); + private final MessageBlockHandler<M> dataHandler = new MessageBlockHandler<>("data-processor"); // The thread that the raw message handler is receiving messages on private Thread thisThread = null; @@ -90,19 +93,19 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS // processing thread try (final ByteArrayInputStream stream = new ByteArrayInputStream(dataByteBuffer.array()); - final ObjectInputStream ois = new ObjectInputStream(stream);) { + final ObjectInputStream ois = new ObjectInputStream(stream);) { @SuppressWarnings("unchecked") - final MessageHolder<MESSAGE> messageHolder = (MessageHolder<MESSAGE>) ois.readObject(); + final MessageHolder<M> messageHolder = (MessageHolder<M>) ois.readObject(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("message {} recieved from the client {} ", messageHolder, - messageHolder == null ? "Apex Engine " : messageHolder.getSenderHostAddress()); + messageHolder == null ? "Apex Engine " : messageHolder.getSenderHostAddress()); } if (messageHolder != null) { - final List<MESSAGE> messages = messageHolder.getMessages(); + final List<M> messages = messageHolder.getMessages(); if (messages != null) { - messageBlockQueue.add(new MessageBlock<MESSAGE>(messages, incomingData.getConn())); + messageBlockQueue.add(new MessageBlock<M>(messages, incomingData.getConn())); } } } catch (final IOException | ClassNotFoundException e) { @@ -112,8 +115,7 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS } /** - * This method is called when a string message is received on a web socket and is to be - * forwarded to a listener. + * This method is called when a string message is received on a web socket and is to be forwarded to a listener. * * @param messageString the message string */ @@ -130,6 +132,16 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS } /** + * This method is called when a message is received on a web socket and is to be forwarded to a listener. + * + * @param data the message data containing a message + */ + @Override + public void onMessage(final MessageBlock<M> data) { + throw new UnsupportedOperationException("this operation is not supported"); + } + + /** * This thread monitors the message queue and processes messages as they appear on the queue. * * @see java.lang.Runnable#run() @@ -143,14 +155,14 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS while (thisThread.isAlive() && !thisThread.isInterrupted()) { try { // Read message block messages from the queue and pass it to the data handler - MessageBlock<MESSAGE> messageBlock = null; + MessageBlock<M> messageBlock = null; while ((messageBlock = messageBlockQueue.poll(1, TimeUnit.MILLISECONDS)) != null) { dataHandler.post(messageBlock); } } catch (final InterruptedException e) { // restore the interrupt status Thread.currentThread().interrupt(); - LOGGER.debug("raw message listening has been interrupted"); + LOGGER.debug(RAW_MESSAGE_LISTENING_INTERRUPTED); break; } @@ -163,7 +175,7 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS } catch (final InterruptedException e) { // restore the interrupt status Thread.currentThread().interrupt(); - LOGGER.debug("raw message listening has been interrupted"); + LOGGER.debug(RAW_MESSAGE_LISTENING_INTERRUPTED); break; } @@ -173,7 +185,7 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS } catch (final InterruptedException e) { // restore the interrupt status Thread.currentThread().interrupt(); - LOGGER.debug("raw message listening has been interrupted"); + LOGGER.debug(RAW_MESSAGE_LISTENING_INTERRUPTED); break; } } @@ -199,23 +211,12 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS } /** - * This method is called when a message is received on a web socket and is to be forwarded to a - * listener. - * - * @param data the message data containing a message - */ - @Override - public void onMessage(final MessageBlock<MESSAGE> data) { - throw new UnsupportedOperationException("this operation is not supported"); - } - - /** * Register a data forwarder to which messages coming in on the web socket will be forwarded. * * @param listener The listener to register */ @Override - public void registerDataForwarder(final MessageListener<MESSAGE> listener) { + public void registerDataForwarder(final MessageListener<M> listener) { stateCheck(listener); dataHandler.registerMessageHandler(listener); } @@ -226,7 +227,7 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS * @param listener The listener to unregister */ @Override - public void unRegisterDataForwarder(final MessageListener<MESSAGE> listener) { + public void unRegisterDataForwarder(final MessageListener<M> listener) { stateCheck(listener); dataHandler.unRegisterMessageHandler(listener); } @@ -236,7 +237,7 @@ public class RawMessageHandler<MESSAGE> implements WebSocketMessageListener<MESS * * @param listener the listener to check */ - private void stateCheck(final MessageListener<MESSAGE> listener) { + private void stateCheck(final MessageListener<M> listener) { if (listener == null) { throw new IllegalArgumentException("The listener object cannot be null"); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/WebSocketMessageListener.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/WebSocketMessageListener.java index aa951b4ec..529e887e4 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/WebSocketMessageListener.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/WebSocketMessageListener.java @@ -30,10 +30,10 @@ import org.onap.policy.apex.core.infrastructure.messaging.impl.ws.messageblock.R * object's appropriate method is invoked. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type + * @param <M> the generic type * @see RawMessageBlock */ -public interface WebSocketMessageListener<MESSAGE> extends MessageListener<MESSAGE>, Runnable { +public interface WebSocketMessageListener<M> extends MessageListener<M>, Runnable { /** * This method is called by the class with which this message listener has been registered. @@ -47,12 +47,12 @@ public interface WebSocketMessageListener<MESSAGE> extends MessageListener<MESSA * * @param listener The listener to register */ - void registerDataForwarder(MessageListener<MESSAGE> listener); + void registerDataForwarder(MessageListener<M> listener); /** * Unregister a data forwarder that was previously registered on the web socket listener. * * @param listener The listener to unregister */ - void unRegisterDataForwarder(MessageListener<MESSAGE> listener); + void unRegisterDataForwarder(MessageListener<M> listener); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/InternalMessageBusClient.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/InternalMessageBusClient.java index 9f7f89d8c..17391fb89 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/InternalMessageBusClient.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/InternalMessageBusClient.java @@ -36,9 +36,9 @@ import org.slf4j.ext.XLoggerFactory; * receive messages on the web socket. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message being handled + * @param <M> the generic type of message being handled */ -abstract class InternalMessageBusClient<MESSAGE> extends WebSocketClientImpl { +abstract class InternalMessageBusClient<M> extends WebSocketClientImpl { private static final int THREAD_FACTORY_STACK_SIZE = 256; // The logger for this class @@ -48,15 +48,15 @@ abstract class InternalMessageBusClient<MESSAGE> extends WebSocketClientImpl { private static final String RAW_EVENT_BUS = "Raw-Event-Bus"; // This instance handles the raw data received from the web socket - private final RawMessageHandler<MESSAGE> rawMessageHandler = new RawMessageHandler<>(); + private final RawMessageHandler<M> rawMessageHandler = new RawMessageHandler<>(); // The message block handler to which to pass messages coming in on this client - private MessageBlockHandler<MESSAGE> messageBlockHandler = null; + private MessageBlockHandler<M> messageBlockHandler = null; // The raw message handler uses a thread to process incoming events off a queue, this class owns and controls that // thread. These fields hold the thread and // the thread factory for creating threads. - private ApplicationThreadFactory tFactory = + private ApplicationThreadFactory threadFactory = new ApplicationThreadFactory("ws-client-thread", THREAD_FACTORY_STACK_SIZE); private Thread forwarderThread = null; @@ -75,7 +75,7 @@ abstract class InternalMessageBusClient<MESSAGE> extends WebSocketClientImpl { messageBlockHandler.registerMessageHandler(rawMessageHandler); // Create the thread that manages the queue in the data handler - forwarderThread = tFactory.newThread(rawMessageHandler); + forwarderThread = threadFactory.newThread(rawMessageHandler); forwarderThread.start(); LOGGER.exit(); @@ -109,7 +109,7 @@ abstract class InternalMessageBusClient<MESSAGE> extends WebSocketClientImpl { * * @param listener a simple class, that listens for the events from Event */ - public void addMessageListener(final MessageListener<MESSAGE> listener) { + public void addMessageListener(final MessageListener<M> listener) { rawMessageHandler.registerDataForwarder(listener); } @@ -118,7 +118,7 @@ abstract class InternalMessageBusClient<MESSAGE> extends WebSocketClientImpl { * * @param listener the listener */ - public void removeMessageListener(final MessageListener<MESSAGE> listener) { + public void removeMessageListener(final MessageListener<M> listener) { rawMessageHandler.unRegisterDataForwarder(listener); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/MessagingClient.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/MessagingClient.java index 36ad3b163..dd9aac122 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/MessagingClient.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/client/MessagingClient.java @@ -33,9 +33,9 @@ import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; * message reception on the client side of a web socket in Apex. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type + * @param <M> the generic type */ -public class MessagingClient<MESSAGE> extends InternalMessageBusClient<MESSAGE> implements MessagingService<MESSAGE> { +public class MessagingClient<M> extends InternalMessageBusClient<M> implements MessagingService<M> { // The length of time to wait for a connection to a web socket server before aborting private static final int CONNECTION_TIMEOUT_TIME_MS = 3000; @@ -102,7 +102,7 @@ public class MessagingClient<MESSAGE> extends InternalMessageBusClient<MESSAGE> */ private boolean waitforConnection(final WebSocket connection) { // The total time we have before timeout - int timeoutMSCounter = CONNECTION_TIMEOUT_TIME_MS; + int timeoutMsCounter = CONNECTION_TIMEOUT_TIME_MS; // Check the connection state do { @@ -112,7 +112,7 @@ public class MessagingClient<MESSAGE> extends InternalMessageBusClient<MESSAGE> case CLOSING: // Not connected yet so wait for the try interval ThreadUtilities.sleep(CONNECTION_TRY_INTERVAL_MS); - timeoutMSCounter -= CONNECTION_TRY_INTERVAL_MS; + timeoutMsCounter -= CONNECTION_TRY_INTERVAL_MS; break; case OPEN: // Connection is open, happy days @@ -125,7 +125,7 @@ public class MessagingClient<MESSAGE> extends InternalMessageBusClient<MESSAGE> } } // While the timeout value has not expired - while (timeoutMSCounter > 0); + while (timeoutMsCounter > 0); // We have timed out return false; @@ -139,7 +139,7 @@ public class MessagingClient<MESSAGE> extends InternalMessageBusClient<MESSAGE> * .core. infrastructure. messaging.MessageHolder) */ @Override - public void send(final MessageHolder<MESSAGE> commands) { + public void send(final MessageHolder<M> commands) { // Get the connection and send the message final WebSocket connection = super.getConnection(); connection.send(MessagingUtils.serializeObject(commands)); diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlock.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlock.java index 70b1d2c3a..1c6852686 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlock.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlock.java @@ -28,12 +28,12 @@ import org.java_websocket.WebSocket; * This class encapsulate messages and the web socket on which they are handled. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message being handled + * @param <M> the generic type of message being handled */ -public final class MessageBlock<MESSAGE> { +public final class MessageBlock<M> { // List of Messages received on a web socket - private final List<MESSAGE> messages; + private final List<M> messages; // The web socket on which the messages are handled private final WebSocket webSocket; @@ -44,7 +44,7 @@ public final class MessageBlock<MESSAGE> { * @param messages the messages in the message block * @param webSocket the web socket used to handle the message block */ - public MessageBlock(final List<MESSAGE> messages, final WebSocket webSocket) { + public MessageBlock(final List<M> messages, final WebSocket webSocket) { this.messages = messages; this.webSocket = webSocket; } @@ -54,7 +54,7 @@ public final class MessageBlock<MESSAGE> { * * @return the messages */ - public List<MESSAGE> getMessages() { + public List<M> getMessages() { return messages; } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlockHandler.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlockHandler.java index 4265718db..123305b07 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlockHandler.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/messageblock/MessageBlockHandler.java @@ -31,9 +31,9 @@ import org.slf4j.ext.XLoggerFactory; * event bus. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type + * @param <M> the generic type */ -public class MessageBlockHandler<MESSAGE> { +public class MessageBlockHandler<M> { // Logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(MessageBlockHandler.class); @@ -72,7 +72,7 @@ public class MessageBlockHandler<MESSAGE> { * * @param messageBlock the block containing typed messages */ - public void post(final MessageBlock<MESSAGE> messageBlock) { + public void post(final MessageBlock<M> messageBlock) { if (messageBlock.getMessages() != null) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("new data message recieved from {}", messageBlock.getConnection() == null ? "server" @@ -90,7 +90,7 @@ public class MessageBlockHandler<MESSAGE> { public void post(final String messageString) { if (messageString != null) { if (LOGGER.isDebugEnabled()) { - LOGGER.debug("new string message recieved from server: " + messageString); + LOGGER.debug("new string message recieved from server: {}", messageString); } eventBus.post(messageString); } @@ -101,7 +101,7 @@ public class MessageBlockHandler<MESSAGE> { * * @param listener is an instance of WebSocketMessageListener */ - public void registerMessageHandler(final MessageListener<MESSAGE> listener) { + public void registerMessageHandler(final MessageListener<M> listener) { LOGGER.entry(listener); if (listener == null) { throw new IllegalArgumentException("listener object cannot be null"); @@ -116,7 +116,7 @@ public class MessageBlockHandler<MESSAGE> { * * @param listener the listener */ - public void unRegisterMessageHandler(final MessageListener<MESSAGE> listener) { + public void unRegisterMessageHandler(final MessageListener<M> listener) { if (listener == null) { throw new IllegalArgumentException("listener object cannot be null"); } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/InternalMessageBusServer.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/InternalMessageBusServer.java index 8e65bbf98..a436bd7e3 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/InternalMessageBusServer.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/InternalMessageBusServer.java @@ -38,9 +38,9 @@ import org.slf4j.ext.XLoggerFactory; * receive messages on the web socket. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type + * @param <M> the generic type */ -abstract class InternalMessageBusServer<MESSAGE> extends WebSocketServerImpl implements MessagingService<MESSAGE> { +abstract class InternalMessageBusServer<M> extends WebSocketServerImpl implements MessagingService<M> { // Logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(InternalMessageBusServer.class); @@ -50,15 +50,15 @@ abstract class InternalMessageBusServer<MESSAGE> extends WebSocketServerImpl imp private static final String RAW_EVENT_BUS = "Raw-Event-Bus"; // This instance handles the raw data received from the web socket - private final RawMessageHandler<MESSAGE> rawMessageHandler = new RawMessageHandler<>(); + private final RawMessageHandler<M> rawMessageHandler = new RawMessageHandler<>(); // The message block handler to which to pass messages coming in on this client - private MessageBlockHandler<MESSAGE> messageBlockHandler = null; + private MessageBlockHandler<M> messageBlockHandler = null; // The raw message handler uses a thread to process incoming events off a queue, this class owns and controls that // thread. These fields hold the thread and // the thread factory for creating threads. - private ApplicationThreadFactory tFactory = + private ApplicationThreadFactory threadFactory = new ApplicationThreadFactory("ws-server-thread", THREAD_FACTORY_STACK_SIZE); private Thread forwarderThread = null; @@ -77,7 +77,7 @@ abstract class InternalMessageBusServer<MESSAGE> extends WebSocketServerImpl imp messageBlockHandler.registerMessageHandler(rawMessageHandler); // Create the thread that manages the queue in the data handler - forwarderThread = tFactory.newThread(rawMessageHandler); + forwarderThread = threadFactory.newThread(rawMessageHandler); forwarderThread.start(); LOGGER.exit(); @@ -95,13 +95,23 @@ abstract class InternalMessageBusServer<MESSAGE> extends WebSocketServerImpl imp messageBlockHandler.post(new RawMessageBlock(rawMessage, webSocket)); } + /* + * (non-Javadoc) + * + * @see org.java_websocket.server.WebSocketServer#onMessage(org.java_websocket.WebSocket, java.lang.String) + */ + @Override + public void onMessage(final WebSocket webSocket, final String stringMessage) { + messageBlockHandler.post(stringMessage); + } + /** * Register a subscriber class to the raw message handler. * * @param subscriber the subscriber */ @Override - public void addMessageListener(final MessageListener<MESSAGE> subscriber) { + public void addMessageListener(final MessageListener<M> subscriber) { rawMessageHandler.registerDataForwarder(subscriber); } @@ -111,20 +121,10 @@ abstract class InternalMessageBusServer<MESSAGE> extends WebSocketServerImpl imp * @param subscriber the subscriber */ @Override - public void removeMessageListener(final MessageListener<MESSAGE> subscriber) { + public void removeMessageListener(final MessageListener<M> subscriber) { rawMessageHandler.unRegisterDataForwarder(subscriber); } - /* - * (non-Javadoc) - * - * @see org.java_websocket.server.WebSocketServer#onMessage(org.java_websocket.WebSocket, java.lang.String) - */ - @Override - public void onMessage(final WebSocket webSocket, final String stringMessage) { - messageBlockHandler.post(stringMessage); - } - /** * Stop the thread handling message forwarding. */ diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/MessageServerImpl.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/MessageServerImpl.java index 389d04dcc..d5ef40b5b 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/MessageServerImpl.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/impl/ws/server/MessageServerImpl.java @@ -34,9 +34,9 @@ import org.slf4j.ext.XLoggerFactory; * A messaging server implementation using web socket. * * @author Sajeevan Achuthan (sajeevan.achuthan@ericsson.com) - * @param <MESSAGE> the generic type of message being passed + * @param <M> the generic type of message being passed */ -public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE> { +public class MessageServerImpl<M> extends InternalMessageBusServer<M> { // The logger for this class private static final XLogger LOGGER = XLoggerFactory.getXLogger(MessageServerImpl.class); @@ -44,7 +44,7 @@ public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE private static final String PROTOCOL = "ws://"; // URI of this server - private final String connectionURI; + private final String connectionUri; // Indicates if the web socket server is started or not private boolean isStarted = false; @@ -60,8 +60,8 @@ public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE LOGGER.entry(address); // Compose the Web Socket URI - connectionURI = PROTOCOL + address.getHostString() + ":" + address.getPort(); - LOGGER.debug("Server connection URI: {}", connectionURI); + connectionUri = PROTOCOL + address.getHostString() + ":" + address.getPort(); + LOGGER.debug("Server connection URI: {}", connectionUri); LOGGER.exit(); } @@ -106,27 +106,25 @@ public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE } /** - * This method returns the current connection URI , if the server started otherwise it throws - * {@link IllegalStateException}. + * Return the current connection URI. * * @return connection URI */ - public String getConnectionURI() { - if (connectionURI == null) { + public String getConnectionUrl() { + if (connectionUri == null) { throw new IllegalStateException("URI not set - The server is not started"); } - return connectionURI; + return connectionUri; } /* * (non-Javadoc) * - * @see - * org.onap.policy.apex.core.infrastructure.messaging.MessagingService#send(org.onap.policy.apex - * .core. infrastructure. messaging.MessageHolder) + * @see org.onap.policy.apex.core.infrastructure.messaging.MessagingService#send(org.onap.policy.apex .core. + * infrastructure. messaging.MessageHolder) */ @Override - public void send(final MessageHolder<MESSAGE> message) { + public void send(final MessageHolder<M> message) { // Send the incoming message to all clients connected to this web socket final Collection<WebSocket> connections = getConnections(); for (final WebSocket webSocket : connections) { @@ -137,8 +135,7 @@ public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE /* * (non-Javadoc) * - * @see - * org.onap.policy.apex.core.infrastructure.messaging.MessagingService#send(java.lang.String) + * @see org.onap.policy.apex.core.infrastructure.messaging.MessagingService#send(java.lang.String) */ @Override public void send(final String messageString) { @@ -160,6 +157,6 @@ public class MessageServerImpl<MESSAGE> extends InternalMessageBusServer<MESSAGE @Override public void onStart() { - LOGGER.debug("started deployment server on URI: {}", connectionURI); + LOGGER.debug("started deployment server on URI: {}", connectionUri); } } diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageClient.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageClient.java index 00ade8047..28afde03b 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageClient.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageClient.java @@ -37,15 +37,18 @@ import org.slf4j.ext.XLoggerFactory; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class WSStringMessageClient implements WSStringMessager { - private static final XLogger LOGGER = XLoggerFactory.getXLogger(WSStringMessageClient.class); +public class WsStringMessageClient implements WsStringMessager { + private static final XLogger LOGGER = XLoggerFactory.getXLogger(WsStringMessageClient.class); + + // Repeated string constants + private static final String MESSAGE_PREAMBLE = "web socket event consumer client to \""; // Message service factory and the message service itself private final MessagingServiceFactory<String> factory = new MessagingServiceFactory<>(); private MessagingService<String> service = null; // The listener to use for reception of strings - private WSStringMessageListener wsStringMessageListener; + private WsStringMessageListener wsStringMessageListener; // Address of the server private final String host; @@ -58,7 +61,7 @@ public class WSStringMessageClient implements WSStringMessager { * @param host the host of the server * @param port the port of the server */ - public WSStringMessageClient(final String host, final int port) { + public WsStringMessageClient(final String host, final int port) { this.host = host; this.port = port; } @@ -71,22 +74,24 @@ public class WSStringMessageClient implements WSStringMessager { * apex. core.infrastructure.messaging. stringmessaging.WSStringMessageListener) */ @Override - public void start(final WSStringMessageListener newWsStringMessageListener) throws MessagingException { + public void start(final WsStringMessageListener newWsStringMessageListener) throws MessagingException { this.wsStringMessageListener = newWsStringMessageListener; uriString = "ws://" + host + ":" + port; - LOGGER.entry("web socket event consumer client to \"" + uriString + "\" starting . . ."); + String messagePreamble = MESSAGE_PREAMBLE + uriString + "\" "; + LOGGER.entry(messagePreamble + "starting . . ."); try { service = factory.createClient(new URI(uriString)); - service.addMessageListener(new WSStringMessageClientListener()); + service.addMessageListener(new WsStringMessageClientListener()); service.startConnection(); } catch (final Exception e) { - LOGGER.warn("web socket event consumer client to \"" + uriString + "\" start failed", e); - throw new MessagingException("web socket event consumer client to \"" + uriString + "\" start failed", e); + String message = messagePreamble + "start failed"; + LOGGER.warn(message, e); + throw new MessagingException(message, e); } - LOGGER.exit("web socket event consumer client to \"" + uriString + "\" started"); + LOGGER.exit(messagePreamble + "started"); } /* @@ -96,9 +101,9 @@ public class WSStringMessageClient implements WSStringMessager { */ @Override public void stop() { - LOGGER.entry("web socket event consumer client to \"" + uriString + "\" stopping . . ."); + LOGGER.entry(MESSAGE_PREAMBLE + uriString + "\" stopping . . ."); service.stopConnection(); - LOGGER.exit("web socket event consumer client to \"" + uriString + "\" stopped"); + LOGGER.exit(MESSAGE_PREAMBLE + uriString + "\" stopped"); } /* @@ -113,14 +118,15 @@ public class WSStringMessageClient implements WSStringMessager { service.send(stringMessage); if (LOGGER.isDebugEnabled()) { - LOGGER.debug("message sent to server: " + stringMessage); + String message = "message sent to server: " + stringMessage; + LOGGER.debug(message); } } /** * The Class WSStringMessageClientListener. */ - private class WSStringMessageClientListener implements MessageListener<String> { + private class WsStringMessageClientListener implements MessageListener<String> { /* * (non-Javadoc) * diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageListener.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageListener.java index e524b43d7..0a5e147cc 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageListener.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageListener.java @@ -25,7 +25,7 @@ package org.onap.policy.apex.core.infrastructure.messaging.stringmessaging; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public interface WSStringMessageListener { +public interface WsStringMessageListener { /** * Receive a string coming off a web socket. diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageServer.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java index 4da478f6a..3e8db268c 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessageServer.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessageServer.java @@ -39,15 +39,15 @@ import org.slf4j.ext.XLoggerFactory; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class WSStringMessageServer implements WSStringMessager { - private static final XLogger LOGGER = XLoggerFactory.getXLogger(WSStringMessageServer.class); +public class WsStringMessageServer implements WsStringMessager { + private static final XLogger LOGGER = XLoggerFactory.getXLogger(WsStringMessageServer.class); // Message service factory and the message service itself private final MessagingServiceFactory<String> factory = new MessagingServiceFactory<>(); private MessagingService<String> service = null; // The listener to use for reception of strings - private WSStringMessageListener wsStringMessageListener; + private WsStringMessageListener wsStringMessageListener; // Address of the server private final int port; @@ -57,7 +57,7 @@ public class WSStringMessageServer implements WSStringMessager { * * @param port the port of the server */ - public WSStringMessageServer(final int port) { + public WsStringMessageServer(final int port) { this.port = port; } @@ -69,19 +69,19 @@ public class WSStringMessageServer implements WSStringMessager { * apex. core.infrastructure.messaging. stringmessaging.WSStringMessageListener) */ @Override - public void start(final WSStringMessageListener newWsStringMessageListener) throws MessagingException { + public void start(final WsStringMessageListener newWsStringMessageListener) throws MessagingException { this.wsStringMessageListener = newWsStringMessageListener; LOGGER.entry("web socket event consumer server starting . . ."); try { - final InetAddress addrLan = MessagingUtils.getLocalHostLANAddress(); + final InetAddress addrLan = MessagingUtils.getLocalHostLanAddress(); LOGGER.debug("web socket string message server LAN address=" + addrLan.getHostAddress()); final InetAddress addr = InetAddress.getLocalHost(); LOGGER.debug("web socket string message server host address=" + addr.getHostAddress()); service = factory.createServer(new InetSocketAddress(port)); - service.addMessageListener(new WSStringMessageServerListener()); + service.addMessageListener(new WsStringMessageServerListener()); service.startConnection(); } catch (final Exception e) { @@ -115,14 +115,14 @@ public class WSStringMessageServer implements WSStringMessager { public void sendString(final String stringMessage) { service.send(stringMessage); if (LOGGER.isDebugEnabled()) { - LOGGER.debug("server sent message: " + stringMessage); + LOGGER.debug("server sent message: {}", stringMessage); } } /** * The listener for strings coming into the server. */ - private class WSStringMessageServerListener implements MessageListener<String> { + private class WsStringMessageServerListener implements MessageListener<String> { /* * (non-Javadoc) diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessager.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessager.java index a2781e932..2a731b0eb 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WSStringMessager.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/stringmessaging/WsStringMessager.java @@ -27,7 +27,7 @@ import org.onap.policy.apex.core.infrastructure.messaging.MessagingException; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public interface WSStringMessager { +public interface WsStringMessager { /** * Start the string message sender. @@ -35,7 +35,7 @@ public interface WSStringMessager { * @param wsStringMessageListener the listener to use for listening for string messages * @throws MessagingException the messaging exception */ - void start(WSStringMessageListener wsStringMessageListener) throws MessagingException; + void start(WsStringMessageListener wsStringMessageListener) throws MessagingException; /** * Stop the string messaging sender. diff --git a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java index 66edd2f1d..a501a66d6 100644 --- a/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java +++ b/core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/messaging/util/MessagingUtils.java @@ -43,7 +43,7 @@ public final class MessagingUtils { private static final int LOWEST_USER_PORT = 1024; /** - * Port number is an unsigned 16-bit integer, so maximum port is 65535 + * Port number is an unsigned 16-bit integer, so maximum port is 65535. */ private static final int MAX_PORT_RANGE = 65535; @@ -71,7 +71,7 @@ public final class MessagingUtils { return port; } LOGGER.debug("Port {} is not available", port); - throw new RuntimeException("could not allocate requested port: " + port); + throw new IllegalArgumentException("could not allocate requested port: " + port); } /** @@ -96,7 +96,7 @@ public final class MessagingUtils { LOGGER.debug("Port {} is not available", availablePort); availablePort++; } - throw new RuntimeException("could not find free available"); + throw new IllegalArgumentException("could not find free available"); } /** @@ -149,7 +149,7 @@ public final class MessagingUtils { * @return an Internet address * @throws UnknownHostException if the address of the local host cannot be found */ - public static InetAddress getLocalHostLANAddress() throws UnknownHostException { + public static InetAddress getLocalHostLanAddress() throws UnknownHostException { try { InetAddress candidateAddress = null; // Iterate all NICs (network interface cards)... @@ -225,8 +225,7 @@ public final class MessagingUtils { } finally { flushAndClose(oos, bytesOut); } - final byte[] bytes = bytesOut.toByteArray(); - return bytes; + return bytesOut.toByteArray(); } /** diff --git a/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/EndToEndStringMessagingTest.java b/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/EndToEndStringMessagingTest.java index 21c5ee984..c9d56ef2c 100644 --- a/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/EndToEndStringMessagingTest.java +++ b/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/EndToEndStringMessagingTest.java @@ -24,9 +24,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.Test; -import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageClient; -import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageListener; -import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageServer; +import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageClient; +import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageListener; +import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageServer; import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -40,22 +40,22 @@ public class EndToEndStringMessagingTest { // Logger for this class private static final XLogger logger = XLoggerFactory.getXLogger(EndToEndStringMessagingTest.class); - private WSStringMessageServer server; - private WSStringMessageClient client; + private WsStringMessageServer server; + private WsStringMessageClient client; private boolean finished = false; @Test public void testEndToEndMessaging() throws MessagingException { logger.debug("end to end messaging test starting . . ."); - server = new WSStringMessageServer(44441); + server = new WsStringMessageServer(44441); assertNotNull(server); - server.start(new WSStringServerMessageListener()); + server.start(new WsStringServerMessageListener()); try { - client = new WSStringMessageClient("localhost", 44441); + client = new WsStringMessageClient("localhost", 44441); assertNotNull(client); - client.start(new WSStringClientMessageListener()); + client.start(new WsStringClientMessageListener()); client.sendString("Hello, client here"); @@ -74,7 +74,7 @@ public class EndToEndStringMessagingTest { logger.debug("end to end messaging test finished"); } - private class WSStringServerMessageListener implements WSStringMessageListener { + private class WsStringServerMessageListener implements WsStringMessageListener { @Override public void receiveString(final String stringMessage) { logger.debug(stringMessage); @@ -83,7 +83,7 @@ public class EndToEndStringMessagingTest { } } - private class WSStringClientMessageListener implements WSStringMessageListener { + private class WsStringClientMessageListener implements WsStringMessageListener { @Override public void receiveString(final String stringMessage) { logger.debug(stringMessage); diff --git a/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/StringTestServer.java b/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/StringTestServer.java index 09fa62d59..30590c0c0 100644 --- a/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/StringTestServer.java +++ b/core/core-infrastructure/src/test/java/org/onap/policy/apex/core/infrastructure/messaging/StringTestServer.java @@ -22,18 +22,29 @@ package org.onap.policy.apex.core.infrastructure.messaging; import static org.junit.Assert.assertNotNull; -import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageListener; -import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageServer; +import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageListener; +import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageServer; import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; +// TODO: Auto-generated Javadoc +/** + * The Class StringTestServer. + */ public class StringTestServer { - private WSStringMessageServer server; + private WsStringMessageServer server; + /** + * Create a string test server. + * + * @param port port to use + * @param timeToLive time to live + * @throws MessagingException exceptions on messages + */ public StringTestServer(final int port, long timeToLive) throws MessagingException { System.out.println("StringTestServer starting on port " + port + " for " + timeToLive + " seconds . . ."); - server = new WSStringMessageServer(port); + server = new WsStringMessageServer(port); assertNotNull(server); - server.start(new WSStringServerMessageListener()); + server.start(new WsStringServerMessageListener()); System.out.println("StringTestServer started on port " + port + " for " + timeToLive + " seconds"); @@ -45,7 +56,23 @@ public class StringTestServer { System.out.println("StringTestServer completed"); } - private class WSStringServerMessageListener implements WSStringMessageListener { + /** + * The listener interface for receiving WSStringServerMessage events. The class that is interested in processing a + * WSStringServerMessage event implements this interface, and the object created with that class is registered with + * a component using the component's <code>addWSStringServerMessageListener</code> method. When the + * WSStringServerMessage event occurs, that object's appropriate method is invoked. + * + * @see WSStringServerMessageEvent + */ + private class WsStringServerMessageListener implements WsStringMessageListener { + + /* + * (non-Javadoc) + * + * @see + * org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageListener#receiveString(java + * .lang.String) + */ @Override public void receiveString(final String stringMessage) { System.out.println("Server received string \"" + stringMessage + "\""); @@ -53,6 +80,12 @@ public class StringTestServer { } } + /** + * The main method. + * + * @param args the arguments + * @throws MessagingException the messaging exception + */ public static void main(final String[] args) throws MessagingException { if (args.length != 2) { System.err.println("Usage: StringTestServer port timeToLive"); |