protected String generateInfosFromDefinition(final DesignProcessDefinition processDefinition) { final FlowElementContainerDefinition processContainer = processDefinition.getFlowElementContainer(); return new StringBuilder("key1:").append(processDefinition.getActorsList().size()).append(",key2:").append(processContainer.getTransitions().size()) .append(",key3:").append(processContainer.getActivities().size()).toString(); }
protected String generateInfosFromDefinition(final DesignProcessDefinition processDefinition) { final FlowElementContainerDefinition processContainer = processDefinition.getFlowElementContainer(); return new StringBuilder("key1:").append(processDefinition.getActorsList().size()).append(",key2:").append(processContainer.getTransitions().size()) .append(",key3:").append(processContainer.getActivities().size()).toString(); }
private void validateOperationsInActivities(final FlowElementContainerDefinition flowElementContainer) { for (ActivityDefinition activity : flowElementContainer.getActivities()) { if (activity.getOperations().size() > 1) { validateOperations(activity.getOperations(), activity.getName()); } validateConnectors(activity.getConnectors()); } }
private void validateOperationsInActivities(final FlowElementContainerDefinition flowElementContainer) { for (ActivityDefinition activity : flowElementContainer.getActivities()) { if (activity.getOperations().size() > 1) { validateOperations(activity.getOperations(), activity.getName()); } validateConnectors(activity.getConnectors()); } }
private void validateMultiInstances(final FlowElementContainerDefinition processContainer) { for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity.getLoopCharacteristics() != null && activity.getLoopCharacteristics() instanceof MultiInstanceLoopCharacteristics) { final MultiInstanceLoopCharacteristics loopCharacteristics = (MultiInstanceLoopCharacteristics) activity.getLoopCharacteristics(); if (loopCharacteristics.getLoopDataInputRef() != null && !loopCharacteristics.getLoopDataInputRef().isEmpty() && (loopCharacteristics.getLoopDataInputRef() == null || loopCharacteristics.getLoopDataInputRef().isEmpty())) { designErrors.add("The multi instance has got a data input reference but does not have a loop data input on activity" + activity.getName()); } if (loopCharacteristics.getDataOutputItemRef() != null && !loopCharacteristics.getDataOutputItemRef().isEmpty() && (loopCharacteristics.getLoopDataOutputRef() == null || loopCharacteristics.getLoopDataOutputRef().isEmpty())) { designErrors .add("The multi instance has got a data output reference but does not have a loop data output on activity" + activity.getName()); } // TODO add validation on data existence } } }
private void validateMultiInstances(final FlowElementContainerDefinition processContainer) { for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity.getLoopCharacteristics() != null && activity.getLoopCharacteristics() instanceof MultiInstanceLoopCharacteristics) { final MultiInstanceLoopCharacteristics loopCharacteristics = (MultiInstanceLoopCharacteristics) activity.getLoopCharacteristics(); if (loopCharacteristics.getLoopDataInputRef() != null && !loopCharacteristics.getLoopDataInputRef().isEmpty() && (loopCharacteristics.getLoopDataInputRef() == null || loopCharacteristics.getLoopDataInputRef().isEmpty())) { designErrors.add("The multi instance has got a data input reference but does not have a loop data input on activity" + activity.getName()); } if (loopCharacteristics.getDataOutputItemRef() != null && !loopCharacteristics.getDataOutputItemRef().isEmpty() && (loopCharacteristics.getLoopDataOutputRef() == null || loopCharacteristics.getLoopDataOutputRef().isEmpty())) { designErrors .add("The multi instance has got a data output reference but does not have a loop data output on activity" + activity.getName()); } // TODO add validation on data existence } } }
private void validateActivities(final FlowElementContainerDefinition processContainer) { for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity instanceof UserTaskDefinition) { validateUserTask((UserTaskDefinition) activity); } if (activity instanceof CallActivityDefinition && ((CallActivityDefinition) activity).getCallableElement() == null) { addError("The call activity " + activity.getName() + " has a null callable element"); } if (activity instanceof SendTaskDefinition && ((SendTaskDefinition) activity).getMessageTrigger().getTargetProcess() == null) { addError("The send task " + activity.getName() + " hasn't target"); } } }
private void validateActivities(final FlowElementContainerDefinition processContainer) { for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity instanceof UserTaskDefinition) { validateUserTask((UserTaskDefinition) activity); } if (activity instanceof CallActivityDefinition && ((CallActivityDefinition) activity).getCallableElement() == null) { addError("The call activity " + activity.getName() + " has a null callable element"); } if (activity instanceof SendTaskDefinition && ((SendTaskDefinition) activity).getMessageTrigger().getTargetProcess() == null) { addError("The send task " + activity.getName() + " hasn't target"); } } }
private void checkProcessForCallActivity(final DesignProcessDefinition process, final DesignProcessDefinition result) { assertEquals(process.getName(), result.getName()); assertEquals(process.getVersion(), result.getVersion()); assertEquals(process.getFlowElementContainer().getStartEvents(), result.getFlowElementContainer().getStartEvents()); assertEquals(1, result.getFlowElementContainer().getStartEvents().size()); assertEquals(1, result.getFlowElementContainer().getActivities().size()); assertEquals(1, process.getFlowElementContainer().getActivities().size()); assertEquals(process.getFlowElementContainer().getActivities().iterator().next(), result.getFlowElementContainer().getActivities().iterator().next()); assertEquals(process.getFlowElementContainer().getEndEvents(), result.getFlowElementContainer().getEndEvents()); assertEquals(1, result.getFlowElementContainer().getEndEvents().size()); }
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 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 validateFlowNodeUnique(final FlowElementContainerDefinition flowElementContainer, final List<String> names) { validateFlowNodeName(names, flowElementContainer.getActivities()); validateFlowNodeName(names, flowElementContainer.getEndEvents()); validateFlowNodeName(names, flowElementContainer.getGatewaysList()); validateFlowNodeName(names, flowElementContainer.getIntermediateCatchEvents()); validateFlowNodeName(names, flowElementContainer.getIntermediateThrowEvents()); validateFlowNodeName(names, flowElementContainer.getStartEvents()); // validateFlowNodeName(names, flowElementContainer.getBusinessDataDefinitions()); }
private void validateFlowNodeUnique(final FlowElementContainerDefinition flowElementContainer, final List<String> names) { validateFlowNodeName(names, flowElementContainer.getActivities()); validateFlowNodeName(names, flowElementContainer.getEndEvents()); validateFlowNodeName(names, flowElementContainer.getGatewaysList()); validateFlowNodeName(names, flowElementContainer.getIntermediateCatchEvents()); validateFlowNodeName(names, flowElementContainer.getIntermediateThrowEvents()); validateFlowNodeName(names, flowElementContainer.getStartEvents()); // validateFlowNodeName(names, flowElementContainer.getBusinessDataDefinitions()); }
/** * Is a form required to start case / execute task: if there is a contract, a form is required (by the web part only, the Engine never needs a form mapping * to start a case / execute a task) * * @param sFormMapping * @return true if a form is required for this form mapping, false otherwise. */ public boolean isFormRequired(SFormMapping sFormMapping) { if (sFormMapping.getType() == SFormMapping.TYPE_PROCESS_OVERVIEW) { return false; } try { final DesignProcessDefinition designProcessDefinition = processDefinitionService.getDesignProcessDefinition(sFormMapping.getProcessDefinitionId()); if (designProcessDefinition != null) { if (sFormMapping.getType() == SFormMapping.TYPE_PROCESS_START) { return designProcessDefinition.getContract() != null && designProcessDefinition.getContract().getInputs() != null && !designProcessDefinition.getContract().getInputs().isEmpty(); } else // if (sFormMapping.getType() == TYPE_TASK) { final List<ActivityDefinition> activities = designProcessDefinition.getFlowElementContainer().getActivities(); final UserTaskDefinition userTaskDefinition = findActivityWithName(activities, sFormMapping.getTask()); return userTaskDefinition != null && userTaskDefinition.getContract() != null && userTaskDefinition.getContract().getInputs() != null && !userTaskDefinition.getContract().getInputs().isEmpty(); } } } catch (SBonitaException e) { } return false; }
/** * Is a form required to start case / execute task: if there is a contract, a form is required (by the web part only, the Engine never needs a form mapping * to start a case / execute a task) * * @param sFormMapping * @return true if a form is required for this form mapping, false otherwise. */ public boolean isFormRequired(SFormMapping sFormMapping) { if (sFormMapping.getType() == SFormMapping.TYPE_PROCESS_OVERVIEW) { return false; } try { final DesignProcessDefinition designProcessDefinition = processDefinitionService.getDesignProcessDefinition(sFormMapping.getProcessDefinitionId()); if (designProcessDefinition != null) { if (sFormMapping.getType() == SFormMapping.TYPE_PROCESS_START) { return designProcessDefinition.getContract() != null && designProcessDefinition.getContract().getInputs() != null && !designProcessDefinition.getContract().getInputs().isEmpty(); } else // if (sFormMapping.getType() == TYPE_TASK) { final List<ActivityDefinition> activities = designProcessDefinition.getFlowElementContainer().getActivities(); final UserTaskDefinition userTaskDefinition = findActivityWithName(activities, sFormMapping.getTask()); return userTaskDefinition != null && userTaskDefinition.getContract() != null && userTaskDefinition.getContract().getInputs() != null && !userTaskDefinition.getContract().getInputs().isEmpty(); } } } catch (SBonitaException e) { } return false; }
@Test public void subProcess() throws Exception { final Expression createdExpression = new ExpressionBuilder().createConstantBooleanExpression(false); final ProcessDefinitionBuilder builder = new ProcessDefinitionBuilder(); builder.createNewInstance("process", "10.2").addSubProcess("subProcessActivity", true).getSubProcessBuilder().addStartEvent("start") .addTimerEventTriggerDefinition(TimerType.DURATION, new ExpressionBuilder().createConstantLongExpression(5000)) .addBooleanData("created", createdExpression).addAutomaticTask("auto"); final DesignProcessDefinition process = builder.getProcess(); assertEquals(1, process.getFlowElementContainer().getActivities().size()); final DesignProcessDefinition result = getDesignProcessDefinition(builder); assertEquals(1, result.getFlowElementContainer().getActivities().size()); }
public void deployFormMappings(final BusinessArchive businessArchive, final long processDefinitionId) throws ProcessDeployException { final List<FormMappingDefinition> formMappings = businessArchive.getFormMappingModel().getFormMappings(); final FlowElementContainerDefinition flowElementContainer = businessArchive.getProcessDefinition().getFlowElementContainer(); final List<ActivityDefinition> activities = flowElementContainer.getActivities(); try { // Deals with human tasks declared in process definition: for (final ActivityDefinition activity : activities) { createFormMapping(processDefinitionId, formMappingService, formMappings, activity); } // Deals with the process start / process overview forms: createFormMapping(formMappingService, processDefinitionId, getFormMappingForType(formMappings, PROCESS_START), PROCESS_START.getId(), null); createFormMapping(formMappingService, processDefinitionId, getFormMappingForType(formMappings, PROCESS_OVERVIEW), PROCESS_OVERVIEW.getId(), null); } catch (final SObjectCreationException | SBonitaReadException e) { throw new ProcessDeployException(e); } }
public void deployFormMappings(final BusinessArchive businessArchive, final long processDefinitionId) throws ProcessDeployException { final List<FormMappingDefinition> formMappings = businessArchive.getFormMappingModel().getFormMappings(); final FlowElementContainerDefinition flowElementContainer = businessArchive.getProcessDefinition().getFlowElementContainer(); final List<ActivityDefinition> activities = flowElementContainer.getActivities(); try { // Deals with human tasks declared in process definition: for (final ActivityDefinition activity : activities) { createFormMapping(processDefinitionId, formMappingService, formMappings, activity); } // Deals with the process start / process overview forms: createFormMapping(formMappingService, processDefinitionId, getFormMappingForType(formMappings, PROCESS_START), PROCESS_START.getId(), null); createFormMapping(formMappingService, processDefinitionId, getFormMappingForType(formMappings, PROCESS_OVERVIEW), PROCESS_OVERVIEW.getId(), null); } catch (final SObjectCreationException | SBonitaReadException e) { throw new ProcessDeployException(e); } }
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()); }
@Test public void readProcessWithThowErrorEventFromBusinessArchive() throws Exception { final ProcessDefinitionBuilder builder = new ProcessDefinitionBuilder().createNewInstance("MyProcess", "1.0"); builder.addStartEvent("start1"); builder.addAutomaticTask("a1"); builder.addEndEvent("end1").addErrorEventTrigger("e1"); builder.addTransition("start1", "a1"); builder.addTransition("a1", "end1"); final DesignProcessDefinition process = builder.getProcess(); final DesignProcessDefinition result = getDesignProcessDefinition(builder); assertEquals(process.getName(), result.getName()); assertEquals(process.getVersion(), result.getVersion()); assertEquals(process.getFlowElementContainer().getStartEvents(), result.getFlowElementContainer().getStartEvents()); assertEquals(1, result.getFlowElementContainer().getStartEvents().size()); assertEquals(1, process.getFlowElementContainer().getActivities().size()); assertEquals(1, result.getFlowElementContainer().getActivities().size()); final List<EndEventDefinition> resultEndEvents = result.getFlowElementContainer().getEndEvents(); assertEquals(process.getFlowElementContainer().getEndEvents(), resultEndEvents); assertEquals(1, result.getFlowElementContainer().getEndEvents().size()); final EndEventDefinition endEventDefinition = resultEndEvents.get(0); assertEquals(1, endEventDefinition.getEventTriggers().size()); assertEquals(1, endEventDefinition.getErrorEventTriggerDefinitions().size()); }