[ui.behavior] fixed inheritance computation + fixed inherited
bendpoints
Change-Id: Ie4c464031bd3f5819ab0d505d1ad1b561d2c832e
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/AbstractFSMProviderDispatcher.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/AbstractFSMProviderDispatcher.java
index 44c3e4b..1b231a1 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/AbstractFSMProviderDispatcher.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/AbstractFSMProviderDispatcher.java
@@ -27,27 +27,35 @@
import org.eclipse.etrice.ui.behavior.fsm.provider.IInjectorProvider;
import org.eclipse.etrice.ui.common.base.support.CantDeleteFeature;
import org.eclipse.etrice.ui.common.base.support.CantRemoveFeature;
-import org.eclipse.etrice.ui.common.base.support.RemoveBendpointsFeature;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
+import org.eclipse.graphiti.features.IAddBendpointFeature;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.ICreateFeature;
import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.ILayoutFeature;
+import org.eclipse.graphiti.features.IMoveBendpointFeature;
+import org.eclipse.graphiti.features.IMoveConnectionDecoratorFeature;
import org.eclipse.graphiti.features.IMoveShapeFeature;
import org.eclipse.graphiti.features.IReconnectionFeature;
+import org.eclipse.graphiti.features.IRemoveBendpointFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IResizeShapeFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
+import org.eclipse.graphiti.features.context.IAddBendpointContext;
import org.eclipse.graphiti.features.context.IAddContext;
+import org.eclipse.graphiti.features.context.IBendpointContext;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
import org.eclipse.graphiti.features.context.IDoubleClickContext;
import org.eclipse.graphiti.features.context.ILayoutContext;
+import org.eclipse.graphiti.features.context.IMoveBendpointContext;
+import org.eclipse.graphiti.features.context.IMoveConnectionDecoratorContext;
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.IRemoveBendpointContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IResizeShapeContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
@@ -57,7 +65,6 @@
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;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.tb.DefaultToolBehaviorProvider;
@@ -328,6 +335,43 @@
}
@Override
+ public IAddBendpointFeature getAddBendpointFeature(IAddBendpointContext context) {
+ IFeatureProvider fp = getFeatureProvider(context);
+ if (fp!=null)
+ return fp.getAddBendpointFeature(context);
+ else
+ return super.getAddBendpointFeature(context);
+ }
+
+ @Override
+ public IMoveBendpointFeature getMoveBendpointFeature(IMoveBendpointContext context) {
+ IFeatureProvider fp = getFeatureProvider(context);
+ if (fp!=null)
+ return fp.getMoveBendpointFeature(context);
+ else
+ return super.getMoveBendpointFeature(context);
+ }
+
+ @Override
+ public IRemoveBendpointFeature getRemoveBendpointFeature(IRemoveBendpointContext context) {
+ IFeatureProvider fp = getFeatureProvider(context);
+ if (fp!=null)
+ return fp.getRemoveBendpointFeature(context);
+ else
+ return super.getRemoveBendpointFeature(context);
+ }
+
+ @Override
+ public IMoveConnectionDecoratorFeature getMoveConnectionDecoratorFeature(IMoveConnectionDecoratorContext context) {
+ IFeatureProvider fp = getFeatureProvider(context);
+ if (fp!=null)
+ return fp.getMoveConnectionDecoratorFeature(context);
+ else
+ return super.getMoveConnectionDecoratorFeature(context);
+ }
+
+
+ @Override
public ICustomFeature[] getCustomFeatures(ICustomContext context) {
ArrayList<ICustomFeature> result = new ArrayList<ICustomFeature>();
@@ -342,15 +386,6 @@
result.add(cust);
}
- boolean allFreeForm = true;
- PictogramElement[] pes = context.getPictogramElements();
- for (PictogramElement pe : pes) {
- if (!(pe instanceof FreeFormConnection))
- allFreeForm = false;
- }
- if (allFreeForm)
- result.add(new RemoveBendpointsFeature(fp));
-
ICustomFeature features[] = new ICustomFeature[result.size()];
return result.toArray(features);
}
@@ -388,6 +423,14 @@
private IFeatureProvider getFeatureProvider(IReconnectionContext context) {
return featureSwitch.doSwitch((EObject) getBusinessObjectForPictogramElement(context.getConnection()));
}
+
+ private IFeatureProvider getFeatureProvider(IBendpointContext context) {
+ return featureSwitch.doSwitch((EObject) getBusinessObjectForPictogramElement(context.getConnection()));
+ }
+
+ private IFeatureProvider getFeatureProvider(IMoveConnectionDecoratorContext context) {
+ return featureSwitch.doSwitch((EObject) getBusinessObjectForPictogramElement(context.getConnectionDecorator().getConnection()));
+ }
/* (non-Javadoc)
* @see org.eclipse.etrice.ui.behavior.fsm.provider.IInjectorProvider#getInjector()
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
index b666977..d95e237 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
@@ -182,7 +182,7 @@
public PictogramElement add(IAddContext context) {
ChoicePoint cp = (ChoicePoint) context.getNewObject();
ContainerShape sgShape = context.getTargetContainer();
- boolean inherited = FSMSupportUtil.getInstance().isInherited(cp, sgShape);
+ boolean inherited = FSMSupportUtil.getInstance().isInherited(getDiagram(), cp);
// CONTAINER SHAPE WITH RECTANGLE
IPeCreateService peCreateService = Graphiti.getPeCreateService();
@@ -249,8 +249,7 @@
if (bo instanceof ChoicePoint) {
ChoicePoint cp = (ChoicePoint) bo;
- ContainerShape acShape = context.getTargetContainer();
- if (FSMSupportUtil.getInstance().isInherited(cp, acShape))
+ if (FSMSupportUtil.getInstance().isInherited(getDiagram(), cp))
return false;
return true;
@@ -355,7 +354,7 @@
}
ChoicePoint cp = (ChoicePoint) bo;
- boolean inherited = FSMSupportUtil.getInstance().isInherited(cp, (ContainerShape)containerShape.eContainer());
+ boolean inherited = FSMSupportUtil.getInstance().isInherited(getDiagram(), cp);
Color dark = manageColor(inherited? INHERITED_COLOR:DARK_COLOR);
updateFigure(cp, containerShape, dark, manageColor(BRIGHT_COLOR));
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/FSMSupportUtil.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/FSMSupportUtil.java
index 6eba573..12ba3d7 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/FSMSupportUtil.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/FSMSupportUtil.java
@@ -34,6 +34,7 @@
import org.eclipse.etrice.core.fsm.fSM.ModelComponent;
import org.eclipse.etrice.core.fsm.fSM.NonInitialTransition;
import org.eclipse.etrice.core.fsm.fSM.RefinedState;
+import org.eclipse.etrice.core.fsm.fSM.RefinedTransition;
import org.eclipse.etrice.core.fsm.fSM.State;
import org.eclipse.etrice.core.fsm.fSM.StateGraph;
import org.eclipse.etrice.core.fsm.fSM.StateGraphItem;
@@ -147,27 +148,11 @@
return own;
}
- public boolean isInherited(StateGraphItem item, ContainerShape cs) {
- EObject container = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(cs);
- if (container instanceof StateGraph) {
- StateGraph sg = (StateGraph) container;
- return item.eContainer()!=sg;
- }
- else if (container instanceof State) {
- assert(item instanceof EntryPoint || item instanceof ExitPoint): "this MUST be an entry or exit point";
-
- // have to check whether the State is inherited
- State s = (State) container;
- ContainerShape sCont = cs.getContainer();
- EObject cls = sCont.getLink().getBusinessObjects().get(0);
- return s.eContainer()!=cls;
- }
-
- return false;
- }
-
public boolean isInherited(Diagram diag, EObject obj) {
- return fsmHelpers.getModelComponent(obj)!=getModelComponent(diag);
+ if(obj instanceof StateGraph)
+ obj = obj.eContainer();
+
+ return obj instanceof RefinedState || obj instanceof RefinedTransition || !EcoreUtil.isAncestor(getModelComponent(diag), obj);
}
public boolean showAsInherited(Diagram diag, State obj) {
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
index 6a6814e..4ae0dbd 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
@@ -226,7 +226,7 @@
ContainerShape parentShape = context.getTargetContainer();
Object bo = getBusinessObjectForPictogramElement(parentShape);
boolean subtp = (bo instanceof State);
- boolean inherited = subtp?FSMSupportUtil.getInstance().isInherited(getDiagram(), (State)bo):FSMSupportUtil.getInstance().isInherited(tp, parentShape);
+ boolean inherited = FSMSupportUtil.getInstance().isInherited(getDiagram(), tp);
int margin = subtp?MARGIN_SMALL:MARGIN;
int size = subtp?ITEM_SIZE_SMALL:ITEM_SIZE;
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
index a161b21..db28e50 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
@@ -47,23 +47,32 @@
import org.eclipse.etrice.ui.common.base.support.ChangeAwareCreateConnectionFeature;
import org.eclipse.etrice.ui.common.base.support.ChangeAwareCustomFeature;
import org.eclipse.etrice.ui.common.base.support.DeleteWithoutConfirmFeature;
+import org.eclipse.etrice.ui.common.base.support.RemoveBendpointsFeature;
import org.eclipse.graphiti.datatypes.ILocation;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
+import org.eclipse.graphiti.features.IAddBendpointFeature;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.IDeleteFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.IMoveBendpointFeature;
+import org.eclipse.graphiti.features.IMoveConnectionDecoratorFeature;
import org.eclipse.graphiti.features.IReason;
import org.eclipse.graphiti.features.IReconnectionFeature;
+import org.eclipse.graphiti.features.IRemoveBendpointFeature;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.IUpdateFeature;
+import org.eclipse.graphiti.features.context.IAddBendpointContext;
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.ICustomContext;
import org.eclipse.graphiti.features.context.IDeleteContext;
import org.eclipse.graphiti.features.context.IDoubleClickContext;
+import org.eclipse.graphiti.features.context.IMoveBendpointContext;
+import org.eclipse.graphiti.features.context.IMoveConnectionDecoratorContext;
import org.eclipse.graphiti.features.context.IReconnectionContext;
+import org.eclipse.graphiti.features.context.IRemoveBendpointContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.IUpdateContext;
import org.eclipse.graphiti.features.context.impl.AddConnectionContext;
@@ -73,7 +82,11 @@
import org.eclipse.graphiti.features.custom.ICustomFeature;
import org.eclipse.graphiti.features.impl.AbstractAddFeature;
import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;
+import org.eclipse.graphiti.features.impl.DefaultAddBendpointFeature;
+import org.eclipse.graphiti.features.impl.DefaultMoveBendpointFeature;
+import org.eclipse.graphiti.features.impl.DefaultMoveConnectionDecoratorFeature;
import org.eclipse.graphiti.features.impl.DefaultReconnectionFeature;
+import org.eclipse.graphiti.features.impl.DefaultRemoveBendpointFeature;
import org.eclipse.graphiti.features.impl.Reason;
import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
@@ -301,7 +314,7 @@
Object bo = getBusinessObjectForPictogramElement(container);
if (!(bo instanceof StateGraph))
container = container.getContainer();
- boolean inherited = FSMSupportUtil.getInstance().isInherited(trans, container);
+ boolean inherited = FSMSupportUtil.getInstance().isInherited(getDiagram(), trans);
IPeCreateService peCreateService = Graphiti.getPeCreateService();
FreeFormConnection connection = peCreateService.createFreeFormConnection(getDiagram());
@@ -825,6 +838,50 @@
}
@Override
+ public IAddBendpointFeature getAddBendpointFeature(IAddBendpointContext context) {
+ return new DefaultAddBendpointFeature(fp){
+ @Override
+ public boolean canAddBendpoint(IAddBendpointContext context) {
+ Transition trans = (Transition) getBusinessObjectForPictogramElement(context.getConnection());
+ return !FSMSupportUtil.getInstance().isInherited(getDiagram(), trans);
+ }
+ };
+ }
+
+ @Override
+ public IRemoveBendpointFeature getRemoveBendpointFeature(IRemoveBendpointContext context) {
+ return new DefaultRemoveBendpointFeature(fp){
+ @Override
+ public boolean canRemoveBendpoint(IRemoveBendpointContext context) {
+ Transition trans = (Transition) getBusinessObjectForPictogramElement(context.getConnection());
+ return !FSMSupportUtil.getInstance().isInherited(getDiagram(), trans);
+ }
+ };
+ }
+
+ @Override
+ public IMoveBendpointFeature getMoveBendpointFeature(IMoveBendpointContext context) {
+ return new DefaultMoveBendpointFeature(fp){
+ @Override
+ public boolean canMoveBendpoint(IMoveBendpointContext context) {
+ Transition trans = (Transition) getBusinessObjectForPictogramElement(context.getConnection());
+ return !FSMSupportUtil.getInstance().isInherited(getDiagram(), trans);
+ }
+ };
+ }
+
+ @Override
+ public IMoveConnectionDecoratorFeature getMoveConnectionDecoratorFeature(IMoveConnectionDecoratorContext context) {
+ return new DefaultMoveConnectionDecoratorFeature(fp){
+ @Override
+ public boolean canMoveConnectionDecorator(IMoveConnectionDecoratorContext context) {
+ Transition trans = (Transition) getBusinessObjectForPictogramElement(context.getConnectionDecorator().getConnection());
+ return !FSMSupportUtil.getInstance().isInherited(getDiagram(), trans);
+ }
+ };
+ }
+
+ @Override
public ICustomFeature[] getCustomFeatures(ICustomContext context) {
PictogramElement pe = context.getPictogramElements()[0];
if (pe instanceof ConnectionDecorator)
@@ -852,6 +909,15 @@
if (!editable)
result.add(new RefineTransitionFeature(fp));
+
+ RemoveBendpointsFeature removeAllBendpoints = new RemoveBendpointsFeature(fp){
+ @Override
+ public boolean canExecute(ICustomContext context) {
+ Object bo = getBusinessObjectForPictogramElement(context.getPictogramElements()[0]);
+ return !FSMSupportUtil.getInstance().isInherited(getDiagram(), (Transition) bo);
+ }
+ };
+ result.add(removeAllBendpoints);
}
// Provide quick fix feature only for those edit parts which have
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/RemoveBendpointsFeature.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/RemoveBendpointsFeature.java
index cf50e80..214c872 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/RemoveBendpointsFeature.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/RemoveBendpointsFeature.java
@@ -13,6 +13,7 @@
package org.eclipse.etrice.ui.common.base.support;
import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.context.IContext;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.custom.AbstractCustomFeature;
import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -40,14 +41,22 @@
public String getDescription() {
return "remove all bend points of the selected connection(s)";
}
-
- public boolean canExecute(ICustomContext context) {
- return true;
+
+ @Override
+ public boolean isAvailable(IContext context) {
+ if(!(context instanceof ICustomContext))
+ return false;
+
+ boolean allFreeForm = true;
+ PictogramElement[] pes = ((ICustomContext)context).getPictogramElements();
+ for (PictogramElement pe : pes) {
+ if (!(pe instanceof FreeFormConnection))
+ allFreeForm = false;
+ }
+
+ return allFreeForm;
}
- /* (non-Javadoc)
- * @see org.eclipse.graphiti.features.custom.ICustomFeature#execute(org.eclipse.graphiti.features.context.ICustomContext)
- */
@Override
public void execute(ICustomContext context) {
for (PictogramElement pe : context.getPictogramElements()) {