Commit 431acb2e authored by Martti Käärik's avatar Martti Käärik
Browse files

Behaviour reordering.

Change-Id: I3ac2f35ea028a7b2410b63f245aace2fd449e61c
parent 068e438d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ Require-Bundle: org.eclipse.ui,
 org.etsi.mts.tdl.model,
 org.eclipse.sirius.diagram.sequence.ui,
 org.eclipse.sirius.ext.base,
 org.eclipse.ui.ide
 org.eclipse.ui.ide,
 org.eclipse.sirius.diagram.sequence
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+13 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<description:Group 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/sequence/description/2.0.0" xmlns:description_2="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="TDL" version="12.0.0.2017041100">
<description:Group 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/sequence/description/2.0.0" xmlns:description_2="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/sequence/description/tool/2.0.0" xmlns:tool_1="http://www.eclipse.org/sirius/description/tool/1.1.0" name="TDL" version="12.0.0.2017041100">
  <ownedViewpoints name="org.etsi.mts.tdl" label="TDL">
    <ownedRepresentations xsi:type="description_1:SequenceDiagramDescription" name="TestDescriptionDiagram" label="TDL Behavior" domainClass="tdl.TestDescription" enablePopupBars="true" endsOrdering="[getOccurrences()->select(e|eventEnds->includes(e))/]" instanceRolesOrdering="[testConfiguration.connection.endPoint->sortedBy(ref|ref.component.name + '.' + ref.gate.name)/]">
      <metamodel href="../tdl.ecore#/"/>
@@ -454,6 +454,17 @@
            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
          </style>
        </containerMappings>
        <toolSections name="edit">
          <ownedTools xsi:type="tool:ReorderTool" name="messageReorder" mappings="//@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@edgeMappings[name='interaction'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='actionReference'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='assertion'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='assignment'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='combinedBehaviour'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='globalAction'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='inlineAction'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='testDescriptionReference'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='timeOperation'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='timerOperation'] //@ownedViewpoints[name='org.etsi.mts.tdl']/@ownedRepresentations[name='TestDescriptionDiagram']/@defaultLayer/@containerMappings[name='verdictAssignment']">
            <startingEndPredecessorBefore name="startingEndPredecessorBefore"/>
            <startingEndPredecessorAfter name="startingEndPredecessorAfter"/>
            <finishingEndPredecessorBefore name="finishingEndPredecessorBefore"/>
            <finishingEndPredecessorAfter name="finishingEndPredecessorAfter"/>
            <onEventMovedOperation>
              <firstModelOperations xsi:type="tool_1:ChangeContext" browseExpression="[reorderBehaviour(self, startingEndPredecessorAfter)/]"/>
            </onEventMovedOperation>
          </ownedTools>
        </toolSections>
      </defaultLayer>
    </ownedRepresentations>
    <ownedRepresentations xsi:type="description_2:DiagramDescription" name="GenericDiagram" label="Generic TDL" domainClass="tdl.Package" enablePopupBars="true">
@@ -1199,5 +1210,6 @@
    <ownedJavaExtensions qualifiedClassName="org.etsi.mts.tdl.graphical.extensions.DataUseLabelProvider"/>
    <ownedJavaExtensions qualifiedClassName="org.etsi.mts.tdl.graphical.extensions.BehaviourProvider"/>
    <ownedJavaExtensions qualifiedClassName="org.etsi.mts.tdl.graphical.extensions.ModelHelper"/>
    <ownedJavaExtensions qualifiedClassName="org.etsi.mts.tdl.graphical.extensions.BehaviourModifications"/>
  </ownedViewpoints>
</description:Group>
+66 −0
Original line number Diff line number Diff line
package org.etsi.mts.tdl.graphical.extensions;

import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DSemanticDiagram;
import org.eclipse.sirius.diagram.sequence.ordering.EventEnd;
import org.etsi.mts.tdl.Behaviour;
import org.etsi.mts.tdl.Block;
import org.etsi.mts.tdl.SingleCombinedBehaviour;
import org.etsi.mts.tdl.Target;
import org.etsi.mts.tdl.TestDescription;

public class BehaviourModifications {
	
