diff options
| author | Steve Monnier | 2016-07-29 09:53:44 +0000 |
|---|---|---|
| committer | Steve Monnier | 2016-08-04 15:45:57 +0000 |
| commit | f02f5337550046848be1db718608e4e0eb2ca77f (patch) | |
| tree | f348265bb0475bad83aaa179ffcfb6663f49a3f6 | |
| parent | fa2dac0c8f6efe071452a0d2265365f778bf8854 (diff) | |
| download | org.eclipse.sirius-f02f5337550046848be1db718608e4e0eb2ca77f.tar.gz org.eclipse.sirius-f02f5337550046848be1db718608e4e0eb2ca77f.tar.xz org.eclipse.sirius-f02f5337550046848be1db718608e4e0eb2ca77f.zip | |
[498869] Several edge group can now be moved at once
Extend the edge group (edge, source and target) feature to a selection
of several edge group selection to move at once.
SWTBot test have been updated accordingly.
Bug: 498869
Change-Id: I172791e85998d3533edd094bc156645bf94d8036
Signed-off-by: Steve Monnier <steve.monnier@obeo.fr>
12 files changed, 692 insertions, 108 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties index 8642ce5e13..4c7df53131 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties +++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties @@ -900,6 +900,7 @@ DistributeMenuAction_tooltip = Distribute selected shapes DocumentationPropertySection_defaultLabel = Documentation: DocumentationPropertySection_description = Use this field to save notes about this representation. EclipseImageSelectorDescriptor_extensionLoadingError = Error while loading the extension {0} +EdgeGroupMoveMessage = Move edge group EdgeReconnectionHelper_invalidReconnectionKind = reconnectionKind must be ReconnectionKind.RECONNECT_SOURCE or ReconnectionKind.RECONNECT_TARGET EdgeRoutingStyleChangedCommand_label = Change routing style EditPartTools_nullParameterMsg = root or editPartType is null diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/MoveEdgeGroupManager.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/MoveEdgeGroupManager.java index 2722e5d6e1..26c78bc433 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/MoveEdgeGroupManager.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/MoveEdgeGroupManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 THALES GLOBAL SERVICES. + * Copyright (c) 2015, 2016 THALES GLOBAL SERVICES. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -11,7 +11,9 @@ package org.eclipse.sirius.diagram.ui.graphical.edit.policies; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Set; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.PositionConstants; @@ -24,6 +26,8 @@ import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPart; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; +import org.eclipse.gef.commands.CompoundCommand; +import org.eclipse.gef.commands.UnexecutableCommand; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.requests.BendpointRequest; import org.eclipse.gef.requests.ChangeBoundsRequest; @@ -39,12 +43,20 @@ import org.eclipse.gmf.runtime.notation.Location; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart; +import org.eclipse.sirius.diagram.ui.provider.Messages; +import org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; /** * This class is responsible for managing the move edge group tool. see #471104 * relevant ticket or specification for more details. * - * @author Florian Barbin + * @author <a href="mailto:florian.barbin@obeo.fr">Florian Barbin</a> * */ public class MoveEdgeGroupManager { @@ -97,16 +109,30 @@ public class MoveEdgeGroupManager { public void showGroupFeedback() { if (accept()) { ConnectionEditPart connectionEditPart = ((BendpointRequest) request).getSource(); - AbstractDiagramBorderNodeEditPart sourceEditPart = (AbstractDiagramBorderNodeEditPart) connectionEditPart.getSource(); - AbstractDiagramBorderNodeEditPart targetEditPart = (AbstractDiagramBorderNodeEditPart) connectionEditPart.getTarget(); - ChangeBoundsRequest sourceChangeBoundsRequest = createChangeBoundsRequest(sourceEditPart); - ChangeBoundsRequest targetChangeBoundsRequest = createChangeBoundsRequest(targetEditPart); - sourceEditPart.showSourceFeedback(sourceChangeBoundsRequest); - targetEditPart.showSourceFeedback(targetChangeBoundsRequest); + for (ConnectionEditPart selectedConnectionEditPart : Iterables.filter(connectionEditPart.getViewer().getSelectedEditParts(), ConnectionEditPart.class)) { + showGroupFeedback(selectedConnectionEditPart); + } } } + @SuppressWarnings("unchecked") + private void showGroupFeedback(ConnectionEditPart connectionEditPart) { + AbstractDiagramBorderNodeEditPart sourceEditPart = (AbstractDiagramBorderNodeEditPart) connectionEditPart.getSource(); + AbstractDiagramBorderNodeEditPart targetEditPart = (AbstractDiagramBorderNodeEditPart) connectionEditPart.getTarget(); + Set<EditPart> movedBorderNodes = Sets.newLinkedHashSet(); + for (ConnectionEditPart cep : Iterables.filter(sourceEditPart.getViewer().getSelectedEditParts(), ConnectionEditPart.class)) { + movedBorderNodes.add(cep.getSource()); + movedBorderNodes.add(cep.getTarget()); + } + ChangeBoundsRequest sourceChangeBoundsRequest = createChangeBoundsRequest(sourceEditPart); + sourceChangeBoundsRequest.getEditParts().addAll(movedBorderNodes); + ChangeBoundsRequest targetChangeBoundsRequest = createChangeBoundsRequest(targetEditPart); + targetChangeBoundsRequest.getEditParts().addAll(movedBorderNodes); + sourceEditPart.showSourceFeedback(sourceChangeBoundsRequest); + targetEditPart.showSourceFeedback(targetChangeBoundsRequest); + } + /** * Erases the group feedback if this action has been activated. */ @@ -114,17 +140,8 @@ public class MoveEdgeGroupManager { if (request instanceof BendpointRequest) { if (isToolActivatedOrHasBeenActivated()) { ConnectionEditPart connectionEditPart = ((BendpointRequest) request).getSource(); - EditPart sourceEditPart = connectionEditPart.getSource(); - EditPart targetEditPart = connectionEditPart.getTarget(); - - if (sourceEditPart instanceof AbstractDiagramBorderNodeEditPart && targetEditPart instanceof AbstractDiagramBorderNodeEditPart) { - AbstractDiagramBorderNodeEditPart sourceBorderNodeEditPart = (AbstractDiagramBorderNodeEditPart) sourceEditPart; - AbstractDiagramBorderNodeEditPart targetBorderNodeEditPart = (AbstractDiagramBorderNodeEditPart) targetEditPart; - - ChangeBoundsRequest changeBoundsRequest = new ChangeBoundsRequest(RequestConstants.REQ_DROP); - sourceBorderNodeEditPart.eraseSourceFeedback(changeBoundsRequest); - targetBorderNodeEditPart.eraseSourceFeedback(changeBoundsRequest); - + for (ConnectionEditPart selectedConnectionEditPart : Iterables.filter(connectionEditPart.getViewer().getSelectedEditParts(), ConnectionEditPart.class)) { + eraseGroupFeedback(selectedConnectionEditPart); } } } @@ -132,6 +149,28 @@ public class MoveEdgeGroupManager { } /** + * Erases the group feedback of a specific {@link ConnectionEditPart} if + * this action has been activated. + * + * @param connectionEditPart + * the {@link ConnectionEditPart} to erase the feedback + */ + private void eraseGroupFeedback(ConnectionEditPart connectionEditPart) { + EditPart sourceEditPart = connectionEditPart.getSource(); + EditPart targetEditPart = connectionEditPart.getTarget(); + + if (sourceEditPart instanceof AbstractDiagramBorderNodeEditPart && targetEditPart instanceof AbstractDiagramBorderNodeEditPart) { + AbstractDiagramBorderNodeEditPart sourceBorderNodeEditPart = (AbstractDiagramBorderNodeEditPart) sourceEditPart; + AbstractDiagramBorderNodeEditPart targetBorderNodeEditPart = (AbstractDiagramBorderNodeEditPart) targetEditPart; + + ChangeBoundsRequest changeBoundsRequest = new ChangeBoundsRequest(RequestConstants.REQ_DROP); + sourceBorderNodeEditPart.eraseSourceFeedback(changeBoundsRequest); + targetBorderNodeEditPart.eraseSourceFeedback(changeBoundsRequest); + + } + } + + /** * Provides the command that will perform the edge move group. * * @return the command if the request is authorized, null otherwise. @@ -139,15 +178,24 @@ public class MoveEdgeGroupManager { public Command getCommand() { if (accept()) { ConnectionEditPart connectionEditPart = ((BendpointRequest) request).getSource(); - EditPart sourceEditPart = connectionEditPart.getSource(); - EditPart targetEditPart = connectionEditPart.getTarget(); - Command srcCommand = createCommand((AbstractDiagramBorderNodeEditPart) sourceEditPart); - if (srcCommand != null) { - Command tgtCommand = createCommand((AbstractDiagramBorderNodeEditPart) targetEditPart); - if (tgtCommand != null) { - srcCommand = srcCommand.chain(tgtCommand); - return srcCommand; - } + CompoundCommand cc = new CompoundCommand(Messages.EdgeGroupMoveMessage); + for (ConnectionEditPart selectedConnectionEditPart : Iterables.filter(connectionEditPart.getViewer().getSelectedEditParts(), ConnectionEditPart.class)) { + cc.add(getCommand(selectedConnectionEditPart)); + } + return cc; + } + return null; + } + + private Command getCommand(ConnectionEditPart connectionEditPart) { + EditPart sourceEditPart = connectionEditPart.getSource(); + EditPart targetEditPart = connectionEditPart.getTarget(); + Command srcCommand = createCommand((AbstractDiagramBorderNodeEditPart) sourceEditPart); + if (srcCommand != null) { + Command tgtCommand = createCommand((AbstractDiagramBorderNodeEditPart) targetEditPart); + if (tgtCommand != null) { + srcCommand = srcCommand.chain(tgtCommand); + return srcCommand; } } return null; @@ -167,7 +215,7 @@ public class MoveEdgeGroupManager { /** * Determines if the given request is a valid request for this tool.<br/> - * The edge should respect the following rules: + * Each selected edge should respect the following rules: * <ul> * <li>a border node as source</li> * <li>a border node as target</li> @@ -175,26 +223,54 @@ public class MoveEdgeGroupManager { * <li>target node has only one connection: the moved edge.</li> * <li>Both border nodes are on the same axe (Horizontal or Vertical)</li> * </ul> + * <br/> + * Furthermore, every selected edge group should be in the same direction + * and only edges should be selected. * - * @return true if the move edge and border nodes can be activated, + * @return true if the moved edges and border nodes can be activated, * otherwise false. */ + @SuppressWarnings("unchecked") private boolean accept() { if (request instanceof BendpointRequest) { ConnectionEditPart connectionEditPart = ((BendpointRequest) request).getSource(); - EditPart sourceEditPart = connectionEditPart.getSource(); - EditPart targetEditPart = connectionEditPart.getTarget(); - - if (sourceEditPart instanceof AbstractDiagramBorderNodeEditPart && targetEditPart instanceof AbstractDiagramBorderNodeEditPart) { - if (getAllConnections((AbstractDiagramBorderNodeEditPart) sourceEditPart).size() == 1 && getAllConnections((AbstractDiagramBorderNodeEditPart) targetEditPart).size() == 1) { - int sourceDirection = getBorderNodeDirection((AbstractDiagramBorderNodeEditPart) sourceEditPart); - int targetDirection = getBorderNodeDirection((AbstractDiagramBorderNodeEditPart) targetEditPart); - if (sourceDirection == targetDirection) { - direction = sourceDirection; - return true; + // The selected diagram element should only contain edges otherwise + // the move is not valid + final Set<Integer> edgeDirections = Sets.newLinkedHashSet(); + boolean result = Iterables.all(connectionEditPart.getViewer().getSelectedEditParts(), Predicates.and(Predicates.instanceOf(ConnectionEditPart.class), new Predicate<ConnectionEditPart>() { + /** + * Determines if the given edge respects the following rules: + * <ul> + * <li>a border node as source</li> + * <li>a border node as target</li> + * <li>source node has only one connection: the moved edge.</li> + * <li>target node has only one connection: the moved edge.</li> + * <li>Both border nodes are on the same axe (Horizontal or + * Vertical)</li> + * </ul> + */ + @Override + public boolean apply(ConnectionEditPart input) { + EditPart sourceEditPart = input.getSource(); + EditPart targetEditPart = input.getTarget(); + + if (sourceEditPart instanceof AbstractDiagramBorderNodeEditPart && targetEditPart instanceof AbstractDiagramBorderNodeEditPart) { + if (getAllConnections((AbstractDiagramBorderNodeEditPart) sourceEditPart).size() == 1 && getAllConnections((AbstractDiagramBorderNodeEditPart) targetEditPart).size() == 1) { + int sourceDirection = getBorderNodeDirection((AbstractDiagramBorderNodeEditPart) sourceEditPart); + int targetDirection = getBorderNodeDirection((AbstractDiagramBorderNodeEditPart) targetEditPart); + if (sourceDirection == targetDirection) { + direction = sourceDirection; + edgeDirections.add(sourceDirection); + return true; + } + } } + return false; } - } + })); + // There should be only one kind of direction for every edges to + // authorize the move + return result && edgeDirections.size() == 1; } return false; } @@ -215,7 +291,8 @@ public class MoveEdgeGroupManager { } } } - return null; + // If some conflict is detected then the move is forbidden + return UnexecutableCommand.INSTANCE; } private boolean conflictDetected(AbstractDiagramBorderNodeEditPart editPart, Point moveDelta) { @@ -231,7 +308,20 @@ public class MoveEdgeGroupManager { bounds.setBounds(newBounds); } - Rectangle validLocation = locator.getValidLocation(bounds, figure); + List<IFigure> figureToIgnore = Lists.newArrayList(); + figureToIgnore.add(figure); + for (ConnectionEditPart connectionEditPart : Iterables.filter(editPart.getViewer().getSelectedEditParts(), ConnectionEditPart.class)) { + EditPart source = connectionEditPart.getSource(); + EditPart target = connectionEditPart.getTarget(); + if (source instanceof AbstractDiagramBorderNodeEditPart && source.getParent().equals(editPart.getParent())) { + figureToIgnore.add(((AbstractDiagramBorderNodeEditPart) source).getFigure()); + } + if (target instanceof AbstractDiagramBorderNodeEditPart && target.getParent().equals(editPart.getParent())) { + figureToIgnore.add(((AbstractDiagramBorderNodeEditPart) target).getFigure()); + } + } + + Rectangle validLocation = ((DBorderItemLocator) locator).getValidLocation(bounds, figure, figureToIgnore, Collections.<IFigure> emptyList()); if (borderNodeCollapseManager.hasBeenExpanded()) { borderNodeCollapseManager.restoreCollapsedNode(editPart); } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/Messages.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/Messages.java index 97f6cbe14c..d08fe13a95 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/Messages.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/Messages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES and others. + * Copyright (c) 2007, 2016 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -167,4 +167,6 @@ public class Messages { public static String SiriusModelingAssistantProviderTitle = org.eclipse.sirius.diagram.ui.provider.Messages.SiriusModelingAssistantProviderTitle; public static String SiriusModelingAssistantProviderMessage = org.eclipse.sirius.diagram.ui.provider.Messages.SiriusModelingAssistantProviderMessage; + + public static String EdgeGroupMoveMessage = org.eclipse.sirius.diagram.ui.provider.Messages.EdgeGroupMoveMessage; } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/locator/DBorderItemLocator.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/locator/DBorderItemLocator.java index c5382ab3a2..596f3accc4 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/locator/DBorderItemLocator.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/locator/DBorderItemLocator.java @@ -1090,6 +1090,21 @@ public class DBorderItemLocator extends BorderItemLocator { } /** + * {@inheritDoc} + * + * @see org.eclipse.gmf.runtime.diagram.ui.figures.BorderItemLocator#getValidLocation(org.eclipse.draw2d.geometry.Rectangle, + * org.eclipse.draw2d.IFigure) + */ + public Rectangle getValidLocation(final Rectangle proposedLocation, final IFigure borderItem, final List<IFigure> figuresToIgnore) { + BitSet authorizedSides = getAuthorizedSides(borderItem); + final int side = DBorderItemLocator.findClosestSideOfParent(proposedLocation, getParentBorder(), authorizedSides); + final Point newTopLeft = locateOnBorder(proposedLocation, side, NB_SIDES - getNumberOfAuthorizedSides(authorizedSides), borderItem, figuresToIgnore, new ArrayList<IFigure>()); + Rectangle realLocation = proposedLocation.getCopy(); + realLocation.setLocation(newTopLeft); + return realLocation; + } + + /** * Lets consider this border item as not fixed. */ public void unfix() { diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java index e5cf2eb136..a39d9755a0 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java @@ -486,6 +486,9 @@ public final class Messages { public static String EclipseImageSelectorDescriptor_extensionLoadingError; @TranslatableMessage + public static String EdgeGroupMoveMessage; + + @TranslatableMessage public static String EdgeReconnectionHelper_invalidReconnectionKind; @TranslatableMessage diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html index 842a850db9..b6b2bb8d1d 100644 --- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html +++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html @@ -101,6 +101,11 @@ <p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the <code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user. </p> + <ul> + <li><span class="label label-info">Modified</span> The + <a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group. + </li> + </ul> <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3> <ul> <li>The rules concerning the layout of compartments have been changed/completed. You can have a look at the diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile index ac838f578d..bea06afb34 100644 --- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile +++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile @@ -11,6 +11,7 @@ h3. User-Visible Changes * <span class="label label-success">Added</span> The "snap to shape":./user/diagrams/Diagrams.html#snap_to_shapes feature is now available on border nodes. * <span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of @UICallBack@ in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk. If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the @ViewpointRegistry@ will not register it and a warning is logged in the error log view to inform the user. +* <span class="label label-info">Modified</span> The "move edge group":./user/diagrams/Diagrams.html#move_edge_group feature now also work for a selection of edge group. h3. Specifier-Visible Changes diff --git a/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.html b/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.html index 1ff3cd8e4b..6be96f6740 100644 --- a/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.html +++ b/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.html @@ -306,6 +306,13 @@ <br/> <img border="0" src="images/compoundmoves2.png"/> </p> + <p>Furthermore, since Sirius 4.1, it is possible to move several edge groups at once. However, the selection needs to validate the following rules:</p> + <ul> + <li>each selected elements must be an edge with border nodes as source and target.</li> + <li>each edge groups must be horizontal (source and target on the west or east border) or vertical (source and target on the north or south border).</li> + <li>each edge groups must remain in its source and target parent bounds at the end of the move. Therefore, the move is not limited by the primary selection only (the edge that is grabbed to move the whole selection) but by each edge group.</li> + </ul> + <p>Note that an edge group new location corresponding to the former location of another edge group in the selection is valid.</p> <h3 id="distribute">Distribute elements</h3> <p>Four new actions allow to distribute shapes: </p> <p> diff --git a/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.textile b/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.textile index 497d7aa5c9..71ba95ef1e 100644 --- a/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.textile +++ b/plugins/org.eclipse.sirius.doc/doc/user/diagrams/Diagrams.textile @@ -144,6 +144,13 @@ The edge group moving is authorized only if these conditions are met: Examples of authorized moving: !images/compoundmoves2.png! + +Furthermore, since Sirius 4.1, it is possible to move several edge groups at once. However, the selection needs to validate the following rules: +* each selected elements must be an edge with border nodes as source and target. +* each edge groups must be horizontal (source and target on the west or east border) or vertical (source and target on the north or south border). +* each edge groups must remain in its source and target parent bounds at the end of the move. Therefore, the move is not limited by the primary selection only (the edge that is grabbed to move the whole selection) but by each edge group. + +Note that an edge group new location corresponding to the former location of another edge group in the selection is valid. h3(#distribute). Distribute elements diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.aird b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.aird index 14571ada98..1e622b6285 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.aird +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.aird @@ -1,8 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:migrationmodeler="http://www.eclipse.org/sirius/tests/sample/migrationmodeler" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_tyCgMPfKEeOewbIoSlcvjw" selectedViews="_uYpNMPfKEeOewbIoSlcvjw" version="10.1.0.201507101000"> +<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:migrationmodeler="http://www.eclipse.org/sirius/tests/sample/migrationmodeler" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_tyCgMPfKEeOewbIoSlcvjw" selectedViews="_uYpNMPfKEeOewbIoSlcvjw" version="11.1.0.201606300900"> <semanticResources>platform:/resource/Test/moveEdgeGroup.migrationmodeler</semanticResources> <semanticResources>moveEdgeGroup.migrationmodeler</semanticResources> - <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_uYpNMPfKEeOewbIoSlcvjw"> + <ownedViews xmi:type="viewpoint:DView" xmi:id="_uYpNMPfKEeOewbIoSlcvjw"> + <viewpoint xmi:type="description:Viewpoint" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']"/> + <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" xmi:id="_PwppQFTLEeasaLTJO4uWBw" name="diagram1" representation="_S9cCQEW0EeWzE_Xsv11e2Q"> + <description xmi:type="description_1:DiagramDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']"/> + <target xmi:type="migrationmodeler:Diagram" href="moveEdgeGroup.migrationmodeler#//@representations.0"/> + </ownedRepresentationDescriptors> <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_S9cCQEW0EeWzE_Xsv11e2Q" name="diagram1"> <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_S9cCQUW0EeWzE_Xsv11e2Q" source="DANNOTATION_CUSTOMIZATION_KEY"> <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_S9cCQkW0EeWzE_Xsv11e2Q"/> @@ -59,8 +64,19 @@ <styles xmi:type="notation:ShapeStyle" xmi:id="_rURDMUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6U84EsnEeW5nJsF29lAdQ" x="60" y="-2" width="10" height="10"/> </children> + <children xmi:type="notation:Node" xmi:id="_dPqzIFTLEeasaLTJO4uWBw" type="3012" element="_dPInoFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_dPqzI1TLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_dPqzJFTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_dPraMFTLEeasaLTJO4uWBw" type="3003" element="_dPOuQFTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_dPraMVTLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dPraMlTLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_dPqzIVTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dPqzIlTLEeasaLTJO4uWBw" x="44" y="60" width="10" height="10"/> + </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_UUD28UW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8" fillColor="10265827"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UUD28kW0EeWzE_Xsv11e2Q" x="660" y="264"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UUD28kW0EeWzE_Xsv11e2Q" x="648" y="344"/> </children> <children xmi:type="notation:Node" xmi:id="_UUIIYEW0EeWzE_Xsv11e2Q" type="2002" element="_UTufwEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_UUIvcEW0EeWzE_Xsv11e2Q" type="5006"/> @@ -91,7 +107,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6Vj8EsnEeW5nJsF29lAdQ" x="95" y="-2" width="10" height="10"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_UUIIYUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UUIIYkW0EeWzE_Xsv11e2Q" x="420" y="252"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UUIIYkW0EeWzE_Xsv11e2Q" x="408" y="332"/> </children> <children xmi:type="notation:Node" xmi:id="_X6dV4EW0EeWzE_Xsv11e2Q" type="2002" element="_X6VaEEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_X6dV40W0EeWzE_Xsv11e2Q" type="5006"/> @@ -108,7 +124,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6hAQkW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6fLEUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WLAEsnEeW5nJsF29lAdQ" x="140" y="17" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WLAEsnEeW5nJsF29lAdQ" x="140" y="145" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_X6fyIEW0EeWzE_Xsv11e2Q" type="3012" element="_X6X2UEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_X6gZMkW0EeWzE_Xsv11e2Q" type="5010"> @@ -119,7 +135,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6hnUkW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6gZMEW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WLAUsnEeW5nJsF29lAdQ" x="140" y="48" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WLAUsnEeW5nJsF29lAdQ" x="140" y="176" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_ro85wEW0EeWzE_Xsv11e2Q" type="3012" element="_rorM8EW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_ro9g0EW0EeWzE_Xsv11e2Q" type="5010"> @@ -130,7 +146,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ro-H4kW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_ro85wUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WyEEsnEeW5nJsF29lAdQ" x="106" y="60" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6WyEEsnEeW5nJsF29lAdQ" x="106" y="188" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_sFzN0EW0EeWzE_Xsv11e2Q" type="3012" element="_sFgS4EW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_sFz04EW0EeWzE_Xsv11e2Q" type="5010"> @@ -152,10 +168,32 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sO0m8kW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_sOzY0UW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6XZIEsnEeW5nJsF29lAdQ" x="77" y="60" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6XZIEsnEeW5nJsF29lAdQ" x="77" y="188" width="10" height="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_f_4Q8FTLEeasaLTJO4uWBw" type="3012" element="_f_f2cFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_f_4Q81TLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_f_4Q9FTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_f_4Q9VTLEeasaLTJO4uWBw" type="3003" element="_f_f2cVTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_f_4Q9lTLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_4Q91TLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_f_4Q8VTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f_4Q8lTLEeasaLTJO4uWBw" x="-2" y="62" width="10" height="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_gI304FTLEeasaLTJO4uWBw" type="3012" element="_gIn9QFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_gI3041TLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_gI305FTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_gI305VTLEeasaLTJO4uWBw" type="3003" element="_gIn9QVTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_gI305lTLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gI3051TLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_gI304VTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gI304lTLEeasaLTJO4uWBw" x="-2" y="112" width="10" height="10"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6dV4UW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6dV4kW0EeWzE_Xsv11e2Q" x="408" y="84"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6dV4kW0EeWzE_Xsv11e2Q" x="396" y="36" height="198"/> </children> <children xmi:type="notation:Node" xmi:id="_X6d88EW0EeWzE_Xsv11e2Q" type="2002" element="_X6WBIUW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_X6d880W0EeWzE_Xsv11e2Q" type="5006"/> @@ -172,7 +210,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6kDkkW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6iOYUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YAMEsnEeW5nJsF29lAdQ" x="-2" y="48" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YAMEsnEeW5nJsF29lAdQ" x="-2" y="182" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_X6i1ckW0EeWzE_Xsv11e2Q" type="3012" element="_X6ZEcEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_X6jcgEW0EeWzE_Xsv11e2Q" type="5010"> @@ -183,7 +221,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6kDlUW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6i1c0W0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YAMUsnEeW5nJsF29lAdQ" x="-2" y="17" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YAMUsnEeW5nJsF29lAdQ" x="-2" y="151" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_r0h3oEW0EeWzE_Xsv11e2Q" type="3012" element="_r0CIYEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_r0iesUW0EeWzE_Xsv11e2Q" type="5010"> @@ -194,7 +232,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r0js0kW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_r0h3oUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YnQEsnEeW5nJsF29lAdQ" x="44" y="60" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6YnQEsnEeW5nJsF29lAdQ" x="44" y="194" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_r8N0AEW0EeWzE_Xsv11e2Q" type="3012" element="_r71ZgEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_r8N0A0W0EeWzE_Xsv11e2Q" type="5010"> @@ -205,7 +243,7 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_r8ObEkW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_r8N0AUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6ZOUEsnEeW5nJsF29lAdQ" x="133" y="60" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6ZOUEsnEeW5nJsF29lAdQ" x="133" y="194" width="10" height="10"/> </children> <children xmi:type="notation:Node" xmi:id="_sYWWYEW0EeWzE_Xsv11e2Q" type="3012" element="_sYC0YEW0EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_sYXkgEW0EeWzE_Xsv11e2Q" type="5010"> @@ -216,10 +254,43 @@ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sYYLkkW0EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_sYWWYUW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6ZOUUsnEeW5nJsF29lAdQ" x="140" y="21" width="10" height="10"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6ZOUUsnEeW5nJsF29lAdQ" x="140" y="118" width="10" height="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_Uv5xgFTLEeasaLTJO4uWBw" type="3012" element="_UvVw0FTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_Uv6_oFTLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_Uv6_oVTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_Uv_4IFTLEeasaLTJO4uWBw" type="3003" element="_UvVw0VTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_Uv_4IVTLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Uv_4IlTLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_Uv5xgVTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Uv5xglTLEeasaLTJO4uWBw" x="133" y="-2" width="10" height="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_c_bXsFTLEeasaLTJO4uWBw" type="3012" element="_c_H1sFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_c_b-wFTLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_c_b-wVTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_c_b-wlTLEeasaLTJO4uWBw" type="3003" element="_c_H1sVTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_c_b-w1TLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c_b-xFTLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_c_bXsVTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c_bXslTLEeasaLTJO4uWBw" x="44" y="-2" width="10" height="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_gvB18FTLEeasaLTJO4uWBw" type="3012" element="_guxXQFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_gvB181TLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_gvB19FTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_gvB19VTLEeasaLTJO4uWBw" type="3003" element="_guxXQVTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_gvB19lTLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gvB191TLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_gvB18VTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gvB18lTLEeasaLTJO4uWBw" x="140" y="68" width="10" height="10"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_X6d88UW0EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6d88kW0EeWzE_Xsv11e2Q" x="636" y="84"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X6d88kW0EeWzE_Xsv11e2Q" x="624" y="30" height="204"/> </children> <children xmi:type="notation:Node" xmi:id="_12nDwEW4EeWzE_Xsv11e2Q" type="2002" element="_12SToEW4EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_12nDw0W4EeWzE_Xsv11e2Q" type="5006"/> @@ -277,6 +348,17 @@ <styles xmi:type="notation:ShapeStyle" xmi:id="_BYhAsUW5EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6bDgEsnEeW5nJsF29lAdQ" x="-2" y="36" width="10" height="10"/> </children> + <children xmi:type="notation:Node" xmi:id="_XB0w0FTLEeasaLTJO4uWBw" type="3012" element="_XBpKoFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_XB1X4FTLEeasaLTJO4uWBw" type="5010"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_XB1X4VTLEeasaLTJO4uWBw" x="-1"/> + </children> + <children xmi:type="notation:Node" xmi:id="_XB1X4lTLEeasaLTJO4uWBw" type="3003" element="_XBpKoVTLEeasaLTJO4uWBw"> + <styles xmi:type="notation:ShapeStyle" xmi:id="_XB1X41TLEeasaLTJO4uWBw" fontName="Segoe UI"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XB1X5FTLEeasaLTJO4uWBw"/> + </children> + <styles xmi:type="notation:ShapeStyle" xmi:id="_XB0w0VTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XB0w0lTLEeasaLTJO4uWBw" x="77" y="-2" width="10" height="10"/> + </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_AIYOgUW5EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AIYOgkW5EeWzE_Xsv11e2Q" x="31" y="30"/> </children> @@ -290,7 +372,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_12nDxkW4EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_12nDwUW4EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_12nDwkW4EeWzE_Xsv11e2Q" x="828" y="96"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_12nDwkW4EeWzE_Xsv11e2Q" x="816" y="176"/> </children> <children xmi:type="notation:Node" xmi:id="_8VFjEEW4EeWzE_Xsv11e2Q" type="2002" element="_8UwL4EW4EeWzE_Xsv11e2Q"> <children xmi:type="notation:Node" xmi:id="_8VFjE0W4EeWzE_Xsv11e2Q" type="5006"/> @@ -299,7 +381,7 @@ <styles xmi:type="notation:FilteringStyle" xmi:id="_8VGKIkW4EeWzE_Xsv11e2Q"/> </children> <styles xmi:type="notation:ShapeStyle" xmi:id="_8VFjEUW4EeWzE_Xsv11e2Q" fontName="Cantarell" fontHeight="8"/> - <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VFjEkW4EeWzE_Xsv11e2Q" x="888" y="276"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VFjEkW4EeWzE_Xsv11e2Q" x="876" y="356"/> </children> <styles xmi:type="notation:DiagramStyle" xmi:id="_S9iv8kW0EeWzE_Xsv11e2Q"/> <edges xmi:type="notation:Edge" xmi:id="_iL37UEW0EeWzE_Xsv11e2Q" type="4001" element="_iLb2cEW0EeWzE_Xsv11e2Q" source="_UT3CoEW0EeWzE_Xsv11e2Q" target="_UUBasEW0EeWzE_Xsv11e2Q"> @@ -410,9 +492,89 @@ <styles xmi:type="notation:ConnectorStyle" xmi:id="_5jJaAUplEeWFR4-GINH9ew"/> <styles xmi:type="notation:FontStyle" xmi:id="_5jJaAkplEeWFR4-GINH9ew" fontName="Cantarell" fontHeight="8"/> <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5jJaA0plEeWFR4-GINH9ew" points="[3, 25, -10, -100]$[14, 125, 1, 0]"/> - <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5jVnQEplEeWFR4-GINH9ew" id="(0.12,0.6428571428571429)"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5jVnQEplEeWFR4-GINH9ew" id="(0.11999999999999998,0.8760932944606414)"/> <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5jWOUEplEeWFR4-GINH9ew" id="(0.12666666666666668,0.0)"/> </edges> + <edges xmi:type="notation:Edge" xmi:id="_YQrJkFTLEeasaLTJO4uWBw" type="4001" element="_YQXnkFTLEeasaLTJO4uWBw" source="_BLMWYEW5EeWzE_Xsv11e2Q" target="_AIYOgEW5EeWzE_Xsv11e2Q"> + <children xmi:type="notation:Node" xmi:id="_YQrwoFTLEeasaLTJO4uWBw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQrwoVTLEeasaLTJO4uWBw" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_YQrwolTLEeasaLTJO4uWBw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQrwo1TLEeasaLTJO4uWBw" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_YQrwpFTLEeasaLTJO4uWBw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQrwpVTLEeasaLTJO4uWBw" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_YQrJkVTLEeasaLTJO4uWBw"/> + <styles xmi:type="notation:FontStyle" xmi:id="_YQrJklTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YQrJk1TLEeasaLTJO4uWBw" points="[900, 215, 900, 215]$[902, 168, 902, 168]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YQs-wFTLEeasaLTJO4uWBw" id="(0.5,0.5)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YQs-wVTLEeasaLTJO4uWBw" id="(0.5,0.5)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_YQs-wlTLEeasaLTJO4uWBw" type="4001" element="_YQXnk1TLEeasaLTJO4uWBw" source="_Uv5xgFTLEeasaLTJO4uWBw" target="_XB0w0FTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_YQs-xlTLEeasaLTJO4uWBw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQs-x1TLEeasaLTJO4uWBw" x="34" y="46"/> + </children> + <children xmi:type="notation:Node" xmi:id="_YQs-yFTLEeasaLTJO4uWBw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQs-yVTLEeasaLTJO4uWBw" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_YQs-ylTLEeasaLTJO4uWBw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YQs-y1TLEeasaLTJO4uWBw" x="7"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_YQs-w1TLEeasaLTJO4uWBw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_YQs-xFTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YQs-xVTLEeasaLTJO4uWBw" points="[-5, -2, -215, -232]$[-5, -12, -215, -242]$[218, -12, 8, -242]$[218, 228, 8, -2]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YQs-zFTLEeasaLTJO4uWBw" id="(1.0,0.2)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YQs-zVTLEeasaLTJO4uWBw" id="(0.0,0.2)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_eGGr4FTLEeasaLTJO4uWBw" type="4001" element="_eFyi0FTLEeasaLTJO4uWBw" source="_c_bXsFTLEeasaLTJO4uWBw" target="_dPqzIFTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_eGGr5FTLEeasaLTJO4uWBw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eGGr5VTLEeasaLTJO4uWBw" x="-55" y="25"/> + </children> + <children xmi:type="notation:Node" xmi:id="_eGGr5lTLEeasaLTJO4uWBw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eGGr51TLEeasaLTJO4uWBw" x="99" y="-38"/> + </children> + <children xmi:type="notation:Node" xmi:id="_eGGr6FTLEeasaLTJO4uWBw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eGGr6VTLEeasaLTJO4uWBw" x="-12" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_eGGr4VTLEeasaLTJO4uWBw" routing="Rectilinear"/> + <styles xmi:type="notation:FontStyle" xmi:id="_eGGr4lTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eGGr41TLEeasaLTJO4uWBw" points="[-1, 0, -25, -366]$[-1, 76, -25, -290]$[47, 76, 23, -290]$[47, 250, 23, -116]$[70, 250, 46, -116]$[70, 371, 46, 5]$[28, 371, 4, 5]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eGHS8FTLEeasaLTJO4uWBw" id="(0.6,1.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eGHS8VTLEeasaLTJO4uWBw" id="(0.6,0.0)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_jIaIIFTLEeasaLTJO4uWBw" type="4001" element="_jIF_EFTLEeasaLTJO4uWBw" source="_gI304FTLEeasaLTJO4uWBw" target="_sYWWYEW0EeWzE_Xsv11e2Q"> + <children xmi:type="notation:Node" xmi:id="_jIaIJFTLEeasaLTJO4uWBw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jIaIJVTLEeasaLTJO4uWBw" x="-6" y="-18"/> + </children> + <children xmi:type="notation:Node" xmi:id="_jIaIJlTLEeasaLTJO4uWBw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jIaIJ1TLEeasaLTJO4uWBw" x="-1" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_jIaIKFTLEeasaLTJO4uWBw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jIaIKVTLEeasaLTJO4uWBw" y="8"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_jIaIIVTLEeasaLTJO4uWBw"/> + <styles xmi:type="notation:FontStyle" xmi:id="_jIaIIlTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jIaII1TLEeasaLTJO4uWBw" points="[0, 0, -360, -3]$[360, 3, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jIavMFTLEeasaLTJO4uWBw" id="(1.0,0.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jIavMVTLEeasaLTJO4uWBw" id="(0.0,0.3)"/> + </edges> + <edges xmi:type="notation:Edge" xmi:id="_jmGwwFTLEeasaLTJO4uWBw" type="4001" element="_jl3gMFTLEeasaLTJO4uWBw" source="_f_4Q8FTLEeasaLTJO4uWBw" target="_gvB18FTLEeasaLTJO4uWBw"> + <children xmi:type="notation:Node" xmi:id="_jmHX0FTLEeasaLTJO4uWBw" type="6001"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jmHX0VTLEeasaLTJO4uWBw" x="-1" y="-10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_jmHX0lTLEeasaLTJO4uWBw" type="6002"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jmHX01TLEeasaLTJO4uWBw" x="-1" y="10"/> + </children> + <children xmi:type="notation:Node" xmi:id="_jmHX1FTLEeasaLTJO4uWBw" type="6003"> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jmHX1VTLEeasaLTJO4uWBw" x="1" y="10"/> + </children> + <styles xmi:type="notation:ConnectorStyle" xmi:id="_jmGwwVTLEeasaLTJO4uWBw"/> + <styles xmi:type="notation:FontStyle" xmi:id="_jmGwwlTLEeasaLTJO4uWBw" fontName="Segoe UI" fontHeight="8"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jmGww1TLEeasaLTJO4uWBw" points="[0, 0, -360, 0]$[172, -24, -188, -24]$[360, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jmHX1lTLEeasaLTJO4uWBw" id="(1.0,0.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jmHX11TLEeasaLTJO4uWBw" id="(0.0,0.0)"/> + </edges> </data> </ownedAnnotationEntries> <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_UTl84EW0EeWzE_Xsv11e2Q" name="node3" outgoingEdges="_iLb2cEW0EeWzE_Xsv11e2Q" width="3" height="3" resizeKind="NSEW"> @@ -451,6 +613,20 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_dPInoFTLEeasaLTJO4uWBw" incomingEdges="_eFyi0FTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.2/@elements.2"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.2/@elements.2"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_dPOuQFTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_rfeKMEsxEeWT0fYxKfS3Bw" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -475,6 +651,9 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_UTufwUW0EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" borderLineStyle="dash" backgroundStyle="GradientTopToBottom" foregroundColor="204,242,166"> <customFeatures>borderLineStyle</customFeatures> <customFeatures>backgroundStyle</customFeatures> @@ -525,6 +704,31 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_f_f2cFTLEeasaLTJO4uWBw" outgoingEdges="_jl3gMFTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.0/@elements.5"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.0/@elements.5"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_f_f2cVTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_gIn9QFTLEeasaLTJO4uWBw" outgoingEdges="_jIF_EFTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.0/@elements.6"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.0/@elements.6"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_gIn9QVTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_X6WBIEW0EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -565,14 +769,53 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> - <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_sYC0YEW0EeWzE_Xsv11e2Q" width="1" height="1" resizeKind="NSEW"> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_sYC0YEW0EeWzE_Xsv11e2Q" incomingEdges="_jIF_EFTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.4"/> <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.4"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:Square" xmi:id="_sYC0YUW0EeWzE_Xsv11e2Q" color="255,245,181"> <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_UvVw0FTLEeasaLTJO4uWBw" outgoingEdges="_YQXnk1TLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.5"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.5"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_UvVw0VTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_c_H1sFTLEeasaLTJO4uWBw" outgoingEdges="_eFyi0FTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.6"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.6"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_c_H1sVTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_guxXQFTLEeasaLTJO4uWBw" incomingEdges="_jl3gMFTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.7"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.1/@elements.7"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_guxXQVTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_X6WoMEW0EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -621,6 +864,9 @@ <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_12SToEW4EeWzE_Xsv11e2Q"> <target xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4"/> <semanticElements xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_12S6sEW4EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -632,7 +878,7 @@ <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> <actualMapping xmi:type="description_1:ContainerMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']"/> - <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_AIAbEEW5EeWzE_Xsv11e2Q"> + <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_AIAbEEW5EeWzE_Xsv11e2Q" incomingEdges="_YQXnkFTLEeasaLTJO4uWBw"> <target xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0"/> <semanticElements xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0"/> <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_A4xJoEW5EeWzE_Xsv11e2Q" width="1" height="1" resizeKind="NSEW"> @@ -651,7 +897,7 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> - <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_BKP7MEW5EeWzE_Xsv11e2Q" width="1" height="1" resizeKind="NSEW"> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_BKP7MEW5EeWzE_Xsv11e2Q" outgoingEdges="_YQXnkFTLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0/@elements.2"/> <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0/@elements.2"/> <ownedStyle xmi:type="diagram:Square" xmi:id="_BKP7MUW5EeWzE_Xsv11e2Q" color="255,245,181"> @@ -667,6 +913,17 @@ </ownedStyle> <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> </ownedBorderedNodes> + <ownedBorderedNodes xmi:type="diagram:DNode" xmi:id="_XBpKoFTLEeasaLTJO4uWBw" incomingEdges="_YQXnk1TLEeasaLTJO4uWBw" width="1" height="1" resizeKind="NSEW"> + <target xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0/@elements.4"/> + <semanticElements xmi:type="migrationmodeler:Bordered" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.4/@elements.0/@elements.0/@elements.4"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> + <ownedStyle xmi:type="diagram:Square" xmi:id="_XBpKoVTLEeasaLTJO4uWBw" color="255,245,181"> + <description xmi:type="style:SquareDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']/@style"/> + </ownedStyle> + <actualMapping xmi:type="description_1:NodeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@borderedNodeMappings[name='bordered']"/> + </ownedBorderedNodes> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_AIBCIEW5EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -677,6 +934,9 @@ <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_8UwL4EW4EeWzE_Xsv11e2Q"> <target xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.5"/> <semanticElements xmi:type="migrationmodeler:Container" href="moveEdgeGroup.migrationmodeler#//@representations.0/@containers.5"/> + <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> + <arrangeConstraints>KEEP_SIZE</arrangeConstraints> + <arrangeConstraints>KEEP_RATIO</arrangeConstraints> <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_8Uwy8EW4EeWzE_Xsv11e2Q" borderSize="1" borderSizeComputationExpression="1" foregroundColor="204,242,166"> <description xmi:type="style:FlatContainerStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@containerMappings[name='container']/@style"/> </ownedStyle> @@ -712,14 +972,60 @@ </ownedStyle> <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_YQXnkFTLEeasaLTJO4uWBw" name="newEdge" sourceNode="_BKP7MEW5EeWzE_Xsv11e2Q" targetNode="_AIAbEEW5EeWzE_Xsv11e2Q"> + <target xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.4"/> + <semanticElements xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.4"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_YQXnkVTLEeasaLTJO4uWBw" strokeColor="39,76,114"> + <description xmi:type="style:EdgeStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_YQXnklTLEeasaLTJO4uWBw"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_YQXnk1TLEeasaLTJO4uWBw" name="edge1bis" sourceNode="_UvVw0FTLEeasaLTJO4uWBw" targetNode="_XBpKoFTLEeasaLTJO4uWBw"> + <target xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.8"/> + <semanticElements xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.8"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_YQXnlFTLEeasaLTJO4uWBw" routingStyle="manhattan" strokeColor="39,76,114"> + <customFeatures>routingStyle</customFeatures> + <description xmi:type="style:EdgeStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_YQXnlVTLEeasaLTJO4uWBw"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_eFyi0FTLEeasaLTJO4uWBw" name="edge2bis" sourceNode="_c_H1sFTLEeasaLTJO4uWBw" targetNode="_dPInoFTLEeasaLTJO4uWBw"> + <target xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.9"/> + <semanticElements xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.9"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_eFzJ4FTLEeasaLTJO4uWBw" routingStyle="manhattan" strokeColor="39,76,114"> + <customFeatures>routingStyle</customFeatures> + <description xmi:type="style:EdgeStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_eFzJ4VTLEeasaLTJO4uWBw"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_jIF_EFTLEeasaLTJO4uWBw" name="edge3bis" sourceNode="_gIn9QFTLEeasaLTJO4uWBw" targetNode="_sYC0YEW0EeWzE_Xsv11e2Q"> + <target xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.10"/> + <semanticElements xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.10"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_jIF_EVTLEeasaLTJO4uWBw" strokeColor="39,76,114"> + <description xmi:type="style:EdgeStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_jIF_ElTLEeasaLTJO4uWBw"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> + </ownedDiagramElements> + <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_jl3gMFTLEeasaLTJO4uWBw" name="edge4bis" sourceNode="_f_f2cFTLEeasaLTJO4uWBw" targetNode="_guxXQFTLEeasaLTJO4uWBw"> + <target xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.11"/> + <semanticElements xmi:type="migrationmodeler:Edge" href="moveEdgeGroup.migrationmodeler#//@representations.0/@edges.11"/> + <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_jl4HQFTLEeasaLTJO4uWBw" strokeColor="39,76,114"> + <description xmi:type="style:EdgeStyleDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']/@style"/> + <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_jl4HQVTLEeasaLTJO4uWBw"/> + </ownedStyle> + <actualMapping xmi:type="description_1:EdgeMapping" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer/@edgeMappings[name='edge']"/> + </ownedDiagramElements> <description xmi:type="description_1:DiagramDescription" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']"/> <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_S9cCQ0W0EeWzE_Xsv11e2Q"/> <activatedLayers xmi:type="description_1:Layer" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']/@ownedRepresentations[name='useCase']/@defaultLayer"/> <target xmi:type="migrationmodeler:Diagram" href="moveEdgeGroup.migrationmodeler#//@representations.0"/> </ownedRepresentations> - <viewpoint xmi:type="description:Viewpoint" href="moveEdgeGroup.odesign#//@ownedViewpoints[name='centered']"/> </ownedViews> - <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_-Rt5YEfdEeWXC_XxZcekKg"> + <ownedViews xmi:type="viewpoint:DView" xmi:id="_-Rt5YEfdEeWXC_XxZcekKg"> <viewpoint xmi:type="description:Viewpoint" href="platform:/resource/VP-3832/tree.odesign#//@ownedViewpoints[name='tree']"/> </ownedViews> </viewpoint:DAnalysis> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.migrationmodeler b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.migrationmodeler index a5de4fbd3f..401217224b 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.migrationmodeler +++ b/plugins/org.eclipse.sirius.tests.swtbot/data/unit/moveEdgeGroup/moveEdgeGroup.migrationmodeler @@ -7,6 +7,8 @@ <elements xsi:type="migrationmodeler:Bordered" id="bn10"/> <elements xsi:type="migrationmodeler:Bordered"/> <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> </containers> <containers id="container1"> <elements xsi:type="migrationmodeler:Bordered" id="bn5"/> @@ -14,10 +16,14 @@ <elements xsi:type="migrationmodeler:Bordered" id="bn3"/> <elements xsi:type="migrationmodeler:Bordered" id="bn2"/> <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> </containers> <containers id="container3"> <elements xsi:type="migrationmodeler:Bordered" id="bn4"/> <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> </containers> <containers id="container4"> <elements xsi:type="migrationmodeler:Bordered"/> @@ -30,6 +36,7 @@ <elements xsi:type="migrationmodeler:Bordered" id="bn1"/> <elements xsi:type="migrationmodeler:Bordered"/> <elements xsi:type="migrationmodeler:Bordered"/> + <elements xsi:type="migrationmodeler:Bordered"/> </elements> </elements> </containers> @@ -46,5 +53,9 @@ <edges id="edge1" source="//@representations.0/@containers.1/@elements.3" target="//@representations.0/@containers.4/@elements.0/@elements.0/@elements.1"/> <edges id="edge5" source="//@representations.0/@containers.3/@elements.1" target="//@representations.0/@containers.0/@elements.2"/> <edges id="edge6" source="//@representations.0/@containers.0" target="//@representations.0/@containers.3"/> + <edges id="edge1bis" source="//@representations.0/@containers.1/@elements.5" target="//@representations.0/@containers.4/@elements.0/@elements.0/@elements.4"/> + <edges id="edge2bis" source="//@representations.0/@containers.1/@elements.6" target="//@representations.0/@containers.2/@elements.2"/> + <edges id="edge3bis" source="//@representations.0/@containers.0/@elements.6" target="//@representations.0/@containers.1/@elements.4"/> + <edges id="edge4bis" source="//@representations.0/@containers.0/@elements.5" target="//@representations.0/@containers.1/@elements.7"/> </representations> </migrationmodeler:TestCase> diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/MoveEdgeGroupTest.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/MoveEdgeGroupTest.java index ece3859ed1..14e9952ff0 100644 --- a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/MoveEdgeGroupTest.java +++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/MoveEdgeGroupTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 THALES GLOBAL SERVICES. + * Copyright (c) 2015, 2016 THALES GLOBAL SERVICES. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,6 +10,11 @@ *******************************************************************************/ package org.eclipse.sirius.tests.swtbot; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.PointList; @@ -17,6 +22,7 @@ import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.sirius.diagram.DDiagram; +import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerEditPart; import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramEdgeEditPart; import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramEdgeEditPart.ViewEdgeFigure; import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase; @@ -29,10 +35,14 @@ import org.eclipse.sirius.tests.swtbot.support.utils.SWTBotUtils; import org.eclipse.swt.SWT; import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + /** * Tests for the move edge group feature. See #471104 for more details. * - * @author Florian Barbin + * @author <a href="mailto:florian.barbin@obeo.fr">Florian Barbin</a> * */ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { @@ -95,8 +105,24 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { */ public void testMoveRectilinearEdgeGroup() { moveBendpoint(ZoomLevel.ZOOM_100, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); - moveSegment(ZoomLevel.ZOOM_100, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); - moveSegment(ZoomLevel.ZOOM_100, "edge2", new Point(15, -20), PositionConstants.HORIZONTAL, false); + moveSegment(ZoomLevel.ZOOM_100, new Point(-20, -20), PositionConstants.HORIZONTAL, true, "edge1"); + moveSegment(ZoomLevel.ZOOM_100, new Point(15, -20), PositionConstants.HORIZONTAL, false, "edge2"); + } + + /** + * Tests that moving a selection of several rectilinear edge groups works + * properly for the following cases: + * <ul> + * <li>By selecting a bendpoint</li> + * <li>By selecting a segment</li> + * <li>In case of conflict with others border nodes, the command is not + * applied.</li> + * </ul> + */ + public void testMoveRectilinearEdgeGroupMultipleSelection() { + moveBendpoint(ZoomLevel.ZOOM_100, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); + moveSegment(ZoomLevel.ZOOM_100, new Point(-20, -20), PositionConstants.HORIZONTAL, true, "edge1", "edge1bis"); + moveSegment(ZoomLevel.ZOOM_100, new Point(15, -20), PositionConstants.HORIZONTAL, false, "edge2", "edge2bis"); } /** @@ -105,8 +131,18 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { */ public void testMoveRectilinearEdgeGroupZoom125() { moveBendpoint(ZoomLevel.ZOOM_125, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); - moveSegment(ZoomLevel.ZOOM_125, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); - moveSegment(ZoomLevel.ZOOM_125, "edge2", new Point(15, -20), PositionConstants.HORIZONTAL, false); + moveSegment(ZoomLevel.ZOOM_125, new Point(-20, -20), PositionConstants.HORIZONTAL, true, "edge1"); + moveSegment(ZoomLevel.ZOOM_125, new Point(15, -20), PositionConstants.HORIZONTAL, false, "edge2"); + } + + /** + * Tests that moving a selection of several rectilinear edge groups works + * properly for the same cases than above but with a 125% zoom. + */ + public void testMoveRectilinearEdgeGroupZoom125MultipleSelection() { + moveBendpoint(ZoomLevel.ZOOM_125, "edge1", new Point(-20, -20), PositionConstants.HORIZONTAL, true); + moveSegment(ZoomLevel.ZOOM_125, new Point(-20, -20), PositionConstants.HORIZONTAL, true, "edge1", "edge1bis"); + moveSegment(ZoomLevel.ZOOM_125, new Point(15, -20), PositionConstants.HORIZONTAL, false, "edge2", "edge2bis"); } /** @@ -125,8 +161,70 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { */ public void testMoveObliqueEdgeGroup() { moveBendpoint(ZoomLevel.ZOOM_100, "edge4", new Point(-10, -10), PositionConstants.VERTICAL, true); - moveSegment(ZoomLevel.ZOOM_100, "edge3", new Point(-20, -20), PositionConstants.VERTICAL, false); - moveSegment(ZoomLevel.ZOOM_100, "edge3", new Point(-10, -10), PositionConstants.VERTICAL, true); + moveSegment(ZoomLevel.ZOOM_100, new Point(-20, -20), PositionConstants.VERTICAL, false, "edge3"); + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -10), PositionConstants.VERTICAL, true, "edge3"); + } + + /** + * Tests that moving a selection of several oblique edge groups works + * properly for the following cases: + * <ul> + * <li>By selecting a bendpoint</li> + * <li>By selecting a segment: + * <ul> + * <li>In case of conflict with others border nodes, the command is not + * applied.</li> + * <li>In case of authorized move.</li> + * </ul> + * </li> + * </ul> + */ + public void testMoveObliqueEdgeGroupMultipleSelection() { + moveBendpoint(ZoomLevel.ZOOM_100, "edge4", new Point(-10, -10), PositionConstants.VERTICAL, true); + moveSegment(ZoomLevel.ZOOM_100, new Point(-20, -20), PositionConstants.VERTICAL, false, "edge3", "edge3bis"); + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -10), PositionConstants.VERTICAL, true, "edge3", "edge3bis"); + } + + /** + * Tests that moving a selection of two edge groups where one edge group + * take the former location of the other edge group is allowed. + */ + public void testMoveObliqueEdgeGroupMultipleSelectionNoConlict() { + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -50), PositionConstants.VERTICAL, true, "edge3bis", "edge4bis"); + } + + /** + * Tests that moving a selection of two edge groups where the primary + * selection (edge3bis) further that its source and target parent bounds is + * forbidden. + */ + public void testMoveObliqueEdgeGroupMultipleSelectionForbiddenByPrimarySelection() { + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, +100), PositionConstants.VERTICAL, false, "edge3bis", "edge4bis"); + } + + /** + * Tests that moving a selection of two edge groups where a selected edge + * that is not the primary selection (edge4bis) further that its source and + * target parent bounds is forbidden. + */ + public void testMoveObliqueEdgeGroupMultipleSelectionForbiddenByNotPrimarySelection() { + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -150), PositionConstants.VERTICAL, false, "edge3bis", "edge4bis"); + } + + /** + * Tests that moving a selection of two edge groups with different direction + * is forbidden. They should be all vertical or horizontal. + */ + public void testMoveObliqueEdgeGroupMultipleSelectionWithDifferentDirectionsForbidden() { + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -50), PositionConstants.VERTICAL, false, "edge1bis", "edge4bis"); + } + + /** + * Tests that if among the selection there is an element that is not an + * edge, the move is forbidden. + */ + public void testMoveObliqueEdgeGroupAndContainerMultipleSelectionForbidden() { + moveSegment(ZoomLevel.ZOOM_100, new Point(-10, -150), PositionConstants.VERTICAL, false, "edge3bis", "edge4bis", "container4"); } /** @@ -134,22 +232,41 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { */ public void testMoveObliqueEdgeGroupZoom125() { moveBendpoint(ZoomLevel.ZOOM_125, "edge4", new Point(-10, -10), PositionConstants.VERTICAL, true); - moveSegment(ZoomLevel.ZOOM_125, "edge3", new Point(-20, -20), PositionConstants.VERTICAL, false); - moveSegment(ZoomLevel.ZOOM_125, "edge3", new Point(-10, -10), PositionConstants.VERTICAL, true); + moveSegment(ZoomLevel.ZOOM_125, new Point(-20, -20), PositionConstants.VERTICAL, false, "edge3"); + moveSegment(ZoomLevel.ZOOM_125, new Point(-10, -10), PositionConstants.VERTICAL, true, "edge3"); + } + + /** + * Tests that moving a selection of several oblique edge groups works + * properly with a 125% zoom. + */ + public void testMoveObliqueEdgeGroupZoom125MultipleSelection() { + moveBendpoint(ZoomLevel.ZOOM_125, "edge4", new Point(-10, -10), PositionConstants.VERTICAL, true); + moveSegment(ZoomLevel.ZOOM_125, new Point(-20, -20), PositionConstants.VERTICAL, false, "edge3", "edge3bis"); + moveSegment(ZoomLevel.ZOOM_125, new Point(-10, -10), PositionConstants.VERTICAL, true, "edge3", "edge3bis"); } - private void moveSegment(ZoomLevel zoomLevel, String name, Point delta, int expectedAxis, boolean authorized) { + private void moveSegment(ZoomLevel zoomLevel, Point delta, int expectedAxis, boolean authorized, String... names) { editor.zoom(zoomLevel); editor.scrollTo(0, 0); - SWTBotGefEditPart elementToMove = editor.getEditPart(name, AbstractDiagramEdgeEditPart.class); + Set<SWTBotGefEditPart> elementsToMove = Sets.newLinkedHashSet(); + for (String name : names) { - // Select the element to move - editor.select(elementToMove); + // SWTBotGefEditPart elementToMove = editor.getEditPart(name); + if (name.startsWith("edge")) { + elementsToMove.add(editor.getEditPart(name, AbstractDiagramEdgeEditPart.class)); + } else if (name.startsWith("container")) { + elementsToMove.add(editor.getEditPart(name, AbstractDiagramContainerEditPart.class)); + } + // assertTrue(elementToMove.part() instanceof ConnectionEditPart); + } + + // Select the elements to move + editor.select(elementsToMove); // Get point to move - assertTrue(elementToMove.part() instanceof ConnectionEditPart); - ConnectionEditPart connectionEditPart = (ConnectionEditPart) elementToMove.part(); + ConnectionEditPart connectionEditPart = (ConnectionEditPart) elementsToMove.iterator().next().part(); assertTrue(connectionEditPart.getFigure() instanceof ViewEdgeFigure); PointList pointList = ((ViewEdgeFigure) connectionEditPart.getFigure()).getPoints().getCopy(); Point firstPoint = pointList.getPoint(0); @@ -163,7 +280,7 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { pointToMove.x = Math.round(firstPoint.x + ((secondPoint.x - firstPoint.x) / 2)); } - dragPoint(zoomLevel, name, pointToMove, delta, expectedAxis, authorized); + dragPoint(zoomLevel, elementsToMove, pointToMove, delta, expectedAxis, authorized); // Move to initial location undo(localSession.getOpenedSession()); editor.scrollTo(0, 0); @@ -175,7 +292,7 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { SWTBotGefEditPart elementToMove = editor.getEditPart(name, AbstractDiagramEdgeEditPart.class); - // Select the element to move + // Select the elements to move editor.select(elementToMove); // Get the bendpoint to move @@ -185,7 +302,7 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { PointList pointList = ((ViewEdgeFigure) connectionEditPart.getFigure()).getPoints().getCopy(); Point pointToMove = pointList.getPoint(1); - dragPoint(zoomLevel, name, pointToMove, delta, expectedAxis, authorized); + dragPoint(zoomLevel, Collections.singleton(elementToMove), pointToMove, delta, expectedAxis, authorized); // Move to initial location undo(localSession.getOpenedSession()); editor.scrollTo(0, 0); @@ -210,27 +327,32 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { * group should not be authorized and should retrieve its initial * location. */ - private void dragPoint(ZoomLevel zoomLevel, String name, Point start, Point delta, int expectedAxis, boolean noConflicts) { + private void dragPoint(ZoomLevel zoomLevel, Set<SWTBotGefEditPart> elementsToMove, Point start, Point delta, int expectedAxis, boolean noConflicts) { boolean snapToGrid = editor.isSnapToGrid(); boolean snapToShape = editor.isSnapToShape(); try { editor.setSnapToGrid(false); editor.setSnapToShape(false); - SWTBotGefEditPart elementToMove = editor.getEditPart(name, AbstractDiagramEdgeEditPart.class); - // Select the element to move - editor.select(elementToMove); - - assertTrue(elementToMove.part() instanceof ConnectionEditPart); - ConnectionEditPart connectionEditPart = (ConnectionEditPart) elementToMove.part(); + HashMap<SWTBotGefEditPart, List<Rectangle>> initialLocations = Maps.newHashMap(); + for (SWTBotGefEditPart elementToMove : elementsToMove) { + if (elementToMove.part() instanceof ConnectionEditPart) { + ConnectionEditPart connectionEditPart = (ConnectionEditPart) elementToMove.part(); + + // Get connection ends bounds + IGraphicalEditPart source = (IGraphicalEditPart) connectionEditPart.getSource(); + Rectangle sourceInitalBounds = source.getFigure().getBounds().getCopy(); + source.getFigure().translateToAbsolute(sourceInitalBounds); + IGraphicalEditPart target = (IGraphicalEditPart) connectionEditPart.getTarget(); + Rectangle targetInitalBounds = target.getFigure().getBounds().getCopy(); + target.getFigure().translateToAbsolute(targetInitalBounds); + List<Rectangle> locations = Lists.newArrayList(); + locations.add(sourceInitalBounds); + locations.add(targetInitalBounds); + initialLocations.put(elementToMove, locations); + } + } - // Get connection ends bounds - IGraphicalEditPart source = (IGraphicalEditPart) connectionEditPart.getSource(); - Rectangle sourceInitalBounds = source.getFigure().getBounds().getCopy(); - source.getFigure().translateToAbsolute(sourceInitalBounds); - IGraphicalEditPart target = (IGraphicalEditPart) connectionEditPart.getTarget(); - Rectangle targetInitalBounds = target.getFigure().getBounds().getCopy(); - target.getFigure().translateToAbsolute(targetInitalBounds); final Point endpoint = new Point(start.x + delta.x, start.y + delta.y); @@ -247,15 +369,29 @@ public class MoveEdgeGroupTest extends AbstractSiriusSwtBotGefTestCase { } else { pointToTranslate.x = 0; } - Rectangle expectedSourceBounds = sourceInitalBounds.getCopy(); - Rectangle expectedTargetBounds = targetInitalBounds.getCopy(); - if (noConflicts) { - pointToTranslate.scale(zoomLevel.getAmount()); - expectedSourceBounds.translate(pointToTranslate); - expectedTargetBounds.translate(pointToTranslate); + pointToTranslate.scale(zoomLevel.getAmount()); + + // Check locations of each source/target of moved connections + for (SWTBotGefEditPart elementToMove : elementsToMove) { + if (elementToMove.part() instanceof ConnectionEditPart) { + List<Rectangle> locationsList = initialLocations.get(elementToMove); + Rectangle sourceInitalBounds = locationsList.get(0); + Rectangle targetInitalBounds = locationsList.get(1); + Rectangle expectedSourceBounds = sourceInitalBounds.getCopy(); + Rectangle expectedTargetBounds = targetInitalBounds.getCopy(); + if (noConflicts) { + expectedSourceBounds.translate(pointToTranslate); + expectedTargetBounds.translate(pointToTranslate); + } + ConnectionEditPart connectionEditPart = (ConnectionEditPart) elementToMove.part(); + + // Get connection ends bounds + IGraphicalEditPart source = (IGraphicalEditPart) connectionEditPart.getSource(); + IGraphicalEditPart target = (IGraphicalEditPart) connectionEditPart.getTarget(); + bot.waitUntil(new CheckBoundsCondition(source, expectedSourceBounds, false, false)); + bot.waitUntil(new CheckBoundsCondition(target, expectedTargetBounds, false, false)); + } } - bot.waitUntil(new CheckBoundsCondition(source, expectedSourceBounds, false, false)); - bot.waitUntil(new CheckBoundsCondition(target, expectedTargetBounds, false, false)); } finally { editor.setSnapToGrid(snapToGrid); editor.setSnapToShape(snapToShape); |
