converter supports extended bpmn element rest service task.
Issue-ID: SDC-747
Change-Id: Id468269bfc7eab3ed57a7da6d1d2e58043fa088c
Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
--- /dev/null
+/**\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
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
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
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
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
\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
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
\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
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
--- /dev/null
+\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