private void validateNonInterruptingBoundaryEvent(final BoundaryEventDefinition boundaryEvent) { if (!boundaryEvent.isInterrupting()) { if (!boundaryEvent.getSignalEventTriggerDefinitions().isEmpty()) { designErrors.add("Non-interrupting boundary events are not supported for SIGNAL events: " + boundaryEvent.getName()); } if (!boundaryEvent.getMessageEventTriggerDefinitions().isEmpty()) { designErrors.add("Non-interrupting boundary events are not supported for MESSAGE events: " + boundaryEvent.getName()); } if (!boundaryEvent.getErrorEventTriggerDefinitions().isEmpty()) { designErrors.add("An error event must be INTERRUPTING: " + boundaryEvent.getName()); } } }
if (!activity.getBoundaryEventDefinitions().isEmpty() && !supportAllBoundaryEvents(activity)) { for (final BoundaryEventDefinition boundary : activity.getBoundaryEventDefinitions()) { if (!boundary.getTimerEventTriggerDefinitions().isEmpty()) { designErrors.add("Timer boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (!boundary.getSignalEventTriggerDefinitions().isEmpty()) { designErrors.add("Signal boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (!boundary.getMessageEventTriggerDefinitions().isEmpty()) { designErrors.add("Message boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (boundaryEvent.getOutgoingTransitions().isEmpty()) { designErrors.add("A boundary event must have outgoing transitions: " + boundaryEvent.getName()); } else { validateBoundaryOutgoingTransitions(boundaryEvent); if (!boundaryEvent.getIncomingTransitions().isEmpty()) { designErrors.add("A boundary event must not have incoming transitions: " + boundaryEvent.getName()); if (boundaryEvent.getEventTriggers().isEmpty()) { designErrors.add("A boundary event must have a trigger (it cannot be a NONE event): " + boundaryEvent.getName()); for (final TimerEventTriggerDefinition timerTigger : boundaryEvent.getTimerEventTriggerDefinitions()) { if (TimerType.CYCLE.equals(timerTigger.getTimerType())) { designErrors.add("Invalid timer type in boundary event " + boundaryEvent.getName() + ": CYCLE is not supported for boundary events.");
private void addEventTriggerOnBoundaryEvent(FlowElementContainerDefinition flowElementContainer) { for (ActivityDefinition activity : flowElementContainer.getActivities()) { for (BoundaryEventDefinition boundaryEvent : activity.getBoundaryEventDefinitions()) { BoundaryEventDefinitionImpl boundaryEventImpl = (BoundaryEventDefinitionImpl) boundaryEvent; for (MessageEventTriggerDefinition messageEventTrigger : boundaryEvent.getMessageEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(messageEventTrigger); } for (ErrorEventTriggerDefinition errorEventTrigger : boundaryEvent.getErrorEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(errorEventTrigger); } for (SignalEventTriggerDefinition signalEventTrigger : boundaryEventImpl.getSignalEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(signalEventTrigger); } for (TimerEventTriggerDefinition timerEventTrigger : boundaryEvent.getTimerEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(timerEventTrigger); } } if (activity.getClass() == SubProcessDefinitionImpl.class) { addEventTriggerOnEvents(((SubProcessDefinitionImpl) activity).getSubProcessContainer()); } } }
private void checkProcessForBoundaryEvents(final DesignProcessDefinition process, final DesignProcessDefinition result, final boolean isInterrupting) { assertEquals(process.getName(), result.getName()); assertEquals(process.getVersion(), result.getVersion()); assertEquals(process.getFlowElementContainer().getStartEvents(), result.getFlowElementContainer().getStartEvents()); assertEquals(1, result.getFlowElementContainer().getStartEvents().size()); assertEquals(process.getFlowElementContainer().getActivities().size(), result.getFlowElementContainer().getActivities().size()); final ActivityDefinition resultActivity = result.getFlowElementContainer().getActivity("userTask"); final ActivityDefinition origActivity = process.getFlowElementContainer().getActivity("userTask"); assertEquals(origActivity, resultActivity); assertEquals(origActivity.getBoundaryEventDefinitions().size(), resultActivity.getBoundaryEventDefinitions().size()); for (final BoundaryEventDefinition boundary : resultActivity.getBoundaryEventDefinitions()) { assertEquals(1, boundary.getEventTriggers().size()); assertEquals(isInterrupting, boundary.isInterrupting()); } assertEquals(process.getFlowElementContainer().getEndEvents(), result.getFlowElementContainer().getEndEvents()); assertEquals(1, result.getFlowElementContainer().getEndEvents().size()); }
private void validateBoundaryOutgoingTransitions(final BoundaryEventDefinition boundaryEvent) { for (final TransitionDefinition transition : boundaryEvent.getOutgoingTransitions()) { if (transition.getCondition() != null) { designErrors.add("A boundary event must have no conditional transitions: " + transition.getSource() + "->" + transition.getTarget()); } } }
if (!activity.getBoundaryEventDefinitions().isEmpty() && !supportAllBoundaryEvents(activity)) { for (final BoundaryEventDefinition boundary : activity.getBoundaryEventDefinitions()) { if (!boundary.getTimerEventTriggerDefinitions().isEmpty()) { designErrors.add("Timer boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (!boundary.getSignalEventTriggerDefinitions().isEmpty()) { designErrors.add("Signal boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (!boundary.getMessageEventTriggerDefinitions().isEmpty()) { designErrors.add("Message boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); if (boundaryEvent.getOutgoingTransitions().isEmpty()) { designErrors.add("A boundary event must have outgoing transitions: " + boundaryEvent.getName()); } else { validateBoundaryOutgoingTransitions(boundaryEvent); if (!boundaryEvent.getIncomingTransitions().isEmpty()) { designErrors.add("A boundary event must not have incoming transitions: " + boundaryEvent.getName()); if (boundaryEvent.getEventTriggers().isEmpty()) { designErrors.add("A boundary event must have a trigger (it cannot be a NONE event): " + boundaryEvent.getName()); for (final TimerEventTriggerDefinition timerTigger : boundaryEvent.getTimerEventTriggerDefinitions()) { if (TimerType.CYCLE.equals(timerTigger.getTimerType())) { designErrors.add("Invalid timer type in boundary event " + boundaryEvent.getName() + ": CYCLE is not supported for boundary events.");
private void addEventTriggerOnBoundaryEvent(FlowElementContainerDefinition flowElementContainer) { for (ActivityDefinition activity : flowElementContainer.getActivities()) { for (BoundaryEventDefinition boundaryEvent : activity.getBoundaryEventDefinitions()) { BoundaryEventDefinitionImpl boundaryEventImpl = (BoundaryEventDefinitionImpl) boundaryEvent; for (MessageEventTriggerDefinition messageEventTrigger : boundaryEvent.getMessageEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(messageEventTrigger); } for (ErrorEventTriggerDefinition errorEventTrigger : boundaryEvent.getErrorEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(errorEventTrigger); } for (SignalEventTriggerDefinition signalEventTrigger : boundaryEventImpl.getSignalEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(signalEventTrigger); } for (TimerEventTriggerDefinition timerEventTrigger : boundaryEvent.getTimerEventTriggerDefinitions()) { boundaryEventImpl.addEventTrigger(timerEventTrigger); } } if (activity.getClass() == SubProcessDefinitionImpl.class) { addEventTriggerOnEvents(((SubProcessDefinitionImpl) activity).getSubProcessContainer()); } } }
private void validateBoundaryOutgoingTransitions(final BoundaryEventDefinition boundaryEvent) { for (final TransitionDefinition transition : boundaryEvent.getOutgoingTransitions()) { if (transition.getCondition() != null) { designErrors.add("A boundary event must have no conditional transitions: " + transition.getSource() + "->" + transition.getTarget()); } } }
private void validateNonInterruptingBoundaryEvent(final BoundaryEventDefinition boundaryEvent) { if (!boundaryEvent.isInterrupting()) { if (!boundaryEvent.getSignalEventTriggerDefinitions().isEmpty()) { designErrors.add("Non-interrupting boundary events are not supported for SIGNAL events: " + boundaryEvent.getName()); } if (!boundaryEvent.getMessageEventTriggerDefinitions().isEmpty()) { designErrors.add("Non-interrupting boundary events are not supported for MESSAGE events: " + boundaryEvent.getName()); } if (!boundaryEvent.getErrorEventTriggerDefinitions().isEmpty()) { designErrors.add("An error event must be INTERRUPTING: " + boundaryEvent.getName()); } } }