提交 6d4ebeba 编写于 作者: M Mike Dias

ACT-1739: Added support to Message Boundary Events in Modeler

上级 03c15e5c
......@@ -51,6 +51,7 @@ public interface StencilConstants {
final String STENCIL_EVENT_BOUNDARY_TIMER = "BoundaryTimerEvent";
final String STENCIL_EVENT_BOUNDARY_ERROR = "BoundaryErrorEvent";
final String STENCIL_EVENT_BOUNDARY_SIGNAL = "BoundarySignalEvent";
final String STENCIL_EVENT_BOUNDARY_MESSAGE = "BoundaryMessageEvent";
final String STENCIL_EVENT_CATCH_SIGNAL = "CatchSignalEvent";
final String STENCIL_EVENT_CATCH_TIMER = "CatchTimerEvent";
......
......@@ -21,6 +21,7 @@ import org.activiti.bpmn.model.ErrorEventDefinition;
import org.activiti.bpmn.model.EventDefinition;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.GraphicInfo;
import org.activiti.bpmn.model.MessageEventDefinition;
import org.activiti.bpmn.model.SignalEventDefinition;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ArrayNode;
......@@ -42,6 +43,7 @@ public class BoundaryEventJsonConverter extends BaseBpmnJsonConverter {
convertersToBpmnMap.put(STENCIL_EVENT_BOUNDARY_TIMER, BoundaryEventJsonConverter.class);
convertersToBpmnMap.put(STENCIL_EVENT_BOUNDARY_ERROR, BoundaryEventJsonConverter.class);
convertersToBpmnMap.put(STENCIL_EVENT_BOUNDARY_SIGNAL, BoundaryEventJsonConverter.class);
convertersToBpmnMap.put(STENCIL_EVENT_BOUNDARY_MESSAGE, BoundaryEventJsonConverter.class);
}
public static void fillBpmnTypes(Map<Class<? extends BaseElement>, Class<? extends BaseBpmnJsonConverter>> convertersToJsonMap) {
......@@ -61,6 +63,8 @@ public class BoundaryEventJsonConverter extends BaseBpmnJsonConverter {
return STENCIL_EVENT_BOUNDARY_ERROR;
} else if (eventDefinition instanceof SignalEventDefinition) {
return STENCIL_EVENT_BOUNDARY_SIGNAL;
} else if (eventDefinition instanceof MessageEventDefinition) {
return STENCIL_EVENT_BOUNDARY_MESSAGE;
} else {
return STENCIL_EVENT_BOUNDARY_TIMER;
}
......@@ -95,6 +99,9 @@ public class BoundaryEventJsonConverter extends BaseBpmnJsonConverter {
} else if (STENCIL_EVENT_BOUNDARY_SIGNAL.equals(stencilId)) {
boundaryEvent.setCancelActivity(getPropertyValueAsBoolean(PROPERTY_CANCEL_ACTIVITY, elementNode));
convertJsonToSignalDefinition(elementNode, boundaryEvent);
} else if (STENCIL_EVENT_BOUNDARY_MESSAGE.equals(stencilId)) {
boundaryEvent.setCancelActivity(getPropertyValueAsBoolean(PROPERTY_CANCEL_ACTIVITY, elementNode));
convertJsonToMessageDefinition(elementNode, boundaryEvent);
}
boundaryEvent.setAttachedToRefId(lookForAttachedRef(elementNode.get(EDITOR_SHAPE_ID).asText(), modelNode.get(EDITOR_CHILD_SHAPES)));
return boundaryEvent;
......
......@@ -117,6 +117,7 @@ public class BpmnJsonConverter implements EditorJsonConstants, StencilConstants,
DI_CIRCLES.add(STENCIL_EVENT_BOUNDARY_ERROR);
DI_CIRCLES.add(STENCIL_EVENT_BOUNDARY_SIGNAL);
DI_CIRCLES.add(STENCIL_EVENT_BOUNDARY_TIMER);
DI_CIRCLES.add(STENCIL_EVENT_BOUNDARY_MESSAGE);
DI_CIRCLES.add(STENCIL_EVENT_CATCH_MESSAGE);
DI_CIRCLES.add(STENCIL_EVENT_CATCH_SIGNAL);
......
package org.activiti.editor.language;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.io.InputStream;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.Event;
import org.activiti.bpmn.model.EventDefinition;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
......@@ -24,5 +31,13 @@ public abstract class AbstractConverterTest {
return bpmnModel;
}
protected EventDefinition extractEventDefinition(FlowElement flowElement) {
assertNotNull(flowElement);
assertTrue(flowElement instanceof Event);
Event event = (Event)flowElement;
assertFalse(event.getEventDefinitions().isEmpty());
return event.getEventDefinitions().get(0);
}
protected abstract String getResource();
}
package org.activiti.editor.language;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.ErrorEventDefinition;
import org.activiti.bpmn.model.MessageEventDefinition;
import org.activiti.bpmn.model.SignalEventDefinition;
import org.activiti.bpmn.model.TimerEventDefinition;
import org.junit.Test;
......@@ -22,7 +25,6 @@ public class BoundaryEventConverterTest extends AbstractConverterTest {
public void doubleConversionValidation() throws Exception {
BpmnModel bpmnModel = readJsonFile();
bpmnModel = convertToJsonAndBack(bpmnModel);
System.out.println("xml " + new String(new BpmnXMLConverter().convertToXML(bpmnModel), "utf-8"));
validateModel(bpmnModel);
}
......@@ -33,24 +35,26 @@ public class BoundaryEventConverterTest extends AbstractConverterTest {
private void validateModel(BpmnModel model) {
FlowElement errorElement = model.getMainProcess().getFlowElement("errorEvent");
assertTrue(errorElement instanceof BoundaryEvent);
BoundaryEvent errorElement = (BoundaryEvent)model.getMainProcess().getFlowElement("errorEvent");
ErrorEventDefinition errorEvent = (ErrorEventDefinition)extractEventDefinition(errorElement);
assertTrue(errorElement.isCancelActivity()); //always true
assertEquals("errorRef", errorEvent.getErrorCode());
FlowElement signalElement = model.getMainProcess().getFlowElement("signalEvent");
assertTrue(signalElement instanceof BoundaryEvent);
BoundaryEvent signalElement = (BoundaryEvent)model.getMainProcess().getFlowElement("signalEvent");
SignalEventDefinition signalEvent = (SignalEventDefinition)extractEventDefinition(signalElement);
assertFalse(signalElement.isCancelActivity());
assertEquals("signalRef", signalEvent.getSignalRef());
FlowElement timerElement = model.getMainProcess().getFlowElement("timerEvent");
assertTrue(timerElement instanceof BoundaryEvent);
BoundaryEvent messageElement = (BoundaryEvent)model.getMainProcess().getFlowElement("messageEvent");
MessageEventDefinition messageEvent = (MessageEventDefinition)extractEventDefinition(messageElement);
assertFalse(messageElement.isCancelActivity());
assertEquals("messageRef", messageEvent.getMessageRef());
BoundaryEvent errorEvent = (BoundaryEvent) errorElement;
assertTrue(errorEvent.isCancelActivity()); //always true
BoundaryEvent timerElement = (BoundaryEvent)model.getMainProcess().getFlowElement("timerEvent");
TimerEventDefinition timerEvent = (TimerEventDefinition)extractEventDefinition(timerElement);
assertFalse(timerElement.isCancelActivity());
assertEquals("PT5M", timerEvent.getTimeDuration());
BoundaryEvent signalEvent = (BoundaryEvent) signalElement;
assertFalse(signalEvent.isCancelActivity());
BoundaryEvent timerEvent = (BoundaryEvent) timerElement;
assertFalse(timerEvent.isCancelActivity());
}
}
package org.activiti.editor.language;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.EventDefinition;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.IntermediateCatchEvent;
import org.activiti.bpmn.model.MessageEventDefinition;
import org.activiti.bpmn.model.SignalEventDefinition;
import org.activiti.bpmn.model.TimerEventDefinition;
......@@ -55,10 +53,4 @@ public class CatchEventConverterTest extends AbstractConverterTest {
}
private EventDefinition extractEventDefinition(FlowElement messageElement) {
assertNotNull(messageElement);
assertTrue(messageElement instanceof IntermediateCatchEvent);
IntermediateCatchEvent messageEvent = (IntermediateCatchEvent)messageElement;
return messageEvent.getEventDefinitions().get(0);
}
}
......@@ -1409,6 +1409,17 @@
"propertyPackages" : [ "elementbase", "baseattributes", "cancelactivityattribute", "signalrefdefinition" ],
"roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
}, {
"type" : "node",
"id" : "BoundaryMessageEvent",
"title" : "Boundary message event",
"description" : "A boundary event with a message trigger",
"view" : "intermediateevent/message.catching.svg",
"icon" : "catching/message.png",
"groups" : [ "Boundary Events" ],
"propertyPackages" : [ "elementbase", "baseattributes", "cancelactivityattribute", "messagerefdefinition" ],
"roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
},
{
"type" : "node",
"id" : "CatchTimerEvent",
"title" : "Intermediate timer catching event",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册