@Test public void testWarningError() throws UnsupportedEncodingException, XMLStreamException { String flowWithoutConditionNoDefaultFlow = "<?xml version='1.0' encoding='UTF-8'?>" + "<definitions id='definitions' xmlns='http://www.omg.org/spec/BPMN/20100524/MODEL' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:activiti='http://activiti.org/bpmn' targetNamespace='Examples'>" + " <process id='exclusiveGwDefaultSequenceFlow'> " + " <startEvent id='theStart' /> " + " <sequenceFlow id='flow1' sourceRef='theStart' targetRef='exclusiveGw' /> " + " <exclusiveGateway id='exclusiveGw' name='Exclusive Gateway' /> " + // no default = "flow3" !! " <sequenceFlow id='flow2' sourceRef='exclusiveGw' targetRef='theTask1'> " + " <conditionExpression xsi:type='tFormalExpression'>${input == 1}</conditionExpression> " + " </sequenceFlow> " + " <sequenceFlow id='flow3' sourceRef='exclusiveGw' targetRef='theTask2'/> " + // one would be OK " <sequenceFlow id='flow4' sourceRef='exclusiveGw' targetRef='theTask2'/> " + // but two unconditional not! " <userTask id='theTask1' name='Input is one' /> " + " <userTask id='theTask2' name='Default input' /> " + " </process>" + "</definitions>"; XMLInputFactory xif = XMLInputFactory.newInstance(); InputStreamReader in = new InputStreamReader( new ByteArrayInputStream(flowWithoutConditionNoDefaultFlow.getBytes()), "UTF-8"); XMLStreamReader xtr = xif.createXMLStreamReader(in); bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr); Assert.assertNotNull(bpmnModel); List<ValidationError> allErrors = processValidator.validate(bpmnModel); Assert.assertEquals(1, allErrors.size()); Assert.assertTrue(allErrors.get(0).isWarning()); }
/* (non-Javadoc) * @see org.eclipse.bpmn2.modeler.core.validation.validators.AbstractBpmn2ElementValidator#validate(org.eclipse.bpmn2.BaseElement) */ @Override public IStatus validate(ItemDefinition object) { if (ProcessValidator.isContainingProcessExecutable(object)) { if (isEmpty(object.getStructureRef())) addMissingFeatureStatus(object, "structureRef", Status.ERROR); // $NON-NLS-1$ } return getResult(); }
@Test public void verifyValidation() { List<ValidationError> allErrors = processValidator.validate(bpmnModel); Assert.assertEquals(66, allErrors.size()); String setName = ValidatorSetNames.ACTIVITI_EXECUTABLE_PROCESS; // shortening it a bit // isExecutable should be true List<ValidationError> problems = findErrors(allErrors, setName, Problems.PROCESS_DEFINITION_IS_NOT_EXECUTABLE, 1); assertProcessElementError(problems.get(0)); // Event listeners problems = findErrors(allErrors, setName, Problems.EVENT_LISTENER_IMPLEMENTATION_MISSING, 1); assertProcessElementError(problems.get(0)); problems = findErrors(allErrors, setName, Problems.EVENT_LISTENER_INVALID_THROW_EVENT_TYPE, 1); assertProcessElementError(problems.get(0)); // Execution listeners problems = findErrors(allErrors, setName, Problems.EXECUTION_LISTENER_IMPLEMENTATION_MISSING, 2); assertProcessElementError(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); // Association problems = findErrors(allErrors, setName, Problems.ASSOCIATION_INVALID_SOURCE_REFERENCE, 1); assertProcessElementError(problems.get(0)); problems = findErrors(allErrors, setName, Problems.ASSOCIATION_INVALID_TARGET_REFERENCE, 1); assertProcessElementError(problems.get(0)); // Signals problems = findErrors(allErrors, setName, Problems.SIGNAL_MISSING_ID, 1); assertCommonErrorFields(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SIGNAL_MISSING_NAME, 2); assertCommonErrorFields(problems.get(0)); assertCommonErrorFields(problems.get(1)); problems = findErrors(allErrors, setName, Problems.SIGNAL_DUPLICATE_NAME, 2); assertCommonErrorFields(problems.get(0)); assertCommonErrorFields(problems.get(1)); problems = findErrors(allErrors, setName, Problems.SIGNAL_INVALID_SCOPE, 1); assertCommonErrorFields(problems.get(0)); // Start event problems = findErrors(allErrors, setName, Problems.START_EVENT_MULTIPLE_FOUND, 3); assertCommonProblemFieldForActivity(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); assertCommonProblemFieldForActivity(problems.get(2)); problems = findErrors(allErrors, setName, Problems.START_EVENT_INVALID_EVENT_DEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Sequence flow problems = findErrors(allErrors, setName, Problems.SEQ_FLOW_INVALID_SRC, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SEQ_FLOW_INVALID_TARGET, 2); assertCommonProblemFieldForActivity(problems.get(0)); // User task problems = findErrors(allErrors, setName, Problems.USER_TASK_LISTENER_IMPLEMENTATION_MISSING, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Service task problems = findErrors(allErrors, setName, Problems.SERVICE_TASK_RESULT_VAR_NAME_WITH_DELEGATE, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SERVICE_TASK_INVALID_TYPE, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SERVICE_TASK_MISSING_IMPLEMENTATION, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SERVICE_TASK_WEBSERVICE_INVALID_OPERATION_REF, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Send task problems = findErrors(allErrors, setName, Problems.SEND_TASK_INVALID_IMPLEMENTATION, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SEND_TASK_INVALID_TYPE, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SEND_TASK_WEBSERVICE_INVALID_OPERATION_REF, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Mail task problems = findErrors(allErrors, setName, Problems.MAIL_TASK_NO_RECIPIENT, 2); assertCommonProblemFieldForActivity(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); problems = findErrors(allErrors, setName, Problems.MAIL_TASK_NO_CONTENT, 4); assertCommonProblemFieldForActivity(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); // Shell task problems = findErrors(allErrors, setName, Problems.SHELL_TASK_NO_COMMAND, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Script task problems = findErrors(allErrors, setName, Problems.SCRIPT_TASK_MISSING_SCRIPT, 2); assertCommonProblemFieldForActivity(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); // Exclusive gateway problems = findErrors( allErrors, setName, Problems.EXCLUSIVE_GATEWAY_CONDITION_NOT_ALLOWED_ON_SINGLE_SEQ_FLOW, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.EXCLUSIVE_GATEWAY_CONDITION_ON_DEFAULT_SEQ_FLOW, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.EXCLUSIVE_GATEWAY_NO_OUTGOING_SEQ_FLOW, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.EXCLUSIVE_GATEWAY_SEQ_FLOW_WITHOUT_CONDITIONS, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Event gateway problems = findErrors( allErrors, setName, Problems.EVENT_GATEWAY_ONLY_CONNECTED_TO_INTERMEDIATE_EVENTS, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Subprocesses problems = findErrors(allErrors, setName, Problems.SUBPROCESS_MULTIPLE_START_EVENTS, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors( allErrors, setName, Problems.SUBPROCESS_START_EVENT_EVENT_DEFINITION_NOT_ALLOWED, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Event subprocesses problems = findErrors(allErrors, setName, Problems.EVENT_SUBPROCESS_INVALID_START_EVENT_DEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Boundary events problems = findErrors(allErrors, setName, Problems.BOUNDARY_EVENT_NO_EVENT_DEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.BOUNDARY_EVENT_CANCEL_ONLY_ON_TRANSACTION, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.BOUNDARY_EVENT_MULTIPLE_CANCEL_ON_TRANSACTION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Intermediate catch event problems = findErrors(allErrors, setName, Problems.INTERMEDIATE_CATCH_EVENT_NO_EVENTDEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors( allErrors, setName, Problems.INTERMEDIATE_CATCH_EVENT_INVALID_EVENTDEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Intermediate throw event problems = findErrors(allErrors, setName, Problems.THROW_EVENT_INVALID_EVENTDEFINITION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Multi instance problems = findErrors(allErrors, setName, Problems.MULTI_INSTANCE_MISSING_COLLECTION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Message events problems = findErrors(allErrors, setName, Problems.MESSAGE_EVENT_MISSING_MESSAGE_REF, 2); assertCommonProblemFieldForActivity(problems.get(0)); assertCommonProblemFieldForActivity(problems.get(1)); // Signal events problems = findErrors(allErrors, setName, Problems.SIGNAL_EVENT_MISSING_SIGNAL_REF, 1); assertCommonProblemFieldForActivity(problems.get(0)); problems = findErrors(allErrors, setName, Problems.SIGNAL_EVENT_INVALID_SIGNAL_REF, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Compensate event problems = findErrors(allErrors, setName, Problems.COMPENSATE_EVENT_INVALID_ACTIVITY_REF, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Timer event problems = findErrors(allErrors, setName, Problems.EVENT_TIMER_MISSING_CONFIGURATION, 2); assertCommonProblemFieldForActivity(problems.get(0)); // Data association problems = findErrors(allErrors, setName, Problems.DATA_ASSOCIATION_MISSING_TARGETREF, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Data object problems = findErrors(allErrors, setName, Problems.DATA_OBJECT_MISSING_NAME, 2); assertCommonErrorFields(problems.get(0)); assertCommonErrorFields(problems.get(1)); // End event problems = findErrors(allErrors, setName, Problems.END_EVENT_CANCEL_ONLY_INSIDE_TRANSACTION, 1); assertCommonProblemFieldForActivity(problems.get(0)); // Messages problems = findErrors(allErrors, setName, Problems.MESSAGE_INVALID_ITEM_REF, 1); assertCommonErrorFields(problems.get(0)); }