@SuppressWarnings("unchecked") public <FlowElementType extends FlowElement> List<FlowElementType> findFlowElementsInSubProcessOfType(SubProcess subProcess, Class<FlowElementType> type, boolean goIntoSubprocesses) { List<FlowElementType> foundFlowElements = new ArrayList<>(); for (FlowElement flowElement : subProcess.getFlowElements()) { if (type.isInstance(flowElement)) { foundFlowElements.add((FlowElementType) flowElement); } if (flowElement instanceof SubProcess) { if (goIntoSubprocesses) { foundFlowElements.addAll(findFlowElementsInSubProcessOfType((SubProcess) flowElement, type)); } } } return foundFlowElements; }
@SuppressWarnings("unchecked") public <FlowElementType extends FlowElement> List<FlowElementType> findFlowElementsInSubProcessOfType(SubProcess subProcess, Class<FlowElementType> type, boolean goIntoSubprocesses) { List<FlowElementType> foundFlowElements = new ArrayList<>(); for (FlowElement flowElement : subProcess.getFlowElements()) { if (type.isInstance(flowElement)) { foundFlowElements.add((FlowElementType) flowElement); } if (flowElement instanceof SubProcess) { if (goIntoSubprocesses) { foundFlowElements.addAll(findFlowElementsInSubProcessOfType((SubProcess) flowElement, type)); } } } return foundFlowElements; }
protected FlowElement getStartElement(SubProcess subProcess) { if (CollectionUtil.isNotEmpty(subProcess.getFlowElements())) { for (FlowElement subElement : subProcess.getFlowElements()) { if (subElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) subElement; if (isOnlyNoneStartEventAllowed) { if (CollectionUtil.isEmpty(startEvent.getEventDefinitions())) { return startEvent; } } else { return startEvent; } } } } return null; }
private void fillSubShapes(Map<String, SubProcess> subShapesMap, SubProcess subProcess) { for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SubProcess) { SubProcess childSubProcess = (SubProcess) flowElement; subShapesMap.put(childSubProcess.getId(), subProcess); fillSubShapes(subShapesMap, childSubProcess); } else { subShapesMap.put(flowElement.getId(), subProcess); } } }
private Activity retrieveAttachedRefObject(String attachedToRefId, Collection<FlowElement> flowElementList) { Activity activity = null; if (StringUtils.isNotEmpty(attachedToRefId)) { for (FlowElement flowElement : flowElementList) { if (attachedToRefId.equals(flowElement.getId())) { activity = (Activity) flowElement; break; } else if (flowElement instanceof SubProcess) { SubProcess subProcess = (SubProcess) flowElement; Activity retrievedActivity = retrieveAttachedRefObject(attachedToRefId, subProcess.getFlowElements()); if (retrievedActivity != null) { activity = retrievedActivity; break; } } } } return activity; }
protected Artifact getArtifactInSubProcess(String id, SubProcess subProcess) { Artifact foundArtifact = subProcess.getArtifact(id); if (foundArtifact == null) { for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SubProcess) { foundArtifact = getArtifactInSubProcess(id, (SubProcess) flowElement); if (foundArtifact != null) { break; } } } } return foundArtifact; }
protected FlowElement getFlowElementInSubProcess(String id, SubProcess subProcess) { FlowElement foundFlowElement = subProcess.getFlowElement(id); if (foundFlowElement == null) { for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SubProcess) { foundFlowElement = getFlowElementInSubProcess(id, (SubProcess) flowElement); if (foundFlowElement != null) { break; } } } } return foundFlowElement; }
protected FlowElement getFlowElementInSubProcess(String id, SubProcess subProcess) { FlowElement foundFlowElement = subProcess.getFlowElement(id); if (foundFlowElement == null) { for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SubProcess) { foundFlowElement = getFlowElementInSubProcess(id, (SubProcess) flowElement); if (foundFlowElement != null) { break; } } } } return foundFlowElement; }
protected Artifact getArtifactInSubProcess(String id, SubProcess subProcess) { Artifact foundArtifact = subProcess.getArtifact(id); if (foundArtifact == null) { for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SubProcess) { foundArtifact = getArtifactInSubProcess(id, (SubProcess) flowElement); if (foundArtifact != null) { break; } } } } return foundArtifact; }
@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; }
@Override protected void executeParse(BpmnParse bpmnParse, SubProcess subProcess) { subProcess.setBehavior(bpmnParse.getActivityBehaviorFactory().createAdhocSubprocessActivityBehavior(subProcess)); bpmnParse.processFlowElements(subProcess.getFlowElements()); processArtifacts(bpmnParse, subProcess.getArtifacts()); }
protected Activity verifyCompensation(DelegateExecution execution, ExecutionEntity executionToUse, Activity activity) { boolean hasCompensation = false; if (activity instanceof Transaction) { hasCompensation = true; } else if (activity instanceof SubProcess) { SubProcess subProcess = (SubProcess) activity; for (FlowElement subElement : subProcess.getFlowElements()) { if (subElement instanceof Activity) { Activity subActivity = (Activity) subElement; if (CollectionUtil.isNotEmpty(subActivity.getBoundaryEvents())) { for (BoundaryEvent boundaryEvent : subActivity.getBoundaryEvents()) { if (CollectionUtil.isNotEmpty(boundaryEvent.getEventDefinitions()) && boundaryEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { hasCompensation = true; break; } } } } } } if (hasCompensation) { ScopeUtil.createCopyOfSubProcessExecutionForCompensation(executionToUse); } return activity; }
@Override protected void executeParse(BpmnParse bpmnParse, SubProcess subProcess) { subProcess.setBehavior(bpmnParse.getActivityBehaviorFactory().createSubprocessActivityBehavior(subProcess)); bpmnParse.processFlowElements(subProcess.getFlowElements()); processArtifacts(bpmnParse, subProcess.getArtifacts()); // no data objects for event subprocesses /* * if (!(subProcess instanceof EventSubProcess)) { // parse out any data objects from the template in order to set up the necessary process variables Map<String, Object> variables = * processDataObjects(bpmnParse, subProcess.getDataObjects(), activity); activity.setVariables(variables); } * * bpmnParse.removeCurrentScope(); bpmnParse.removeCurrentSubProcess(); * * if (subProcess.getIoSpecification() != null) { IOSpecification ioSpecification = createIOSpecification(bpmnParse, subProcess.getIoSpecification()); * activity.setIoSpecification(ioSpecification); } */ }
protected void translateNestedSubprocessElements(SubProcess subProcess) { GraphicInfo subProcessGraphicInfo = bpmnModel.getLocationMap().get(subProcess.getId()); double subProcessX = subProcessGraphicInfo.getX(); double subProcessY = subProcessGraphicInfo.getY(); List<SubProcess> nestedSubProcesses = new ArrayList<>(); for (FlowElement flowElement : subProcess.getFlowElements()) { if (flowElement instanceof SequenceFlow) { List<GraphicInfo> graphicInfos = bpmnModel.getFlowLocationMap().get(flowElement.getId()); for (GraphicInfo graphicInfo : graphicInfos) { graphicInfo.setX(graphicInfo.getX() + subProcessX + subProcessMargin); graphicInfo.setY(graphicInfo.getY() + subProcessY + subProcessMargin); } } else if (!(flowElement instanceof DataObject)) { // Regular element GraphicInfo graphicInfo = bpmnModel.getLocationMap().get(flowElement.getId()); graphicInfo.setX(graphicInfo.getX() + subProcessX + subProcessMargin); graphicInfo.setY(graphicInfo.getY() + subProcessY + subProcessMargin); } if (flowElement instanceof SubProcess) { nestedSubProcesses.add((SubProcess) flowElement); } } // Continue for next level of nested subprocesses for (SubProcess nestedSubProcess : nestedSubProcesses) { translateNestedSubprocessElements(nestedSubProcess); } }
for (FlowElement flowElement : otherElement.getFlowElements()) { addFlowElement(flowElement);
protected void processFlowElements(Collection<FlowElement> flowElementList, BaseElement parentScope) { for (FlowElement flowElement : flowElementList) { if (flowElement instanceof SequenceFlow) { SequenceFlow sequenceFlow = (SequenceFlow) flowElement; FlowNode sourceNode = getFlowNodeFromScope(sequenceFlow.getSourceRef(), parentScope); if (sourceNode != null) { sourceNode.getOutgoingFlows().add(sequenceFlow); sequenceFlow.setSourceFlowElement(sourceNode); } FlowNode targetNode = getFlowNodeFromScope(sequenceFlow.getTargetRef(), parentScope); if (targetNode != null) { targetNode.getIncomingFlows().add(sequenceFlow); sequenceFlow.setTargetFlowElement(targetNode); } } else if (flowElement instanceof BoundaryEvent) { BoundaryEvent boundaryEvent = (BoundaryEvent) flowElement; FlowElement attachedToElement = getFlowNodeFromScope(boundaryEvent.getAttachedToRefId(), parentScope); if (attachedToElement instanceof Activity) { Activity attachedActivity = (Activity) attachedToElement; boundaryEvent.setAttachedToRef(attachedActivity); attachedActivity.getBoundaryEvents().add(boundaryEvent); } } else if (flowElement instanceof SubProcess) { SubProcess subProcess = (SubProcess) flowElement; processFlowElements(subProcess.getFlowElements(), subProcess); } } }
for (FlowElement flowElement : otherElement.getFlowElements()) { addFlowElement(flowElement.clone());
for (FlowElement subElement : subProcess.getFlowElements()) { if (subElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) subElement;
hasCompensation = true; } else { for (FlowElement subElement : subProcess.getFlowElements()) { if (subElement instanceof Activity) { Activity subActivity = (Activity) subElement;
@Override protected void executeParse(BpmnParse bpmnParse, SubProcess subProcess) { ActivityImpl activity = createActivityOnScope(bpmnParse, subProcess, BpmnXMLConstants.ELEMENT_SUBPROCESS, bpmnParse.getCurrentScope()); activity.setAsync(subProcess.isAsynchronous()); activity.setExclusive(!subProcess.isNotExclusive()); boolean triggeredByEvent = false; if (subProcess instanceof EventSubProcess) { triggeredByEvent = true; } activity.setProperty("triggeredByEvent", triggeredByEvent); // event subprocesses are not scopes activity.setScope(!triggeredByEvent); activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createSubprocActivityBehavior(subProcess)); bpmnParse.setCurrentScope(activity); bpmnParse.setCurrentSubProcess(subProcess); bpmnParse.processFlowElements(subProcess.getFlowElements()); processArtifacts(bpmnParse, subProcess.getArtifacts(), activity); // no data objects for event subprocesses if (!(subProcess instanceof EventSubProcess)) { // parse out any data objects from the template in order to set up the necessary process variables Map<String, Object> variables = processDataObjects(bpmnParse, subProcess.getDataObjects(), activity); activity.setVariables(variables); } bpmnParse.removeCurrentScope(); bpmnParse.removeCurrentSubProcess(); if (subProcess.getIoSpecification() != null) { IOSpecification ioSpecification = createIOSpecification(bpmnParse, subProcess.getIoSpecification()); activity.setIoSpecification(ioSpecification); } }