diff options
author | Bob Brodt | 2014-02-03 21:48:03 +0000 |
---|---|---|
committer | Bob Brodt | 2014-02-03 21:48:03 +0000 |
commit | d667c7de7aeb0c222833af4ee61b1b6a33e23062 (patch) | |
tree | 46649f90591254446ffc2f21186f4a6c1993955d | |
parent | 3ef33e25f5d059b3072b58215efbac644e2c4e36 (diff) | |
download | org.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
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)) { |