protected String getStencilId(BaseElement baseElement) { IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) baseElement; List<EventDefinition> eventDefinitions = catchEvent.getEventDefinitions(); if (eventDefinitions.size() != 1) { // return timer event as default; return STENCIL_EVENT_CATCH_TIMER; } EventDefinition eventDefinition = eventDefinitions.get(0); if (eventDefinition instanceof MessageEventDefinition) { return STENCIL_EVENT_CATCH_MESSAGE; } else if (eventDefinition instanceof SignalEventDefinition) { return STENCIL_EVENT_CATCH_SIGNAL; } else { return STENCIL_EVENT_CATCH_TIMER; } }
protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { IntermediateCatchEvent catchEvent = new IntermediateCatchEvent(); String stencilId = BpmnJsonConverterUtil.getStencilId(elementNode); if (STENCIL_EVENT_CATCH_TIMER.equals(stencilId)) { convertJsonToTimerDefinition(elementNode, catchEvent); } else if (STENCIL_EVENT_CATCH_MESSAGE.equals(stencilId)) { convertJsonToMessageDefinition(elementNode, catchEvent); } else if (STENCIL_EVENT_CATCH_SIGNAL.equals(stencilId)) { convertJsonToSignalDefinition(elementNode, catchEvent); } return catchEvent; } }
protected void executeParse(BpmnParse bpmnParse, IntermediateCatchEvent event) { EventDefinition eventDefinition = null; if (!event.getEventDefinitions().isEmpty()) { eventDefinition = event.getEventDefinitions().get(0); } if (eventDefinition == null) { event.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchEventActivityBehavior(event)); } else { if (eventDefinition instanceof TimerEventDefinition || eventDefinition instanceof SignalEventDefinition || eventDefinition instanceof MessageEventDefinition) { bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition); } else { logger.warn("Unsupported intermediate catch event type for event " + event.getId()); } } }
ActivityImpl nestedActivity = null; EventDefinition eventDefinition = null; if (event.getEventDefinitions().size() > 0) { eventDefinition = event.getEventDefinitions().get(0); bpmnModel.addProblem("No event definition for intermediate catch event " + event.getId(), event); nestedActivity = createActivityOnCurrentScope(bpmnParse, event, BpmnXMLConstants.ELEMENT_EVENT_CATCH);
@Override protected IntermediateCatchEvent createProcessArtifact(DelayStepDefinition stepDefinition, WorkflowDefinitionConversion conversion) { IntermediateCatchEvent event = new IntermediateCatchEvent(); event.setId(conversion.getUniqueNumberedId(ConversionConstants.INTERMEDIATE_EVENT_ID_PREVIX)); event.setName(stepDefinition.getName()); event.setDocumentation(stepDefinition.getDescription()); TimerEventDefinition timer = new TimerEventDefinition(); event.addEventDefinition(timer); if(stepDefinition.getTimeDate() != null) { timer.setTimeDate(stepDefinition.getTimeDate()); } else if(stepDefinition.getTimeDuration() != null) { timer.setTimeDuration(stepDefinition.getTimeDuration().toISO8601DurationString()); } addFlowElement(conversion, event, true); return event; } }
protected EventGateway getPrecedingEventBasedGateway(DelegateExecution execution) { FlowElement currentFlowElement = execution.getCurrentFlowElement(); if (currentFlowElement instanceof IntermediateCatchEvent) { IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) currentFlowElement; List<SequenceFlow> incomingSequenceFlow = intermediateCatchEvent.getIncomingFlows(); // If behind an event based gateway, there is only one incoming sequence flow that originates from said gateway if (incomingSequenceFlow != null && incomingSequenceFlow.size() == 1) { SequenceFlow sequenceFlow = incomingSequenceFlow.get(0); FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); if (sourceFlowElement instanceof EventGateway) { return (EventGateway) sourceFlowElement; } } } return null; }
protected String getPrecedingEventBasedGateway(BpmnParse bpmnParse, IntermediateCatchEvent event) { String eventBasedGatewayId = null; for (SequenceFlow sequenceFlow : event.getIncomingFlows()) { FlowElement sourceElement = bpmnParse.getBpmnModel().getFlowElement(sequenceFlow.getSourceRef()); if (sourceElement instanceof EventGateway) { eventBasedGatewayId = sourceElement.getId(); break; } } return eventBasedGatewayId; }
@Override protected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) element; writeEventDefinitions(catchEvent, catchEvent.getEventDefinitions(), model, xtw); } }
protected void executeParse(BpmnParse bpmnParse, IntermediateCatchEvent event) { EventDefinition eventDefinition = null; if (!event.getEventDefinitions().isEmpty()) { eventDefinition = event.getEventDefinitions().get(0); } if (eventDefinition == null) { event.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchEventActivityBehavior(event)); } else { if (eventDefinition instanceof TimerEventDefinition || eventDefinition instanceof SignalEventDefinition || eventDefinition instanceof MessageEventDefinition) { bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition); } else { logger.warn("Unsupported intermediate catch event type for event " + event.getId()); } } }
@Override protected BaseElement convertXMLToElement(XMLStreamReader xtr, BpmnModel model) throws Exception { IntermediateCatchEvent catchEvent = new IntermediateCatchEvent(); BpmnXMLUtil.addXMLLocation(catchEvent, xtr); parseChildElements(getXMLElementName(), catchEvent, model, xtr); return catchEvent; }
protected EventGateway getPrecedingEventBasedGateway(DelegateExecution execution) { FlowElement currentFlowElement = execution.getCurrentFlowElement(); if (currentFlowElement instanceof IntermediateCatchEvent) { IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) currentFlowElement; List<SequenceFlow> incomingSequenceFlow = intermediateCatchEvent.getIncomingFlows(); // If behind an event based gateway, there is only one incoming sequence flow that originates from said gateway if (incomingSequenceFlow != null && incomingSequenceFlow.size() == 1) { SequenceFlow sequenceFlow = incomingSequenceFlow.get(0); FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); if (sourceFlowElement instanceof EventGateway) { return (EventGateway) sourceFlowElement; } } } return null; }
@Override protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) { List<IntermediateCatchEvent> intermediateCatchEvents = process.findFlowElementsOfType(IntermediateCatchEvent.class); for (IntermediateCatchEvent intermediateCatchEvent : intermediateCatchEvents) { EventDefinition eventDefinition = null; if (!intermediateCatchEvent.getEventDefinitions().isEmpty()) { eventDefinition = intermediateCatchEvent.getEventDefinitions().get(0); } if (eventDefinition == null) { addError(errors, Problems.INTERMEDIATE_CATCH_EVENT_NO_EVENTDEFINITION, process, intermediateCatchEvent, "No event definition for intermediate catch event "); } else { if (!(eventDefinition instanceof TimerEventDefinition) && !(eventDefinition instanceof SignalEventDefinition) && !(eventDefinition instanceof MessageEventDefinition)) { addError(errors, Problems.INTERMEDIATE_CATCH_EVENT_INVALID_EVENTDEFINITION, process, intermediateCatchEvent, "Unsupported intermediate catch event type"); } } } }
protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map<String, JsonNode> shapeMap) { IntermediateCatchEvent catchEvent = new IntermediateCatchEvent(); String stencilId = BpmnJsonConverterUtil.getStencilId(elementNode); if (STENCIL_EVENT_CATCH_TIMER.equals(stencilId)) { convertJsonToTimerDefinition(elementNode, catchEvent); } else if (STENCIL_EVENT_CATCH_MESSAGE.equals(stencilId)) { convertJsonToMessageDefinition(elementNode, catchEvent); } else if (STENCIL_EVENT_CATCH_SIGNAL.equals(stencilId)) { convertJsonToSignalDefinition(elementNode, catchEvent); } return catchEvent; } }
protected String getPrecedingEventBasedGateway(BpmnParse bpmnParse, IntermediateCatchEvent event) { String eventBasedGatewayId = null; for (SequenceFlow sequenceFlow : event.getIncomingFlows()) { FlowElement sourceElement = bpmnParse.getBpmnModel().getFlowElement(sequenceFlow.getSourceRef()); if (sourceElement instanceof EventGateway) { eventBasedGatewayId = sourceElement.getId(); break; } } return eventBasedGatewayId; }
@Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) flowNode; if (intermediateCatchEvent.getEventDefinitions() != null && !intermediateCatchEvent.getEventDefinitions() .isEmpty()) { if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { processDiagramCanvas.drawCatchingSignalEvent(flowNode.getId(), flowNode.getName(), graphicInfo, true); } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { processDiagramCanvas.drawCatchingTimerEvent(flowNode.getId(), flowNode.getName(), graphicInfo, true); } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { processDiagramCanvas.drawCatchingMessageEvent(flowNode.getId(), flowNode.getName(), graphicInfo, true); } } } });
@Override protected BaseElement convertXMLToElement(XMLStreamReader xtr, BpmnModel model) throws Exception { IntermediateCatchEvent catchEvent = new IntermediateCatchEvent(); BpmnXMLUtil.addXMLLocation(catchEvent, xtr); parseChildElements(getXMLElementName(), catchEvent, model, xtr); return catchEvent; }
protected String getPrecedingEventBasedGateway(BpmnParse bpmnParse, IntermediateCatchEvent event) { String eventBasedGatewayId = null; for (SequenceFlow sequenceFlow : event.getIncomingFlows()) { FlowElement sourceElement = bpmnParse.getBpmnModel().getFlowElement(sequenceFlow.getSourceRef()); if (sourceElement instanceof EventGateway) { eventBasedGatewayId = sourceElement.getId(); break; } } return eventBasedGatewayId; }
protected String getStencilId(BaseElement baseElement) { IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) baseElement; List<EventDefinition> eventDefinitions = catchEvent.getEventDefinitions(); if (eventDefinitions.size() != 1) { // return timer event as default; return STENCIL_EVENT_CATCH_TIMER; } EventDefinition eventDefinition = eventDefinitions.get(0); if (eventDefinition instanceof MessageEventDefinition) { return STENCIL_EVENT_CATCH_MESSAGE; } else if (eventDefinition instanceof SignalEventDefinition) { return STENCIL_EVENT_CATCH_SIGNAL; } else { return STENCIL_EVENT_CATCH_TIMER; } }
@Override protected BaseElement convertXMLToElement(XMLStreamReader xtr) throws Exception { IntermediateCatchEvent catchEvent = new IntermediateCatchEvent(); BpmnXMLUtil.addXMLLocation(catchEvent, xtr); parseChildElements(getXMLElementName(), catchEvent, xtr); return catchEvent; }
@Override protected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) element; writeEventDefinitions(catchEvent, catchEvent.getEventDefinitions(), model, xtw); } }