diff options
author | Ansgar Radermacher | 2016-05-20 10:55:55 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2016-05-20 15:55:56 +0000 |
commit | c1d2ca47d0d4facc38baaf798714ac6f7000103c (patch) | |
tree | 4da7897308ecf4287f08e043c0f03badf76bbbe0 | |
parent | bde957805529dafb170feca9b3741afa895b0f76 (diff) | |
download | org.eclipse.papyrus-c1d2ca47d0d4facc38baaf798714ac6f7000103c.tar.gz org.eclipse.papyrus-c1d2ca47d0d4facc38baaf798714ac6f7000103c.tar.xz org.eclipse.papyrus-c1d2ca47d0d4facc38baaf798714ac6f7000103c.zip |
Bug 493339 - [State machine diagram] State machine diagram should provide connection handles to accelerate transition creation
Change-Id: Ic46d1d3b2ddcd0b31d5930bc400acb658d98c7ee
7 files changed, 216 insertions, 75 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateEditPart.java index 78133c9bfdf..f6c43c6942f 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateEditPart.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateEditPart.java @@ -11,7 +11,6 @@ */ package org.eclipse.papyrus.uml.diagram.statemachine.custom.edit.part; -import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.papyrus.uml.diagram.statemachine.edit.parts.StateCompartmentEditPart; import org.eclipse.papyrus.uml.diagram.statemachine.edit.parts.StateEditPart; @@ -22,14 +21,6 @@ public class CustomStateEditPart extends StateEditPart { super(view); } - @Override - protected void createDefaultEditPolicies() { - super.createDefaultEditPolicies(); - removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE); - removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE); - - } - /** * @see org.eclipse.papyrus.uml.diagram.common.editparts.RoundedCompartmentEditPart#getDefaultCornerHeight() * @@ -61,7 +52,7 @@ public class CustomStateEditPart extends StateEditPart { for (Object viewObj : stateView.getChildren()) { if (viewObj instanceof View) { View view = (View) viewObj; - if (view.getType().equals("" + StateCompartmentEditPart.VISUAL_ID)) { //$NON-NLS-1$ + if (view.getType().equals(StateCompartmentEditPart.VISUAL_ID)) { return view; } } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateMachineEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateMachineEditPart.java index d3ab234e509..de872c88ebe 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateMachineEditPart.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/edit/part/CustomStateMachineEditPart.java @@ -19,16 +19,13 @@ public class CustomStateMachineEditPart extends StateMachineEditPart { public CustomStateMachineEditPart(View view) { super(view); - // TODO Auto-generated constructor stub } @Override protected void createDefaultEditPolicies() { - // TODO Auto-generated method stub super.createDefaultEditPolicies(); removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE); removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE); - } /** diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomRegionComponentEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomRegionComponentEditPolicy.java index 211663b2e29..32552af8465 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomRegionComponentEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomRegionComponentEditPolicy.java @@ -25,7 +25,7 @@ import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ComponentEditPolicy; import org.eclipse.gmf.runtime.notation.View; -import org.eclipse.papyrus.uml.diagram.common.commands.SemanticAdapter; +import org.eclipse.papyrus.infra.gmfdiag.common.adapter.SemanticAdapter; import org.eclipse.papyrus.uml.diagram.statemachine.custom.commands.CustomRegionDeleteCommand; public class CustomRegionComponentEditPolicy extends ComponentEditPolicy { diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateCreationEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateCreationEditPolicy.java index b9159f4bc66..59457119b63 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateCreationEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateCreationEditPolicy.java @@ -32,7 +32,6 @@ import org.eclipse.gmf.runtime.common.core.command.CommandResult; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.diagram.core.commands.SetPropertyCommand; import org.eclipse.gmf.runtime.diagram.core.services.ViewService; -import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; @@ -55,7 +54,6 @@ import org.eclipse.papyrus.uml.diagram.statemachine.custom.commands.CustomFirstR import org.eclipse.papyrus.uml.diagram.statemachine.custom.edit.part.CustomStateEditPart; import org.eclipse.papyrus.uml.diagram.statemachine.custom.helpers.Zone; import org.eclipse.papyrus.uml.diagram.statemachine.edit.parts.RegionEditPart; -import org.eclipse.papyrus.uml.diagram.statemachine.edit.parts.StateCompartmentEditPart; import org.eclipse.papyrus.uml.diagram.statemachine.providers.UMLElementTypes; import org.eclipse.uml2.uml.Region; import org.eclipse.uml2.uml.State; @@ -71,10 +69,10 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP public static final String VISIBILITY = "Visibility"; //$NON-NLS-1$ /** - * Default location for new vertex, if called from popup-bar + * Default location for new vertex, if called from popup-bar */ public final static Rectangle defaultLocation = new Rectangle(20, 20, -1, -1); - + /** * No specific ZONE */ @@ -82,7 +80,7 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP /** * Vertical offset for region compartment within composite state (cannot be calculated from host figure, since - * the region compartment has not been created when the position calculation is done. + * the region compartment has not been created when the position calculation is done. */ public final static int REGION_OFFSET = 20; @@ -104,7 +102,7 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP CreateUnspecifiedTypeRequest unspecReq = (CreateUnspecifiedTypeRequest) request; for (Object elementTypeObj : unspecReq.getElementTypes()) { IElementType elementType = (IElementType) elementTypeObj; - + CreateRequest createRequest = unspecReq.getRequestForType(elementType); Command cmd = getCustomCreateCommand(request, createRequest, ((IHintedType) elementType).getSemanticHint()); if (cmd != null) { @@ -140,7 +138,7 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP * adaptable and does not allow the use of the standard creation commands. * This command is used only in composition with region creation in CustomStateCreationEditPolicy */ - public class CustomVertexCreateElementCommand extends AbstractTransactionalCommand { + public static class CustomVertexCreateElementCommand extends AbstractTransactionalCommand { IAdaptable adaptable; @@ -158,10 +156,10 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP } protected void doConfigure(Vertex newElement, IProgressMonitor monitor, IAdaptable info, View regionView) throws ExecutionException { - + String semanticHint = viewDescriptor.getSemanticHint(); createElementRequest = new CreateElementRequest(getEditingDomain(), regionView, UMLElementTypes.getElementType(semanticHint)); - + IElementType elementType = createElementRequest.getElementType(); ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); configureRequest.setClientContext(createElementRequest.getClientContext()); @@ -181,21 +179,21 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP IElementType elementType = UMLElementTypes.getElementType(viewDescriptor.getSemanticHint()); Vertex newVertex = (Vertex) UMLFactory.eINSTANCE.create((EClass) UMLElementTypes.getElement(elementType)); - + Region region = (Region) regionView.getElement(); region.getSubvertices().add(newVertex); doConfigure(newVertex, monitor, info, regionView); View view = - ViewService.getInstance().createView( - viewDescriptor.getViewKind(), - new SemanticAdapter(newVertex, null), - compartment, - viewDescriptor.getSemanticHint(), - viewDescriptor.getIndex(), - viewDescriptor.isPersisted(), - viewDescriptor.getPreferencesHint()); + ViewService.getInstance().createView( + viewDescriptor.getViewKind(), + new SemanticAdapter(newVertex, null), + compartment, + viewDescriptor.getSemanticHint(), + viewDescriptor.getIndex(), + viewDescriptor.isPersisted(), + viewDescriptor.getPreferencesHint()); Assert.isNotNull(view, "failed to create a view"); //$NON-NLS-1$ viewDescriptor.setView(view); @@ -207,11 +205,23 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); CompositeTransactionalCommand cc = new CompositeTransactionalCommand(editingDomain, DiagramUIMessages.AddCommand_Label); - if (semanticHint.equals(((IHintedType) UMLElementTypes.Region_Shape).getSemanticHint())) { + // starting point is the state node on which mouse was moving + View stateView = (View) getHost().getModel(); + View stateCompartmentView = CustomStateEditPart.getStateCompartmentView(stateView); - // starting point is the state node on which mouse was moving - View stateView = (View) getHost().getModel(); - View stateCompartmentView = CustomStateEditPart.getStateCompartmentView(stateView); + View existingRegionView = null; + // State already has a region + if (!stateCompartmentView.getChildren().isEmpty()) { + // treat specific case of popup assistant on state, but command is effectively for one of its regions + if (stateCompartmentView.getChildren().size() == 1) { + existingRegionView = (View) stateCompartmentView.getChildren().get(0); + } else { + // let super class handle it + return null; + } + } + + if (semanticHint.equals(((IHintedType) UMLElementTypes.Region_Shape).getSemanticHint())) { // get and adaptable for it, to pass on to commands IAdaptable adaptableForStateCompartmentView = new SemanticAdapter(null, stateCompartmentView); @@ -234,41 +244,45 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP || semanticHint.equals(((IHintedType) UMLElementTypes.Pseudostate_TerminateShape).getSemanticHint()) || semanticHint.equals(((IHintedType) UMLElementTypes.State_Shape).getSemanticHint()) || semanticHint.equals(((IHintedType) UMLElementTypes.FinalState_Shape).getSemanticHint())) { - - // starting point is the state node on which mouse was moving - View stateView = (View) getHost().getModel(); - - View stateCompartmentView = ViewUtil.getChildBySemanticHint(stateView, String.valueOf(StateCompartmentEditPart.VISUAL_ID)); - // transfer the request to the super method to deal with regular Entry/ExitPoint creation - if (!stateCompartmentView.getChildren().isEmpty()) { - return super.getCommand(request); - } + // get an adaptable for it, to pass on to commands IAdaptable adaptableForStateCompartmentView = new SemanticAdapter(null, stateCompartmentView); - CustomFirstRegionInCompositeStateCreateElementCommand createNewRegion = new CustomFirstRegionInCompositeStateCreateElementCommand(adaptableForStateCompartmentView, null, ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint(), - editingDomain, DiagramUIMessages.CreateCommand_Label, dropLocation); - EList<Region> regions = ((State) stateView.getElement()).getRegions(); - if (!regions.isEmpty()) { - // the view does not contain any region, but the model has already at least one. Use the first - // existing region. - createNewRegion.useExistingRegion(regions.get(0)); + ViewDescriptor viewDescriptor; + if (existingRegionView == null) { + CustomFirstRegionInCompositeStateCreateElementCommand createNewRegion = new CustomFirstRegionInCompositeStateCreateElementCommand(adaptableForStateCompartmentView, null, ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint(), + editingDomain, DiagramUIMessages.CreateCommand_Label, dropLocation); + EList<Region> regions = ((State) stateView.getElement()).getRegions(); + if (!regions.isEmpty()) { + // the view does not contain any region, but the model has already at least one. Use the first + // existing region. + createNewRegion.useExistingRegion(regions.get(0)); + } + + SetPropertyCommand showCompartment = new SetPropertyCommand(editingDomain, adaptableForStateCompartmentView, NOTATION_VIEW_VISIBLE, VISIBILITY, true); + + viewDescriptor = new ViewDescriptor( + (IAdaptable) createNewRegion.getCommandResult().getReturnValue(), + Node.class, + semanticHint, + ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint()); + CustomVertexCreateElementCommand createVertex = new CustomVertexCreateElementCommand(editingDomain, viewDescriptor, (IAdaptable) createNewRegion.getCommandResult().getReturnValue(), DiagramUIMessages.CreateCommand_Label); + + cc.compose(showCompartment); + cc.compose(createNewRegion); + cc.compose(createVertex); + } + else { + // region view exists, only create vertex within + viewDescriptor = new ViewDescriptor( + null, Node.class, semanticHint, + ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint()); + IAdaptable adapter = new SemanticAdapter(null, existingRegionView); + CustomVertexCreateElementCommand createVertex = + new CustomVertexCreateElementCommand(editingDomain, viewDescriptor, adapter, DiagramUIMessages.CreateCommand_Label); + cc.compose(createVertex); } - - SetPropertyCommand showCompartment = new SetPropertyCommand(editingDomain, adaptableForStateCompartmentView, NOTATION_VIEW_VISIBLE, VISIBILITY, true); - - ViewDescriptor viewDescriptor = new ViewDescriptor( - (IAdaptable) createNewRegion.getCommandResult().getReturnValue(), - Node.class, - semanticHint, - ((IGraphicalEditPart) getHost()).getDiagramPreferencesHint()); - CustomVertexCreateElementCommand createVertex = - new CustomVertexCreateElementCommand(editingDomain, viewDescriptor, (IAdaptable) createNewRegion.getCommandResult().getReturnValue(), DiagramUIMessages.CreateCommand_Label); - cc.compose(showCompartment); - cc.compose(createNewRegion); - cc.compose(createVertex); - if (request instanceof CreateRequest) { CreateRequest req = (CreateRequest) request; @@ -282,7 +296,7 @@ public class CustomStateCreationEditPolicy extends SideAffixedNodesCreationEditP // take this into account. getHostFigure().translateToRelative(requestedLocation); Rectangle proposedBounds = new Rectangle(requestedLocation.x, requestedLocation.y - REGION_OFFSET, -1, -1); - + // Convert the calculated preferred bounds as relative to parent location Rectangle creationBounds; if (request instanceof CreateUnspecifiedTypeRequest) { diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateMachineLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateMachineLayoutEditPolicy.java index b5a418cf2bb..dc596501f4c 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateMachineLayoutEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/custom-src/org/eclipse/papyrus/uml/diagram/statemachine/custom/policies/CustomStateMachineLayoutEditPolicy.java @@ -11,8 +11,6 @@ */ package org.eclipse.papyrus.uml.diagram.statemachine.custom.policies; -import java.util.Iterator; - import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; @@ -30,7 +28,7 @@ import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest; -import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor; import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.papyrus.uml.diagram.common.editpolicies.BorderItemResizableEditPolicy; @@ -65,7 +63,6 @@ public class CustomStateMachineLayoutEditPolicy extends LayoutEditPolicy { @Override public Command getCommand(Request request) { - // TODO Auto-generated method stub return super.getCommand(request); } @@ -78,7 +75,6 @@ public class CustomStateMachineLayoutEditPolicy extends LayoutEditPolicy { TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); CompositeTransactionalCommand cc = new CompositeTransactionalCommand(editingDomain, DiagramUIMessages.AddCommand_Label); - Iterator<?> iter = req.getViewDescriptors().iterator(); // Retrieve parent location Point parentLoc = getHostFigure().getBounds().getLocation().getCopy(); @@ -95,9 +91,7 @@ public class CustomStateMachineLayoutEditPolicy extends LayoutEditPolicy { // Convert the calculated preferred bounds as relative to parent location Rectangle creationBounds = preferredBounds.getTranslated(parentLoc.getNegated()); - while (iter.hasNext()) { - - CreateViewRequest.ViewDescriptor viewDescriptor = (CreateViewRequest.ViewDescriptor) iter.next(); + for (ViewDescriptor viewDescriptor : req.getViewDescriptors()) { cc.compose(new SetBoundsCommand(editingDomain, DiagramUIMessages.SetLocationCommand_Label_Resize, viewDescriptor, creationBounds)); } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/model/stateMachineDiagram.assistants b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/model/stateMachineDiagram.assistants new file mode 100644 index 00000000000..ffbd57757cb --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/model/stateMachineDiagram.assistants @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="ASCII"?> +<assistant:ModelingAssistantProvider xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:assistant="http://www.eclipse.org/Papyrus/2014/diagram/assistant" xmlns:filters="http://www.eclipse.org/Papyrus/2014/common/filters" name="PapyrusUMLStateMachineDiagram"> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Package" elementTypeID="org.eclipse.papyrus.umldi.Package_StateMachineDiagram"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="StateMachine" elementTypeID="org.eclipse.papyrus.umldi.StateMachine_Shape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="State" elementTypeID="org.eclipse.papyrus.umldi.State_Shape"/> + <ownedFilter xsi:type="assistant:AssistedElementTypeFilter"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Region" elementTypeID="org.eclipse.papyrus.umldi.Region_Shape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="FinalState" elementTypeID="org.eclipse.papyrus.umldi.FinalState_Shape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Initial" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_InitialShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Join" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_JoinShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Fork" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ForkShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Choice" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ChoiceShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Junction" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_JunctionShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_ShallowHistory" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ShallowHistoryShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_DeepHistory" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_DeepHistoryShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_Terminate" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_TerminateShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_EntryPoint" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_EntryPointShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Pseudostate_ExitPoint" elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ExitPointShape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="ConnectionPointReference" elementTypeID="org.eclipse.papyrus.umldi.ConnectionPointReference_Shape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Comment" elementTypeID="org.eclipse.papyrus.umldi.Comment_Shape"/> + <ownedFilter xsi:type="assistant:ElementTypeFilter" name="Constraint" elementTypeID="org.eclipse.papyrus.umldi.Constraint_Shape"/> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.StateMachine_Shape" filter="//@ownedFilter.0"/> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Region_Shape" filter="//@popupAssistant.1/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@popupAssistant.1/@ownedFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" name="" filter="//@ownedFilter.1 //@ownedFilter.2" operator="or"/> + </ownedFilter> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.FinalState_Shape" filter="//@popupAssistant.2/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.State_Shape" filter="//@popupAssistant.3/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" name="StateAnd" filter="//@ownedFilter.3 //@popupAssistant.3/@ownedFilter/@ownedFilter.0"> + <ownedFilter xsi:type="filters:CompoundFilter" name="StateOr" filter="//@ownedFilter.4 //@ownedFilter.2 //@ownedFilter.1" operator="or"/> + </ownedFilter> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_InitialShape" filter="//@popupAssistant.4/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" name="" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_JoinShape" filter="//@popupAssistant.5/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ForkShape" filter="//@popupAssistant.6/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ChoiceShape" filter="//@popupAssistant.7/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_JunctionShape" filter="//@popupAssistant.8/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ShallowHistoryShape" filter="//@popupAssistant.9/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_DeepHistoryShape" filter="//@popupAssistant.10/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_TerminateShape" filter="//@popupAssistant.11/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_EntryPointShape" filter="//@popupAssistant.12/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" name="EntryPointAnd" filter="//@popupAssistant.12/@ownedFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" name="EntryPointOr" filter="//@ownedFilter.1 //@ownedFilter.4 //@ownedFilter.2" operator="or"/> + </ownedFilter> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Pseudostate_ExitPointShape" filter="//@popupAssistant.13/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" name="ExitPointAnd" filter="//@popupAssistant.13/@ownedFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" name="ExitPointOr" filter="//@ownedFilter.1 //@ownedFilter.4 //@ownedFilter.2" operator="or"/> + </ownedFilter> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.ConnectionPointReference_Shape" filter="//@popupAssistant.14/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.2 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Comment_Shape" filter="//@popupAssistant.15/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Constraint_Shape" filter="//@popupAssistant.16/@ownedFilter"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.4 //@ownedFilter.3"/> + </popupAssistant> + <popupAssistant elementTypeID="org.eclipse.papyrus.umldi.Transition_InternalTransitionLabel" filter="//@ownedFilter.3"/> + <connectionAssistant elementTypeID="org.eclipse.papyrus.umldi.Transition_Edge" sourceFilter="//@connectionAssistant.0/@ownedSourceFilter" targetFilter="//@connectionAssistant.0/@ownedTargetFilter"> + <ownedSourceFilter xsi:type="filters:CompoundFilter" filter="//@connectionAssistant.0/@ownedSourceFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.5 //@ownedFilter.2 //@ownedFilter.6 //@ownedFilter.7 //@ownedFilter.8 //@ownedFilter.9 //@ownedFilter.10 //@ownedFilter.11 //@ownedFilter.12 //@ownedFilter.13 //@ownedFilter.14 //@ownedFilter.15 //@ownedFilter.16" operator="or"/> + </ownedSourceFilter> + <ownedTargetFilter xsi:type="filters:CompoundFilter" filter="//@connectionAssistant.0/@ownedTargetFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.5 //@ownedFilter.2 //@ownedFilter.6 //@ownedFilter.7 //@ownedFilter.8 //@ownedFilter.9 //@ownedFilter.10 //@ownedFilter.11 //@ownedFilter.12 //@ownedFilter.13 //@ownedFilter.14 //@ownedFilter.15 //@ownedFilter.16" operator="or"/> + </ownedTargetFilter> + </connectionAssistant> + <connectionAssistant elementTypeID="org.eclipse.papyrus.umldi.Generalization_Edge" sourceFilter="//@connectionAssistant.1/@ownedSourceFilter" targetFilter="//@connectionAssistant.1/@ownedTargetFilter"> + <ownedSourceFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.1 //@ownedFilter.3"/> + <ownedTargetFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.1 //@ownedFilter.3"/> + </connectionAssistant> + <connectionAssistant elementTypeID="org.eclipse.papyrus.umldi.Comment_AnnotatedElementEdge" sourceFilter="//@connectionAssistant.2/@ownedSourceFilter" targetFilter="//@connectionAssistant.2/@ownedTargetFilter"> + <ownedSourceFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.17 //@ownedFilter.3"/> + <ownedTargetFilter xsi:type="filters:CompoundFilter" filter="//@connectionAssistant.2/@ownedTargetFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.1 //@ownedFilter.4 //@ownedFilter.5 //@ownedFilter.2 //@ownedFilter.6 //@ownedFilter.7 //@ownedFilter.8 //@ownedFilter.9 //@ownedFilter.10 //@ownedFilter.11 //@ownedFilter.12 //@ownedFilter.13 //@ownedFilter.14 //@ownedFilter.15 //@ownedFilter.16 //@ownedFilter.17 //@ownedFilter.18" operator="or"/> + </ownedTargetFilter> + </connectionAssistant> + <connectionAssistant elementTypeID="org.eclipse.papyrus.umldi.Constraint_ConstrainedElementEdge" sourceFilter="//@connectionAssistant.3/@ownedSourceFilter" targetFilter="//@connectionAssistant.3/@ownedTargetFilter"> + <ownedSourceFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.18 //@ownedFilter.3"/> + <ownedTargetFilter xsi:type="filters:CompoundFilter" filter="//@connectionAssistant.3/@ownedTargetFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.1 //@ownedFilter.4 //@ownedFilter.5 //@ownedFilter.2 //@ownedFilter.6 //@ownedFilter.7 //@ownedFilter.8 //@ownedFilter.9 //@ownedFilter.10 //@ownedFilter.11 //@ownedFilter.12 //@ownedFilter.13 //@ownedFilter.14 //@ownedFilter.15 //@ownedFilter.16 //@ownedFilter.17 //@ownedFilter.18" operator="or"/> + </ownedTargetFilter> + </connectionAssistant> + <connectionAssistant elementTypeID="org.eclipse.papyrus.umldi.Constraint_ContextEdge" sourceFilter="//@connectionAssistant.4/@ownedSourceFilter" targetFilter="//@connectionAssistant.4/@ownedTargetFilter"> + <ownedSourceFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.18 //@ownedFilter.3"/> + <ownedTargetFilter xsi:type="filters:CompoundFilter" filter="//@connectionAssistant.4/@ownedTargetFilter/@ownedFilter.0 //@ownedFilter.3"> + <ownedFilter xsi:type="filters:CompoundFilter" filter="//@ownedFilter.1 //@ownedFilter.4 //@ownedFilter.5 //@ownedFilter.2" operator="or"/> + </ownedTargetFilter> + </connectionAssistant> + <elementTypeID>org.eclipse.papyrus.umldi.StateMachine_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Region_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.FinalState_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.State_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_InitialShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_JoinShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_ForkShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_ChoiceShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_JunctionShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_ShallowHistoryShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_DeepHistoryShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_TerminateShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_EntryPointShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Pseudostate_ExitPointShape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.ConnectionPointReference_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Comment_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Constraint_Shape</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Transition_InternalTransitionLabel</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Behavior_EntryBehaviorLabel</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Behavior_DoActivityBehaviorLabel</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Behavior_ExitBehaviorLabel</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Transition_Edge</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Generalization_Edge</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Comment_AnnotatedElementEdge</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Constraint_ConstrainedElementEdge</elementTypeID> + <elementTypeID>org.eclipse.papyrus.umldi.Constraint_ContextEdge</elementTypeID> + <relationshipTypeID>org.eclipse.papyrus.umldi.Transition_Edge</relationshipTypeID> + <relationshipTypeID>org.eclipse.papyrus.umldi.Generalization_Edge</relationshipTypeID> + <relationshipTypeID>org.eclipse.papyrus.umldi.Comment_AnnotatedElementEdge</relationshipTypeID> + <relationshipTypeID>org.eclipse.papyrus.umldi.Constraint_ConstrainedElementEdge</relationshipTypeID> + <relationshipTypeID>org.eclipse.papyrus.umldi.Constraint_ContextEdge</relationshipTypeID> +</assistant:ModelingAssistantProvider> diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/plugin.xml b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/plugin.xml index 660e57b0141..a4576830599 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/plugin.xml +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.statemachine/plugin.xml @@ -858,4 +858,8 @@ </binding> </extension> +<extension point="org.eclipse.papyrus.infra.gmfdiag.assistant.modelProviders"> + <modelProvider uri="model/stateMachineDiagram.assistants"/> +</extension> + </plugin> |