@Override protected String getStencilId(BaseElement baseElement) { //see http://forum.flowable.org/t/collapsed-subprocess-navigation-in-the-web-based-bpmn-modeler/138/19 GraphicInfo graphicInfo = model.getGraphicInfo(baseElement.getId()); Boolean isExpanded = graphicInfo.getExpanded(); if (isExpanded != null && isExpanded == false) { return STENCIL_COLLAPSED_SUB_PROCESS; } else { return STENCIL_SUB_PROCESS; } }
protected static void createBpmnShape(BpmnModel model, String elementId, XMLStreamWriter xtw) throws Exception { xtw.writeStartElement(BPMNDI_PREFIX, ELEMENT_DI_SHAPE, BPMNDI_NAMESPACE); xtw.writeAttribute(ATTRIBUTE_DI_BPMNELEMENT, elementId); xtw.writeAttribute(ATTRIBUTE_ID, "BPMNShape_" + elementId); GraphicInfo graphicInfo = model.getGraphicInfo(elementId); FlowElement flowElement = model.getFlowElement(elementId); if (flowElement instanceof SubProcess && graphicInfo.getExpanded() != null) { xtw.writeAttribute(ATTRIBUTE_DI_IS_EXPANDED, String.valueOf(graphicInfo.getExpanded())); } xtw.writeStartElement(OMGDC_PREFIX, ELEMENT_DI_BOUNDS, OMGDC_NAMESPACE); xtw.writeAttribute(ATTRIBUTE_DI_HEIGHT, String.valueOf(graphicInfo.getHeight())); xtw.writeAttribute(ATTRIBUTE_DI_WIDTH, String.valueOf(graphicInfo.getWidth())); xtw.writeAttribute(ATTRIBUTE_DI_X, String.valueOf(graphicInfo.getX())); xtw.writeAttribute(ATTRIBUTE_DI_Y, String.valueOf(graphicInfo.getY())); xtw.writeEndElement(); xtw.writeEndElement(); }
@Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { SubProcess subProcess = (SubProcess) baseElement; propertiesNode.put("activitytype", "Event-Sub-Process"); propertiesNode.put("subprocesstype", "Embedded"); ArrayNode subProcessShapesArrayNode = objectMapper.createArrayNode(); GraphicInfo graphicInfo = model.getGraphicInfo(subProcess.getId()); processor.processFlowElements(subProcess, model, subProcessShapesArrayNode, formKeyMap, decisionTableKeyMap, graphicInfo.getX(), graphicInfo.getY()); flowElementNode.set("childShapes", subProcessShapesArrayNode); }
@Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { BoundaryEvent boundaryEvent = (BoundaryEvent) baseElement; ArrayNode dockersArrayNode = objectMapper.createArrayNode(); ObjectNode dockNode = objectMapper.createObjectNode(); GraphicInfo graphicInfo = model.getGraphicInfo(boundaryEvent.getId()); GraphicInfo parentGraphicInfo = model.getGraphicInfo(boundaryEvent.getAttachedToRef().getId()); dockNode.put(EDITOR_BOUNDS_X, graphicInfo.getX() - parentGraphicInfo.getX()); dockNode.put(EDITOR_BOUNDS_Y, graphicInfo.getY() - parentGraphicInfo.getY()); dockersArrayNode.add(dockNode); flowElementNode.set("dockers", dockersArrayNode); propertiesNode.put(PROPERTY_CANCEL_ACTIVITY, boundaryEvent.isCancelActivity()); addEventProperties(boundaryEvent, propertiesNode); }
@Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { AdhocSubProcess subProcess = (AdhocSubProcess) baseElement; propertiesNode.put("completioncondition", subProcess.getCompletionCondition()); propertiesNode.put("ordering", subProcess.getOrdering()); propertiesNode.put("cancelremaininginstances", subProcess.isCancelRemainingInstances()); ArrayNode subProcessShapesArrayNode = objectMapper.createArrayNode(); GraphicInfo graphicInfo = model.getGraphicInfo(subProcess.getId()); processor.processFlowElements(subProcess, model, subProcessShapesArrayNode, formKeyMap, decisionTableKeyMap, graphicInfo.getX(), graphicInfo.getY()); flowElementNode.set("childShapes", subProcessShapesArrayNode); }
protected void processArtifacts(Collection<Artifact> artifactList, BpmnModel model, ArrayNode elementArray, ArrayNode flowArray, GraphicInfo diagramInfo) { for (Artifact artifact : artifactList) { if (artifact instanceof Association) { ObjectNode elementNode = objectMapper.createObjectNode(); Association flow = (Association) artifact; elementNode.put("id", flow.getId()); elementNode.put("type", "association"); elementNode.put("sourceRef", flow.getSourceRef()); elementNode.put("targetRef", flow.getTargetRef()); fillWaypoints(flow.getId(), model, elementNode, diagramInfo); flowArray.add(elementNode); } else { ObjectNode elementNode = objectMapper.createObjectNode(); elementNode.put("id", artifact.getId()); if (artifact instanceof TextAnnotation) { TextAnnotation annotation = (TextAnnotation) artifact; elementNode.put("text", annotation.getText()); } GraphicInfo graphicInfo = model.getGraphicInfo(artifact.getId()); if (graphicInfo != null) { fillGraphicInfo(elementNode, graphicInfo, true); fillDiagramInfo(graphicInfo, diagramInfo); } String className = artifact.getClass().getSimpleName(); elementNode.put("type", className); elementArray.add(elementNode); } } }
double sourceDockersY = dockersNode.get(0).get(EDITOR_BOUNDS_Y).asDouble(); GraphicInfo sourceInfo = bpmnModel.getGraphicInfo(BpmnJsonConverterUtil.getElementId(sourceRefNode)); GraphicInfo targetInfo = bpmnModel.getGraphicInfo(BpmnJsonConverterUtil.getElementId(targetRefNode));
ObjectNode dockNode = objectMapper.createObjectNode(); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(sourceRef).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(sourceRef).getHeight() / 2.0); dockersArrayNode.add(dockNode); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(targetRef).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(targetRef).getHeight() / 2.0); dockersArrayNode.add(dockNode); flowNode.set("dockers", dockersArrayNode);
ArrayNode dockersArrayNode = objectMapper.createArrayNode(); ObjectNode dockNode = objectMapper.createObjectNode(); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(messageFlow.getSourceRef()).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(messageFlow.getSourceRef()).getHeight() / 2.0); dockersArrayNode.add(dockNode); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(messageFlow.getTargetRef()).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(messageFlow.getTargetRef()).getHeight() / 2.0); dockersArrayNode.add(dockNode); flowNode.set("dockers", dockersArrayNode);
@Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { SubProcess subProcess = (SubProcess) baseElement; propertiesNode.put("activitytype", getStencilId(baseElement)); GraphicInfo gi = model.getGraphicInfo(baseElement.getId()); Boolean isExpanded = gi.getExpanded(); ArrayNode subProcessShapesArrayNode = objectMapper.createArrayNode(); GraphicInfo graphicInfo = model.getGraphicInfo(subProcess.getId()); if (isExpanded != null && isExpanded == false) { processor.processFlowElements(subProcess, model, subProcessShapesArrayNode, formKeyMap, decisionTableKeyMap, 0, 0); } else { processor.processFlowElements(subProcess, model, subProcessShapesArrayNode, formKeyMap, decisionTableKeyMap, graphicInfo.getX(), graphicInfo.getY()); } flowElementNode.set("childShapes", subProcessShapesArrayNode); if (subProcess instanceof Transaction) { propertiesNode.put("istransaction", true); } BpmnJsonConverterUtil.convertDataPropertiesToJson(subProcess.getDataObjects(), propertiesNode); }
ArrayNode dockersArrayNode = objectMapper.createArrayNode(); ObjectNode dockNode = objectMapper.createObjectNode(); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(association.getSourceRef()).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(association.getSourceRef()).getHeight() / 2.0); dockersArrayNode.add(dockNode); GraphicInfo targetGraphicInfo = model.getGraphicInfo(association.getTargetRef()); GraphicInfo flowGraphicInfo = graphicInfoList.get(graphicInfoList.size() - 1);
@Override protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { SubProcess subProcess = null; if (getPropertyValueAsBoolean("istransaction", elementNode)) { subProcess = new Transaction(); } else { subProcess = new SubProcess(); } JsonNode childShapesArray = elementNode.get(EDITOR_CHILD_SHAPES); processor.processJsonElements(childShapesArray, modelNode, subProcess, shapeMap, formMap, decisionTableMap, model); JsonNode processDataPropertiesNode = elementNode.get(EDITOR_SHAPE_PROPERTIES).get(PROPERTY_DATA_PROPERTIES); if (processDataPropertiesNode != null) { List<ValuedDataObject> dataObjects = BpmnJsonConverterUtil.convertJsonToDataProperties(processDataPropertiesNode, subProcess); subProcess.setDataObjects(dataObjects); subProcess.getFlowElements().addAll(dataObjects); } //store correct convertion info... if (STENCIL_COLLAPSED_SUB_PROCESS.equals(BpmnJsonConverterUtil.getStencilId(elementNode))) { GraphicInfo graphicInfo = model.getGraphicInfo(BpmnJsonConverterUtil.getElementId(elementNode)); graphicInfo.setExpanded(false); //default is null! } return subProcess; }
GraphicInfo graphicInfo = model.getGraphicInfo(element.getId()); if (graphicInfo != null) { fillGraphicInfo(elementNode, graphicInfo, true);
ArrayNode dockersArrayNode = objectMapper.createArrayNode(); ObjectNode dockNode = objectMapper.createObjectNode(); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(sequenceFlow.getSourceRef()).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(sequenceFlow.getSourceRef()).getHeight() / 2.0); dockersArrayNode.add(dockNode); dockNode.put(EDITOR_BOUNDS_X, model.getGraphicInfo(sequenceFlow.getTargetRef()).getWidth() / 2.0); dockNode.put(EDITOR_BOUNDS_Y, model.getGraphicInfo(sequenceFlow.getTargetRef()).getHeight() / 2.0); dockersArrayNode.add(dockNode); flowNode.set("dockers", dockersArrayNode);
bpmnModel.addGraphicInfo(newFlowElementId, subProcessBpmnModel.getGraphicInfo(originalFlowElementId));
for (String shapeId : bpmnModel.getLocationMap().keySet()) { if (processDefinition.findActivity(shapeId) != null) { createBPMNShape(shapeId, bpmnModel.getGraphicInfo(shapeId), processDefinition);
poolNode.put("id", pool.getId()); poolNode.put("name", pool.getName()); GraphicInfo poolInfo = pojoModel.getGraphicInfo(pool.getId()); fillGraphicInfo(poolNode, poolInfo, true); org.flowable.bpmn.model.Process process = pojoModel.getProcess(pool.getId()); laneNode.put("id", lane.getId()); laneNode.put("name", lane.getName()); fillGraphicInfo(laneNode, pojoModel.getGraphicInfo(lane.getId()), true); laneArray.add(laneNode);
GraphicInfo graphicInfo = subProcessBpmnModel.getGraphicInfo(flowElement.getId()); if (graphicInfo != null) { bpmnModel.addGraphicInfo(flowElement.getId(), subProcessBpmnModel.getGraphicInfo(flowElement.getId()));
poolNode.put("id", pool.getId()); poolNode.put("name", pool.getName()); GraphicInfo poolInfo = pojoModel.getGraphicInfo(pool.getId()); fillGraphicInfo(poolNode, poolInfo, true); org.flowable.bpmn.model.Process process = pojoModel.getProcess(pool.getId()); laneNode.put("id", lane.getId()); laneNode.put("name", lane.getName()); fillGraphicInfo(laneNode, pojoModel.getGraphicInfo(lane.getId()), true); laneArray.add(laneNode);
process.addFlowElement(flowFromStart); GraphicInfo elementGraphicInfo = bpmnModel.getGraphicInfo(initialStartEvent.getId()); if (elementGraphicInfo != null) { double yDiff = 0;