Added HandleOrchestrationTask flow 03/103103/1
authorHarry Huang <huangxiangyu5@huawei.com>
Thu, 5 Mar 2020 08:34:35 +0000 (16:34 +0800)
committerHarry Huang <huangxiangyu5@huawei.com>
Thu, 5 Mar 2020 08:34:35 +0000 (16:34 +0800)
Issue-ID: SO-2368

Change-Id: I1160fd3b312992c841b60d09515407f3d3a3e83a
Signed-off-by: Harry Huang <huangxiangyu5@huawei.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/HandleOrchestrationTask.groovy [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/HandleOrchestrationTask.bpmn [new file with mode: 0644]

diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/HandleOrchestrationTask.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/HandleOrchestrationTask.groovy
new file mode 100644 (file)
index 0000000..89490ff
--- /dev/null
@@ -0,0 +1,127 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.scripts
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.onap.so.db.request.beans.OrchestrationTask
+
+import static org.apache.commons.lang3.StringUtils.*
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.onap.so.bpmn.core.UrnPropertiesReader
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+
+class HandleOrchestrationTask extends AbstractServiceTaskProcessor {
+    private static final Logger logger = LoggerFactory.getLogger(HandleOrchestrationTask.class)
+
+    ExceptionUtil exceptionUtil = new ExceptionUtil()
+    def supportedMethod = ["GET", "POST", "PUT"]
+    def validStatus = [200, 201]
+
+    @Override
+    public void preProcessRequest(DelegateExecution execution) {
+        logger.debug("Start preProcessRequest")
+        String method = execution.getVariable("method")
+        if (!supportedMethod.contains(method)) {
+            String msg = "Method: " + method + " is not supported"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+
+        String taskId = execution.getVariable("taskId")
+        if (isBlank(taskId)) {
+            String msg = "taskId is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+
+        def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.requestDb.endpoint",execution)
+        def orchestrationTaskEndpoint = dbAdapterEndpoint + "/orchestrationTask/"
+        if (!"POST".equals(method)) {
+            orchestrationTaskEndpoint = orchestrationTaskEndpoint + taskId
+        }
+        execution.setVariable("url", orchestrationTaskEndpoint)
+        logger.debug("DB Adapter Endpoint is: " + orchestrationTaskEndpoint)
+        def dbAdapterAuth = UrnPropertiesReader.getVariable("mso.adapters.requestDb.auth")
+        Map<String, String> headerMap = [:]
+        headerMap.put("content-type", "application/json")
+        headerMap.put("Authorization", dbAdapterAuth)
+        execution.setVariable("headerMap", headerMap)
+        logger.debug("DB Adapter Header is: " + headerMap)
+
+        String requestId = execution.getVariable("requestId")
+        if (("POST".equals(method) || "PUT".equals(method)) && isBlank(requestId)) {
+            String msg = "requestId is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        String taskName = execution.getVariable("taskName")
+        if (("POST".equals(method) || "PUT".equals(method)) && isBlank(taskName)) {
+            String msg = "task name is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        String taskStatus = execution.getVariable("taskStatus")
+        if (("POST".equals(method) || "PUT".equals(method)) && isBlank(taskStatus)) {
+            String msg = "task status is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        String isManual = execution.getVariable("isManual")
+        if (("POST".equals(method) || "PUT".equals(method)) && isBlank(isManual)) {
+            String msg = "isManual is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        String paramJson = execution.getVariable("paramJson")
+
+        String payload = ""
+        if ("POST".equals(method) || "PUT".equals(method)) {
+            OrchestrationTask task = new OrchestrationTask()
+            task.setTaskId(taskId)
+            task.setRequestId(requestId)
+            task.setName(taskName)
+            task.setStatus(taskStatus)
+            task.setIsManual(isManual)
+            task.setParams(paramJson)
+            ObjectMapper objectMapper = new ObjectMapper()
+            payload = objectMapper.writeValueAsString(task)
+            logger.debug("Outgoing payload is \n" + payload)
+        }
+        execution.setVariable("payload", payload)
+        logger.debug("End preProcessRequest")
+    }
+
+    public void postProcess(DelegateExecution execution) {
+        Integer statusCode = execution.getVariable("statusCode")
+        logger.debug("statusCode: " + statusCode)
+        String response = execution.getVariable("response")
+        logger.debug("response: " + response)
+        if (!validStatus.contains(statusCode)) {
+            String msg = "Error in sending orchestrationTask request. \nstatusCode: " + statusCode + "\nresponse: " + response
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+    }
+}
+
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/HandleOrchestrationTask.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/HandleOrchestrationTask.bpmn
new file mode 100644 (file)
index 0000000..09a14be
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1gbzu9i" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
+  <bpmn:process id="HandleOrchestrationTask" name="HandleOrchestrationTask" isExecutable="true">
+    <bpmn:startEvent id="StartEvent_1" name="Start">
+      <bpmn:outgoing>SequenceFlow_0lbtmuu</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:scriptTask id="ScriptTask_0r0a9ga" name="Preprocess Request" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0lbtmuu</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0uzjpd6</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def hot = new HandleOrchestrationTask()
+hot.preProcessRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:serviceTask id="ServiceTask_1iat8g5" name="Send Orchestration Task Request">
+      <bpmn:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${url}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:script scriptFormat="groovy">execution.getVariable("headerMap")</camunda:script>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${payload}</camunda:inputParameter>
+            <camunda:inputParameter name="method">${method}</camunda:inputParameter>
+            <camunda:outputParameter name="statusCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="response">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0uzjpd6</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_06rrzml</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:scriptTask id="ScriptTask_119zm52" name="Post Process" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_06rrzml</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1qthzdo</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def hot = new HandleOrchestrationTask()
+hot.postProcess(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0uzjpd6" sourceRef="ScriptTask_0r0a9ga" targetRef="ServiceTask_1iat8g5" />
+    <bpmn:sequenceFlow id="SequenceFlow_06rrzml" sourceRef="ServiceTask_1iat8g5" targetRef="ScriptTask_119zm52" />
+    <bpmn:sequenceFlow id="SequenceFlow_0lbtmuu" sourceRef="StartEvent_1" targetRef="ScriptTask_0r0a9ga" />
+    <bpmn:endEvent id="EndEvent_18t5h42" name="End">
+      <bpmn:incoming>SequenceFlow_1qthzdo</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_1qthzdo" sourceRef="ScriptTask_119zm52" targetRef="EndEvent_18t5h42" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="HandleOrchestrationTask">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="179" y="103" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="185" y="146" width="25" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0r0a9ga_di" bpmnElement="ScriptTask_0r0a9ga">
+        <dc:Bounds x="284" y="81" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1iat8g5_di" bpmnElement="ServiceTask_1iat8g5">
+        <dc:Bounds x="466" y="81" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_119zm52_di" bpmnElement="ScriptTask_119zm52">
+        <dc:Bounds x="644" y="81" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0uzjpd6_di" bpmnElement="SequenceFlow_0uzjpd6">
+        <di:waypoint x="384" y="121" />
+        <di:waypoint x="466" y="121" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_06rrzml_di" bpmnElement="SequenceFlow_06rrzml">
+        <di:waypoint x="566" y="121" />
+        <di:waypoint x="644" y="121" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0lbtmuu_di" bpmnElement="SequenceFlow_0lbtmuu">
+        <di:waypoint x="215" y="121" />
+        <di:waypoint x="284" y="121" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="EndEvent_18t5h42_di" bpmnElement="EndEvent_18t5h42">
+        <dc:Bounds x="820" y="103" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="828" y="146" width="20" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1qthzdo_di" bpmnElement="SequenceFlow_1qthzdo">
+        <di:waypoint x="744" y="121" />
+        <di:waypoint x="820" y="121" />
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
+