提交 7c3f0e0e 编写于 作者: T Tijs Rademakers

model improvements

上级 57034fa4
......@@ -30,6 +30,7 @@ import org.activiti.bpmn.model.Artifact;
import org.activiti.bpmn.model.BaseElement;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.ErrorEventDefinition;
import org.activiti.bpmn.model.Event;
import org.activiti.bpmn.model.EventDefinition;
import org.activiti.bpmn.model.ExtensionAttribute;
import org.activiti.bpmn.model.ExtensionElement;
......@@ -39,10 +40,12 @@ import org.activiti.bpmn.model.FormValue;
import org.activiti.bpmn.model.Gateway;
import org.activiti.bpmn.model.MessageEventDefinition;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.bpmn.model.SignalEventDefinition;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.bpmn.model.TerminateEventDefinition;
import org.activiti.bpmn.model.ThrowEvent;
import org.activiti.bpmn.model.TimerEventDefinition;
import org.activiti.bpmn.model.UserTask;
import org.apache.commons.lang3.StringUtils;
......@@ -151,12 +154,22 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
if (activity.isNotExclusive()) {
writeQualifiedAttribute(ATTRIBUTE_ACTIVITY_EXCLUSIVE, ATTRIBUTE_VALUE_FALSE, xtw);
}
writeDefaultAttribute(ATTRIBUTE_DEFAULT, activity.getDefaultFlow(), xtw);
if (StringUtils.isNotEmpty(activity.getDefaultFlow())) {
FlowElement defaultFlowElement = model.getFlowElement(activity.getDefaultFlow());
if (defaultFlowElement != null && defaultFlowElement instanceof SequenceFlow) {
writeDefaultAttribute(ATTRIBUTE_DEFAULT, activity.getDefaultFlow(), xtw);
}
}
}
if (baseElement instanceof Gateway) {
final Gateway gateway = (Gateway) baseElement;
writeDefaultAttribute(ATTRIBUTE_DEFAULT, gateway.getDefaultFlow(), xtw);
if (StringUtils.isNotEmpty(gateway.getDefaultFlow())) {
FlowElement defaultFlowElement = model.getFlowElement(gateway.getDefaultFlow());
if (defaultFlowElement != null && defaultFlowElement instanceof SequenceFlow) {
writeDefaultAttribute(ATTRIBUTE_DEFAULT, gateway.getDefaultFlow(), xtw);
}
}
}
writeAdditionalAttributes(baseElement, xtw);
......@@ -342,23 +355,23 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
return ActivitiListenerExport.writeListeners(element, didWriteExtensionStartElement, xtw);
}
protected void writeEventDefinitions(List<EventDefinition> eventDefinitions, XMLStreamWriter xtw) throws Exception {
protected void writeEventDefinitions(Event parentEvent, List<EventDefinition> eventDefinitions, XMLStreamWriter xtw) throws Exception {
for (EventDefinition eventDefinition : eventDefinitions) {
if (eventDefinition instanceof TimerEventDefinition) {
writeTimerDefinition((TimerEventDefinition) eventDefinition, xtw);
writeTimerDefinition(parentEvent, (TimerEventDefinition) eventDefinition, xtw);
} else if (eventDefinition instanceof SignalEventDefinition) {
writeSignalDefinition((SignalEventDefinition) eventDefinition, xtw);
writeSignalDefinition(parentEvent, (SignalEventDefinition) eventDefinition, xtw);
} else if (eventDefinition instanceof MessageEventDefinition) {
writeMessageDefinition((MessageEventDefinition) eventDefinition, xtw);
writeMessageDefinition(parentEvent, (MessageEventDefinition) eventDefinition, xtw);
} else if (eventDefinition instanceof ErrorEventDefinition) {
writeErrorDefinition((ErrorEventDefinition) eventDefinition, xtw);
writeErrorDefinition(parentEvent, (ErrorEventDefinition) eventDefinition, xtw);
} else if (eventDefinition instanceof TerminateEventDefinition) {
writeTerminateDefinition((TerminateEventDefinition) eventDefinition, xtw);
writeTerminateDefinition(parentEvent, (TerminateEventDefinition) eventDefinition, xtw);
}
}
}
protected void writeTimerDefinition(TimerEventDefinition timerDefinition, XMLStreamWriter xtw) throws Exception {
protected void writeTimerDefinition(Event parentEvent, TimerEventDefinition timerDefinition, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ELEMENT_EVENT_TIMERDEFINITION);
boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(timerDefinition, false, xtw);
if (didWriteExtensionStartElement) {
......@@ -383,9 +396,12 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
xtw.writeEndElement();
}
protected void writeSignalDefinition(SignalEventDefinition signalDefinition, XMLStreamWriter xtw) throws Exception {
protected void writeSignalDefinition(Event parentEvent, SignalEventDefinition signalDefinition, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ELEMENT_EVENT_SIGNALDEFINITION);
writeDefaultAttribute(ATTRIBUTE_SIGNAL_REF, signalDefinition.getSignalRef(), xtw);
if (parentEvent instanceof ThrowEvent && signalDefinition.isAsync()) {
BpmnXMLUtil.writeQualifiedAttribute(ATTRIBUTE_ACTIVITY_ASYNCHRONOUS, "true", xtw);
}
boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(signalDefinition, false, xtw);
if (didWriteExtensionStartElement) {
xtw.writeEndElement();
......@@ -393,7 +409,7 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
xtw.writeEndElement();
}
protected void writeMessageDefinition(MessageEventDefinition messageDefinition, XMLStreamWriter xtw) throws Exception {
protected void writeMessageDefinition(Event parentEvent, MessageEventDefinition messageDefinition, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ELEMENT_EVENT_MESSAGEDEFINITION);
String messageRef = messageDefinition.getMessageRef();
......@@ -420,7 +436,7 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
xtw.writeEndElement();
}
protected void writeErrorDefinition(ErrorEventDefinition errorDefinition, XMLStreamWriter xtw) throws Exception {
protected void writeErrorDefinition(Event parentEvent, ErrorEventDefinition errorDefinition, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ELEMENT_EVENT_ERRORDEFINITION);
writeDefaultAttribute(ATTRIBUTE_ERROR_REF, errorDefinition.getErrorCode(), xtw);
boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(errorDefinition, false, xtw);
......@@ -430,7 +446,7 @@ public abstract class BaseBpmnXMLConverter implements BpmnXMLConstants {
xtw.writeEndElement();
}
protected void writeTerminateDefinition(TerminateEventDefinition terminateDefinition, XMLStreamWriter xtw) throws Exception {
protected void writeTerminateDefinition(Event parentEvent, TerminateEventDefinition terminateDefinition, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ELEMENT_EVENT_TERMINATEDEFINITION);
boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(terminateDefinition, false, xtw);
if (didWriteExtensionStartElement) {
......
......@@ -88,6 +88,6 @@ public class BoundaryEventXMLConverter extends BaseBpmnXMLConverter {
@Override
protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception {
BoundaryEvent boundaryEvent = (BoundaryEvent) element;
writeEventDefinitions(boundaryEvent.getEventDefinitions(), xtw);
writeEventDefinitions(boundaryEvent, boundaryEvent.getEventDefinitions(), xtw);
}
}
......@@ -57,6 +57,6 @@ public class CatchEventXMLConverter extends BaseBpmnXMLConverter {
@Override
protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception {
IntermediateCatchEvent catchEvent = (IntermediateCatchEvent) element;
writeEventDefinitions(catchEvent.getEventDefinitions(), xtw);
writeEventDefinitions(catchEvent, catchEvent.getEventDefinitions(), xtw);
}
}
......@@ -56,6 +56,6 @@ public class EndEventXMLConverter extends BaseBpmnXMLConverter {
@Override
protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception {
EndEvent endEvent = (EndEvent) element;
writeEventDefinitions(endEvent.getEventDefinitions(), xtw);
writeEventDefinitions(endEvent, endEvent.getEventDefinitions(), xtw);
}
}
......@@ -81,7 +81,7 @@ public class StartEventXMLConverter extends BaseBpmnXMLConverter {
@Override
protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception {
StartEvent startEvent = (StartEvent) element;
writeEventDefinitions(startEvent.getEventDefinitions(), xtw);
writeEventDefinitions(startEvent, startEvent.getEventDefinitions(), xtw);
}
public void addFormType(String formType) {
......
......@@ -56,6 +56,6 @@ public class ThrowEventXMLConverter extends BaseBpmnXMLConverter {
@Override
protected void writeAdditionalChildElements(BaseElement element, XMLStreamWriter xtw) throws Exception {
ThrowEvent throwEvent = (ThrowEvent) element;
writeEventDefinitions(throwEvent.getEventDefinitions(), xtw);
writeEventDefinitions(throwEvent, throwEvent.getEventDefinitions(), xtw);
}
}
......@@ -41,19 +41,5 @@ public abstract class FlowNode extends FlowElement {
public void setValues(FlowNode otherNode) {
super.setValues(otherNode);
incomingFlows = new ArrayList<SequenceFlow>();
if (otherNode.getIncomingFlows() != null && otherNode.getIncomingFlows().size() > 0) {
for (SequenceFlow flow : otherNode.getIncomingFlows()) {
incomingFlows.add(flow.clone());
}
}
outgoingFlows = new ArrayList<SequenceFlow>();
if (otherNode.getOutgoingFlows() != null && otherNode.getOutgoingFlows().size() > 0) {
for (SequenceFlow flow : otherNode.getOutgoingFlows()) {
outgoingFlows.add(flow.clone());
}
}
}
}
......@@ -14,9 +14,7 @@ package org.activiti.bpmn.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Tijs Rademakers
......@@ -30,7 +28,6 @@ public class Process extends BaseElement implements FlowElementsContainer, HasEx
protected List<ActivitiListener> executionListeners = new ArrayList<ActivitiListener>();
protected List<Lane> lanes = new ArrayList<Lane>();
protected List<FlowElement> flowElementList = new ArrayList<FlowElement>();
protected Map<String, FlowElement> flowElementMap = new HashMap<String, FlowElement>(); // The flow elements are twice stored. The map is used for performance when retrieving by id
protected List<Artifact> artifactList = new ArrayList<Artifact>();
protected List<String> candidateStarterUsers = new ArrayList<String>();
protected List<String> candidateStarterGroups = new ArrayList<String>();
......@@ -85,15 +82,7 @@ public class Process extends BaseElement implements FlowElementsContainer, HasEx
}
public FlowElement getFlowElement(String flowElementId) {
FlowElement flowElement = flowElementMap.get(flowElementId);
// It could be the id has changed after insertion into the map,
// So if it is not found, we loop through the list
if (flowElement == null) {
flowElement = findFlowElementInList(flowElementId);
}
return flowElement;
return findFlowElementInList(flowElementId);
}
protected FlowElement findFlowElementInList(String flowElementId) {
......@@ -111,19 +100,12 @@ public class Process extends BaseElement implements FlowElementsContainer, HasEx
public void addFlowElement(FlowElement element) {
flowElementList.add(element);
flowElementMap.put(element.getId(), element);
}
public void removeFlowElement(String elementId) {
FlowElement element = flowElementMap.get(elementId);
if (element == null) {
element = findFlowElementInList(elementId);
}
FlowElement element = findFlowElementInList(elementId);
if (element != null) {
flowElementList.remove(element);
flowElementMap.remove(elementId);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册