converter supports rest service task

converter supports extended bpmn element rest service task.

Issue-ID: SDC-747

Change-Id: Id468269bfc7eab3ed57a7da6d1d2e58043fa088c
Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
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
index 0000000..6110132
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/model/RestServiceTask.java
@@ -0,0 +1,95 @@
+/**

+ * Copyright (c) 2017 ZTE Corporation.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the Apache License, Version 2.0

+ * and the Eclipse Public License v1.0 which both accompany this distribution,

+ * and are available at http://www.eclipse.org/legal/epl-v10.html

+ * and http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Contributors:

+ *     ZTE - initial API and implementation and/or initial documentation

+ */

+package org.onap.sdc.workflowdesigner.model;

+

+import java.util.List;

+

+import org.onap.sdc.workflowdesigner.config.Config;

+

+public class RestServiceTask extends ServiceTask {

+	public static String handler = Config.PROPERTIES.getProperty(Config.HANDLER_ClASS);

+	

+	private String restConfigId;

+	public String getRestConfigId() {

+		return restConfigId;

+	}

+	public void setRestConfigId(String restConfigId) {

+		this.restConfigId = restConfigId;

+	}

+	private List<String> produces;

+	private List<String> consumes;

+	

+	

+	private List<Parameter> parameters;

+	private String url;

+	private String serviceName;

+	private String serviceVersion;

+	private String path;

+	private String method;

+	

+	public String getUrl() {

+		return url;

+	}

+	public void setUrl(String url) {

+		this.url = url;

+	}

+	

+	public String getMethod() {

+		return method;

+	}

+	

+	public static String getHandler() {

+		return handler;

+	}

+	public static void setHandler(String handler) {

+		RestServiceTask.handler = handler;

+	}

+	public void setMethod(String method) {

+		this.method = method;

+	}

+	public List<String> getProduces() {

+		return produces;

+	}

+	public void setProduces(List<String> produces) {

+		this.produces = produces;

+	}

+	public List<String> getConsumes() {

+		return consumes;

+	}

+	public void setConsumes(List<String> consumes) {

+		this.consumes = consumes;

+	}

+	public List<Parameter> getParameters() {

+		return parameters;

+	}

+	public void setParameters(List<Parameter> parameters) {

+		this.parameters = parameters;

+	}

+	public String getServiceName() {

+		return serviceName;

+	}

+	public void setServiceName(String serviceName) {

+		this.serviceName = serviceName;

+	}

+	public String getServiceVersion() {

+		return serviceVersion;

+	}

+	public void setServiceVersion(String serviceVersion) {

+		this.serviceVersion = serviceVersion;

+	}

+	public String getPath() {

+		return path;

+	}

+	public void setPath(String path) {

+		this.path = path;

+	}

+}

diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/Bpmn4ToscaJsonParser.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/Bpmn4ToscaJsonParser.java
index b103f91..4041a9a 100644
--- a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/Bpmn4ToscaJsonParser.java
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/Bpmn4ToscaJsonParser.java
@@ -15,8 +15,10 @@
 import java.net.MalformedURLException;

 import java.net.URI;

 import java.util.ArrayList;

+import java.util.HashMap;

 import java.util.Iterator;

 import java.util.List;

+import java.util.Map;

 

 import org.onap.sdc.workflowdesigner.model.DataObject;

 import org.onap.sdc.workflowdesigner.model.Element;

@@ -26,6 +28,7 @@
 import org.onap.sdc.workflowdesigner.model.ParallelGateway;

 import org.onap.sdc.workflowdesigner.model.Parameter;

 import org.onap.sdc.workflowdesigner.model.Process;

+import org.onap.sdc.workflowdesigner.model.RestServiceTask;

 import org.onap.sdc.workflowdesigner.model.ScriptTask;

 import org.onap.sdc.workflowdesigner.model.SequenceFlow;

 import org.onap.sdc.workflowdesigner.model.ServiceTask;

@@ -45,6 +48,8 @@
     private static Logger log = LoggerFactory.getLogger(Bpmn4ToscaJsonParser.class);

 

     private static ObjectMapper MAPPER = new ObjectMapper();

+    

