Commit 49dc2d50 authored by Martti Käärik's avatar Martti Käärik
Browse files

Invoke default sequence diagram layout commands before custom ones.

Change-Id: Ia82d6e96dc0cf2d394f141da9f6b0b7f47878543
parent 1a1dcb47
Loading
Loading
Loading
Loading
+47 −18
Original line number Diff line number Diff line
@@ -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",
@@ -56,25 +55,16 @@ public class SequenceDiagramFreeformLayoutProvider implements LayoutProvider {
			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
@@ -97,11 +87,50 @@ class SequenceFreeformLayoutEditPartProvider extends TdlAbstractLayoutEditPartPr
	
	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();