diff options
author | Henrik Rentz-Reichert | 2011-05-20 05:54:20 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2011-05-20 05:54:20 +0000 |
commit | 4c6dabf54c8dc442d49122a9ea531efa826abc74 (patch) | |
tree | 2fc235edd46f063cceffd190471796e9bdc25dcd /plugins/org.eclipse.etrice.ui.structure | |
parent | 49616f380ac30c1e9ef2ca67f9be1e4f548fc63b (diff) | |
download | org.eclipse.etrice-4c6dabf54c8dc442d49122a9ea531efa826abc74.tar.gz org.eclipse.etrice-4c6dabf54c8dc442d49122a9ea531efa826abc74.tar.xz org.eclipse.etrice-4c6dabf54c8dc442d49122a9ea531efa826abc74.zip |
[ui.structure] 345815: changing a transition endpoint does not modify the .room file
https://bugs.eclipse.org/bugs/show_bug.cgi?id=345815
added ReconnectFeatures for Bindings and LayerConnections
Diffstat (limited to 'plugins/org.eclipse.etrice.ui.structure')
4 files changed, 265 insertions, 100 deletions
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java index f7ca47dba..c0363163a 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java @@ -30,6 +30,7 @@ import org.eclipse.graphiti.features.IDeleteFeature; import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.ILayoutFeature;
import org.eclipse.graphiti.features.IMoveShapeFeature;
+import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IResizeShapeFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
@@ -40,6 +41,7 @@ import org.eclipse.graphiti.features.context.IDoubleClickContext; import org.eclipse.graphiti.features.context.ILayoutContext;
import org.eclipse.graphiti.features.context.IMoveShapeContext;
import org.eclipse.graphiti.features.context.IPictogramElementContext;
+import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IResizeShapeContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
@@ -265,6 +267,15 @@ public class ProviderDispatcher { }
@Override
+ public IReconnectionFeature getReconnectionFeature(IReconnectionContext context) {
+ IFeatureProvider fp = getFeatureProvider(context);
+ if (fp!=null)
+ return fp.getReconnectionFeature(context);
+ else
+ return super.getReconnectionFeature(context);
+ }
+
+ @Override
public IDeleteFeature getDeleteFeature(IDeleteContext context) {
IFeatureProvider fp = featureSwitch.doSwitch(getBusinessObject(context));
if (fp!=null)
@@ -305,6 +316,10 @@ public class ProviderDispatcher { }
return null;
}
+
+ private IFeatureProvider getFeatureProvider(IReconnectionContext context) {
+ return featureSwitch.doSwitch((EObject) getBusinessObjectForPictogramElement(context.getConnection()));
+ }
}
private class DispatchingToolBehaviorProvider extends DefaultToolBehaviorProvider {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java index 274e033d5..fe0f3d7c7 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java @@ -22,19 +22,23 @@ import org.eclipse.graphiti.features.ICreateConnectionFeature; import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IReason;
+import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
import org.eclipse.graphiti.features.context.IAddConnectionContext;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.ICreateConnectionContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
+import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.context.impl.AddConnectionContext;
+import org.eclipse.graphiti.features.context.impl.ReconnectionContext;
import org.eclipse.graphiti.features.context.impl.RemoveContext;
import org.eclipse.graphiti.features.impl.AbstractAddFeature;
import org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature;
import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;
+import org.eclipse.graphiti.features.impl.DefaultReconnectionFeature;
import org.eclipse.graphiti.features.impl.DefaultRemoveFeature;
import org.eclipse.graphiti.features.impl.Reason;
import org.eclipse.graphiti.mm.algorithms.Polyline;
@@ -86,9 +90,10 @@ public class BindingSupport { @Override
public boolean canCreate(ICreateConnectionContext context) {
- Port src = getPort(context.getSourceAnchor());
- Port tgt = getPort(context.getTargetAnchor());
- ActorContainerRef srcRef = getRef(context.getSourceAnchor());
+ IFeatureProvider featureProvider = getFeatureProvider();
+ Port src = SupportUtil.getPort(context.getSourceAnchor(), featureProvider);
+ Port tgt = SupportUtil.getPort(context.getTargetAnchor(), featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(context.getSourceAnchor(), featureProvider);
if (justStarted) {
justStarted = false;
@@ -99,21 +104,21 @@ public class BindingSupport { return false;
}
- StructureClass ac = getParent(context);
+ StructureClass ac = SupportUtil.getParent(context, featureProvider);
if (ac==null) {
return false;
}
- ActorContainerRef tgtRef = getRef(context.getTargetAnchor());
+ ActorContainerRef tgtRef = SupportUtil.getRef(context.getTargetAnchor(), featureProvider);
return ValidationUtil.isConnectable(src, srcRef, tgt, tgtRef, ac).isOk();
}
public boolean canStartConnection(ICreateConnectionContext context) {
- Port src = getPort(context.getSourceAnchor());
+ Port src = SupportUtil.getPort(context.getSourceAnchor(), getFeatureProvider());
boolean canStart = src!=null;
if (canStart) {
- ActorContainerRef ref = getRef(context.getSourceAnchor());
+ ActorContainerRef ref = SupportUtil.getRef(context.getSourceAnchor(), getFeatureProvider());
if (ref==null) {
// this port is local, i.e. owned by the parent itself
ActorContainerClass acc = (ActorContainerClass) src.eContainer();
@@ -130,39 +135,6 @@ public class BindingSupport { justStarted = true;
return canStart;
}
-
- private Port getPort(Anchor anchor) {
- if (anchor != null) {
- Object obj = getBusinessObjectForPictogramElement(anchor.getParent());
- if (obj instanceof Port) {
- return (Port) obj;
- }
- }
- return null;
- }
-
- public StructureClass getParent(ICreateConnectionContext context) {
- ContainerShape shape = (ContainerShape) context.getSourcePictogramElement().eContainer();
- Object bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof StructureClass)
- return (StructureClass) bo;
-
- shape = (ContainerShape) shape.eContainer();
- bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof StructureClass)
- return (StructureClass) bo;
-
- return null;
- }
-
- public ActorContainerRef getRef(Anchor anchor) {
- ContainerShape shape = (ContainerShape) anchor.getParent().eContainer();
- Object bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof ActorContainerRef)
- return (ActorContainerRef) bo;
-
- return null;
- }
@Override
public Connection create(ICreateConnectionContext context) {
@@ -170,17 +142,18 @@ public class BindingSupport { endHighLightMatches();
- Port src = getPort(context.getSourceAnchor());
- Port dst = getPort(context.getTargetAnchor());
- StructureClass ac = getParent(context);
+ IFeatureProvider featureProvider = getFeatureProvider();
+ Port src = SupportUtil.getPort(context.getSourceAnchor(), featureProvider);
+ Port dst = SupportUtil.getPort(context.getTargetAnchor(), featureProvider);
+ StructureClass ac = SupportUtil.getParent(context, featureProvider);
if (src!=null && dst!=null && ac!=null) {
Binding bind = RoomFactory.eINSTANCE.createBinding();
BindingEndPoint ep1 = RoomFactory.eINSTANCE.createBindingEndPoint();
- ActorContainerRef ar1 = getRef(context.getSourceAnchor());
+ ActorContainerRef ar1 = SupportUtil.getRef(context.getSourceAnchor(), featureProvider);
ep1.setPort(src);
ep1.setActorRef(ar1);
BindingEndPoint ep2 = RoomFactory.eINSTANCE.createBindingEndPoint();
- ActorContainerRef ar2 = getRef(context.getTargetAnchor());
+ ActorContainerRef ar2 = SupportUtil.getRef(context.getTargetAnchor(), featureProvider);
ep2.setPort(dst);
ep2.setActorRef(ar2);
bind.setEndpoint1(ep1);
@@ -189,7 +162,7 @@ public class BindingSupport { AddConnectionContext addContext = new AddConnectionContext(context.getSourceAnchor(), context.getTargetAnchor());
addContext.setNewObject(bind);
- newConnection = (Connection) getFeatureProvider().addIfPossible(addContext);
+ newConnection = (Connection) featureProvider.addIfPossible(addContext);
}
return newConnection;
@@ -235,9 +208,9 @@ public class BindingSupport { @Override
public PictogramElement add(IAddContext context) {
IAddConnectionContext addConContext = (IAddConnectionContext) context;
- Binding addedEReference = (Binding) context.getNewObject();
+ Binding bind = (Binding) context.getNewObject();
- boolean inherited = isInherited(getDiagram(), addedEReference);
+ boolean inherited = isInherited(getDiagram(), bind);
IPeCreateService peCreateService = Graphiti.getPeCreateService();
// CONNECTION WITH POLYLINE
@@ -252,13 +225,87 @@ public class BindingSupport { polyline.setForeground(manageColor(inherited?INHERITED_COLOR:LINE_COLOR));
// create link and wire it
- link(connection, addedEReference);
+ link(connection, bind);
return connection;
}
}
+ private class ReconnectionFeature extends DefaultReconnectionFeature {
+
+ private boolean doneChanges = false;
+
+ public ReconnectionFeature(IFeatureProvider fp) {
+ super(fp);
+ }
+
+ @Override
+ public boolean canReconnect(IReconnectionContext context) {
+ if (!super.canReconnect(context))
+ return false;
+
+ Binding bind = (Binding) getBusinessObjectForPictogramElement(context.getConnection());
+ if (isInherited(getDiagram(), bind))
+ return false;
+
+ Anchor asrc = context.getConnection().getStart();
+ Anchor atgt = context.getConnection().getEnd();
+ if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_SOURCE))
+ asrc = context.getNewAnchor();
+ else
+ atgt = context.getNewAnchor();
+
+ IFeatureProvider featureProvider = getFeatureProvider();
+ Port src = SupportUtil.getPort(asrc, featureProvider);
+ Port tgt = SupportUtil.getPort(atgt, featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(asrc, featureProvider);
+
+ if (src==null || tgt==null) {
+ return false;
+ }
+
+ StructureClass ac = SupportUtil.getParent(getDiagram(), featureProvider);
+ if (ac==null) {
+ return false;
+ }
+
+ ActorContainerRef tgtRef = SupportUtil.getRef(atgt, featureProvider);
+
+ return ValidationUtil.isConnectable(src, srcRef, tgt, tgtRef, ac, bind).isOk();
+ }
+
+ @Override
+ public void postReconnect(IReconnectionContext context) {
+ super.postReconnect(context);
+
+ IFeatureProvider featureProvider = getFeatureProvider();
+ Port src = SupportUtil.getPort(context.getConnection().getStart(), featureProvider);
+ Port dst = SupportUtil.getPort(context.getConnection().getEnd(), featureProvider);
+ StructureClass ac = SupportUtil.getParent(getDiagram(), featureProvider);
+ if (src!=null && dst!=null && ac!=null) {
+ doneChanges = true;
+
+ Binding bind = (Binding) getBusinessObjectForPictogramElement(context.getConnection());
+ BindingEndPoint ep1 = RoomFactory.eINSTANCE.createBindingEndPoint();
+ ActorContainerRef ar1 = SupportUtil.getRef(context.getConnection().getStart(), featureProvider);
+ ep1.setPort(src);
+ ep1.setActorRef(ar1);
+ BindingEndPoint ep2 = RoomFactory.eINSTANCE.createBindingEndPoint();
+ ActorContainerRef ar2 = SupportUtil.getRef(context.getConnection().getEnd(), featureProvider);
+ ep2.setPort(dst);
+ ep2.setActorRef(ar2);
+ bind.setEndpoint1(ep1);
+ bind.setEndpoint2(ep2);
+ }
+ }
+
+ @Override
+ public boolean hasDoneChanges() {
+ return doneChanges ;
+ }
+ }
+
private class UpdateFeature extends AbstractUpdateFeature {
public UpdateFeature(IFeatureProvider fp) {
@@ -358,6 +405,11 @@ public class BindingSupport { public IUpdateFeature getUpdateFeature(IUpdateContext context) {
return new UpdateFeature(fp);
}
+
+ @Override
+ public IReconnectionFeature getReconnectionFeature(IReconnectionContext context) {
+ return new ReconnectionFeature(fp);
+ }
@Override
public IRemoveFeature getRemoveFeature(IRemoveContext context) {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/LayerConnectionSupport.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/LayerConnectionSupport.java index 9a9d73674..7a1080b2e 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/LayerConnectionSupport.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/LayerConnectionSupport.java @@ -32,19 +32,23 @@ import org.eclipse.graphiti.features.ICreateConnectionFeature; import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IReason;
+import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
import org.eclipse.graphiti.features.context.IAddConnectionContext;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.ICreateConnectionContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
+import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.context.impl.AddConnectionContext;
+import org.eclipse.graphiti.features.context.impl.ReconnectionContext;
import org.eclipse.graphiti.features.context.impl.RemoveContext;
import org.eclipse.graphiti.features.impl.AbstractAddFeature;
import org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature;
import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;
+import org.eclipse.graphiti.features.impl.DefaultReconnectionFeature;
import org.eclipse.graphiti.features.impl.DefaultRemoveFeature;
import org.eclipse.graphiti.features.impl.Reason;
import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer;
@@ -87,67 +91,32 @@ public class LayerConnectionSupport { @Override
public boolean canCreate(ICreateConnectionContext context) {
- SPPRef src = getSPPRef(context.getSourceAnchor());
- ActorContainerRef srcRef = getRef(context.getSourceAnchor());
- SPPRef tgt = getSPPRef(context.getTargetAnchor());
- ActorContainerRef tgtRef = getRef(context.getTargetAnchor());
- StructureClass sc = getParent(context);
+ IFeatureProvider featureProvider = getFeatureProvider();
+ SPPRef src = SupportUtil.getSPPRef(context.getSourceAnchor(), featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(context.getSourceAnchor(), featureProvider);
+ SPPRef tgt = SupportUtil.getSPPRef(context.getTargetAnchor(), featureProvider);
+ ActorContainerRef tgtRef = SupportUtil.getRef(context.getTargetAnchor(), featureProvider);
+ StructureClass sc = SupportUtil.getParent(context, featureProvider);
return ValidationUtil.isConnectable(src, srcRef, tgt, tgtRef, sc).isOk();
}
public boolean canStartConnection(ICreateConnectionContext context) {
- SPPRef src = getSPPRef(context.getSourceAnchor());
- ActorContainerRef ref = getRef(context.getSourceAnchor());
- StructureClass sc = getParent(context);
+ IFeatureProvider featureProvider = getFeatureProvider();
+ SPPRef src = SupportUtil.getSPPRef(context.getSourceAnchor(), featureProvider);
+ ActorContainerRef ref = SupportUtil.getRef(context.getSourceAnchor(), featureProvider);
+ StructureClass sc = SupportUtil.getParent(context, featureProvider);
return ValidationUtil.isConnectableSrc(src, ref, sc);
}
-
- private SPPRef getSPPRef(Anchor anchor) {
- if (anchor != null) {
- Object obj = getBusinessObjectForPictogramElement(anchor.getParent());
- if (obj instanceof SPPRef) {
- return (SPPRef) obj;
- }
- }
- return null;
- }
-
- public ActorContainerRef getRef(Anchor anchor) {
- if (anchor != null) {
- ContainerShape shape = (ContainerShape) anchor.getParent().eContainer();
- Object bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof ActorContainerRef)
- return (ActorContainerRef) bo;
- shape = (ContainerShape) anchor.getParent();
- bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof ActorContainerRef)
- return (ActorContainerRef) bo;
- }
- return null;
- }
-
- public StructureClass getParent(ICreateConnectionContext context) {
- ContainerShape shape = (ContainerShape) context.getSourcePictogramElement().eContainer();
- Object bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof StructureClass)
- return (StructureClass) bo;
-
- shape = (ContainerShape) shape.eContainer();
- bo = getBusinessObjectForPictogramElement(shape);
- if (bo instanceof StructureClass)
- return (StructureClass) bo;
-
- return null;
- }
@Override
public Connection create(ICreateConnectionContext context) {
- SPPRef src = getSPPRef(context.getSourceAnchor());
- ActorContainerRef srcRef = getRef(context.getSourceAnchor());
- SPPRef dst = getSPPRef(context.getTargetAnchor());
- ActorContainerRef dstRef = getRef(context.getTargetAnchor());
- StructureClass sc = getParent(context);
+ IFeatureProvider featureProvider = getFeatureProvider();
+ SPPRef src = SupportUtil.getSPPRef(context.getSourceAnchor(), featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(context.getSourceAnchor(), featureProvider);
+ SPPRef dst = SupportUtil.getSPPRef(context.getTargetAnchor(), featureProvider);
+ ActorContainerRef dstRef = SupportUtil.getRef(context.getTargetAnchor(), featureProvider);
+ StructureClass sc = SupportUtil.getParent(context, featureProvider);
LayerConnection lc = RoomFactory.eINSTANCE.createLayerConnection();
SAPoint sapt = null;
@@ -273,6 +242,76 @@ public class LayerConnectionSupport { }
}
+ private class ReconnectionFeature extends DefaultReconnectionFeature {
+
+ private boolean doneChanges = false;
+
+ public ReconnectionFeature(IFeatureProvider fp) {
+ super(fp);
+ }
+
+ @Override
+ public boolean canReconnect(IReconnectionContext context) {
+ if (!super.canReconnect(context))
+ return false;
+
+ LayerConnection lc = (LayerConnection) getBusinessObjectForPictogramElement(context.getConnection());
+ if (isInherited(getDiagram(), lc))
+ return false;
+
+ Anchor asrc = context.getConnection().getStart();
+ Anchor atgt = context.getConnection().getEnd();
+ if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_SOURCE))
+ asrc = context.getNewAnchor();
+ else
+ atgt = context.getNewAnchor();
+
+ IFeatureProvider featureProvider = getFeatureProvider();
+ SPPRef src = SupportUtil.getSPPRef(asrc, featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(asrc, featureProvider);
+ SPPRef tgt = SupportUtil.getSPPRef(atgt, featureProvider);
+ ActorContainerRef tgtRef = SupportUtil.getRef(atgt, featureProvider);
+ StructureClass sc = SupportUtil.getParent(getDiagram(), featureProvider);
+
+ return ValidationUtil.isConnectable(src, srcRef, tgt, tgtRef, sc).isOk();
+ }
+
+ @Override
+ public void postReconnect(IReconnectionContext context) {
+ super.postReconnect(context);
+
+ IFeatureProvider featureProvider = getFeatureProvider();
+ SPPRef src = SupportUtil.getSPPRef(context.getConnection().getStart(), featureProvider);
+ ActorContainerRef srcRef = SupportUtil.getRef(context.getConnection().getStart(), featureProvider);
+ SPPRef dst = SupportUtil.getSPPRef(context.getConnection().getEnd(), featureProvider);
+ ActorContainerRef dstRef = SupportUtil.getRef(context.getConnection().getEnd(), featureProvider);
+
+ doneChanges = true;
+
+ LayerConnection lc = (LayerConnection) getBusinessObjectForPictogramElement(context.getConnection());
+ SAPoint sapt = null;
+ if (src!=null) {
+ sapt = RoomFactory.eINSTANCE.createRelaySAPoint();
+ ((RelaySAPoint)sapt).setRelay(src);
+ }
+ else if (srcRef!=null) {
+ sapt = RoomFactory.eINSTANCE.createRefSAPoint();
+ ((RefSAPoint)sapt).setRef(srcRef);
+ }
+ lc.setFrom(sapt);
+
+ SPPoint sppt = RoomFactory.eINSTANCE.createSPPoint();
+ sppt.setRef(dstRef);
+ sppt.setService(dst);
+ lc.setTo(sppt);
+ }
+
+ @Override
+ public boolean hasDoneChanges() {
+ return doneChanges ;
+ }
+ }
+
private class UpdateFeature extends AbstractUpdateFeature {
public UpdateFeature(IFeatureProvider fp) {
@@ -351,6 +390,11 @@ public class LayerConnectionSupport { public IUpdateFeature getUpdateFeature(IUpdateContext context) {
return new UpdateFeature(fp);
}
+
+ @Override
+ public IReconnectionFeature getReconnectionFeature(IReconnectionContext context) {
+ return new ReconnectionFeature(fp);
+ }
}
class BehaviorProvider extends DefaultToolBehaviorProvider {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/SupportUtil.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/SupportUtil.java index 7003e38ba..9bbb1c388 100644 --- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/SupportUtil.java +++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/SupportUtil.java @@ -27,7 +27,9 @@ import org.eclipse.etrice.core.room.RelaySAPoint; import org.eclipse.etrice.core.room.SAPoint;
import org.eclipse.etrice.core.room.SPPRef;
import org.eclipse.etrice.core.room.SPPoint;
+import org.eclipse.etrice.core.room.StructureClass;
import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.context.ICreateConnectionContext;
import org.eclipse.graphiti.features.context.impl.AddConnectionContext;
import org.eclipse.graphiti.features.context.impl.AddContext;
import org.eclipse.graphiti.mm.pictograms.Anchor;
@@ -256,4 +258,56 @@ public class SupportUtil { }
return bindings;
}
+
+ public static StructureClass getParent(ICreateConnectionContext context, IFeatureProvider fp) {
+ ContainerShape shape = (ContainerShape) context.getSourcePictogramElement().eContainer();
+ return getParent(shape, fp);
+ }
+
+ public static StructureClass getParent(ContainerShape shape, IFeatureProvider fp) {
+ Object bo = fp.getBusinessObjectForPictogramElement(shape);
+ if (bo instanceof StructureClass)
+ return (StructureClass) bo;
+
+ shape = (ContainerShape) shape.eContainer();
+ bo = fp.getBusinessObjectForPictogramElement(shape);
+ if (bo instanceof StructureClass)
+ return (StructureClass) bo;
+
+ return null;
+ }
+
+ public static Port getPort(Anchor anchor, IFeatureProvider fp) {
+ if (anchor != null) {
+ Object obj = fp.getBusinessObjectForPictogramElement(anchor.getParent());
+ if (obj instanceof Port) {
+ return (Port) obj;
+ }
+ }
+ return null;
+ }
+
+ public static SPPRef getSPPRef(Anchor anchor, IFeatureProvider fp) {
+ if (anchor != null) {
+ Object obj = fp.getBusinessObjectForPictogramElement(anchor.getParent());
+ if (obj instanceof SPPRef) {
+ return (SPPRef) obj;
+ }
+ }
+ return null;
+ }
+
+ public static ActorContainerRef getRef(Anchor anchor, IFeatureProvider fp) {
+ if (anchor != null) {
+ ContainerShape shape = (ContainerShape) anchor.getParent().eContainer();
+ Object bo = fp.getBusinessObjectForPictogramElement(shape);
+ if (bo instanceof ActorContainerRef)
+ return (ActorContainerRef) bo;
+ shape = (ContainerShape) anchor.getParent();
+ bo = fp.getBusinessObjectForPictogramElement(shape);
+ if (bo instanceof ActorContainerRef)
+ return (ActorContainerRef) bo;
+ }
+ return null;
+ }
}
|