diff --git a/plugins/org.etsi.mts.tdl.graphical.viewpoint/src/org/etsi/mts/tdl/graphical/sirius/layout/SequenceDiagramFreeformLayoutProvider.java b/plugins/org.etsi.mts.tdl.graphical.viewpoint/src/org/etsi/mts/tdl/graphical/sirius/layout/SequenceDiagramFreeformLayoutProvider.java index 8966de66e5be34ccce468154d3716c156fe92f21..b0d2fc8d6b9cf9a3815ed2a671e765ab8977a39a 100644 --- a/plugins/org.etsi.mts.tdl.graphical.viewpoint/src/org/etsi/mts/tdl/graphical/sirius/layout/SequenceDiagramFreeformLayoutProvider.java +++ b/plugins/org.etsi.mts.tdl.graphical.viewpoint/src/org/etsi/mts/tdl/graphical/sirius/layout/SequenceDiagramFreeformLayoutProvider.java @@ -27,14 +27,13 @@ import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.requests.ZOrderRequest; import org.eclipse.gmf.runtime.diagram.ui.services.layout.AbstractLayoutEditPartProvider; import org.eclipse.sirius.diagram.DDiagram; -import org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil; import org.eclipse.sirius.diagram.description.DiagramDescription; import org.eclipse.sirius.diagram.ui.edit.api.part.IDDiagramEditPart; +import org.eclipse.sirius.diagram.ui.tools.api.layout.provider.DefaultLayoutProvider; import org.eclipse.sirius.diagram.ui.tools.api.layout.provider.LayoutProvider; import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.viewpoint.DMappingBased; import org.eclipse.sirius.viewpoint.DSemanticDecorator; -import org.eclipse.sirius.viewpoint.DView; import org.eclipse.sirius.viewpoint.description.RepresentationElementMapping; import org.eclipse.sirius.viewpoint.description.Viewpoint; import org.etsi.mts.tdl.ComponentInstance; @@ -46,7 +45,7 @@ import org.etsi.mts.tdl.graphical.sirius.part.Util; public class SequenceDiagramFreeformLayoutProvider implements LayoutProvider { - private static final String VIEWPOINT_ID = "org.etsi.mts.tdl"; + public static final String VIEWPOINT_ID = "org.etsi.mts.tdl"; public static final String TEST_DESCRIPTION_DIAGRAM_ID = "TestDescriptionDiagram"; public static final String TIME_LABEL_MAPPING_ID = "timeLabel", @@ -55,26 +54,17 @@ public class SequenceDiagramFreeformLayoutProvider implements LayoutProvider { COMPONENT_INSTANCE_MAPPING_ID = "componentInstance", COMBINED_BEHAVIOUR_MAPPING_ID = "combinedBehaviour", BLOCK_MAPPING_ID = "block"; + + private SequenceFreeformLayoutEditPartProvider layoutProvider = new SequenceFreeformLayoutEditPartProvider(); @Override public boolean provides(IGraphicalEditPart container) { - if (container instanceof IDDiagramEditPart) { - Option<DDiagram> diagram = ((IDDiagramEditPart) container).resolveDDiagram(); - if (diagram.some()) { - DDiagram d = diagram.get(); - DiagramDescription dDesc = d.getDescription(); - Viewpoint vp = (Viewpoint) dDesc.eContainer(); - if (VIEWPOINT_ID.equals(vp.getName()) && - TEST_DESCRIPTION_DIAGRAM_ID.equals(dDesc.getName())) - return true; - } - } - return false; + return layoutProvider.provides(container); } @Override public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) { - return new SequenceFreeformLayoutEditPartProvider(); + return layoutProvider; } @Override @@ -96,12 +86,51 @@ public class SequenceDiagramFreeformLayoutProvider implements LayoutProvider { class SequenceFreeformLayoutEditPartProvider extends TdlAbstractLayoutEditPartProvider { private static final int MARGIN = 20; + + private boolean defaultLayout = false; + + public boolean provides(IGraphicalEditPart container) { + if (defaultLayout) + return false; + if (container instanceof IDDiagramEditPart) { + Option<DDiagram> diagram = ((IDDiagramEditPart) container).resolveDDiagram(); + if (diagram.some()) { + DDiagram d = diagram.get(); + DiagramDescription dDesc = d.getDescription(); + Viewpoint vp = (Viewpoint) dDesc.eContainer(); + if (SequenceDiagramFreeformLayoutProvider.VIEWPOINT_ID.equals(vp.getName()) && + SequenceDiagramFreeformLayoutProvider.TEST_DESCRIPTION_DIAGRAM_ID.equals(dDesc.getName())) + return true; + } + } + return false; + } @Override public Command layoutEditParts(List selectedObjects, IAdaptable layoutHint) { + Command defaultCommand = null; + if (!defaultLayout) { + try { + defaultLayout = true; + + EditPart editPart = (EditPart) selectedObjects.get(0); + while (!(editPart instanceof IDDiagramEditPart)) + editPart = (EditPart) editPart.getParent(); + + DefaultLayoutProvider defaultProvider = new DefaultLayoutProvider(); + defaultCommand = defaultProvider.layoutEditParts((IGraphicalEditPart)editPart, layoutHint); + + } finally { + defaultLayout = false; + } + } + CompoundCommand cc = new CompoundCommand(); + if (defaultCommand != null) + cc.add(defaultCommand); + Map<IGraphicalEditPart, List<Rectangle>> attachmentLocations = new Hashtable<IGraphicalEditPart, List<Rectangle>>(); double scale = 0; @@ -122,8 +151,8 @@ class SequenceFreeformLayoutEditPartProvider extends TdlAbstractLayoutEditPartPr continue; RepresentationElementMapping mapping = ((DMappingBased)dElement).getMapping(); - if (mapping.getName().equals(SequenceDiagramFreeformLayoutProvider.TIME_CONSTRAINT_MAPPING_ID) || - mapping.getName().equals(SequenceDiagramFreeformLayoutProvider.TIME_LABEL_MAPPING_ID)) { + if (mapping.getName().equals(SequenceDiagramFreeformLayoutProvider.TIME_CONSTRAINT_MAPPING_ID) + || mapping.getName().equals(SequenceDiagramFreeformLayoutProvider.TIME_LABEL_MAPPING_ID)) { IGraphicalEditPart anchorEditPart = (IGraphicalEditPart) ((ConnectionEditPart) ((GraphicalEditPart) editPart) .getTargetConnections().get(0)).getSource();