@Override public String dumpProcess(Process process) { return dump((RuleFlowProcess) process, false); }
protected void visitHeader(WorkflowProcess process, StringBuilder xmlDump, int metaDataType) { Map<String, Object> metaData = getMetaData(process.getMetaData()); Set<String> imports = ((org.jbpm.process.core.Process) process).getImports(); Map<String, String> globals = ((org.jbpm.process.core.Process) process).getGlobals(); if ((imports != null && !imports.isEmpty()) || (globals != null && globals.size() > 0) || !metaData.isEmpty()) { xmlDump.append(" <extensionElements>" + EOL); if (imports != null) { for (String s: imports) { xmlDump.append(" <tns:import name=\"" + s + "\" />" + EOL); } } if (globals != null) { for (Map.Entry<String, String> global: globals.entrySet()) { xmlDump.append(" <tns:global identifier=\"" + global.getKey() + "\" type=\"" + global.getValue() + "\" />" + EOL); } } writeMetaData(getMetaData(process.getMetaData()), xmlDump); xmlDump.append(" </extensionElements>" + EOL); } // TODO: function imports // TODO: exception handlers VariableScope variableScope = (VariableScope) ((org.jbpm.process.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE); if (variableScope != null) { visitVariables(variableScope.getVariables(), xmlDump); } visitLanes(process, xmlDump); }
protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) { xmlDump.append(" <ioSpecification>" + EOL); for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) { xmlDump.append(" <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "Input\" name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "\" />" + EOL); xmlDump.append(" <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "Input\" name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "\" />" + EOL); xmlDump.append(" <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "Output\" name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "\" />" + EOL); xmlDump.append(" <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(entry.getKey()) + "Input</dataInputRefs>" + EOL); xmlDump.append(" <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</dataInputRefs>" + EOL); xmlDump.append(" <outputSet>" + EOL); for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) { xmlDump.append(" <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Output</dataOutputRefs>" + EOL);
private void visitSubVariableScopes(Node[] nodes, StringBuilder xmlDump, Set<String> dumpedItemDefs) { for (Node node: nodes) { if (node instanceof ContextContainer) { VariableScope variableScope = (VariableScope) ((ContextContainer) node).getDefaultContext(VariableScope.VARIABLE_SCOPE); if (variableScope != null) { visitVariableScope(variableScope, XmlBPMNProcessDumper.getUniqueNodeId(node) + "-", xmlDump, dumpedItemDefs); } } if (node instanceof NodeContainer) { visitSubVariableScopes(((NodeContainer) node).getNodes(), xmlDump, dumpedItemDefs); } } }
protected void visitConnectionsAndAssociations(Node node, StringBuilder xmlDump, int metaDataType) { // add associations List<Connection> connections = getSubConnections((CompositeNode) node); xmlDump.append(" <!-- connections -->" + EOL); for (Connection connection: connections) { XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, metaDataType); } // add associations List<Association> associations = (List<Association>) node.getMetaData().get(ProcessHandler.ASSOCIATIONS); if( associations != null ) { for (Association association : associations ) { XmlBPMNProcessDumper.INSTANCE.visitAssociation(association, xmlDump); } } }
private void visitLane(NodeContainer container, String lane, StringBuilder xmlDump) { for (Node node: container.getNodes()) { if (node instanceof HumanTaskNode) { String swimlane = ((HumanTaskNode) node).getSwimlane(); if (lane.equals(swimlane)) { xmlDump.append(" <flowNodeRef>" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowNodeRef>" + EOL); } } else { String swimlane = (String) node.getMetaData().get("Lane"); if (lane.equals(swimlane)) { xmlDump.append(" <flowNodeRef>" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowNodeRef>" + EOL); } } if (node instanceof NodeContainer) { visitLane((NodeContainer) node, lane, xmlDump); } } }
for (ItemDefinition def : itemDefs.values()) { xmlDump.append( " <itemDefinition id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(def.getId()) + "\" "); if (def.getStructureRef() != null && !"java.lang.Object".equals(def.getStructureRef())) { xmlDump.append("structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(def.getStructureRef()) + "\" "); visitVariableScope(variableScope, "_", xmlDump, dumpedItemDefs); visitSubVariableScopes(process.getNodes(), xmlDump, dumpedItemDefs); visitInterfaces(process.getNodes(), xmlDump); visitEscalations(process.getNodes(), xmlDump, new ArrayList<String>()); Definitions def = (Definitions) process.getMetaData().get("Definitions"); visitErrors(def, xmlDump); visitDataStore(dataStore, xmlDump); xmlDump.append("id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(process.getId()) + "\" "); if (process.getName() != null) { xmlDump.append("name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(process.getName()) + "\" "); xmlDump.append("tns:packageName=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(packageName) + "\" "); xmlDump.append("tns:version=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(version) + "\" "); visitHeader(process, xmlDump, metaDataType); visitNodes(processNodes, xmlDump, metaDataType); visitConnections(process.getNodes(), xmlDump, metaDataType);
if (parameterName != null) { xmlDump.append( " <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input\" name=\"MultiInstanceInput\" />" + EOL); " <dataInputAssociation>" + EOL + " <sourceRef>" + XmlDumper.replaceIllegalChars(collectionExpression) + "</sourceRef>" + EOL + " <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</targetRef>" + EOL + " </dataInputAssociation>" + EOL); " <loopDataInputRef>" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</loopDataInputRef>" + EOL); if (parameterName != null) { xmlDump.append(" <inputDataItem id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(parameterName) + "\" itemSubjectRef=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\"/>" + EOL); XmlBPMNProcessDumper.INSTANCE.visitNodes(subNodes, xmlDump, metaDataType);
for (Variable variable: variables) { if (variable.getMetaData("DataObject") == null) { xmlDump.append(" <property id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(variable.getName()) + "\" "); if (variable.getType() != null) { xmlDump.append("itemSubjectRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute((String) variable.getMetaData("ItemSubjectRef")) + "\"" ); Map<String, Object> metaData = getMetaData(variable.getMetaData()); if (metaData.isEmpty()) { xmlDump.append("/>" + EOL); xmlDump.append(">" + EOL + " <extensionElements>" + EOL); writeMetaData(metaData, xmlDump); xmlDump.append(" </extensionElements>" + EOL + " </property>" + EOL); xmlDump.append(" <dataObject id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(variable.getName()) + "\" "); if (variable.getType() != null) { xmlDump.append("itemSubjectRef=\"_" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(variable.getName()) + "\"" ); Map<String, Object> metaData = getMetaData(variable.getMetaData()); if (metaData.isEmpty()) { xmlDump.append("/>" + EOL); xmlDump.append(">" + EOL + " <extensionElements>" + EOL); writeMetaData(metaData, xmlDump); xmlDump.append(" </extensionElements>" + EOL + " </property>" + EOL);
public void visitConnection(Connection connection, StringBuilder xmlDump, int metaDataType) { if (isConnectionRepresentingLinkEvent(connection)) { return; getUniqueNodeId(connection.getFrom()) + "-" + getUniqueNodeId(connection.getTo()) + "\" sourceRef=\"" + getUniqueNodeId(connection.getFrom()) + "\" "); xmlDump.append("targetRef=\"" + getUniqueNodeId(connection.getTo()) + "\" "); if (metaDataType == META_DATA_AS_NODE_PROPERTY) { String bendpoints = (String) connection.getMetaData().get("bendpoints"); } else { if (constraint.getName() != null && constraint.getName().trim().length() > 0) { xmlDump.append("name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(constraint.getName()) + "\" ");
" <itemDefinition id=\"" + getUniqueNodeId(node) + "_InMessageType\" " + ("".equals(parameterType) || "java.lang.Object".equals(parameterType) ? "" : "structureRef=\"" + parameterType + "\" ") + "/>" + EOL + " <message id=\"" + getUniqueNodeId(node) + "_InMessage\" itemRef=\"" + getUniqueNodeId(node) + "_InMessageType\" />" + EOL + " <interface id=\"" + getUniqueNodeId(node) + "_ServiceInterface\" name=\"" + interfaceName + "\" implementationRef=\""+ interfaceRef+"\" >" + EOL + " <operation id=\"" + getUniqueNodeId(node) + "_ServiceOperation\" name=\"" + operationName + "\" implementationRef=\""+ operationRef+"\" >" + EOL + " <inMessageRef>" + getUniqueNodeId(node) + "_InMessage</inMessageRef>" + EOL + " </operation>" + EOL + " </interface>" + EOL + EOL); " <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + " <message id=\"" + getUniqueNodeId(node) + "_Message\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL); } else if ("Receive Task".equals(work.getName())) { String messageId = (String) work.getParameter("MessageId"); " <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + " <message id=\"" + messageId + "\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL); if (messageType != null) { xmlDump.append( " <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ?
protected void visitErrors(Definitions definitions, StringBuilder xmlDump) { if( definitions == null ) { return; } List<Error> errors = definitions.getErrors(); if( errors == null || errors.isEmpty() ) { return; } for( org.jbpm.bpmn2.core.Error error : errors ) { String id = XmlBPMNProcessDumper.replaceIllegalCharsAttribute(error.getId()); String code = error.getErrorCode(); xmlDump.append(" <error id=\"" + id + "\"" ); if (error.getErrorCode() != null) { code = XmlBPMNProcessDumper.replaceIllegalCharsAttribute(code); xmlDump.append(" errorCode=\"" + code + "\"" ); } String structureRef = error.getStructureRef(); if( structureRef != null ) { structureRef = XmlBPMNProcessDumper.replaceIllegalCharsAttribute(structureRef); xmlDump.append(" structureRef=\"" + structureRef + "\""); } xmlDump.append("/>" + EOL ); } }
protected void writeVariableName(EventNode eventNode, StringBuilder xmlDump) { if (eventNode.getVariableName() != null) { xmlDump.append(" <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL); xmlDump.append(" <dataOutputAssociation>" + EOL); xmlDump.append( " <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL + " <targetRef>" + XmlDumper.replaceIllegalChars(eventNode.getVariableName()) + "</targetRef>" + EOL); xmlDump.append(" </dataOutputAssociation>" + EOL); xmlDump.append(" <outputSet>" + EOL); xmlDump.append(" <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL); xmlDump.append(" </outputSet>" + EOL); } }
private void visitLanes(WorkflowProcess process, StringBuilder xmlDump) { // lanes Collection<Swimlane> swimlanes = ((SwimlaneContext) ((org.jbpm.workflow.core.WorkflowProcess) process) .getDefaultContext(SwimlaneContext.SWIMLANE_SCOPE)).getSwimlanes(); if (!swimlanes.isEmpty()) { xmlDump.append(" <laneSet>" + EOL); for (Swimlane swimlane: swimlanes) { xmlDump.append(" <lane name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(swimlane.getName()) + "\" >" + EOL); visitLane(process, swimlane.getName(), xmlDump); xmlDump.append(" </lane>" + EOL); } xmlDump.append(" </laneSet>" + EOL); } }
escalations.add(escalationCode); xmlDump.append( " <escalation id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(escalationCode) + "\" escalationCode=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(escalationCode) + "\" />" + EOL); escalations.add(type); xmlDump.append( " <escalation id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(type) + "\" escalationCode=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(type) + "\" />" + EOL); escalations.add(type); xmlDump.append( " <escalation id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(type) + "\" escalationCode=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(type) + "\" />" + EOL); visitEscalations(((CompositeNode) node).getNodes(), xmlDump, escalations);
y += parentOffsetY; xmlDump.append( " <bpmndi:BPMNShape bpmnElement=\"" + getUniqueNodeId(node) + "\" >" + EOL + " <dc:Bounds x=\"" + x + "\" " + "y=\"" + y + "\" " + "width=\"" + width + "\" " + "height=\"" + height + "\" />" + EOL + " </bpmndi:BPMNShape>" + EOL); if (node instanceof CompositeNode) { visitNodesDi(((CompositeNode) node).getNodes(), xmlDump);
visitConnectionsDi(((CompositeNode) node).getNodes(), xmlDump); xmlDump.append( " <bpmndi:BPMNEdge bpmnElement=\"" + getUniqueNodeId(connection.getFrom()) + "-" + getUniqueNodeId(connection.getTo()) + "\" >" + EOL); Integer x = (Integer) connection.getFrom().getMetaData().get("x"); if (x == null) {
private void visitConnections(Node[] nodes, StringBuilder xmlDump, int metaDataType) { xmlDump.append(" <!-- connections -->" + EOL); List<Connection> connections = new ArrayList<Connection>(); for (Node node: nodes) { for (List<Connection> connectionList: node.getIncomingConnections().values()) { connections.addAll(connectionList); } } for (Connection connection: connections) { visitConnection(connection, xmlDump, metaDataType); } xmlDump.append(EOL); }
protected Map<String, Object> getMetaData(Node node) { return XmlBPMNProcessDumper.getMetaData(node.getMetaData()); }
for (ItemDefinition def : itemDefs.values()) { xmlDump.append( " <itemDefinition id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(def.getId()) + "\" "); if (def.getStructureRef() != null && !"java.lang.Object".equals(def.getStructureRef())) { xmlDump.append("structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(def.getStructureRef()) + "\" "); visitVariableScope(variableScope, "_", xmlDump, dumpedItemDefs); visitSubVariableScopes(process.getNodes(), xmlDump, dumpedItemDefs); visitInterfaces(process.getNodes(), xmlDump); visitEscalations(process.getNodes(), xmlDump, new ArrayList<String>()); Definitions def = (Definitions) process.getMetaData().get("Definitions"); visitErrors(def, xmlDump); visitDataStore(dataStore, xmlDump); xmlDump.append("id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(process.getId()) + "\" "); if (process.getName() != null) { xmlDump.append("name=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(process.getName()) + "\" "); xmlDump.append("tns:packageName=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(packageName) + "\" "); xmlDump.append("tns:version=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(version) + "\" "); visitHeader(process, xmlDump, metaDataType); visitNodes(processNodes, xmlDump, metaDataType); visitConnections(process.getNodes(), xmlDump, metaDataType);