Modify BPMN Convertor to support conversion of extend activities.
Change copyright year from 2017 to 2017-2018
Issue-ID: SDC-679
Change-Id: I835fee3901302d53a948e50d2c2a03736f524e4b
Signed-off-by: YuanHu <yuan.hu1@zte.com.cn>
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
\r
public class Element {\r
public enum TYPE {\r
- startEvent, endEvent, errorStartEvent, errorEndEvent, serviceTask, scriptTask, exclusiveGateway, parallelGateway, restTask, intermediateCatchEvent\r
+ startEvent, \r
+ endEvent, \r
+ errorStartEvent,\r
+ errorEndEvent,\r
+ serviceTask, \r
+ scriptTask,\r
+ exclusiveGateway, \r
+ parallelGateway, \r
+ restTask, \r
+ intermediateCatchEvent\r
};\r
\r
private String id;\r
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
public class RestServiceTask extends ServiceTask {\r
private 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 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 baseUrl;\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
+ public String getBaseUrl() {\r
+ return baseUrl;\r
}\r
- public void setUrl(String url) {\r
- this.url = url;\r
+ public void setBaseUrl(String url) {\r
+ this.baseUrl = url;\r
}\r
\r
public String getMethod() {\r
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
*/\r
package org.onap.sdc.workflowdesigner.model;\r
\r
+import java.util.List;\r
+\r
public class ServiceTask extends Element {\r
+ private String className;\r
+ private List<Parameter> inputs;\r
+ private List<Parameter> outputs;\r
+\r
+ public String getClassName() {\r
+ return className;\r
+ }\r
+\r
+ public void setClassName(String className) {\r
+ this.className = className;\r
+ }\r
+\r
+ public List<Parameter> getInputs() {\r
+ return inputs;\r
+ }\r
+\r
+ public void setInputs(List<Parameter> inputs) {\r
+ this.inputs = inputs;\r
+ }\r
+\r
+ public List<Parameter> getOutputs() {\r
+ return outputs;\r
+ }\r
\r
+ public void setOutputs(List<Parameter> outputs) {\r
+ this.outputs = outputs;\r
+ }\r
}\r
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
\r
import java.util.List;\r
\r
+import com.fasterxml.jackson.annotation.JsonProperty;\r
+\r
public class StartEvent extends Element {\r
- private List<Parameter> parameters;\r
+ @JsonProperty("parameters")\r
+ private List<Parameter> parameters;\r
\r
public List<Parameter> getParameters() {\r
return parameters;\r
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
JsonNode rootNode = MAPPER.readValue(jsonFileUrl.toURL(), JsonNode.class);\r
\r
log.debug("Creating Process models...");\r
- JsonNode nodes = rootNode.get(JsonKeys.NODES);\r
+// JsonNode nodes = rootNode.get(JsonKeys.NODES);\r
+ JsonNode data = rootNode.get(JsonKeys.DATA);\r
+ if(null == data) {\r
+ return process;\r
+ }\r
+ JsonNode nodes = data.get(JsonKeys.NODES);\r
if (nodes == null) {\r
return process;\r
}\r
\r
private List<SequenceFlow> getSequenceFlows(JsonNode jsonNode) {\r
List<SequenceFlow> flowList = new ArrayList<SequenceFlow>();\r
- JsonNode sequenceFlowNodes = jsonNode.get(JsonKeys.SEQUENCE_FLOWS);\r
+ String elementId = getValueFromJsonNode(jsonNode, JsonKeys.ID);\r
+ JsonNode connectionsNode = jsonNode.get(JsonKeys.CONNECTIONS);\r
\r
- Iterator<JsonNode> iter = sequenceFlowNodes.iterator();\r
+ Iterator<JsonNode> iter = connectionsNode.iterator();\r
while (iter.hasNext()) {\r
JsonNode connectionEntry = (JsonNode) iter.next();\r
- String sourceRef = getValueFromJsonNode(connectionEntry, JsonKeys.SOURCE_REF);\r
String targetRef = getValueFromJsonNode(connectionEntry, JsonKeys.TARGET_REF);\r
String condition = getValueFromJsonNode(connectionEntry, JsonKeys.CONDITION);\r
SequenceFlow flow = new SequenceFlow();\r
- flow.setId(sourceRef + targetRef);\r
- flow.setSourceRef(sourceRef);\r
+ flow.setId(elementId + targetRef);\r
+ flow.setSourceRef(elementId);\r
flow.setTargetRef(targetRef);\r
flow.setCondition(condition);\r
flowList.add(flow);\r
element = MAPPER.readValue(jsonObject, ServiceTask.class);\r
break;\r
case "restTask":\r
- element = this.createRestServiceTask(jsonObject);\r
+ // element = this.createRestServiceTask(jsonObject);\r
+ element = MAPPER.readValue(jsonObject, RestServiceTask.class);\r
break;\r
case "scriptTask":\r
element = MAPPER.readValue(jsonObject, ScriptTask.class);\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
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
package org.onap.sdc.workflowdesigner.parser;\r
\r
public interface JsonKeys {\r
- // workflow keys\r
- public static final String NODES = "nodes";\r
- public static final String CONFIGS = "configs";\r
- \r
- // configs keys\r
- public static final String REST_CONFIGS = "restConfigs";\r
- public static final String TYPE = "type";\r
- \r
- // workflow node keys\r
- public static final String SEQUENCE_FLOWS = "sequenceFlows";\r
- \r
- // sequence flow keys\r
- public static final String SOURCE_REF = "sourceRef";\r
- public static final String TARGET_REF = "targetRef";\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
+\r
+ /*\r
+ * Field names of BPMN4Tosca Model\r
+ */\r
+ public static final String DATA = "data";\r
+ public static final String NODES = "nodes";\r
+ public static final String REST_CONFIGS = "restConfigs";\r
+ public static final String CONFIGS = "configs";\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 NAME = "name";\r
+\r
+ public static final String ID = "id";\r
+\r
+ public static final String TYPE = "type";\r
+\r
+ public static final String INPUT = "input";\r
+\r
+ public static final String OUTPUT = "output";\r
+\r
+ public static final String VALUE = "value";\r
+\r
+ public static final String NODE_TEMPLATE = "node_template";\r
+\r
+ public static final String NODE_OPERATION = "node_operation";\r
+\r
+ public static final String NODE_INTERFACE_NAME = "interface";\r
+\r
+ public static final String CONNECTIONS = "connection";\r
+ \r
+ public static final String SOURCE_REF = "sourceRef";\r
+ \r
+ public static final String TARGET_REF = "targetRef";\r
+ \r
+ public static final String CONDITIONS = "conditions";\r
+ \r
+ public static final String CONDITION = "condition";\r
+ \r
+ public static final String DEFAULT = "default";\r
+\r
+\r
+ /*\r
+ * Exclusive-Gateway, Event, Management-Task Types\r
+ *\r
+ */\r
+ public static final String NODE_TYPE_MGMT_TASK = "ToscaNodeManagementTask";\r
+\r
+ public static final String NODE_TYPE_START_EVENT = "StartEvent";\r
+\r
+ public static final String NODE_TYPE_END_EVENT = "EndEvent";\r
+ \r
+ public static final String NODE_TYPE_GATEWAY_EXCLUSIVE = "ExclusiveGateway";\r
+ \r
+ public static final String NODE_TYPE_GATEWAY_EXCLUSIVE_END = "ExclusiveGatewayEnd";\r
+\r
+\r
+ /*\r
+ * Parameter Types\r
+ */\r
+ public static final String PARAM_TYPE_VALUE_STRING = "string";\r
+\r
+ public static final String PARAM_TYPE_VALUE_TOPOLOGY = "topology";\r
+\r
+ public static final String PARAM_TYPE_VALUE_PLAN = "plan";\r
+\r
+ public static final String PARAM_TYPE_VALUE_CONCAT = "concat";\r
+\r
+ public static final String PARAM_TYPE_VALUE_IA = "implementation_artifact";\r
+\r
+ public static final String PARAM_TYPE_VALUE_DA = "deployment_artifact";\r
+\r
}\r
/**
- * Copyright (c) 2017 ZTE Corporation.
+ * Copyright (c) 2017-2018 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,
package org.onap.sdc.workflowdesigner.resources;
import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Paths;
+import java.util.UUID;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.core.Response;
import org.eclipse.jetty.http.HttpStatus;
+import org.onap.sdc.workflowdesigner.model.Process;
+import org.onap.sdc.workflowdesigner.parser.Bpmn4ToscaJsonParser;
import org.onap.sdc.workflowdesigner.utils.FileCommonUtils;
import org.onap.sdc.workflowdesigner.utils.RestUtils;
+import org.onap.sdc.workflowdesigner.writer.BpmnPlanArtefactWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Api(tags = {"Workflow Modeler"})
public class WorkflowModelerResource {
private static final Logger logger = LoggerFactory.getLogger(WorkflowModelerResource.class);
+
+ private static final String WORKFLOW_JSON_TEMP_FILE_NAME = "temp_workflow.json";
+ private static final String WORKFLOW_XML_TEMP_FILE_NAME = "temp_workflow.xml";
+
/**
- * test function.
*
* @return Response
*/
String json = FileCommonUtils.readString(filePath);
return Response.status(Response.Status.OK).entity(json).build();
} catch (IOException e) {
- logger.error("getServiceTemplateById failed.", e);
+ logger.error("get workflow failed.", e);
throw RestUtils.newInternalServerErrorException(e);
}
}
+
+
@Path("/{id}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Timed
public Response saveModel(@ApiParam(value = "id") @PathParam("id") String id,
@ApiParam(value = "Model Content", required = true) String json) {
- String filePath = "model.json";
try {
- FileCommonUtils.write(filePath, json);
+ FileCommonUtils.write(WORKFLOW_JSON_TEMP_FILE_NAME, json);
+
+ URI srcUri = Paths.get(".", WORKFLOW_JSON_TEMP_FILE_NAME).toUri();
+ String processName = "plan_" + UUID.randomUUID().toString();
+ Bpmn4ToscaJsonParser parser = new Bpmn4ToscaJsonParser();
+ Process process = parser.parse(processName, srcUri);
+
+ // transform bpmn template
+ BpmnPlanArtefactWriter writer = new BpmnPlanArtefactWriter(process);
+ String bpmn = writer.completePlanTemplate();
+
+ FileCommonUtils.write(WORKFLOW_XML_TEMP_FILE_NAME, bpmn);
+
return Response.status(Response.Status.OK).entity(json).build();
} catch (IOException e) {
- logger.error("getServiceTemplateById failed.", e);
+ logger.error("save workflow failed.", e);
+ throw RestUtils.newInternalServerErrorException(e);
+ } catch (Exception e) {
+ logger.error("convert workflow from json to bpmn failed.", e);
throw RestUtils.newInternalServerErrorException(e);
}
}
-<dataObject id="${dataObject.id}" name="${dataObject.name}">\r
- <extensionElements>\r
- <activiti:value><![CDATA[${dataObject.value}]]></activiti:value>\r
- </extensionElements>\r
-</dataObject>\r
+ <dataObject id="${dataObject.id}" name="${dataObject.name}">\r
+ <extensionElements>\r
+ <activiti:value><![CDATA[${dataObject.value}]]></activiti:value>\r
+ </extensionElements>\r
+ </dataObject>
\ No newline at end of file
-\r
-<endEvent id="${element.id}" name="${element.name}">\r
-</endEvent>\r
+ <endEvent id="${element.id}" name="${element.name}">\r
+ </endEvent>
\ No newline at end of file
-
-<endEvent id="${element.id}" name="${element.name}">
- <errorEventDefinition errorRef="${element.parameter.value}" />
-</endEvent>
+ <endEvent id="${element.id}" name="${element.name}">
+ <errorEventDefinition errorRef="${element.parameter.value}" />
+ </endEvent>
\ No newline at end of file
-
-<startEvent id="${element.id}" name="${element.name}">
- <errorEventDefinition errorRef="${element.parameter.value}" />
-</startEvent>
+ <startEvent id="${element.id}" name="${element.name}">
+ <errorEventDefinition errorRef="${element.parameter.value}" />
+ </startEvent>
\ No newline at end of file
-\r
-<exclusiveGateway id="${element.id}" name="${element.name}"></exclusiveGateway>
\ No newline at end of file
+ <exclusiveGateway id="${element.id}" name="${element.name}"></exclusiveGateway>
\ No newline at end of file
-\r
-<intermediateCatchEvent id="${element.id}" name="${element.name}">\r
- <timerEventDefinition>\r
- #if (${element.timerEventDefinition.timeDuration})\r
- <timeDuration><![CDATA[${element.timerEventDefinition.timeDuration}]]></timeDuration>\r
- #end\r
- #if (${element.timerEventDefinition.timeDate})\r
- <timeDate><![CDATA[${element.timerEventDefinition.timeDate}]]></timeDate>\r
- #end\r
- #if (${element.timerEventDefinition.timeCycle})\r
- <timeCycle><![CDATA[${element.timerEventDefinition.timeCycle}]]></timeCycle>\r
- #end\r
- </timerEventDefinition>\r
-</intermediateCatchEvent>\r
+ <intermediateCatchEvent id="${element.id}" name="${element.name}">\r
+ <timerEventDefinition>\r
+#if (${element.timerEventDefinition.timeDuration})\r
+ <timeDuration><![CDATA[${element.timerEventDefinition.timeDuration}]]></timeDuration>\r
+#end\r
+#if (${element.timerEventDefinition.timeDate})\r
+ <timeDate><![CDATA[${element.timerEventDefinition.timeDate}]]></timeDate>\r
+#end\r
+#if (${element.timerEventDefinition.timeCycle})\r
+ <timeCycle><![CDATA[${element.timerEventDefinition.timeCycle}]]></timeCycle>\r
+#end\r
+ </timerEventDefinition>\r
+ </intermediateCatchEvent>
\ No newline at end of file
-\r
<parallelGateway id="${element.id}" name="${element.name}"></parallelGateway>
\ No newline at end of file
-\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
+ <serviceTask id="${element.id}" name="${element.name}"\r
+ activiti:class="${element.handler}">\r
+ <extensionElements>\r
+ <activiti:field name="url">\r
+ <activiti:string><![CDATA[$!{element.baseUrl}]]></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>
\ No newline at end of file
-<scriptTask id="${element.id}" name="${element.name}" scriptFormat="${element.scriptFormat}" activiti:autoStoreVariables="false">\r
- <script><![CDATA[${element.script}]]></script>\r
-</scriptTask>\r
+ <scriptTask id="${element.id}" name="${element.name}" scriptFormat="${element.scriptFormat}" activiti:autoStoreVariables="false">\r
+ <script><![CDATA[${element.script}]]></script>\r
+ </scriptTask>
\ No newline at end of file
-\r
-<serviceTask id="${element.id}" name="${element.name}" activiti:class="${element.handler}">\r
- <extensionElements>\r
- <activiti:field name="uri">\r
- <activiti:string><![CDATA[${element.url}]]></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
+ <serviceTask id="${element.id}" name="${element.name}" activiti:class="${element.className}">\r
+ <extensionElements>\r
+#foreach( $input in ${element.inputs} )\r
+ <activiti:field name="${input.name}">\r
+ <activiti:string><![CDATA[${input.value}]]></activiti:string>\r
+ </activiti:field>\r
+#end\r
+#foreach( $output in ${element.outputs} )\r
+ <activiti:field name="${output.name}">\r
+ <activiti:string><![CDATA[${output.value}]]></activiti:string>\r
+ </activiti:field>\r
+#end\r
+ </extensionElements>\r
+ </serviceTask>
\ No newline at end of file
-\r
-<startEvent id="${element.id}" name="${element.name}">\r
- <extensionElements>\r
- #foreach( $param in ${element.parameters} )\r
- <activiti:formProperty id="${param.name}"\r
- name="${param.name}" default="${param.value}" type="string"></activiti:formProperty>\r
- #end\r
- </extensionElements>\r
-</startEvent>\r
+ <startEvent id="${element.id}" name="${element.name}">\r
+ <extensionElements>\r
+#foreach( $param in ${element.parameters} )\r
+ <activiti:formProperty id="${param.name}" name="${param.name}" default="${param.value}" type="string"></activiti:formProperty>\r
+#end\r
+ </extensionElements>\r
+ </startEvent>
\ No newline at end of file
-<sequenceFlow id="${sequenceFlow.id}" sourceRef="${sequenceFlow.sourceRef}" targetRef="${sequenceFlow.targetRef}">\r
+ <sequenceFlow id="${sequenceFlow.id}" sourceRef="${sequenceFlow.sourceRef}" targetRef="${sequenceFlow.targetRef}">\r
#if(${sequenceFlow.condition} && ${sequenceFlow.condition} != '')\r
- <conditionExpression xsi:type="tFormalExpression"><![CDATA[${sequenceFlow.condition}]]></conditionExpression>\r
+ <conditionExpression xsi:type="tFormalExpression"><![CDATA[${sequenceFlow.condition}]]></conditionExpression>\r
#end\r
-</sequenceFlow>
\ No newline at end of file
+ </sequenceFlow>
\ No newline at end of file
+#set( $bpelvar = "$bpelvar" )\r
<?xml version="1.0" encoding="UTF-8"?>\r
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"\r
- xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"\r
- typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"\r
- targetNamespace="http://www.activiti.org/test">\r
- <process id="${process.id}" isExecutable="true">\r
- <!-- dataObjects -->\r
- #foreach( $dataObject in $process.dataObjectList)\r
- #parse(\r
- "${templatePath}bpmn_dataObject_template.xml"\r
- )\r
- #end\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"\r
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"\r
+ xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"\r
+ expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">\r
+ <process id="${process.id}" isExecutable="true">\r
+ <!-- dataObjects -->\r
+#foreach( $dataObject in $process.dataObjectList)\r
+#parse("${templatePath}bpmn_dataObject_template.xml")\r
\r
- <!-- Perform bpmn elements -->\r
- #foreach( $element in $process.elementList)\r
- #parse(\r
- "${templatePath}bpmn_element_${element.type}_template.xml"\r
- )\r
- #end\r
+#end\r
+ \r
+ <!-- Perform bpmn elements -->\r
+#foreach( $element in $process.elementList)\r
+#parse("${templatePath}bpmn_element_${element.type}_template.xml")\r
+\r
+#end\r
\r
<!-- Perform bpmn sequence flow -->\r
- #foreach( $sequenceFlow in $process.sequenceFlowList)\r
- #parse(\r
- "${templatePath}bpmn_sequenceFlow_template.xml"\r
- )\r
- #end\r
- </process>\r
-</definitions>\r
+#foreach( $sequenceFlow in $process.sequenceFlowList)\r
+#parse("${templatePath}bpmn_sequenceFlow_template.xml")\r
\r
+#end\r
+\r
+ </process>\r
+</definitions>\r
/**\r
- * Copyright (c) 2017 ZTE Corporation.\r
+ * Copyright (c) 2017-2018 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
\r
import org.junit.Test;\r
import org.onap.sdc.workflowdesigner.model.Element;\r
-import org.onap.sdc.workflowdesigner.model.EndEvent;\r
+import org.onap.sdc.workflowdesigner.model.Position;\r
import org.onap.sdc.workflowdesigner.model.Process;\r
+import org.onap.sdc.workflowdesigner.model.ScriptTask;\r
import org.onap.sdc.workflowdesigner.model.SequenceFlow;\r
-import org.onap.sdc.workflowdesigner.model.StartEvent;\r
\r
import com.fasterxml.jackson.core.JsonParseException;\r
import com.fasterxml.jackson.databind.JsonMappingException;\r
\r
private static Process createReferenceProcess() {\r
Process process = new Process(PROCESS_NAME);\r
-\r
- StartEvent startEvent = new StartEvent();\r
- startEvent.setDocumentation("");\r
- startEvent.setId("node0");\r
- startEvent.setName("startEvent");\r
- process.getElementList().add(startEvent);\r
-\r
- EndEvent endEvent = new EndEvent();\r
- endEvent.setDocumentation("");\r
- endEvent.setId("node1");\r
- endEvent.setName("endEvent");\r
- process.getElementList().add(endEvent);\r
-\r
- SequenceFlow flow2 = new SequenceFlow();\r
- flow2.setId("node0node1");\r
- flow2.setSourceRef("node0");\r
- flow2.setTargetRef("node1");\r
- process.getSequenceFlowList().add(flow2);\r
+ \r
+ ScriptTask scriptTask = new ScriptTask();\r
+ scriptTask.setId("scriptTask");\r
+ scriptTask.setName("Script Task");\r
+ Position position = new Position();\r
+ position.setLeft(328);\r
+ position.setTop(134);\r
+ scriptTask.setPosition(position);\r
+ scriptTask.setScript("");\r
+ scriptTask.setScriptFormat("JavaScript");\r
+ process.getElementList().add(scriptTask);\r
\r
return process;\r
}\r
<?xml version="1.0" encoding="UTF-8"?>\r
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"\r
- xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"\r
- typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"\r
- targetNamespace="http://www.activiti.org/test">\r
- <process id="templateTest" isExecutable="true">\r
- <!-- dataObjects -->\r
- \r
- <!-- Perform bpmn elements -->\r
- \r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"\r
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"\r
+ xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"\r
+ expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">\r
+ <process id="templateTest" isExecutable="true">\r
+ <!-- dataObjects -->\r
+ \r
+ <!-- Perform bpmn elements -->\r
+\r
<!-- Perform bpmn sequence flow -->\r
- </process>\r
-</definitions>\r
\r
+ </process>\r
+</definitions>\r
-{"nodes":[\r
- {\r
- "sequenceFlows":[\r
- {"condition":"","sourceRef":"node0","targetRef":"node1"}\r
- ],\r
- "parameters":[],"id":"node0","name":"startEvent","type":"startEvent","parentId":"root",\r
- "position":{"width":30,"height":30,"left":468,"top":55}\r
- },\r
- {\r
- "sequenceFlows":[],\r
- "input":[],"output":[],"template":{},"id":"node1","name":"endEvent",\r
- "type":"endEvent","parentId":"root",\r
- "position":{"width":252.08334350585938,"height":46.66666793823242,"left":432,"top":167}\r
- }],\r
-"configs":{"restConfigs":[]}\r
+{\r
+ "id":"id12345",\r
+ "name":"test",\r
+ "scene":"abcd",\r
+ "data":{\r
+ "nodes":[\r
+ {\r
+ "id":"scriptTask",\r
+ "type":"scriptTask",\r
+ "typeId":"apds_script",\r
+ "icon":"apds_script",\r
+ "name":"Script Task",\r
+ "parentId":"root",\r
+ "position":{\r
+ "left":328,\r
+ "top":134,\r
+ "width":56,\r
+ "height":56\r
+ },\r
+ "connection":[\r
+\r
+ ],\r
+ "scriptFormat":"JavaScript",\r
+ "script":""\r
+ }\r
+ ]\r
+ }\r
}
\ No newline at end of file