Refactor CommandTask classes to be immutable 01/4001/2
authorGary Wu <gary.i.wu@huawei.com>
Tue, 9 May 2017 06:04:31 +0000 (23:04 -0700)
committerGary Wu <gary.i.wu@huawei.com>
Tue, 16 May 2017 19:13:01 +0000 (12:13 -0700)
Refactor CommandTask and its subclasses to be immutable.
Also made CommandResponse immutable.

Change-Id: I9ea1b57fdff677b163c0fe9ad5d48f24b781a08f
Signed-off-by: Gary Wu <gary.i.wu@huawei.com>
appc-dispatcher/appc-command-executor/appc-command-executor-api/src/main/java/org/openecomp/appc/executor/objects/CommandResponse.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandExecutorImpl.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTask.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMCommandTask.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/LCMReadonlyCommandTask.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/openecomp/appc/executor/TestCommandExecutionTask.java
appc-dispatcher/appc-command-executor/appc-command-executor-core/src/test/java/org/openecomp/appc/executor/TestCommandExecutor.java

index c973fcd..8009d72 100644 (file)
@@ -26,13 +26,14 @@ import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
 
 public class CommandResponse {
 
-    private RuntimeContext runtimeContext;
+    private final RuntimeContext runtimeContext;
 
-    public RuntimeContext getRuntimeContext() {
-        return runtimeContext;
+    public CommandResponse(RuntimeContext runtimeContext) {
+        super();
+        this.runtimeContext = runtimeContext;
     }
 
-    public void setRuntimeContext(RuntimeContext runtimeContext) {
-        this.runtimeContext = runtimeContext;
+    public RuntimeContext getRuntimeContext() {
+        return runtimeContext;
     }
 }
index d9df1dd..fcc4f91 100644 (file)
@@ -93,8 +93,8 @@ public class CommandExecutorImpl implements CommandExecutor {
             logger.trace("Entering to enqueRequest with CommandRequest = "+ ObjectUtils.toString(request));
         }
         try {
-            CommandTask commandTask = getMessageExecutor(request.getRequestContext().getAction().name());
-            commandTask.setCommandRequest(request);
+            String action = request.getRequestContext().getAction().name();
+            CommandTask commandTask = executionTaskFactory.getExecutionTask(action, request);
             long remainingTTL = getRemainingTTL(request);
             executionQueueService.putMessage(commandTask,remainingTTL, TimeUnit.MILLISECONDS);
         } catch (Exception e) {
@@ -113,16 +113,5 @@ public class CommandExecutorImpl implements CommandExecutor {
         return ChronoUnit.MILLIS.between(Instant.now(), requestTimestamp.plusSeconds(ttl));
     }
 
-    private CommandTask getMessageExecutor(String action){
-        if (logger.isTraceEnabled()) {
-            logger.trace("Entering to getMessageExecutor with command = "+ action);
-        }
-        CommandTask executionTask = executionTaskFactory.getExecutionTask(action);
-        if (logger.isTraceEnabled()) {
-            logger.trace("Exiting from getMessageExecutor");
-        }
-        return executionTask;
-    }
-
 
 }
index f34746b..21a0086 100644 (file)
@@ -51,44 +51,30 @@ import org.slf4j.MDC;
 
 public abstract class CommandTask implements Runnable {
 
-    protected RequestHandler requestHandler;
-    protected WorkFlowManager workflowManager;
+    protected final RequestHandler requestHandler;
+    protected final WorkFlowManager workflowManager;
+    protected final RuntimeContext commandRequest;
 
-    private RuntimeContext commandRequest;
-
-    public RuntimeContext getCommandRequest() {
-        return commandRequest;
-    }
-
-    public void setCommandRequest(RuntimeContext commandRequest) {
+    protected CommandTask(RuntimeContext commandRequest, RequestHandler requestHandler,
+            WorkFlowManager workflowManager) {
+        super();
         this.commandRequest = commandRequest;
-    }
-
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class);
-
-    public void setWorkflowManager(WorkFlowManager workflowManager) {
-        this.workflowManager = workflowManager;
-    }
-
-    public void setRequestHandler(RequestHandler requestHandler) {
         this.requestHandler = requestHandler;
+        this.workflowManager = workflowManager;
     }
 
-    CommandTask(){
-    }
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(CommandTask.class);
 
-    public void onRequestCompletion(RuntimeContext request, CommandResponse response , boolean isAAIUpdated) {
+    public void onRequestCompletion(CommandResponse response, boolean isAAIUpdated) {
         logger.debug("Entry: onRequestCompletion()");
-        requestHandler.onRequestExecutionEnd(request, isAAIUpdated);
+        requestHandler.onRequestExecutionEnd(commandRequest, isAAIUpdated);
     }
 
-    public abstract void onRequestCompletion(RuntimeContext request, CommandResponse response);
+    public abstract void onRequestCompletion(CommandResponse response);
 
-    protected CommandResponse buildCommandResponse(RuntimeContext request, WorkflowResponse response) {
+    protected CommandResponse buildCommandResponse(WorkflowResponse response) {
 
-        CommandResponse commandResponse = new CommandResponse();
-        commandResponse.setRuntimeContext(request);
-        return commandResponse;
+        return new CommandResponse(commandRequest);
     }
 
 
@@ -114,8 +100,8 @@ public abstract class CommandTask implements Runnable {
 
         WorkflowResponse response = workflowManager.executeWorkflow(workflowRequest);
 
-        CommandResponse commandResponse =  buildCommandResponse(commandRequest, response);
-        this.onRequestCompletion(commandRequest,commandResponse);
+        CommandResponse commandResponse = buildCommandResponse(response);
+        this.onRequestCompletion(commandResponse);
     }
 
 }
index 610f0bc..e5ac79c 100644 (file)
@@ -22,6 +22,7 @@
 package org.openecomp.appc.executor.impl;
 
 
+import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
 import org.openecomp.appc.domainmodel.lcm.VNFOperation;
 import org.openecomp.appc.lifecyclemanager.LifecycleManager;
 import org.openecomp.appc.requesthandler.RequestHandler;
@@ -53,11 +54,11 @@ public class CommandTaskFactory {
     }
 
 
-    public synchronized CommandTask getExecutionTask(String action){
+    public synchronized CommandTask getExecutionTask(String action, RuntimeContext commandRequest){
         if (VNFOperation.Sync.toString().equals(action) || VNFOperation.Audit.toString().equals(action)){
-            return new LCMReadonlyCommandTask(requestHandler,workflowManager);
+            return new LCMReadonlyCommandTask(commandRequest, requestHandler,workflowManager);
         }else {
-            return new LCMCommandTask(requestHandler,workflowManager,
+            return new LCMCommandTask(commandRequest, requestHandler,workflowManager,
                     lifecyclemanager);
         }
     }
index 889bd25..ef25c67 100644 (file)
 package org.openecomp.appc.executor.impl;
 
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.appc.domainmodel.lcm.CommonHeader;
 import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
-import org.openecomp.appc.domainmodel.lcm.Status;
 import org.openecomp.appc.domainmodel.lcm.VNFOperation;
 import org.openecomp.appc.executor.UnstableVNFException;
 import org.openecomp.appc.executor.objects.CommandResponse;
@@ -39,8 +41,6 @@ import org.openecomp.appc.lifecyclemanager.objects.VNFOperationOutcome;
 import org.openecomp.appc.requesthandler.RequestHandler;
 import org.openecomp.appc.workflow.WorkFlowManager;
 import org.openecomp.appc.workflow.objects.WorkflowResponse;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
 import org.openecomp.sdnc.sli.SvcLogicContext;
 import org.openecomp.sdnc.sli.SvcLogicException;
 import org.openecomp.sdnc.sli.SvcLogicResource;
@@ -49,31 +49,22 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
 
-import java.util.HashMap;
-import java.util.Map;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
 
 
 public class LCMCommandTask extends CommandTask {
 
-       private AAIService aaiService;
-       private LifecycleManager lifecyclemanager;
+       private final AAIService aaiService;
+       private final LifecycleManager lifecyclemanager;
 
        private static final EELFLogger logger = EELFManager.getInstance().getLogger(LCMCommandTask.class);
 
-       public LCMCommandTask(RequestHandler requestHandler, WorkFlowManager workflowManager,
-                                                 LifecycleManager lifecyclemanager){
-               setRequestHandler(requestHandler);
-               setWorkflowManager(workflowManager);
-               setLifecyclemanager(lifecyclemanager);
-               getAAIservice();
-       }
-
-       public void setLifecyclemanager(LifecycleManager lifecyclemanager) {
-               this.lifecyclemanager = lifecyclemanager;
-       }
+    public LCMCommandTask(RuntimeContext commandRequest, RequestHandler requestHandler, WorkFlowManager workflowManager,
+            LifecycleManager lifecyclemanager) {
+        super(commandRequest, requestHandler, workflowManager);
+        this.lifecyclemanager = lifecyclemanager;
 
-
-       private void getAAIservice() {
                BundleContext bctx = FrameworkUtil.getBundle(AAIService.class).getBundleContext();
                // Get AAIadapter reference
                ServiceReference sref = bctx.getServiceReference(AAIService.class.getName());
@@ -84,15 +75,15 @@ public class LCMCommandTask extends CommandTask {
                } else {
                        logger.info("AAIService error from bundlecontext");
                        logger.warn("Cannot find service reference for org.openecomp.sdnc.sli.aai.AAIService");
-
+                       aaiService = null;
                }
        }
 
 
        @Override
-       public void onRequestCompletion(RuntimeContext request, CommandResponse response) {
-
-               boolean isAAIUpdated = false;
+       public void onRequestCompletion(CommandResponse response) {
+        final RuntimeContext request = commandRequest;
+        boolean isAAIUpdated = false;
                try {
 
                        final int statusCode = request.getResponseContext().getStatus().getCode();
@@ -118,14 +109,14 @@ public class LCMCommandTask extends CommandTask {
                        throw new RuntimeException(e1);
                }
                finally {
-                       super.onRequestCompletion(request, response , isAAIUpdated);
+                       super.onRequestCompletion(response, isAAIUpdated);
                }
        }
 
        @Override
        public void run() {
-               RuntimeContext request = getCommandRequest();
-               boolean isAAIUpdated;
+        final RuntimeContext request = commandRequest;
+        boolean isAAIUpdated = false;
                final String vnfId = request.getVnfContext().getId();
                final String vnfType = request.getVnfContext().getType();
                try {
@@ -169,8 +160,8 @@ public class LCMCommandTask extends CommandTask {
                        logger.error(errorMsg);
                        WorkflowResponse response = new WorkflowResponse();
                        response.setResponseContext(request.getResponseContext());
-                       CommandResponse commandResponse = super.buildCommandResponse(request, response);
-                       this.onRequestCompletion(request,commandResponse);
+                       CommandResponse commandResponse = super.buildCommandResponse(response);
+                       this.onRequestCompletion(commandResponse);
                }
        }
 
index a351c4d..dc61673 100644 (file)
@@ -25,7 +25,6 @@ package org.openecomp.appc.executor.impl;
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.appc.domainmodel.lcm.CommonHeader;
 import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
-import org.openecomp.appc.domainmodel.lcm.Status;
 import org.openecomp.appc.executor.UnstableVNFException;
 import org.openecomp.appc.executor.objects.CommandResponse;
 import org.openecomp.appc.executor.objects.LCMCommandStatus;
@@ -33,6 +32,7 @@ import org.openecomp.appc.executor.objects.Params;
 import org.openecomp.appc.executor.objects.UniqueRequestIdentifier;
 import org.openecomp.appc.requesthandler.RequestHandler;
 import org.openecomp.appc.workflow.WorkFlowManager;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -40,21 +40,19 @@ public class LCMReadonlyCommandTask extends CommandTask  {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(LCMReadonlyCommandTask.class);
 
-    public LCMReadonlyCommandTask(RequestHandler requestHandler, WorkFlowManager workflowManager){
-
-        setRequestHandler(requestHandler);
-        setWorkflowManager(workflowManager);
+    public LCMReadonlyCommandTask(RuntimeContext commandRequest, RequestHandler requestHandler,
+            WorkFlowManager workflowManager) {
+        super(commandRequest, requestHandler, workflowManager);
     }
 
-
     @Override
-    public void onRequestCompletion(RuntimeContext request, CommandResponse response) {
-        super.onRequestCompletion(request, response, true);
+    public void onRequestCompletion(CommandResponse response) {
+        super.onRequestCompletion(response, true);
     }
 
     @Override
     public void run() {
-        RuntimeContext request = getCommandRequest();
+        RuntimeContext request = commandRequest;
         final CommonHeader commonHeader = request.getRequestContext().getCommonHeader();
         final boolean forceFlag = commonHeader.getFlags().isForce();
         UniqueRequestIdentifier requestIdentifier = new UniqueRequestIdentifier(commonHeader.getOriginatorId(), commonHeader.getRequestId(), commonHeader.getSubRequestId());
index 7bf9f7c..f2c3099 100644 (file)
@@ -72,8 +72,6 @@ public class TestCommandExecutionTask {
        private static final String TTL_FLAG= "TTL";
        private static final String API_VERSION= "2.0.0";
        private static final String ORIGINATOR_ID= "1";
-       private LCMCommandTask executionTask;
-       private LCMReadonlyCommandTask LCMReadonlyCommandTask;
        private CommandTaskFactory factory ;
 
        private RequestHandler requestHandler;
@@ -119,8 +117,6 @@ public class TestCommandExecutionTask {
                workflowManager = Mockito.mock(WorkFlowManager.class);
                lifecyclemanager = Mockito.mock(LifecycleManager.class );
 
-               executionTask = new LCMCommandTask(requestHandler,workflowManager,lifecyclemanager);
-               LCMReadonlyCommandTask = new LCMReadonlyCommandTask(requestHandler,workflowManager);
                factory = new CommandTaskFactory();
                factory.setLifecyclemanager(lifecyclemanager);
                factory.setWorkflowManager(workflowManager);
@@ -131,9 +127,9 @@ public class TestCommandExecutionTask {
 
        @Test
        public void testFactory(){
-               CommandTask task = factory.getExecutionTask("Configure");
+               CommandTask task = factory.getExecutionTask("Configure", null);
                assertEquals(LCMCommandTask.class,task.getClass() );
-               task = factory.getExecutionTask("Sync");
+               task = factory.getExecutionTask("Sync", null);
                assertEquals(LCMReadonlyCommandTask.class,task.getClass() );
 
        }
@@ -145,35 +141,34 @@ public class TestCommandExecutionTask {
                Mockito.doNothing().when(requestHandler).onRequestTTLEnd((RuntimeContext) anyObject(),anyBoolean());
                RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Configure, "1", "");
                CommandResponse response = getCommandResponse(VNFOperation.Configure, true, "11", "","1");
-               executionTask.onRequestCompletion(request, response);
+        LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager);
+               executionTask.onRequestCompletion(response);
        }
 
        @Test
        public void testRunGetConfig(){
-               RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
-               LCMReadonlyCommandTask.setCommandRequest(request);
-               LCMReadonlyCommandTask.run();
+                   RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
+        LCMReadonlyCommandTask readonlyCommandTask = new LCMReadonlyCommandTask(request, requestHandler,workflowManager);
+               readonlyCommandTask.run();
        }
 
        @Test
        public void testRun(){
-               RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
-               executionTask.setCommandRequest(request);
+           RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
+               LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager);
                executionTask.run();
        }
 
        @Test
        public void testRunNegative(){
-               RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
-               executionTask.setCommandRequest(request);
+           RuntimeContext request = pouplateCommandExecutorInput("FIREWALL", 30, "1.0", Instant.now(), API_VERSION, "11", ORIGINATOR_ID, "", VNFOperation.Sync, "1", "");
+        LCMCommandTask executionTask = new LCMCommandTask(request, requestHandler,workflowManager,lifecyclemanager);
                executionTask.run();
        }
 
 
        CommandResponse getCommandResponse(VNFOperation action , boolean success, String responseId, String payload, String vnfId){
-               CommandResponse commandResponse = new CommandResponse();
                RuntimeContext runtimeContext = new RuntimeContext();
-               commandResponse.setRuntimeContext(runtimeContext);
                ResponseContext responseContext = new ResponseContext();
                runtimeContext.setResponseContext(responseContext);
                RequestContext requestContext = new RequestContext();
@@ -194,7 +189,7 @@ public class TestCommandExecutionTask {
                responseContext.setPayload(payload);
                commonHeader.setTimestamp(Instant.now());
                vnfContext.setId(vnfId);
-               return commandResponse;
+        return new CommandResponse(runtimeContext);
        }
 
 
index 7e972b7..cd33e8b 100644 (file)
@@ -80,8 +80,8 @@ public class TestCommandExecutor {
                commandExecutor.setExecutionQueueService(executionQueueService);
                LCMCommandTask lcmCommandTask = Mockito.mock(LCMCommandTask.class);
                LCMReadonlyCommandTask LCMReadonlyCommandTask = Mockito.mock(LCMReadonlyCommandTask.class);
-               Mockito.doReturn(lcmCommandTask).when(executionTaskFactory).getExecutionTask("Configure");
-               Mockito.doReturn(LCMReadonlyCommandTask).when(executionTaskFactory).getExecutionTask("Sync");
+               Mockito.doReturn(lcmCommandTask).when(executionTaskFactory).getExecutionTask("Configure", null);
+               Mockito.doReturn(LCMReadonlyCommandTask).when(executionTaskFactory).getExecutionTask("Sync", null);
 //             Mockito.when(executionQueueService.putMessage((Runnable) Mockito.anyObject(),Mockito.anyLong(),(TimeUnit)Mockito.anyObject())).thenReturn(true);
 
        }