converter supports rest service task 27/26027/1
authorLvbo163 <lv.bo163@zte.com.cn>
Mon, 11 Dec 2017 10:53:08 +0000 (18:53 +0800)
committerLvbo163 <lv.bo163@zte.com.cn>
Mon, 11 Dec 2017 10:53:08 +0000 (18:53 +0800)
converter supports extended bpmn element rest service task.

Issue-ID: SDC-747

Change-Id: Id468269bfc7eab3ed57a7da6d1d2e58043fa088c
Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/model/RestServiceTask.java [new file with mode: 0644]
sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/Bpmn4ToscaJsonParser.java
sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/JsonKeys.java
sdc-workflow-designer-server/src/main/resources/bpmn-templates/bpmn_element_restTask_template.xml [new file with mode: 0644]

diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/model/RestServiceTask.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/model/RestServiceTask.java
new file mode 100644 (file)
index 0000000..6110132
--- /dev/null
@@ -0,0 +1,95 @@
+/**\r
+ * Copyright (c) 2017 ZTE Corporation.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the Apache License, Version 2.0\r
+ * and the Eclipse Public License v1.0 which both accompany this distribution,\r
+ * and are available at http://www.eclipse.org/legal/epl-v10.html\r
+ * and http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Contributors:\r
+ *     ZTE - initial API and implementation and/or initial documentation\r
+ */\r
+package org.onap.sdc.workflowdesigner.model;\r
+\r
+import java.util.List;\r
+\r
+import org.onap.sdc.workflowdesigner.config.Config;\r
+\r
+public class RestServiceTask extends ServiceTask {\r
+       public static String handler = Config.PROPERTIES.getProperty(Config.HANDLER_ClASS);\r
+       \r
+       private String restConfigId;\r
+       public String getRestConfigId() {\r
+               return restConfigId;\r
+       }\r
+       public void setRestConfigId(String restConfigId) {\r
+               this.restConfigId = restConfigId;\r
+       }\r
+       private List<String> produces;\r
+       private List<String> consumes;\r
+       \r
+       \r
+       private List<Parameter> parameters;\r
+       private String url;\r
+       private String serviceName;\r
+       private String serviceVersion;\r
+       private String path;\r
+       private String method;\r
+       \r
+       public String getUrl() {\r
+               return url;\r
+       }\r
+       public void setUrl(String url) {\r
+               this.url = url;\r
+       }\r
+       \r
+       public String getMethod() {\r
+               return method;\r
+       }\r
+       \r
+       public static String getHandler() {\r
+               return handler;\r
+       }\r
+       public static void setHandler(String handler) {\r
+               RestServiceTask.handler = handler;\r
+       }\r
+       public void setMethod(String method) {\r
+               this.method = method;\r
+       }\r
+       public List<String> getProduces() {\r
+               return produces;\r
+       }\r
+       public void setProduces(List<String> produces) {\r
+               this.produces = produces;\r
+       }\r
+       public List<String> getConsumes() {\r
+               return consumes;\r
+       }\r
+       public void setConsumes(List<String> consumes) {\r
+               this.consumes = consumes;\r
+       }\r
+       public List<Parameter> getParameters() {\r
+               return parameters;\r
+       }\r
+       public void setParameters(List<Parameter> parameters) {\r
+               this.parameters = parameters;\r
+       }\r
+       public String getServiceName() {\r
+               return serviceName;\r
+       }\r
+       public void setServiceName(String serviceName) {\r
+               this.serviceName = serviceName;\r
+       }\r
+       public String getServiceVersion() {\r
+               return serviceVersion;\r
+       }\r
+       public void setServiceVersion(String serviceVersion) {\r
+               this.serviceVersion = serviceVersion;\r
+       }\r
+       public String getPath() {\r
+               return path;\r
+       }\r
+       public void setPath(String path) {\r
+               this.path = path;\r
+       }\r
+}\r
index b103f91..4041a9a 100644 (file)
@@ -15,8 +15,10 @@ import java.io.IOException;
 import java.net.MalformedURLException;\r
 import java.net.URI;\r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.List;\r
+import java.util.Map;\r
 \r
 import org.onap.sdc.workflowdesigner.model.DataObject;\r
 import org.onap.sdc.workflowdesigner.model.Element;\r
@@ -26,6 +28,7 @@ import org.onap.sdc.workflowdesigner.model.IntermediateCatchEvent;
 import org.onap.sdc.workflowdesigner.model.ParallelGateway;\r
 import org.onap.sdc.workflowdesigner.model.Parameter;\r
 import org.onap.sdc.workflowdesigner.model.Process;\r
+import org.onap.sdc.workflowdesigner.model.RestServiceTask;\r
 import org.onap.sdc.workflowdesigner.model.ScriptTask;\r
 import org.onap.sdc.workflowdesigner.model.SequenceFlow;\r
 import org.onap.sdc.workflowdesigner.model.ServiceTask;\r
