Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Brodt2014-03-06 18:21:31 +0000
committerBob Brodt2014-03-06 18:21:31 +0000
commit47f791537d53809290310be3742dc4037d1f313f (patch)
treec07a724d20b70aebe13d9f0b1808c052774b0814
parentd43908b9442dd4a517785ce4353e90a3fc0a4851 (diff)
downloadorg.eclipse.bpmn2-modeler-47f791537d53809290310be3742dc4037d1f313f.tar.gz
org.eclipse.bpmn2-modeler-47f791537d53809290310be3742dc4037d1f313f.tar.xz
org.eclipse.bpmn2-modeler-47f791537d53809290310be3742dc4037d1f313f.zip
Bug 429699 - Stack Overflow error when creating any <customTask> with a
label Bug 429774 - Some compound objects are not being updated immediately after construction Bug 429784 - XMLHandler can not resolve some object references by QName
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractBpmn2AddElementFeature.java37
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractUpdateBaseElementFeature.java7
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java4
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java10
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java13
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/event/AddEventFeature.java12
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/gateway/AddGatewayFeature.java7
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/AddParticipantFeature.java4
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/UpdateParticipantMultiplicityFeature.java7
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java19
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java22
11 files changed, 109 insertions, 33 deletions
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractBpmn2AddElementFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractBpmn2AddElementFeature.java
index 4eca8243..181c0917 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractBpmn2AddElementFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractBpmn2AddElementFeature.java
@@ -45,12 +45,15 @@ import org.eclipse.graphiti.IExecutionInfo;
import org.eclipse.graphiti.datatypes.ILocation;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.IReason;
import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.ITargetContext;
import org.eclipse.graphiti.features.context.impl.AddContext;
import org.eclipse.graphiti.features.context.impl.CreateConnectionContext;
+import org.eclipse.graphiti.features.context.impl.LayoutContext;
import org.eclipse.graphiti.features.context.impl.ReconnectionContext;
+import org.eclipse.graphiti.features.context.impl.UpdateContext;
import org.eclipse.graphiti.mm.pictograms.Anchor;
import org.eclipse.graphiti.mm.pictograms.AnchorContainer;
import org.eclipse.graphiti.mm.pictograms.Connection;
@@ -333,4 +336,38 @@ public abstract class AbstractBpmn2AddElementFeature<T extends BaseElement>
@Override
public void postExecute(IExecutionInfo executionInfo) {
}
+
+ /**
+ * Update the given PictogramElement. A Graphiti UpdateContext is constructed by copying
+ * the properties from the given AddContext.
+ *
+ * @param addContext - the Graphiti AddContext that was used to add the PE to the Diagram
+ * @param pe - the PictogramElement
+ * @return a reason code indicating whether or not an update is needed.
+ */
+ protected IReason updatePictogramElement(IAddContext addContext, PictogramElement pe) {
+ UpdateContext updateContext = new UpdateContext(pe);
+ for (Object key : addContext.getPropertyKeys()) {
+ Object value = addContext.getProperty(key);
+ updateContext.putProperty(key, value);
+ }
+ return getFeatureProvider().updateIfPossible(updateContext);
+ }
+
+ /**
+ * Layout the given PictogramElement. A Graphiti LayoutContext is constructed by copying
+ * the properties from the given AddContext.
+ *
+ * @param addContext - the Graphiti AddContext that was used to add the PE to the Diagram
+ * @param pe - the PictogramElement
+ * @return a reason code indicating whether or not a layout is needed.
+ */
+ protected IReason layoutPictogramElement(IAddContext addContext, PictogramElement pe) {
+ LayoutContext layoutContext = new LayoutContext(pe);
+ for (Object key : addContext.getPropertyKeys()) {
+ Object value = addContext.getProperty(key);
+ layoutContext.putProperty(key, value);
+ }
+ return getFeatureProvider().layoutIfPossible(layoutContext);
+ }
} \ No newline at end of file
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractUpdateBaseElementFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractUpdateBaseElementFeature.java
index be8a18b8..e50001ff 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractUpdateBaseElementFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/AbstractUpdateBaseElementFeature.java
@@ -13,6 +13,7 @@
package org.eclipse.bpmn2.modeler.core.features;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.features.IFeatureProvider;
@@ -33,6 +34,12 @@ public abstract class AbstractUpdateBaseElementFeature extends AbstractUpdateFea
@Override
public IReason updateNeeded(final IUpdateContext context) {
+ Object value = context.getProperty(ContextConstants.BUSINESS_OBJECT);
+ if (value instanceof EObject) {
+ // if the UpdateContext has a "businessObject" property, then this update is needed
+ // as part of the the CreateFeature ("businessObject" is only set in the CreateFeature)
+ return Reason.createTrueReason("Initial update");
+ }
PictogramElement pe = context.getPictogramElement();
if (pe instanceof ContainerShape) {
String shapeValue = FeatureSupport.getShapeValue(context);
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
index 23967540..577b0c87 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractAddActivityFeature.java
@@ -133,8 +133,8 @@ public abstract class AbstractAddActivityFeature<T extends Activity>
}
splitConnection(context, containerShape);
- updatePictogramElement(containerShape);
- layoutPictogramElement(containerShape);
+ updatePictogramElement(context, containerShape);
+ layoutPictogramElement(context, containerShape);
return containerShape;
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
index d19a91f8..66dc5fdc 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/activity/AbstractUpdateMarkerFeature.java
@@ -16,7 +16,9 @@ import java.util.Iterator;
import org.eclipse.bpmn2.Activity;
import org.eclipse.bpmn2.FlowElement;
+import org.eclipse.bpmn2.modeler.core.features.ContextConstants;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IReason;
import org.eclipse.graphiti.features.context.IUpdateContext;
@@ -42,6 +44,12 @@ public abstract class AbstractUpdateMarkerFeature<T extends FlowElement> extends
@Override
public IReason updateNeeded(IUpdateContext context) {
+ Object value = context.getProperty(ContextConstants.BUSINESS_OBJECT);
+ if (value instanceof EObject) {
+ // if the UpdateContext has a "businessObject" property, then this update is needed
+ // as part of the the CreateFeature ("businessObject" is only set in the CreateFeature)
+ return Reason.createTrueReason("Initial update");
+ }
IPeService peService = Graphiti.getPeService();
PictogramElement element = context.getPictogramElement();
String property = peService.getPropertyValue(element, getPropertyKey());
@@ -50,7 +58,7 @@ public abstract class AbstractUpdateMarkerFeature<T extends FlowElement> extends
}
T activity = (T) getBusinessObjectForPictogramElement(context.getPictogramElement());
boolean changed = isPropertyChanged(activity, property);
- return changed ? Reason.createTrueReason() : Reason.createFalseReason();
+ return changed ? Reason.createTrueReason("Marker changed") : Reason.createFalseReason();
}
@Override
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java
index 1c0176c2..64759604 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java
@@ -15,6 +15,8 @@ package org.eclipse.bpmn2.modeler.core.features.data;
import org.eclipse.bpmn2.ItemAwareElement;
import org.eclipse.bpmn2.modeler.core.di.DIImport;
import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2AddElementFeature;
+import org.eclipse.bpmn2.modeler.core.features.IFeatureContainer;
+import org.eclipse.bpmn2.modeler.core.features.label.LabelFeatureContainer;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
@@ -96,10 +98,13 @@ public abstract class AddDataFeature<T extends ItemAwareElement> extends Abstrac
peService.createChopboxAnchor(containerShape);
AnchorUtil.addFixedPointAnchors(containerShape, invisibleRect);
- layoutPictogramElement(containerShape);
- updatePictogramElement(containerShape);
- this.prepareAddContext(context, containerShape, width, height);
- this.getFeatureProvider().getAddFeature(context).add(context);
+ updatePictogramElement(context, containerShape);
+ layoutPictogramElement(context, containerShape);
+
+ // prepare the AddContext to create a Label
+ prepareAddContext(context, containerShape, width, height);
+ IFeatureContainer fc = new LabelFeatureContainer();
+ fc.getAddFeature(getFeatureProvider()).add(context);
return containerShape;
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/event/AddEventFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/event/AddEventFeature.java
index b7e1c953..ab59d7c3 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/event/AddEventFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/event/AddEventFeature.java
@@ -17,6 +17,8 @@ import static org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil.createEventShape
import org.eclipse.bpmn2.Event;
import org.eclipse.bpmn2.modeler.core.di.DIImport;
import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2AddElementFeature;
+import org.eclipse.bpmn2.modeler.core.features.IFeatureContainer;
+import org.eclipse.bpmn2.modeler.core.features.label.LabelFeatureContainer;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
@@ -86,11 +88,13 @@ public class AddEventFeature<T extends Event>
splitConnection(context, containerShape);
- updatePictogramElement(containerShape);
- layoutPictogramElement(containerShape);
+ updatePictogramElement(context, containerShape);
+ layoutPictogramElement(context, containerShape);
- this.prepareAddContext(context, containerShape, width, height);
- this.getFeatureProvider().getAddFeature(context).add(context);
+ // prepare the AddContext to create a Label
+ prepareAddContext(context, containerShape, width, height);
+ IFeatureContainer fc = new LabelFeatureContainer();
+ fc.getAddFeature(getFeatureProvider()).add(context);
return containerShape;
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/gateway/AddGatewayFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/gateway/AddGatewayFeature.java
index f06e533c..a0eef014 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/gateway/AddGatewayFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/gateway/AddGatewayFeature.java
@@ -15,6 +15,8 @@ package org.eclipse.bpmn2.modeler.core.features.gateway;
import org.eclipse.bpmn2.Gateway;
import org.eclipse.bpmn2.modeler.core.di.DIImport;
import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2AddElementFeature;
+import org.eclipse.bpmn2.modeler.core.features.IFeatureContainer;
+import org.eclipse.bpmn2.modeler.core.features.label.LabelFeatureContainer;
import org.eclipse.bpmn2.modeler.core.utils.AnchorUtil;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
@@ -83,8 +85,9 @@ public class AddGatewayFeature<T extends Gateway>
layoutPictogramElement(containerShape);
// Use context for labeling!
- this.prepareAddContext(context, containerShape, width, height);
- this.getFeatureProvider().getAddFeature(context).add(context);
+ prepareAddContext(context, containerShape, width, height);
+ IFeatureContainer fc = new LabelFeatureContainer();
+ fc.getAddFeature(getFeatureProvider()).add(context);
return containerShape;
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/AddParticipantFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/AddParticipantFeature.java
index 26bae0cd..28eb3bce 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/AddParticipantFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/AddParticipantFeature.java
@@ -103,8 +103,8 @@ public class AddParticipantFeature extends AbstractBpmn2AddElementFeature<Partic
peCreateService.createChopboxAnchor(containerShape);
AnchorUtil.addFixedPointAnchors(containerShape, rect);
- updatePictogramElement(containerShape);
- layoutPictogramElement(containerShape);
+ updatePictogramElement(context, containerShape);
+ layoutPictogramElement(context, containerShape);
return containerShape;
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/UpdateParticipantMultiplicityFeature.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/UpdateParticipantMultiplicityFeature.java
index 72b9272e..44cbf5d9 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/UpdateParticipantMultiplicityFeature.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/participant/UpdateParticipantMultiplicityFeature.java
@@ -15,6 +15,7 @@ package org.eclipse.bpmn2.modeler.core.features.participant;
import org.eclipse.bpmn2.ChoreographyActivity;
import org.eclipse.bpmn2.Participant;
import org.eclipse.bpmn2.ParticipantMultiplicity;
+import org.eclipse.bpmn2.modeler.core.features.ContextConstants;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
@@ -57,6 +58,12 @@ public class UpdateParticipantMultiplicityFeature extends AbstractUpdateFeature
@Override
public IReason updateNeeded(IUpdateContext context) {
+ Object value = context.getProperty(ContextConstants.BUSINESS_OBJECT);
+ if (value instanceof EObject) {
+ // if the UpdateContext has a "businessObject" property, then this update is needed
+ // as part of the the CreateFeature ("businessObject" is only set in the CreateFeature)
+ return Reason.createTrueReason("Initial update");
+ }
EObject container = context.getPictogramElement().eContainer();
if (container instanceof PictogramElement) {
PictogramElement containerElem = (PictogramElement) container;
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
index 66e50de4..78e2e893 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
@@ -382,6 +382,7 @@ public class Bpmn2ModelerResourceImpl extends Bpmn2ResourceImpl {
Bpmn2Preferences prefs = null;
ImportUtil importHandler = new ImportUtil();
+ String targetNamespace = null;
public Bpmn2ModelerXmlHandler(XMLResource xmiResource, XMLHelper helper, Map<?, ?> options) {
super(xmiResource, helper, options);
@@ -476,6 +477,10 @@ public class Bpmn2ModelerResourceImpl extends Bpmn2ResourceImpl {
itemDef.setImport(imp);
}
}
+ else if (obj instanceof Definitions) {
+ targetNamespace = ((Definitions)obj).getTargetNamespace();
+ }
+
}
/**
@@ -502,9 +507,17 @@ public class Bpmn2ModelerResourceImpl extends Bpmn2ResourceImpl {
String prefix = ids.substring(0,i);
String localname = ids.substring(i+1);
String namespace = helper.getNamespaceURI(prefix);
- Import imp = importHandler.findImportForNamespace(helper.getResource(), namespace);
- if (imp!=null) {
- value = importHandler.getObjectForLocalname(imp, object, eReference, localname);
+ if (namespace!=null && namespace.equals(targetNamespace)) {
+ // namespace for prefix is the same as targetNamespace
+ // so remove the prefix to avoid confusing the XMLHandler
+ ids = localname;
+ }
+ else {
+ // this thing is in another namespace, possibly in an external document
+ Import imp = importHandler.findImportForNamespace(helper.getResource(), namespace);
+ if (imp!=null) {
+ value = importHandler.getObjectForLocalname(imp, object, eReference, localname);
+ }
}
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
index f7aafea7..eac94035 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
@@ -1742,26 +1742,18 @@ public class ModelUtil {
List<Tuple<EObject,EObject>> list = new ArrayList<Tuple<EObject,EObject>>();
Definitions definitions = ModelUtil.getDefinitions(resource);
TreeIterator<EObject> iter1 = definitions.eAllContents();
- HashSet<EObject> map = new HashSet<EObject>();
+ Hashtable<String, EObject> map = new Hashtable<String, EObject>();
while (iter1.hasNext()) {
EObject o1 = iter1.next();
EStructuralFeature id1Feature = o1.eClass().getEIDAttribute();
- if (id1Feature!=null && !map.contains(o1)) {
- TreeIterator<EObject> iter2 = definitions.eAllContents();
- map.add(o1);
+ if (id1Feature!=null) {
String id1 = (String)o1.eGet(id1Feature);
-
- while (iter2.hasNext()) {
- EObject o2 = iter2.next();
- EStructuralFeature id2Feature = o2.eClass().getEIDAttribute();
- if (id2Feature!=null && o1!=o2 && !map.contains(o2)) {
- String id2 = (String)o2.eGet(id2Feature);
- if (id1!=null && !id1.isEmpty() && id2!=null && !id2.isEmpty()) {
- if (id1.equals(id2)) {
- list.add( new Tuple<EObject,EObject>(o1,o2) );
- }
- }
+ if (id1!=null) {
+ EObject o2 = map.get(id1);
+ if (o2!=null) {
+ list.add( new Tuple<EObject,EObject>(o1,o2) );
}
+ map.put(id1, o1);
}
}
}

Back to the top