Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Brodt2014-02-03 21:48:03 +0000
committerBob Brodt2014-02-03 21:48:03 +0000
commitd667c7de7aeb0c222833af4ee61b1b6a33e23062 (patch)
tree46649f90591254446ffc2f21186f4a6c1993955d
parent3ef33e25f5d059b3072b58215efbac644e2c4e36 (diff)
downloadorg.eclipse.bpmn2-modeler-d667c7de7aeb0c222833af4ee61b1b6a33e23062.tar.gz
org.eclipse.bpmn2-modeler-d667c7de7aeb0c222833af4ee61b1b6a33e23062.tar.xz
org.eclipse.bpmn2-modeler-d667c7de7aeb0c222833af4ee61b1b6a33e23062.zip
Bug 427186 - Connections not visible when modeling a sub-process using
push down
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/ConnectionRoute.java9
-rw-r--r--org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ShapeLayoutManager.java6
-rw-r--r--org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/ConnectionLayerClippingStrategy.java29
-rw-r--r--org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/PushdownFeature.java42
4 files changed, 49 insertions, 37 deletions
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/ConnectionRoute.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/ConnectionRoute.java
index e8a159db..ecc7458e 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/ConnectionRoute.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/ConnectionRoute.java
@@ -214,15 +214,10 @@ public class ConnectionRoute implements Comparable<ConnectionRoute>, Comparator<
// TODO: figure out why connection crossing detection isn't working!
// i = o1.crossings.size() - o2.crossings.size();
if (i==0) {
- i = o1.getLength() - o2.getLength();
-// int m = Math.max(o1.getLength(), o2.getLength());
-// double r = 0;
-// if (m>0)
-// r = (double)Math.abs(i)/(double)m;
-// if (r<0.2 )
+ i = o1.getPoints().size() - o2.getPoints().size();
if (i==0)
{
- i = o1.getPoints().size() - o2.getPoints().size();
+ i = o1.getLength() - o2.getLength();
// if (i==0) {
// BoundaryAnchor ba1 = AnchorUtil.findNearestBoundaryAnchor(source, o1.get(0));
// BoundaryAnchor ba2 = AnchorUtil.findNearestBoundaryAnchor(source, o2.get(0));
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ShapeLayoutManager.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ShapeLayoutManager.java
index def6fcef..7fb25147 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ShapeLayoutManager.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ShapeLayoutManager.java
@@ -204,9 +204,9 @@ public class ShapeLayoutManager {
}
// TODO: remove this temporary hack to fix Manhattan Router issue
- for (ContainerShape child : childShapes) {
- FeatureSupport.updateConnections(editor.getDiagramTypeProvider().getFeatureProvider(), child);
- }
+// for (ContainerShape child : childShapes) {
+// FeatureSupport.updateConnections(editor.getDiagramTypeProvider().getFeatureProvider(), child);
+// }
}
private void stackShapes(ContainerShape container, List<ContainerShape> unconnectedShapes) {
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/ConnectionLayerClippingStrategy.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/ConnectionLayerClippingStrategy.java
index 744f6ca4..81643ea2 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/ConnectionLayerClippingStrategy.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/ConnectionLayerClippingStrategy.java
@@ -13,6 +13,8 @@ package org.eclipse.bpmn2.modeler.ui.editor;
import org.eclipse.bpmn2.BaseElement;
import org.eclipse.bpmn2.MessageFlow;
import org.eclipse.bpmn2.SubProcess;
+import org.eclipse.bpmn2.di.BPMNEdge;
+import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.ui.features.flow.MessageFlowFeatureContainer;
import org.eclipse.draw2d.Figure;
@@ -80,16 +82,25 @@ public class ConnectionLayerClippingStrategy implements IClippingStrategy {
else if (businessObject!=null) {
EObject container = businessObject.eContainer();
if (container instanceof SubProcess) {
- for (PictogramElement pe : Graphiti.getLinkService().getPictogramElements(diagram, container)) {
- if (pe instanceof ContainerShape) {
- // don't clip connection if the source or target is this SubProcess
- EObject sourceBo = BusinessObjectUtil.getFirstBaseElement(source);
- EObject targetBo = BusinessObjectUtil.getFirstBaseElement(target);
- if (sourceBo!=container && targetBo!=container)
- return getClip((ContainerShape)pe);
+ // don't clip if contents of SubProcess have been moved to a different
+ // BPMNDiagram ("pushed down")
+ BPMNEdge bpmnEdge = BusinessObjectUtil.getFirstElementOfType(connection, BPMNEdge.class);
+ if (bpmnEdge!=null) {
+ for (PictogramElement pe : Graphiti.getLinkService().getPictogramElements(diagram, container)) {
+ if (pe instanceof ContainerShape) {
+ BPMNShape bpmnShape = BusinessObjectUtil.getFirstElementOfType(pe, BPMNShape.class);
+ if (bpmnShape!=null) {
+ if (bpmnShape.eContainer()!=bpmnEdge.eContainer())
+ continue;
+ }
+ // don't clip connection if the source or target is this SubProcess
+ EObject sourceBo = BusinessObjectUtil.getFirstBaseElement(source);
+ EObject targetBo = BusinessObjectUtil.getFirstBaseElement(target);
+ if (sourceBo!=container && targetBo!=container)
+ return getClip((ContainerShape)pe);
+ }
}
- }
-
+ }
}
}
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/PushdownFeature.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/PushdownFeature.java
index 2eef9053..f7a01bb9 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/PushdownFeature.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/PushdownFeature.java
@@ -29,6 +29,7 @@ import org.eclipse.bpmn2.modeler.core.di.DIUtils;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
import org.eclipse.bpmn2.modeler.ui.ImageProvider;
import org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyUtil;
import org.eclipse.dd.di.DiagramElement;
@@ -44,6 +45,7 @@ import org.eclipse.graphiti.mm.algorithms.styles.Font;
import org.eclipse.graphiti.mm.algorithms.styles.Point;
import org.eclipse.graphiti.mm.algorithms.styles.Style;
import org.eclipse.graphiti.mm.pictograms.Connection;
+import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -149,6 +151,7 @@ public class PushdownFeature extends AbstractCustomFeature {
Diagram newDiagram = DIUtils.getOrCreateDiagram(getDiagramBehavior(), newBpmnDiagram);
ILocation loc = Graphiti.getLayoutService().getLocationRelativeToDiagram(shape);
+ List <EObject> moved = new ArrayList<EObject>();
for (FlowElement fe : container.getFlowElements()) {
DiagramElement de = DIUtils.findDiagramElement(fe);
@@ -158,10 +161,13 @@ public class PushdownFeature extends AbstractCustomFeature {
newPlane.getPlaneElement().add(de);
List <PictogramElement> pes = Graphiti.getLinkService().getPictogramElements(oldDiagram, fe);
- List <EObject> moved = new ArrayList<EObject>();
for (PictogramElement pe : pes) {
PictogramElement pictogramElement = null;
- if (pe instanceof Shape) {
+ if (pe instanceof ConnectionDecorator) {
+ // this will be moved as part of the connection
+ continue;
+ }
+ else if (pe instanceof Shape) {
if (BusinessObjectUtil.getFirstElementOfType(pe, BPMNShape.class)!=null) {
newDiagram.getChildren().add((Shape)pe);
pictogramElement = pe;
@@ -193,26 +199,26 @@ public class PushdownFeature extends AbstractCustomFeature {
newDiagram.getPictogramLinks().add((PictogramLink)o);
moved.add(o);
}
- else if (o instanceof Color) {
- newDiagram.getColors().add((Color)o);
- moved.add(o);
- }
- else if (o instanceof Font) {
- newDiagram.getFonts().add((Font)o);
- moved.add(o);
- }
- else if (o instanceof Style) {
- newDiagram.getStyles().add((Style)o);
- moved.add(o);
- }
+// else if (o instanceof Color) {
+// newDiagram.getColors().add((Color)o);
+// moved.add(o);
+// }
+// else if (o instanceof Font) {
+// newDiagram.getFonts().add((Font)o);
+// moved.add(o);
+// }
+// else if (o instanceof Style) {
+// newDiagram.getStyles().add((Style)o);
+// moved.add(o);
+// }
}
}
}
- oldDiagram.getPictogramLinks().removeAll(moved);
- oldDiagram.getColors().removeAll(moved);
- oldDiagram.getFonts().removeAll(moved);
- oldDiagram.getStyles().removeAll(moved);
}
+ oldDiagram.getPictogramLinks().removeAll(moved);
+// oldDiagram.getColors().removeAll(moved);
+// oldDiagram.getFonts().removeAll(moved);
+// oldDiagram.getStyles().removeAll(moved);
// collapse the sub process
if (AbstractExpandableActivityFeatureContainer.isExpandableElement(container)) {

Back to the top