protected UserTaskDefinition findActivityWithName(List<ActivityDefinition> activities, String task) { if (task != null && activities != null) { for (ActivityDefinition activity : activities) { if (task.equals(activity.getName()) && activity instanceof UserTaskDefinition) { return (UserTaskDefinition) activity; } } } return null; } }
protected UserTaskDefinition findActivityWithName(List<ActivityDefinition> activities, String task) { if (task != null && activities != null) { for (ActivityDefinition activity : activities) { if (task.equals(activity.getName()) && activity instanceof UserTaskDefinition) { return (UserTaskDefinition) activity; } } } return null; } }
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 } } }
void createFormMapping(long processDefinitionId, FormMappingService formMappingService, List<FormMappingDefinition> formMappings, ActivityDefinition activity) throws SObjectCreationException, SBonitaReadException { if (isHumanTask(activity)) { // create mapping as declared in form mapping: createFormMapping(formMappingService, processDefinitionId, getFormMappingForHumanTask(activity.getName(), formMappings), FormMappingType.TASK.getId(), activity.getName()); } else if (activity instanceof SubProcessDefinition) { final org.bonitasoft.engine.bpm.flownode.impl.FlowElementContainerDefinition subProcessContainer = ((SubProcessDefinition) activity) .getSubProcessContainer(); for (ActivityDefinition activityDefinition : subProcessContainer.getActivities()) { createFormMapping(processDefinitionId, formMappingService, formMappings, activityDefinition); } } }
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 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 } } }
void createFormMapping(long processDefinitionId, FormMappingService formMappingService, List<FormMappingDefinition> formMappings, ActivityDefinition activity) throws SObjectCreationException, SBonitaReadException { if (isHumanTask(activity)) { // create mapping as declared in form mapping: createFormMapping(formMappingService, processDefinitionId, getFormMappingForHumanTask(activity.getName(), formMappings), FormMappingType.TASK.getId(), activity.getName()); } else if (activity instanceof SubProcessDefinition) { final org.bonitasoft.engine.bpm.flownode.impl.FlowElementContainerDefinition subProcessContainer = ((SubProcessDefinition) activity) .getSubProcessContainer(); for (ActivityDefinition activityDefinition : subProcessContainer.getActivities()) { createFormMapping(processDefinitionId, formMappingService, formMappings, activityDefinition); } } }
private void validateEventsSubProcess() { final FlowElementContainerDefinition processContainer = process.getProcessContainer(); for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity instanceof SubProcessDefinition) { final FlowElementContainerDefinition subProcessContainer = ((SubProcessDefinition) activity).getSubProcessContainer(); if (subProcessContainer == null) { designErrors.add("The subprocess " + activity.getName() + " does not have any element," + " add at least one element using the builder that can be retrieved on the subprocess activity:" + " org.bonitasoft.engine.bpm.process.impl.SubProcessActivityDefinitionBuilder.getSubProcessBuilder()"); return; } if (((SubProcessDefinition) activity).isTriggeredByEvent()) { if (subProcessContainer.getStartEvents().size() != 1) { designErrors.add("An event sub process must have one and only one start events, but " + subProcessContainer.getStartEvents().size() + " were found : " + activity); } if (!subProcessContainer.getStartEvents().isEmpty() && subProcessContainer.getStartEvents().get(0).getEventTriggers().isEmpty()) { designErrors.add("The event sub process have no start event with a not NONE trigger : " + activity); } if (activity.getIncomingTransitions().size() > 0) { designErrors.add("An event sub process cannot have incoming transitions : " + activity); } if (activity.getOutgoingTransitions().size() > 0) { designErrors.add("An event sub process cannot have outgoing transitions : " + activity); } } validateProcess(subProcessContainer, false); } } }
private void validateEventsSubProcess() { final FlowElementContainerDefinition processContainer = process.getProcessContainer(); for (final ActivityDefinition activity : processContainer.getActivities()) { if (activity instanceof SubProcessDefinition) { final FlowElementContainerDefinition subProcessContainer = ((SubProcessDefinition) activity).getSubProcessContainer(); if (subProcessContainer == null) { designErrors.add("The subprocess " + activity.getName() + " does not have any element," + " add at least one element using the builder that can be retrieved on the subprocess activity:" + " org.bonitasoft.engine.bpm.process.impl.SubProcessActivityDefinitionBuilder.getSubProcessBuilder()"); return; } if (((SubProcessDefinition) activity).isTriggeredByEvent()) { if (subProcessContainer.getStartEvents().size() != 1) { designErrors.add("An event sub process must have one and only one start events, but " + subProcessContainer.getStartEvents().size() + " were found : " + activity); } if (!subProcessContainer.getStartEvents().isEmpty() && subProcessContainer.getStartEvents().get(0).getEventTriggers().isEmpty()) { designErrors.add("The event sub process have no start event with a not NONE trigger : " + activity); } if (activity.getIncomingTransitions().size() > 0) { designErrors.add("An event sub process cannot have incoming transitions : " + activity); } if (activity.getOutgoingTransitions().size() > 0) { designErrors.add("An event sub process cannot have outgoing transitions : " + activity); } } validateProcess(subProcessContainer, false); } } }
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()); designErrors.add("Signal boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); designErrors.add("Message boundary events are not supported in automatic, receive and send tasks: " + activity.getName());
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()); } }
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()); designErrors.add("Signal boundary events are not supported in automatic, receive and send tasks: " + activity.getName()); designErrors.add("Message boundary events are not supported in automatic, receive and send tasks: " + activity.getName());
if (businessDataDefinition.getName().equals(((MultiInstanceLoopCharacteristics) loopCharacteristics).getLoopDataInputRef()) && !businessDataDefinition.isMultiple()) { addError("The business data " + businessDataDefinition.getName() + " used in the multi instance " + activity.getName() + " must be multiple"); final String loopDataInputRef = multiInstanceCharacteristics.getLoopDataInputRef(); if (!isReferenceValid(loopDataInputRef)) { addError("The activity " + activity.getName() + " contains a reference " + loopDataInputRef + " for the loop data input to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + dataInputItemRef + " for the data input item to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + dataOutputItemRef + " for the data output item to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + loopDataOutputRef + " for the loop data output to an unknown data"); addError("The activity " + activity.getName() + " contains business data but this activity does not have the multiple instance behaviour"); addError("The activity " + activity.getName() + " contains more than one business data with the name " + businessDataDefinition.getName());
if (businessDataDefinition.getName().equals(((MultiInstanceLoopCharacteristics) loopCharacteristics).getLoopDataInputRef()) && !businessDataDefinition.isMultiple()) { addError("The business data " + businessDataDefinition.getName() + " used in the multi instance " + activity.getName() + " must be multiple"); final String loopDataInputRef = multiInstanceCharacteristics.getLoopDataInputRef(); if (!isReferenceValid(loopDataInputRef)) { addError("The activity " + activity.getName() + " contains a reference " + loopDataInputRef + " for the loop data input to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + dataInputItemRef + " for the data input item to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + dataOutputItemRef + " for the data output item to an unknown data"); addError("The activity " + activity.getName() + " contains a reference " + loopDataOutputRef + " for the loop data output to an unknown data"); addError("The activity " + activity.getName() + " contains business data but this activity does not have the multiple instance behaviour"); addError("The activity " + activity.getName() + " contains more than one business data with the name " + businessDataDefinition.getName());
List<ActivityDefinition> asList = Arrays.asList(procAct1, procAct2, procAct3); for (final ActivityDefinition activityDefinition : asList) { if (activityDefinition.getName().equals("auto1")) { orgAuto1 = activityDefinition; } else if (activityDefinition.getName().equals("user1")) { orgUser1 = activityDefinition; } else if (activityDefinition.getName().equals("manual1")) { orgManual1 = activityDefinition; asList = Arrays.asList(resAct1, resAct2, resAct3); for (final ActivityDefinition activityDefinition : asList) { if (activityDefinition.getName().equals("auto1")) { auto1 = activityDefinition; } else if (activityDefinition.getName().equals("user1")) { user1 = activityDefinition; } else if (activityDefinition.getName().equals("manual1")) { manual1 = activityDefinition;