protected void validateEventDefinitionTypes(List<StartEvent> startEvents, Process process, List<ValidationError> errors) { for (StartEvent startEvent : startEvents) { if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (!(eventDefinition instanceof MessageEventDefinition) && !(eventDefinition instanceof TimerEventDefinition) && !(eventDefinition instanceof SignalEventDefinition)) { addError(errors, Problems.START_EVENT_INVALID_EVENT_DEFINITION, process, startEvent, "Unsupported event definition on start event"); } } } }
@Override protected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeEventDefinitions(startEvent, startEvent.getEventDefinitions(), model, xtw); } }
protected void validateMultipleStartEvents(List<StartEvent> startEvents, Process process, List<ValidationError> errors) { // Multiple none events are not supported List<StartEvent> noneStartEvents = new ArrayList<StartEvent>(); for (StartEvent startEvent : startEvents) { if (startEvent.getEventDefinitions() == null || startEvent.getEventDefinitions().isEmpty()) { noneStartEvents.add(startEvent); } } if (noneStartEvents.size() > 1) { for (StartEvent startEvent : noneStartEvents) { addError( errors, Problems.START_EVENT_MULTIPLE_FOUND, process, startEvent, "Multiple none start events are not supported"); } } }
@Override protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) { List<EventSubProcess> eventSubprocesses = process.findFlowElementsOfType(EventSubProcess.class); for (EventSubProcess eventSubprocess : eventSubprocesses) { List<StartEvent> startEvents = process.findFlowElementsInSubProcessOfType(eventSubprocess, StartEvent.class); for (StartEvent startEvent : startEvents) { if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (!(eventDefinition instanceof org.activiti.bpmn.model.ErrorEventDefinition) && !(eventDefinition instanceof MessageEventDefinition) && !(eventDefinition instanceof SignalEventDefinition)) { addError(errors, Problems.EVENT_SUBPROCESS_INVALID_START_EVENT_DEFINITION, process, eventSubprocess, "start event of event subprocess must be of type 'error', 'message' or 'signal'"); } } } } }
@Override protected void writeAdditionalAttributes(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INITIATOR, startEvent.getInitiator(), xtw); writeQualifiedAttribute(ATTRIBUTE_FORM_FORMKEY, startEvent.getFormKey(), xtw); if (startEvent.getEventDefinitions() != null && startEvent.getEventDefinitions().size() > 0) { writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INTERRUPTING, String.valueOf(startEvent.isInterrupting()), xtw); } }
protected void addMessageEventSubscriptions(ProcessDefinitionEntity processDefinition, Process process, BpmnModel bpmnModel) { if (CollectionUtil.isNotEmpty(process.getFlowElements())) { for (FlowElement element : process.getFlowElements()) { if (element instanceof StartEvent) { StartEvent startEvent = (StartEvent) element; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof MessageEventDefinition) { MessageEventDefinition messageEventDefinition = (MessageEventDefinition) eventDefinition; insertMessageEvent(messageEventDefinition, startEvent, processDefinition, bpmnModel); } } } } } }
@Override protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) { List<SubProcess> subProcesses = process.findFlowElementsOfType(SubProcess.class); for (SubProcess subProcess : subProcesses) { if (!(subProcess instanceof EventSubProcess)) { // Verify start events List<StartEvent> startEvents = process.findFlowElementsInSubProcessOfType(subProcess, StartEvent.class, false); if (startEvents.size() > 1) { addError(errors, Problems.SUBPROCESS_MULTIPLE_START_EVENTS, process, subProcess, "Multiple start events not supported for subprocess"); } for (StartEvent startEvent : startEvents) { if (!startEvent.getEventDefinitions().isEmpty()) { addError(errors, Problems.SUBPROCESS_START_EVENT_EVENT_DEFINITION_NOT_ALLOWED, process, startEvent, "event definitions only allowed on start event if subprocess is an event subprocess"); } } } } }
if (flowElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) flowElement; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions()) && startEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { ErrorEventDefinition errorEventDef = (ErrorEventDefinition) startEvent.getEventDefinitions().get(0); String eventErrorCode = retrieveErrorCode(bpmnModel, errorEventDef.getErrorCode());
@Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); StartEvent startEvent = (StartEvent) flowNode; if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof TimerEventDefinition) { processDiagramCanvas.drawTimerStartEvent(flowNode.getId(), graphicInfo); } else if (eventDefinition instanceof ErrorEventDefinition) { processDiagramCanvas.drawErrorStartEvent(flowNode.getId(), graphicInfo); } else if (eventDefinition instanceof SignalEventDefinition) { processDiagramCanvas.drawSignalStartEvent(flowNode.getId(), graphicInfo); } else if (eventDefinition instanceof MessageEventDefinition) { processDiagramCanvas.drawMessageStartEvent(flowNode.getId(), graphicInfo); } else { processDiagramCanvas.drawNoneStartEvent(flowNode.getId(), graphicInfo); } } else { processDiagramCanvas.drawNoneStartEvent(flowNode.getId(), graphicInfo); } } });
public ProcessInstance createAndStartProcessInstanceByMessage(ProcessDefinition processDefinition, String messageName, Map<String, Object> variables, Map<String, Object> transientVariables) { CommandContext commandContext = Context.getCommandContext(); // Do not start process a process instance if the process definition is suspended if (ProcessDefinitionUtil.isProcessDefinitionSuspended(processDefinition.getId())) { throw new ActivitiException("Cannot start process instance. Process definition " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") is suspended"); } // Get model from cache Process process = ProcessDefinitionUtil.getProcess(processDefinition.getId()); if (process == null) { throw new ActivitiException("Cannot start process instance. Process model " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") could not be found"); } FlowElement initialFlowElement = null; for (FlowElement flowElement : process.getFlowElements()) { if (flowElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) flowElement; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions()) && startEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { MessageEventDefinition messageEventDefinition = (MessageEventDefinition) startEvent.getEventDefinitions().get(0); if (messageEventDefinition.getMessageRef().equals(messageName)) { initialFlowElement = flowElement; break; } } } } if (initialFlowElement == null) { throw new ActivitiException("No message start event found for process definition " + processDefinition.getId() + " and message name " + messageName); } return createAndStartProcessInstanceWithInitialFlowElement(processDefinition, null, null, initialFlowElement, process, variables, transientVariables, true); }
if (element instanceof StartEvent) { StartEvent startEvent = (StartEvent) element; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof TimerEventDefinition) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition;
for (StartEvent startEvent : startEvents) { if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof TimerEventDefinition) { restoreTimerStartEvent(previousProcessDefinition, startEvent, eventDefinition);
@Override protected void executeParse(BpmnParse bpmnParse, StartEvent element) { if (element.getSubProcess() != null && element.getSubProcess() instanceof EventSubProcess) { if (CollectionUtil.isNotEmpty(element.getEventDefinitions())) { EventDefinition eventDefinition = element.getEventDefinitions().get(0); if (eventDefinition instanceof MessageEventDefinition) { MessageEventDefinition messageDefinition = (MessageEventDefinition) eventDefinition; BpmnModel bpmnModel = bpmnParse.getBpmnModel(); String messageRef = messageDefinition.getMessageRef(); if (bpmnModel.containsMessageId(messageRef)) { Message message = bpmnModel.getMessage(messageRef); messageDefinition.setMessageRef(message.getName()); messageDefinition.setExtensionElements(message.getExtensionElements()); } element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessMessageStartEventActivityBehavior(element, messageDefinition)); } else if (eventDefinition instanceof ErrorEventDefinition) { element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessErrorStartEventActivityBehavior(element)); } } } else if (CollectionUtil.isEmpty(element.getEventDefinitions())) { element.setBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(element)); } if (element.getSubProcess() == null && (CollectionUtil.isEmpty(element.getEventDefinitions()) || bpmnParse.getCurrentProcess().getInitialFlowElement() == null)) { bpmnParse.getCurrentProcess().setInitialFlowElement(element); } }
if (element instanceof StartEvent) { StartEvent startEvent = (StartEvent) element; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof SignalEventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition;
if (subElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) subElement; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof MessageEventDefinition) { MessageEventDefinition messageEventDefinition = (MessageEventDefinition) eventDefinition;
public void execute(DelegateExecution execution) { SubProcess subProcess = getSubProcessFromExecution(execution); FlowElement startElement = null; if (CollectionUtil.isNotEmpty(subProcess.getFlowElements())) { for (FlowElement subElement : subProcess.getFlowElements()) { if (subElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) subElement; // start none event if (CollectionUtil.isEmpty(startEvent.getEventDefinitions())) { startElement = startEvent; break; } } } } if (startElement == null) { throw new ActivitiException("No initial activity found for subprocess " + subProcess.getId()); } ExecutionEntity executionEntity = (ExecutionEntity) execution; executionEntity.setScope(true); // initialize the template-defined data objects as variables Map<String, Object> dataObjectVars = processDataObjects(subProcess.getDataObjects()); if (dataObjectVars != null) { executionEntity.setVariablesLocal(dataObjectVars); } ExecutionEntity startSubProcessExecution = Context.getCommandContext().getExecutionEntityManager() .createChildExecution(executionEntity); startSubProcessExecution.setCurrentFlowElement(startElement); Context.getAgenda().planContinueProcessOperation(startSubProcessExecution); }
protected void validateEventDefinitionTypes(List<StartEvent> startEvents, Process process, List<ValidationError> errors) { for (StartEvent startEvent : startEvents) { if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (!(eventDefinition instanceof MessageEventDefinition) && !(eventDefinition instanceof TimerEventDefinition) && !(eventDefinition instanceof SignalEventDefinition)) { addError(errors, Problems.START_EVENT_INVALID_EVENT_DEFINITION, process, startEvent, "Unsupported event definition on start event"); } } } }
@Override protected void writeAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeEventDefinitions(startEvent, startEvent.getEventDefinitions(), model, xtw); } }
@Override protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeEventDefinitions(startEvent.getEventDefinitions(), xtw); }
@Override protected void writeAdditionalAttributes(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INITIATOR, startEvent.getInitiator(), xtw); writeQualifiedAttribute(ATTRIBUTE_FORM_FORMKEY, startEvent.getFormKey(), xtw); if (startEvent.getEventDefinitions() != null && startEvent.getEventDefinitions().size() > 0) { writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INTERRUPTING, String.valueOf(startEvent.isInterrupting()), xtw); } }