1710 Rebase - Second Attempt
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / openecomp / mso / bpmn / common / workflow / service / WorkflowAsyncResource.java
index 1bd1dfd..382d2b7 100644 (file)
@@ -21,8 +21,6 @@ package org.openecomp.mso.bpmn.common.workflow.service;
 \r
 import java.util.HashMap;\r
 import java.util.Map;\r
-import java.util.Objects;\r
-import java.util.Optional;\r
 import java.util.UUID;\r
 \r
 import javax.ws.rs.Consumes;\r
@@ -33,6 +31,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;\r
 \r
 import org.camunda.bpm.engine.ProcessEngineServices;\r
+import org.camunda.bpm.engine.ProcessEngines;\r
 import org.camunda.bpm.engine.RuntimeService;\r
 import org.camunda.bpm.engine.runtime.ProcessInstance;\r
 import org.camunda.bpm.engine.variable.impl.VariableMapImpl;\r
@@ -53,15 +52,15 @@ import org.slf4j.MDC;
  * For asynchronous process - the activity may send a acknowledgement response and then proceed further on executing the process\r
  */\r
 @Path("/async")\r
-public abstract class WorkflowAsyncResource {
+public class WorkflowAsyncResource {\r
 \r
-       private static final WorkflowContextHolder contextHolder = WorkflowContextHolder.getInstance();\r
-       protected Optional<ProcessEngineServices> pes4junit = Optional.empty();\r
+       private WorkflowContextHolder contextHolder = WorkflowContextHolder.getInstance();\r
+       protected ProcessEngineServices pes4junit = null;\r
 \r
-       private final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);\r
+       private MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);\r
 \r
        private static final String logMarker = "[WRKFLOW-RESOURCE]";\r
-       private static final long DEFAULT_WAIT_TIME = 30000;    //default wait time\r
+       private static final int DEFAULT_WAIT_TIME = 30000;     //default wait time\r
        \r
        /**\r
         * Asynchronous JAX-RS method that starts a process instance.\r
@@ -76,6 +75,7 @@ public abstract class WorkflowAsyncResource {
        public void startProcessInstanceByKey(final @Suspend(180000) AsynchronousResponse asyncResponse,\r
                        @PathParam("processKey") String processKey, VariableMapImpl variableMap) {\r
        \r
+               WorkflowResponse response = new WorkflowResponse();\r
                long startTime = System.currentTimeMillis();\r
                Map<String, Object> inputVariables = null;\r
                WorkflowContext workflowContext = null;\r
@@ -107,7 +107,6 @@ public abstract class WorkflowAsyncResource {
                        }\r
 \r
                        msoLogger.debug(logMarker + "Exception in startProcessInstance by key");\r
-               WorkflowResponse response = new WorkflowResponse();\r
                        response.setMessage("Fail" );\r
                        response.setResponse("Error occurred while executing the process: " + e);\r
                        response.setMessageCode(500);\r
@@ -206,28 +205,29 @@ public abstract class WorkflowAsyncResource {
                return contextHolder.processCallback(processKey, processInstanceId, requestId, callbackResponse);\r
        }\r
        \r
-    private static String getOrCreate(Map<String, Object> inputVariables, String key) {\r
-        String value = Objects.toString(inputVariables.get(key), null);\r
-        if (value == null) {\r
-            value = UUID.randomUUID().toString();\r
-            inputVariables.put(key, value);\r
-        }\r
-        return value;\r
-    }\r
-       \r
        // Note: the business key is used to identify the process in unit tests\r
-       private static String getBusinessKey(Map<String, Object> inputVariables) {\r
-        return getOrCreate(inputVariables, "mso-business-key");\r
+       private String getBusinessKey(Map<String, Object> inputVariables) {\r
+               Object businessKey = inputVariables.get("mso-business-key");\r
+               if (businessKey == null ) {\r
+                       businessKey = UUID.randomUUID().toString();\r
+                       inputVariables.put("mso-business-key",  businessKey);\r
+               }\r
+               return businessKey.toString();\r
        }\r
 \r
-       private static String getRequestId(Map<String, Object> inputVariables) {\r
-        return getOrCreate(inputVariables, "mso-request-id");\r
+       private String getRequestId(Map<String, Object> inputVariables) {\r
+               Object requestId = inputVariables.get("mso-request-id");\r
+               if (requestId == null ) {\r
+                       requestId = UUID.randomUUID().toString();\r
+                       inputVariables.put("mso-request-id",  requestId);\r
+               } \r
+               return requestId.toString();\r
        }\r
 \r
        private long getWaitTime(Map<String, Object> inputVariables)\r
        {\r
-           \r
-               String timeout = Objects.toString(inputVariables.get("mso-service-request-timeout"), null);\r
+               String timeout = inputVariables.get("mso-service-request-timeout") == null\r
+                               ? null : inputVariables.get("mso-service-request-timeout").toString();          \r
 \r
                if (timeout != null) {\r
                        try {\r
@@ -252,7 +252,7 @@ public abstract class WorkflowAsyncResource {
                \r
        }\r
 \r
-       private static void setLogContext(String processKey,\r
+       private void setLogContext(String processKey,\r
                        Map<String, Object> inputVariables) {\r
                MsoLogger.setServiceName("MSO." + processKey);\r
                if (inputVariables != null) {\r
@@ -260,24 +260,32 @@ public abstract class WorkflowAsyncResource {
                }\r
        }\r
 \r
-       private static String getKeyValueFromInputVariables(Map<String,Object> inputVariables, String key) {\r
+       private String getKeyValueFromInputVariables(Map<String,Object> inputVariables, String key) {\r
                if (inputVariables == null) return "";\r
-               return Objects.toString(inputVariables.get(key), "N/A");\r
+               Object requestId = inputVariables.get(key);\r
+               if (requestId != null) return requestId.toString();\r
+               return "N/A";\r
        }\r
 \r
        private boolean isProcessEnded(String processInstanceId) {\r
                ProcessEngineServices pes = getProcessEngineServices();\r
-               return pes.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult() == null;\r
+               return pes.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult() == null ? true : false ;                \r
        }\r
        \r
        \r
-       protected abstract ProcessEngineServices getProcessEngineServices();
+       protected ProcessEngineServices getProcessEngineServices() {\r
+               if (pes4junit == null) {\r
+                       return ProcessEngines.getDefaultProcessEngine();\r
+               } else {\r
+                       return pes4junit;\r
+               }\r
+       }\r
        \r
        public void setProcessEngineServices4junit(ProcessEngineServices pes) {\r
-               pes4junit = Optional.ofNullable(pes);\r
+               pes4junit = pes;\r
        }\r
 \r
-       private static Map<String, Object> getInputVariables(VariableMapImpl variableMap) {\r
+       private Map<String, Object> getInputVariables(VariableMapImpl variableMap) {\r
                Map<String, Object> inputVariables = new HashMap<String,Object>();\r
                @SuppressWarnings("unchecked")\r
                Map<String, Object> vMap = (Map<String, Object>) variableMap.get("variables");\r