public BpmnParse createBpmnParse(BpmnParser bpmnParser) { return new BpmnParse(bpmnParser); } }
ProcessDefinitionEntity processDefinition = getProcessDefinition(process.getId()); if (processDefinition != null) { processDefinition.setGraphicalNotationDefined(true); createBPMNEdge(edgeId, bpmnModel.getFlowLocationGraphicInfo(edgeId));
protected BpmnParse createBpmnParseFromResource(ResourceEntity resource) { String resourceName = resource.getName(); ByteArrayInputStream inputStream = new ByteArrayInputStream(resource.getBytes()); BpmnParse bpmnParse = bpmnParser.createParse() .sourceInputStream(inputStream) .setSourceSystemId(resourceName) .deployment(deployment) .name(resourceName); if (deploymentSettings != null) { // Schema validation if needed if (deploymentSettings.containsKey(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED)) { bpmnParse.setValidateSchema((Boolean) deploymentSettings.get(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED)); } // Process validation if needed if (deploymentSettings.containsKey(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED)) { bpmnParse.setValidateProcess((Boolean) deploymentSettings.get(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED)); } } else { // On redeploy, we assume it is validated at the first deploy bpmnParse.setValidateSchema(false); bpmnParse.setValidateProcess(false); } bpmnParse.execute(); return bpmnParse; }
protected void executeParse(BpmnParse bpmnParse, ErrorEventDefinition eventDefinition) { if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) { BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement(); boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundaryEventActivityBehavior(boundaryEvent, true)); } } }
protected void executeParse(BpmnParse bpmnParse, SignalEventDefinition signalDefinition) { Signal signal = null; if (bpmnParse.getBpmnModel().containsSignalId(signalDefinition.getSignalRef())) { signal = bpmnParse.getBpmnModel().getSignal(signalDefinition.getSignalRef()); } if (bpmnParse.getCurrentFlowElement() instanceof IntermediateCatchEvent) { IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) bpmnParse.getCurrentFlowElement(); intermediateCatchEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchSignalEventActivityBehavior(intermediateCatchEvent, signalDefinition, signal)); } else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) { BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement(); boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundarySignalEventActivityBehavior(boundaryEvent, signalDefinition, signal, boundaryEvent.isCancelActivity())); } } }
protected void executeParse(BpmnParse bpmnParse, CancelEventDefinition cancelEventDefinition) { BpmnModel bpmnModel = bpmnParse.getBpmnModel(); if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) { ActivityImpl activity = bpmnParse.getCurrentActivity(); activity.setProperty("type", "cancelBoundaryCatch"); ActivityImpl parent = (ActivityImpl) activity.getParent(); if (!parent.getProperty("type").equals("transaction")) { bpmnModel.addProblem("boundary event with cancelEventDefinition only supported on transaction subprocesses.", cancelEventDefinition); } for (ActivityImpl child : parent.getActivities()) { if (child.getProperty("type").equals("cancelBoundaryCatch") && child != activity) { bpmnModel.addProblem("multiple boundary events with cancelEventDefinition not supported on same transaction subprocess.", cancelEventDefinition); } } activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createCancelBoundaryEventActivityBehavior(cancelEventDefinition)); } }
protected ProcessDefinitionEntity transformProcess(BpmnParse bpmnParse, Process process) { ProcessDefinitionEntity currentProcessDefinition = new ProcessDefinitionEntity(); bpmnParse.setCurrentProcessDefinition(currentProcessDefinition); currentProcessDefinition.setCategory(bpmnParse.getBpmnModel().getTargetNamespace()); currentProcessDefinition.setDescription(process.getDocumentation()); currentProcessDefinition.setDeploymentId(bpmnParse.getDeployment().getId()); createExecutionListenersOnScope(bpmnParse, process.getExecutionListeners(), currentProcessDefinition); ExpressionManager expressionManager = bpmnParse.getExpressionManager(); bpmnParse.setCurrentScope(currentProcessDefinition); bpmnParse.processFlowElements(process.getFlowElements()); processArtifacts(bpmnParse, process.getArtifacts(), currentProcessDefinition); bpmnParse.removeCurrentScope();
.sourceInputStream(inputStream) .setSourceSystemId(resourceName) .deployment(deployment) .name(resourceName); bpmnParse.setValidateSchema((Boolean) deploymentSettings.get(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED)); bpmnParse.setValidateProcess((Boolean) deploymentSettings.get(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED)); bpmnParse.setValidateSchema(false); bpmnParse.setValidateProcess(false); bpmnParse.execute(); for (ProcessDefinitionEntity processDefinition : bpmnParse.getProcessDefinitions()) { processDefinition.setResourceName(resourceName); byte[] diagramBytes = IoUtil.readInputStream(processEngineConfiguration.getProcessDiagramGenerator().generateDiagram(bpmnParse.getBpmnModel(), "png", processEngineConfiguration.getActivityFontName(), processEngineConfiguration.getLabelFontName(), processEngineConfiguration.getAnnotationFontName(), processEngineConfiguration.getClassLoader(),processEngineConfiguration.isDrawSequenceFlowNameWithNoLabelDI()), null); processDefinition.setEngineVersion("v5"); processDefinitions.add(processDefinition); bpmnModelMap.put(processDefinition.getKey(), bpmnParse.getBpmnModel());
protected void createScopeStartEvent(BpmnParse bpmnParse, ActivityImpl startEventActivity, StartEvent startEvent) { ScopeImpl scope = bpmnParse.getCurrentScope(); Object triggeredByEvent = scope.getProperty("triggeredByEvent"); boolean isTriggeredByEvent = triggeredByEvent != null && ((Boolean) triggeredByEvent == true); bpmnParse.getActivityBehaviorFactory().createEventSubProcessStartEventActivityBehavior(startEvent, startEventActivity.getId()); startEventActivity.setActivityBehavior(activityBehavior); || eventDefinition instanceof MessageEventDefinition || eventDefinition instanceof SignalEventDefinition) { bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition); } else { bpmnParse.getBpmnModel().addProblem("start event of event subprocess must be of type 'error', 'message' or 'signal' ", startEvent); bpmnParse.getBpmnModel().addProblem("event definitions only allowed on start event if subprocess is an event subprocess", startEvent); startEventActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(startEvent)); } else { bpmnParse.getBpmnModel().addProblem("multiple start events not supported for subprocess", bpmnParse.getCurrentSubProcess());
.sourceInputStream(inputStream) .deployment(deployment) .name(resourceName); bpmnParse.execute(); for (ProcessDefinitionEntity processDefinition: bpmnParse.getProcessDefinitions()) { processDefinition.setResourceName(resourceName); diagramResourceName==null && processDefinition.isGraphicalNotationDefined()) { try { byte[] diagramBytes = IoUtil.readInputStream(ProcessDiagramGenerator.generatePngDiagram(bpmnParse.getBpmnModel()), null); diagramResourceName = getProcessImageResourceName(resourceName, processDefinition.getKey(), "png"); createResource(diagramResourceName, diagramBytes, deployment);
protected ProcessDefinitionEntity transformProcess(BpmnParse bpmnParse, Process process) { ProcessDefinitionEntity currentProcessDefinition = Context.getCommandContext().getProcessDefinitionEntityManager().create(); bpmnParse.setCurrentProcessDefinition(currentProcessDefinition); /* * Mapping object model - bpmn xml: processDefinition.id -> generated by activiti engine processDefinition.key -> bpmn id (required) processDefinition.name -> bpmn name (optional) */ currentProcessDefinition.setKey(process.getId()); currentProcessDefinition.setName(process.getName()); currentProcessDefinition.setCategory(bpmnParse.getBpmnModel().getTargetNamespace()); currentProcessDefinition.setDescription(process.getDocumentation()); currentProcessDefinition.setDeploymentId(bpmnParse.getDeployment().getId()); if (bpmnParse.getDeployment().getEngineVersion() != null) { currentProcessDefinition.setEngineVersion(bpmnParse.getDeployment().getEngineVersion()); } createEventListeners(bpmnParse, process.getEventListeners()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Parsing process {}", currentProcessDefinition.getKey()); } bpmnParse.processFlowElements(process.getFlowElements()); processArtifacts(bpmnParse, process.getArtifacts()); return currentProcessDefinition; }
protected void createEventListeners(BpmnParse bpmnParse, List<EventListener> eventListeners) { if (eventListeners != null && !eventListeners.isEmpty()) { for (EventListener eventListener : eventListeners) { // Extract specific event-types (if any) ActivitiEventType[] types = ActivitiEventType.getTypesFromString(eventListener.getEvents()); if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equals(eventListener.getImplementationType())) { getEventSupport(bpmnParse.getBpmnModel()).addEventListener(bpmnParse.getListenerFactory().createClassDelegateEventListener(eventListener), types); } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equals(eventListener.getImplementationType())) { getEventSupport(bpmnParse.getBpmnModel()).addEventListener(bpmnParse.getListenerFactory().createDelegateExpressionEventListener(eventListener), types); } else if (ImplementationType.IMPLEMENTATION_TYPE_THROW_SIGNAL_EVENT.equals(eventListener.getImplementationType()) || ImplementationType.IMPLEMENTATION_TYPE_THROW_GLOBAL_SIGNAL_EVENT.equals(eventListener.getImplementationType()) || ImplementationType.IMPLEMENTATION_TYPE_THROW_MESSAGE_EVENT.equals(eventListener.getImplementationType()) || ImplementationType.IMPLEMENTATION_TYPE_THROW_ERROR_EVENT.equals(eventListener.getImplementationType())) { getEventSupport(bpmnParse.getBpmnModel()).addEventListener(bpmnParse.getListenerFactory().createEventThrowingEventListener(eventListener), types); } else { LOGGER.warn("Unsupported implementation type for EventListener: " + eventListener.getImplementationType() + " for element " + bpmnParse.getCurrentFlowElement().getId()); } } } }
protected void executeParse(BpmnParse bpmnParse, TimerEventDefinition timerEventDefinition) { ActivityImpl timerActivity = bpmnParse.getCurrentActivity(); if (bpmnParse.getCurrentFlowElement() instanceof StartEvent) { ProcessDefinitionEntity processDefinition = bpmnParse.getCurrentProcessDefinition(); timerActivity.setProperty("type", "startTimerEvent"); TimerDeclarationImpl timerDeclaration = createTimer(bpmnParse, timerEventDefinition, timerActivity, TimerStartEventJobHandler.TYPE); } else if (bpmnParse.getCurrentFlowElement() instanceof IntermediateCatchEvent) { if (getPrecedingEventBasedGateway(bpmnParse, (IntermediateCatchEvent) bpmnParse.getCurrentFlowElement()) != null) { addTimerDeclaration(timerActivity.getParent(), timerDeclaration); } else { } else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) { BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement(); boolean interrupting = boundaryEvent.isCancelActivity(); if (interrupting) { timerActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory() .createBoundaryEventActivityBehavior((BoundaryEvent) bpmnParse.getCurrentFlowElement(), interrupting, timerActivity));
MultiInstanceActivityBehavior miParallelActivityBehavior = null; MultiInstanceActivityBehavior miSequentialActivityBehavior = null; ActivityImpl activity = bpmnParse.getCurrentScope().findActivity(modelActivity.getId()); if (activity == null) { bpmnParse.getBpmnModel().addProblem("Activity " + modelActivity.getId() + " needed for multi instance cannot bv found", modelActivity); miParallelActivityBehavior = bpmnParse.getActivityBehaviorFactory().createParallelMultiInstanceBehavior( activity, bpmnActivityBehavior); miSequentialActivityBehavior = bpmnParse.getActivityBehaviorFactory().createSequentialMultiInstanceBehavior( activity, bpmnActivityBehavior); miActivityBehavior = new MixMultiInstanceActivityBehavior(activity, activity.setActivityBehavior(miActivityBehavior); ExpressionManager expressionManager = bpmnParse.getExpressionManager(); BpmnModel bpmnModel = bpmnParse.getBpmnModel(); TaskDefinition taskDefinition = bpmnParse.getCurrentProcessDefinition().getTaskDefinition(userTask.getId()); if(taskDefinition.getAssigneeExpression() == null && taskDefinition.getCandidateGroupIdExpressions().isEmpty() && taskDefinition.getCandidateUserIdExpressions().isEmpty())
@Override protected void executeParse(BpmnParse bpmnParse, BusinessRuleTask businessRuleTask) { businessRuleTask.setBehavior(bpmnParse.getActivityBehaviorFactory().createBusinessRuleTaskActivityBehavior(businessRuleTask)); }
protected void executeParse(BpmnParse bpmnParse, ThrowEvent intermediateEvent) { BpmnModel bpmnModel = bpmnParse.getBpmnModel(); ActivityImpl nestedActivityImpl = createActivityOnCurrentScope(bpmnParse, intermediateEvent, BpmnXMLConstants.ELEMENT_EVENT_THROW); EventDefinition eventDefinition = null; if (intermediateEvent.getEventDefinitions().size() > 0) { eventDefinition = intermediateEvent.getEventDefinitions().get(0); } if (eventDefinition instanceof SignalEventDefinition) { bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition); } else if (eventDefinition instanceof org.activiti.bpmn.model.CompensateEventDefinition) { bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition); } else if (eventDefinition == null) { nestedActivityImpl.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowNoneEventActivityBehavior(intermediateEvent)); } else { bpmnModel.addProblem("Unsupported intermediate throw event type " + eventDefinition, intermediateEvent); } }
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()); } } }
protected void executeParse(BpmnParse bpmnParse, ThrowEvent intermediateEvent) { EventDefinition eventDefinition = null; if (!intermediateEvent.getEventDefinitions().isEmpty()) { eventDefinition = intermediateEvent.getEventDefinitions().get(0); } if (eventDefinition instanceof SignalEventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition; intermediateEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowSignalEventActivityBehavior(intermediateEvent, signalEventDefinition, bpmnParse.getBpmnModel().getSignal(signalEventDefinition.getSignalRef()))); } else if (eventDefinition instanceof CompensateEventDefinition) { CompensateEventDefinition compensateEventDefinition = (CompensateEventDefinition) eventDefinition; intermediateEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowCompensationEventActivityBehavior(intermediateEvent, compensateEventDefinition)); } else if (eventDefinition == null) { intermediateEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateThrowNoneEventActivityBehavior(intermediateEvent)); } else { logger.warn("Unsupported intermediate throw event type for throw event " + intermediateEvent.getId()); } }
ProcessDefinitionEntity processDefinition = getProcessDefinition(process.getId()); if (processDefinition != null) { processDefinition.setGraphicalNotationDefined(true); for (String shapeId : bpmnModel.getLocationMap().keySet()) { if (processDefinition.findActivity(shapeId) != null) { createBPMNShape(shapeId, bpmnModel.getGraphicInfo(shapeId), processDefinition); createBPMNEdge(edgeId, bpmnModel.getFlowLocationGraphicInfo(edgeId));
@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); } }