@@ -45,6 +48,8 @@ public class Bpmn4ToscaJsonParser {
     private static Logger log = LoggerFactory.getLogger(Bpmn4ToscaJsonParser.class);\r
 \r
     private static ObjectMapper MAPPER = new ObjectMapper();\r
+    \r
+    private Map<String, JsonNode> restConfigMap = new HashMap<String, JsonNode>();\r
 \r
     static {\r
         MAPPER.enable(SerializationFeature.INDENT_OUTPUT);\r
@@ -62,6 +67,8 @@ public class Bpmn4ToscaJsonParser {
         if (nodes == null) {\r
             return process;\r
         }\r
+        \r
+        this.loadConfigs(rootNode.get(JsonKeys.CONFIGS));\r
 \r
         Iterator<JsonNode> iter = nodes.iterator();\r
         while (iter.hasNext()) {\r
@@ -100,6 +107,27 @@ public class Bpmn4ToscaJsonParser {
 \r
         return dataObjects;\r
     }\r
+    \r
+    private void loadConfigs(JsonNode config) {\r
+        if(config == null) {\r
+            return;\r
+        }\r
+        loadRestConfigs(config.get(JsonKeys.REST_CONFIGS));\r
+    }\r
+    \r
+    private void loadRestConfigs(JsonNode restConfigs) {\r
+        if(restConfigs == null) {\r
+            return;\r
+        }\r
+        \r
+        Iterator<JsonNode> iter = restConfigs.iterator();\r
+        while (iter.hasNext()) {\r
+            JsonNode restConfig = (JsonNode) iter.next();\r
+\r
+            String configId = getValueFromJsonNode(restConfig, JsonKeys.ID); \r
+            restConfigMap.put(configId, restConfig);\r
+        }\r
+    }\r
 \r
     private List<SequenceFlow> getSequenceFlows(JsonNode jsonNode) {\r
         List<SequenceFlow> flowList = new ArrayList<SequenceFlow>();\r
@@ -141,6 +169,9 @@ public class Bpmn4ToscaJsonParser {
         case "serviceTask":\r
             element = MAPPER.readValue(jsonObject, ServiceTask.class);\r
             break;\r
+        case "restTask":\r
+            element = this.createRestServiceTask(jsonObject);\r
+            break;\r
         case "scriptTask":\r
             element = MAPPER.readValue(jsonObject, ScriptTask.class);\r
             break;\r
@@ -157,6 +188,28 @@ public class Bpmn4ToscaJsonParser {
 \r
         return element;\r
     }\r
+    \r
+    private RestServiceTask createRestServiceTask(String jsonObject) throws JsonParseException, JsonMappingException, IOException {\r
+        RestServiceTask restServiceTask = MAPPER.readValue(jsonObject, RestServiceTask.class);\r
+        \r
+        // add baseUrl to relative url\r
+        String restConfigId = restServiceTask.getRestConfigId();\r
+        JsonNode restConfig = this.restConfigMap.get(restConfigId);\r
+        \r
+        if(restConfig != null) { // while create a new rest task and didnot set method, the restconfig info may be null\r
+            restServiceTask.setUrl(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_URL));\r
+            restServiceTask.setServiceName(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_NAME));\r
+            restServiceTask.setServiceVersion(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_VERSION));\r
+        }\r
+        \r
+        for(Parameter parameter : restServiceTask.getParameters()) {\r
+            if("body".equals(parameter.getPosition())) {\r
+                parameter.setValueSource(null);\r
+            }\r
+        }\r
+        \r
+        return restServiceTask;\r
+    }\r
 \r
     private String getValueFromJsonNode(JsonNode jsonNode, String key) {\r
         return jsonNode.get(key) == null ? null : jsonNode.get(key).asText();\r
index da97a34..8c7c62f 100644 (file)
@@ -29,4 +29,10 @@ public class JsonKeys {
     public static final String CONDITION = "condition";\r
     \r
     \r
+ // microservice info\r
+    public static final String MICROSERVICE_URL = "url";\r
+    public static final String MICROSERVICE_NAME = "name";\r
+    public static final String MICROSERVICE_VERSION = "version";\r
+    \r
+    public static final String ID = "id";\r
 }\r
diff --git a/sdc-workflow-designer-server/src/main/resources/bpmn-templates/bpmn_element_restTask_template.xml b/sdc-workflow-designer-server/src/main/resources/bpmn-templates/bpmn_element_restTask_template.xml
new file mode 100644 (file)
index 0000000..7f26177
--- /dev/null
@@ -0,0 +1,33 @@
+\r
+<serviceTask id="${element.id}" name="${element.name}" activiti:class="${element.handler}">\r
+       <extensionElements>\r
+               <activiti:field name="url">\r
+                       <activiti:string><![CDATA[$!{element.url}]]></activiti:string>\r
+               </activiti:field>\r
+               <activiti:field name="name">\r
+                       <activiti:string><![CDATA[$!{element.serviceName}]]></activiti:string>\r
+               </activiti:field>\r
+               <activiti:field name="version">\r
+                       <activiti:string><![CDATA[$!{element.serviceVersion}]]></activiti:string>\r
+               </activiti:field>\r
+               <activiti:field name="path">\r
+                       <activiti:string><![CDATA[$!{element.path}]]></activiti:string>\r
+               </activiti:field>\r
+               <activiti:field name="method">\r
+                       <activiti:string><![CDATA[$!{element.method}]]></activiti:string>\r
+               </activiti:field>\r
+               #if (${element.produces})\r
+               <activiti:field name="accept">\r
+                       <activiti:string><![CDATA[${element.produces}]]></activiti:string>\r
+               </activiti:field>\r
+               #end\r
+               #if (${element.consumes})\r
+               <activiti:field name="contentType">\r
+                       <activiti:string><![CDATA[${element.consumes}]]></activiti:string>\r
+               </activiti:field>\r
+               #end\r
+               <activiti:field name="parameters">\r
+                       <activiti:string><![CDATA[${element.parameters}]]></activiti:string>\r
+               </activiti:field>\r
+       </extensionElements>\r
+</serviceTask>\r