package org.activiti.editor.language.xml; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Map; import org.activiti.bpmn.model.ActivitiListener; import org.activiti.bpmn.model.BoundaryEvent; import org.activiti.bpmn.model.BpmnModel; import org.activiti.bpmn.model.ExtensionAttribute; import org.activiti.bpmn.model.ExtensionElement; import org.activiti.bpmn.model.FieldExtension; import org.activiti.bpmn.model.FlowElement; import org.activiti.bpmn.model.ImplementationType; import org.activiti.bpmn.model.Process; import org.activiti.bpmn.model.ServiceTask; import org.activiti.bpmn.model.TimerEventDefinition; import org.junit.Test; public class CustomExtensionsConverterTest extends AbstractConverterTest { @Test public void convertXMLToModel() throws Exception { BpmnModel bpmnModel = readXMLFile(); validateModel(bpmnModel); } @Test public void convertModelToXML() throws Exception { BpmnModel bpmnModel = readXMLFile(); BpmnModel parsedModel = exportAndReadXMLFile(bpmnModel); validateModel(parsedModel); deployProcess(parsedModel); } protected String getResource() { return "customextensionsmodel.bpmn"; } private void validateModel(BpmnModel model) { Process process = model.getMainProcess(); assertNotNull(process.getAttributes()); assertEquals(1, process.getAttributes().size()); List<ExtensionAttribute> attributes = process.getAttributes().get("version"); assertNotNull(attributes); assertEquals(1, attributes.size()); ExtensionAttribute attribute = attributes.get(0); //custom:version = "9" assertNotNull(attribute); assertEquals("http://custom.org/bpmn", attribute.getNamespace()); assertEquals("custom", attribute.getNamespacePrefix()); assertEquals("version", attribute.getName()); assertEquals("9", attribute.getValue()); List<ActivitiListener> listeners = model.getMainProcess().getExecutionListeners(); validateExecutionListeners(listeners); Map<String, List<ExtensionElement>> extensionElementMap = model.getMainProcess().getExtensionElements(); validateExtensionElements(extensionElementMap); FlowElement flowElement = model.getMainProcess().getFlowElement("servicetask"); assertNotNull(flowElement); assertTrue(flowElement instanceof ServiceTask); assertEquals("servicetask", flowElement.getId()); ServiceTask serviceTask = (ServiceTask) flowElement; assertEquals("servicetask", serviceTask.getId()); assertEquals("Service task", serviceTask.getName()); List<FieldExtension> fields = serviceTask.getFieldExtensions(); assertEquals(2, fields.size()); FieldExtension field = (FieldExtension) fields.get(0); assertEquals("testField", field.getFieldName()); assertEquals("test", field.getStringValue()); field = (FieldExtension) fields.get(1); assertEquals("testField2", field.getFieldName()); assertEquals("${test}", field.getExpression()); listeners = serviceTask.getExecutionListeners(); validateExecutionListeners(listeners); extensionElementMap = serviceTask.getExtensionElements(); validateExtensionElements(extensionElementMap); assertEquals(1, serviceTask.getBoundaryEvents().size()); BoundaryEvent boundaryEvent = serviceTask.getBoundaryEvents().get(0); assertEquals("timerEvent", boundaryEvent.getId()); assertEquals(1, boundaryEvent.getEventDefinitions().size()); assertTrue(boundaryEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition); extensionElementMap = boundaryEvent.getEventDefinitions().get(0).getExtensionElements(); validateExtensionElements(extensionElementMap); } protected void validateExecutionListeners(List<ActivitiListener> listeners) { assertEquals(3, listeners.size()); ActivitiListener listener = (ActivitiListener) listeners.get(0); assertTrue(ImplementationType.IMPLEMENTATION_TYPE_CLASS.equals(listener.getImplementationType())); assertEquals("org.test.TestClass", listener.getImplementation()); assertEquals("start", listener.getEvent()); listener = (ActivitiListener) listeners.get(1); assertTrue(ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equals(listener.getImplementationType())); assertEquals("${testExpression}", listener.getImplementation()); assertEquals("end", listener.getEvent()); listener = (ActivitiListener) listeners.get(2); assertTrue(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equals(listener.getImplementationType())); assertEquals("${delegateExpression}", listener.getImplementation()); assertEquals("start", listener.getEvent()); } protected void validateExtensionElements(Map<String, List<ExtensionElement>> extensionElementMap ) { assertEquals(1, extensionElementMap.size()); List<ExtensionElement> extensionElements = extensionElementMap.get("test"); assertEquals(2, extensionElements.size()); ExtensionElement extensionElement = extensionElements.get(0); assertNotNull(extensionElement); assertEquals("test", extensionElement.getName()); assertEquals("custom", extensionElement.getNamespacePrefix()); assertEquals("http://custom.org/bpmn", extensionElement.getNamespace()); assertEquals(2, extensionElement.getAttributes().size()); List<ExtensionAttribute> attributes = extensionElement.getAttributes().get("id"); assertEquals(1, attributes.size()); ExtensionAttribute attribute = attributes.get(0); assertNotNull(attribute); assertEquals("id", attribute.getName()); assertEquals("test", attribute.getValue()); assertNull(attribute.getNamespace()); assertNull(attribute.getNamespacePrefix()); attributes = extensionElement.getAttributes().get("name"); assertEquals(1, attributes.size()); attribute = attributes.get(0); assertNotNull(attribute); assertEquals("name", attribute.getName()); assertEquals("test", attribute.getValue()); assertEquals(2, extensionElement.getChildElements().size()); List<ExtensionElement> childExtensions = extensionElement.getChildElements().get("name"); assertEquals(2, childExtensions.size()); ExtensionElement childExtension = childExtensions.get(0); assertNotNull(childExtension); assertEquals("name", childExtension.getName()); assertEquals("custom", childExtension.getNamespacePrefix()); assertEquals("http://custom.org/bpmn", childExtension.getNamespace()); assertEquals(0, childExtension.getAttributes().size()); assertEquals(1, childExtension.getChildElements().size()); List<ExtensionElement> subChildExtensions = childExtension.getChildElements().get("test"); assertEquals(1, subChildExtensions.size()); childExtension = subChildExtensions.get(0); assertNotNull(childExtension); assertEquals("test", childExtension.getName()); assertEquals("custom", childExtension.getNamespacePrefix()); assertEquals("http://custom.org/bpmn", childExtension.getNamespace()); assertEquals(0, childExtension.getAttributes().size()); assertEquals(0, childExtension.getChildElements().size()); assertEquals("test", childExtension.getElementText()); childExtensions = extensionElement.getChildElements().get("description"); assertEquals(1, childExtensions.size()); childExtension = childExtensions.get(0); assertNotNull(childExtension); assertEquals("description", childExtension.getName()); assertEquals(1, childExtension.getAttributes().size()); attributes = childExtension.getAttributes().get("id"); attribute = attributes.get(0); assertNotNull(attribute); assertEquals("id", attribute.getName()); assertEquals("test", attribute.getValue()); assertEquals("custom2", attribute.getNamespacePrefix()); assertEquals("http://custom2.org/bpmn", attribute.getNamespace()); extensionElement = extensionElements.get(1); assertNotNull(extensionElement); assertEquals("test", extensionElement.getName()); assertEquals("custom", extensionElement.getNamespacePrefix()); assertEquals("http://custom.org/bpmn", extensionElement.getNamespace()); assertEquals(2, extensionElement.getAttributes().size()); attributes = extensionElement.getAttributes().get("id"); assertEquals(1, attributes.size()); attribute = attributes.get(0); assertNotNull(attribute); assertEquals("id", attribute.getName()); assertEquals("test2", attribute.getValue()); assertNull(attribute.getNamespace()); assertNull(attribute.getNamespacePrefix()); attributes = extensionElement.getAttributes().get("name"); assertEquals(1, attributes.size()); attribute = attributes.get(0); assertNotNull(attribute); assertEquals("name", attribute.getName()); assertEquals("test2", attribute.getValue()); } }