提交 4669b59e 编写于 作者: T Tijs Rademakers

Merge branch 'master' of https://github.com/Activiti/Activiti

......@@ -3,6 +3,7 @@ package org.activiti.bpmn.converter;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.activiti.bpmn.converter.util.BpmnXMLUtil;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.DataObject;
......@@ -32,6 +33,8 @@ public class DataObjectXMLConverter extends BaseBpmnXMLConverter {
protected BaseElement convertXMLToElement(XMLStreamReader xtr) throws Exception {
DataObject dataObject = new DataObject();
ItemDefinition itemSubjectRef = new ItemDefinition();
BpmnXMLUtil.addXMLLocation(dataObject, xtr);
dataObject.setId(xtr.getAttributeValue(null, ATTRIBUTE_DATA_ID));
dataObject.setName(xtr.getAttributeValue(null, ATTRIBUTE_DATA_NAME));
......
......@@ -5,6 +5,7 @@ import java.util.Date;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.activiti.bpmn.converter.util.BpmnXMLUtil;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.BooleanDataObject;
import org.activiti.bpmn.model.BpmnModel;
......@@ -63,9 +64,11 @@ public class ValuedDataObjectXMLConverter extends BaseBpmnXMLConverter {
// TODO should throw exception here for unsupported data type
}
if (null != dataObject) {
if (dataObject != null) {
dataObject.setId(xtr.getAttributeValue(null, ATTRIBUTE_DATA_ID));
dataObject.setName(xtr.getAttributeValue(null, ATTRIBUTE_DATA_NAME));
BpmnXMLUtil.addXMLLocation(dataObject, xtr);
itemSubjectRef.setStructureRef(structureRef);
dataObject.setItemSubjectRef(itemSubjectRef);
......
......@@ -51,7 +51,7 @@ public class ProcessValidationTest {
@Test
public void verifyValidation() {
List<ValidationError> allErrors = processValidator.validate(bpmnModel);
Assert.assertEquals(62, allErrors.size());
Assert.assertEquals(64, allErrors.size());
String setName = ValidatorSetNames.ACTIVITI_EXECUTABLE_PROCESS; // shortening it a bit
......@@ -211,6 +211,11 @@ public class ProcessValidationTest {
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));
......
......@@ -37,8 +37,15 @@
<association associationDirection="One" sourceRef=""
targetRef="" id="as1" />
<documentation>This is a process for testing purposes</documentation>
<dataObject id="dataObject1" itemSubjectRef="xsd:string">
<extensionElements>
<activiti:value>Testing</activiti:value>
</extensionElements>
</dataObject>
<startEvent id="theStart1" name="start1" />
<startEvent id="theStart2" name="start2" />
......@@ -263,6 +270,24 @@
<compensateEventDefinition activityRef="invalid"/>
</boundaryEvent>
<!-- Nested subprocess with a data object with no name -->
<subProcess id="someSubprocess1" name="someSubprocess1">
<subProcess id="someSubprocess2" name="someSubprocess2">
<subProcess id="someSubprocess3" name="someSubprocess3">
<dataObject id="dataObject2" itemSubjectRef="xsd:string">
<extensionElements>
<activiti:value>Testing2</activiti:value>
</extensionElements>
</dataObject>
</subProcess>
</subProcess>
</subProcess>
<!-- Invalid sequence flow: src/target not correct -->
<sequenceFlow id="invalidSeqFlow1" name="seqFlow"
targetRef="theEnd" sourceRef="invalid"></sequenceFlow>
......
......@@ -218,7 +218,7 @@
CONFIGURATION_,
CREATED_,
PROC_DEF_ID_,
TENANT_ID_,
TENANT_ID_
)
values (#{id, jdbcType=VARCHAR},
1,
......
......@@ -92,6 +92,8 @@ public interface Problems {
String DATA_ASSOCIATION_MISSING_TARGETREF = "activiti-data-association-missing-targetref";
String DATA_OBJECT_MISSING_NAME = "activiti-data-object-missing-name";
String END_EVENT_CANCEL_ONLY_INSIDE_TRANSACTION = "activiti-end-event-cancel-only-inside-transaction";
String DI_INVALID_REFERENCE = "activiti-di-invalid-reference";
......
......@@ -3,6 +3,7 @@ package org.activiti.validation.validator;
import org.activiti.validation.validator.impl.ActivitiEventListenerValidator;
import org.activiti.validation.validator.impl.AssociationValidator;
import org.activiti.validation.validator.impl.BoundaryEventValidator;
import org.activiti.validation.validator.impl.DataObjectValidator;
import org.activiti.validation.validator.impl.DiagramInterchangeInfoValidator;
import org.activiti.validation.validator.impl.EndEventValidator;
import org.activiti.validation.validator.impl.ErrorValidator;
......@@ -38,6 +39,7 @@ public class ValidatorSetFactory {
validatorSet.addValidator(new SignalValidator());
validatorSet.addValidator(new OperationValidator());
validatorSet.addValidator(new ErrorValidator());
validatorSet.addValidator(new DataObjectValidator());
validatorSet.addValidator(new ProcessDefinitionValidator());
validatorSet.addValidator(new FlowElementValidator());
......
package org.activiti.validation.validator.impl;
import java.util.ArrayList;
import java.util.List;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.bpmn.model.ValuedDataObject;
import org.activiti.validation.ValidationError;
import org.activiti.validation.validator.Problems;
import org.activiti.validation.validator.ProcessLevelValidator;
import org.apache.commons.lang3.StringUtils;
/**
* @author jbarrez
*/
public class DataObjectValidator extends ProcessLevelValidator {
@Override
protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) {
// Gather data objects
List<ValuedDataObject> allDataObjects = new ArrayList<ValuedDataObject>();
allDataObjects.addAll(process.getDataObjects());
List<SubProcess> subProcesses = process.findFlowElementsOfType(SubProcess.class, true);
for (SubProcess subProcess : subProcesses) {
allDataObjects.addAll(subProcess.getDataObjects());
}
// Validate
for (ValuedDataObject dataObject : allDataObjects) {
if (StringUtils.isEmpty(dataObject.getName())) {
addError(errors, Problems.DATA_OBJECT_MISSING_NAME, process, dataObject, "Name is mandatory for a data object");
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册