@Override protected String getStencilId(BaseElement baseElement) { EndEvent endEvent = (EndEvent) baseElement; List<EventDefinition> eventDefinitions = endEvent.getEventDefinitions(); if (eventDefinitions.size() != 1) { return STENCIL_EVENT_END_NONE; } EventDefinition eventDefinition = eventDefinitions.get(0); if (eventDefinition instanceof ErrorEventDefinition) { return STENCIL_EVENT_END_ERROR; } else if (eventDefinition instanceof CancelEventDefinition) { return STENCIL_EVENT_END_CANCEL; } else if (eventDefinition instanceof TerminateEventDefinition) { return STENCIL_EVENT_END_TERMINATE; } else { return STENCIL_EVENT_END_NONE; } }
@Override protected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { EndEvent endEvent = (EndEvent) element; writeEventDefinitions(endEvent, endEvent.getEventDefinitions(), model, xtw); } }
@Override protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) { List<EndEvent> endEvents = process.findFlowElementsOfType(EndEvent.class); for (EndEvent endEvent : endEvents) { if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) { EventDefinition eventDefinition = endEvent.getEventDefinitions().get(0); // Error end event if (eventDefinition instanceof CancelEventDefinition) { FlowElementsContainer parent = process.findParent(endEvent); if (!(parent instanceof Transaction)) { addError(errors, Problems.END_EVENT_CANCEL_ONLY_INSIDE_TRANSACTION, process, endEvent, "end event with cancelEventDefinition only supported inside transaction subprocess"); } } } } }
@Override public TerminateEndEventActivityBehavior createTerminateEndEventActivityBehavior(EndEvent endEvent) { boolean terminateAll = false; boolean terminateMultiInstance = false; if (endEvent.getEventDefinitions() != null && endEvent.getEventDefinitions().size() > 0 && endEvent.getEventDefinitions().get(0) instanceof TerminateEventDefinition) { terminateAll = ((TerminateEventDefinition) endEvent.getEventDefinitions().get(0)).isTerminateAll(); terminateMultiInstance = ((TerminateEventDefinition) endEvent.getEventDefinitions().get(0)).isTerminateMultiInstance(); } TerminateEndEventActivityBehavior terminateEndEventActivityBehavior = new TerminateEndEventActivityBehavior(); terminateEndEventActivityBehavior.setTerminateAll(terminateAll); terminateEndEventActivityBehavior.setTerminateMultiInstance(terminateMultiInstance); return terminateEndEventActivityBehavior; }
public TerminateEndEventActivityBehavior(EndEvent endEvent) { this.endEvent = endEvent.clone(); // Terminate all attribute if (endEvent.getEventDefinitions() != null) { for (EventDefinition eventDefinition : endEvent.getEventDefinitions()) { if (eventDefinition instanceof TerminateEventDefinition) { TerminateEventDefinition terminateEventDefinition = (TerminateEventDefinition) eventDefinition; if (terminateEventDefinition.isTerminateAll()) { this.terminateAll = true; break; } } } } }
@Override protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { EndEvent endEvent = new EndEvent(); String stencilId = BpmnJsonConverterUtil.getStencilId(elementNode); if (STENCIL_EVENT_END_ERROR.equals(stencilId)) { convertJsonToErrorDefinition(elementNode, endEvent); } else if (STENCIL_EVENT_END_CANCEL.equals(stencilId)) { CancelEventDefinition eventDefinition = new CancelEventDefinition(); endEvent.getEventDefinitions().add(eventDefinition); } else if (STENCIL_EVENT_END_TERMINATE.equals(stencilId)) { TerminateEventDefinition eventDefinition = new TerminateEventDefinition(); String terminateAllStringValue = getPropertyValueAsString(PROPERTY_TERMINATE_ALL, elementNode); if (StringUtils.isNotEmpty(terminateAllStringValue)) { eventDefinition.setTerminateAll("true".equals(terminateAllStringValue)); } String terminateMiStringValue = getPropertyValueAsString(PROPERTY_TERMINATE_MULTI_INSTANCE, elementNode); if (StringUtils.isNotEmpty(terminateMiStringValue)) { eventDefinition.setTerminateMultiInstance("true".equals(terminateMiStringValue)); } endEvent.getEventDefinitions().add(eventDefinition); } return endEvent; } }
@Override protected void executeParse(BpmnParse bpmnParse, EndEvent endEvent) { EventDefinition eventDefinition = null; if (endEvent.getEventDefinitions().size() > 0) { eventDefinition = endEvent.getEventDefinitions().get(0); if (eventDefinition instanceof ErrorEventDefinition) { ErrorEventDefinition errorDefinition = (ErrorEventDefinition) eventDefinition; if (bpmnParse.getBpmnModel().containsErrorRef(errorDefinition.getErrorCode())) { String errorCode = bpmnParse.getBpmnModel().getErrors().get(errorDefinition.getErrorCode()); if (StringUtils.isEmpty(errorCode)) { LOGGER.warn("errorCode is required for an error event {}", endEvent.getId()); } } endEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createErrorEndEventActivityBehavior(endEvent, errorDefinition)); } else if (eventDefinition instanceof TerminateEventDefinition) { endEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createTerminateEndEventActivityBehavior(endEvent)); } else if (eventDefinition instanceof CancelEventDefinition) { endEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createCancelEndEventActivityBehavior(endEvent)); } else { endEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createNoneEndEventActivityBehavior(endEvent)); } } else { endEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createNoneEndEventActivityBehavior(endEvent)); } }
if (!endEvent.getEventDefinitions().isEmpty()) { eventDefinition = endEvent.getEventDefinitions().get(0);