	private ModelHelper helper = new ModelHelper();
	
	public static void addBehaviour(EObject startingEndPredecessor, DDiagramElement diagramElement, Behaviour behaviour) {
		DSemanticDiagram diagram = (DSemanticDiagram) ((DDiagramElement)diagramElement).getParentDiagram();
		TestDescription td = (TestDescription) diagram.getTarget();
		addBehaviour(startingEndPredecessor, td, behaviour);
	}
		
	public static void addBehaviour(EObject endPredecessor, TestDescription td, Behaviour behaviour) {
		if (endPredecessor instanceof EventEnd)
			endPredecessor = ((EventEnd) endPredecessor).getSemanticEnd();
		
		Block parent = null;
		Behaviour prev = null;
		if (endPredecessor instanceof Behaviour) {
			prev = (Behaviour) endPredecessor;
			
		} else if (endPredecessor instanceof Block) {
			parent = (Block) endPredecessor;
			
		} else if (endPredecessor == null) {
			parent = ((SingleCombinedBehaviour)td.getBehaviourDescription().getBehaviour()).getBlock();
			
		} else
			prev = (Behaviour) BehaviourProvider.getBegin(endPredecessor);
		
		if (parent == null && prev != null)
			parent = (Block) prev.eContainer();

		List<Behaviour> list = parent.getBehaviour();
		list.remove(behaviour);
		int index = 0;
		if (prev != null)
			index = parent.getBehaviour().indexOf(prev) + 1;
		list.add(index, behaviour);
	}
	
	public Object reorderBehaviour(Object selection, Object preAfter) {
		
		Behaviour b = null;
		if (selection instanceof Target)
			b = (Behaviour) ((Target) selection).eContainer();
		else
			b = (Behaviour) selection;
		
		addBehaviour((EObject)preAfter, helper.getTestDescription(b), b);
		
		return selection;
	}
}
+14 −2
Original line number Diff line number Diff line
@@ -130,8 +130,8 @@ public class BehaviourProvider {
	private EObject createEnd(EObject e) {
		Resource extResource = getExtensionResource(e);
		
		EPackage extPackage = EPackageRegistryImpl.INSTANCE.getEPackage(EXTENSION_URI);
		EClass endClass = (EClass) extPackage.getEClassifier(END_CLASS);
		EPackage extPackage = getExtensionPackage();
		EClass endClass = getEndClass();
		EObject end = extPackage.getEFactoryInstance().create(endClass);
		
		end.eSet(endClass.getEStructuralFeature(END_BEGIN_FEATURE), e);
@@ -141,6 +141,18 @@ public class BehaviourProvider {
		return end;
	}
	
	private static EPackage getExtensionPackage() {
		return EPackageRegistryImpl.INSTANCE.getEPackage(EXTENSION_URI);
	}
	
	private static EClass getEndClass() {
		return (EClass) getExtensionPackage().getEClassifier(END_CLASS);
	}
	
	public static EObject getBegin(EObject end) {
		return (EObject) end.eGet(getEndClass().getEStructuralFeature(END_BEGIN_FEATURE));
	}
	
	private Resource getExtensionResource(EObject e) {
		Resource mResource = e.eResource();
		ResourceSet rs = mResource.getResourceSet();
+8 −2
Original line number Diff line number Diff line
@@ -12,16 +12,22 @@ import org.etsi.mts.tdl.TestConfiguration;
import org.etsi.mts.tdl.TestDescription;

public class ModelHelper {
	public TestConfiguration getTestConfiguration(Behaviour b) {

	public TestDescription getTestDescription(Behaviour b) {
		EObject c = b;
		while (c != null) {
			if (c instanceof TestDescription)
				return ((TestDescription) c).getTestConfiguration();
				return (TestDescription) c;
			c = c.eContainer();
		}
		return null;
	}
	
	public TestConfiguration getTestConfiguration(Behaviour b) {
		TestDescription td = getTestDescription(b);
		return td != null ? td.getTestConfiguration() : null;
	}
	
	public List<EObject> allBehaviours(TestDescription e) {
		List<EObject> behaviours = new ArrayList<EObject>();
		TreeIterator<EObject> iter = e.eAllContents();