+    private Map<String, JsonNode> restConfigMap = new HashMap<String, JsonNode>();

 

     static {

         MAPPER.enable(SerializationFeature.INDENT_OUTPUT);

@@ -62,6 +67,8 @@
         if (nodes == null) {

             return process;

         }

+        

+        this.loadConfigs(rootNode.get(JsonKeys.CONFIGS));

 

         Iterator<JsonNode> iter = nodes.iterator();

         while (iter.hasNext()) {

@@ -100,6 +107,27 @@
 

         return dataObjects;

     }

+    

+    private void loadConfigs(JsonNode config) {

+        if(config == null) {

+            return;

+        }

+        loadRestConfigs(config.get(JsonKeys.REST_CONFIGS));

+    }

+    

+    private void loadRestConfigs(JsonNode restConfigs) {

+        if(restConfigs == null) {

+            return;

+        }

+        

+        Iterator<JsonNode> iter = restConfigs.iterator();

+        while (iter.hasNext()) {

+            JsonNode restConfig = (JsonNode) iter.next();

+

+            String configId = getValueFromJsonNode(restConfig, JsonKeys.ID); 

+            restConfigMap.put(configId, restConfig);

+        }

+    }

 

     private List<SequenceFlow> getSequenceFlows(JsonNode jsonNode) {

         List<SequenceFlow> flowList = new ArrayList<SequenceFlow>();

@@ -141,6 +169,9 @@
         case "serviceTask":

             element = MAPPER.readValue(jsonObject, ServiceTask.class);

             break;

+        case "restTask":

+            element = this.createRestServiceTask(jsonObject);

+            break;

         case "scriptTask":

             element = MAPPER.readValue(jsonObject, ScriptTask.class);

             break;

@@ -157,6 +188,28 @@
 

         return element;

     }

+    

+    private RestServiceTask createRestServiceTask(String jsonObject) throws JsonParseException, JsonMappingException, IOException {

+        RestServiceTask restServiceTask = MAPPER.readValue(jsonObject, RestServiceTask.class);

+        

+        // add baseUrl to relative url

+        String restConfigId = restServiceTask.getRestConfigId();

+        JsonNode restConfig = this.restConfigMap.get(restConfigId);

+        

+        if(restConfig != null) { // while create a new rest task and didnot set method, the restconfig info may be null

+            restServiceTask.setUrl(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_URL));

+            restServiceTask.setServiceName(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_NAME));

+            restServiceTask.setServiceVersion(getValueFromJsonNode(restConfig, JsonKeys.MICROSERVICE_VERSION));

+        }

+        

+        for(Parameter parameter : restServiceTask.getParameters()) {

+            if("body".equals(parameter.getPosition())) {

+                parameter.setValueSource(null);

+            }

+        }

+        

+        return restServiceTask;

+    }

 

     private String getValueFromJsonNode(JsonNode jsonNode, String key) {

         return jsonNode.get(key) == null ? null : jsonNode.get(key).asText();

diff --git a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/JsonKeys.java b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/JsonKeys.java
index da97a34..8c7c62f 100644
--- a/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/JsonKeys.java
+++ b/sdc-workflow-designer-server/src/main/java/org/onap/sdc/workflowdesigner/parser/JsonKeys.java
@@ -29,4 +29,10 @@
     public static final String CONDITION = "condition";

     

     

+ // microservice info

+    public static final String MICROSERVICE_URL = "url";

+    public static final String MICROSERVICE_NAME = "name";

+    public static final String MICROSERVICE_VERSION = "version";

+    

+    public static final String ID = "id";

 }

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
index 0000000..7f26177
--- /dev/null
+++ b/sdc-workflow-designer-server/src/main/resources/bpmn-templates/bpmn_element_restTask_template.xml
@@ -0,0 +1,33 @@
+

+<serviceTask id="${element.id}" name="${element.name}" activiti:class="${element.handler}">

+	<extensionElements>

+		<activiti:field name="url">

+			<activiti:string><![CDATA[$!{element.url}]]></activiti:string>

+		</activiti:field>

+		<activiti:field name="name">

+			<activiti:string><![CDATA[$!{element.serviceName}]]></activiti:string>

+		</activiti:field>

+		<activiti:field name="version">

+			<activiti:string><![CDATA[$!{element.serviceVersion}]]></activiti:string>

+		</activiti:field>

+		<activiti:field name="path">

+			<activiti:string><![CDATA[$!{element.path}]]></activiti:string>

+		</activiti:field>

+		<activiti:field name="method">

+			<activiti:string><![CDATA[$!{element.method}]]></activiti:string>

+		</activiti:field>

+		#if (${element.produces})

+		<activiti:field name="accept">

+			<activiti:string><![CDATA[${element.produces}]]></activiti:string>

+		</activiti:field>

+		#end

+		#if (${element.consumes})

+		<activiti:field name="contentType">

+			<activiti:string><![CDATA[${element.consumes}]]></activiti:string>

+		</activiti:field>

+		#end

+		<activiti:field name="parameters">

+			<activiti:string><![CDATA[${element.parameters}]]></activiti:string>

+		</activiti:field>

+	</extensionElements>

+</serviceTask>