diff options
Diffstat (limited to 'tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests')
25 files changed, 3176 insertions, 279 deletions
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/META-INF/MANIFEST.MF b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/META-INF/MANIFEST.MF index 0878ba1c853..d0684d24bac 100644 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/META-INF/MANIFEST.MF +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/META-INF/MANIFEST.MF @@ -22,7 +22,8 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.papyrus.infra.gmfdiag.preferences, org.eclipse.ui.workbench, org.eclipse.papyrus.uml.services.decoration;bundle-version="[1.2.0,2.0.0)", - org.eclipse.papyrus.uml.oclconstraintevaluation;bundle-version="[1.2.0,2.0.0)" + org.eclipse.papyrus.uml.oclconstraintevaluation;bundle-version="[1.2.0,2.0.0)", + org.eclipse.papyrus.infra.types.core;bundle-version="[4.0.0,5.0.0)" Export-Package: org.eclipse.papyrus.uml.diagram.sequence.tests Bundle-Vendor: %Bundle-Vendor Bundle-ActivationPolicy: lazy diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.di b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.di new file mode 100644 index 00000000000..8c549eecdc6 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.di @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.infra.services.edit.TypeContext"/> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.notation b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.notation new file mode 100644 index 00000000000..05d3f46800f --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.notation @@ -0,0 +1,607 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML"> + <css:StyleSheetReference xmi:id="_9bFrwJobEei5foLskM0Fzg" path="/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/style.css"/> + <notation:Diagram xmi:id="_DHfN4JocEei5foLskM0Fzg" type="PapyrusUMLSequenceDiagram" name="durationConstraintsLinksTest" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_DHfN4ZocEei5foLskM0Fzg" type="Interaction_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_DHfN4pocEei5foLskM0Fzg" type="Interaction_NameLabel"/> + <children xmi:type="notation:BasicCompartment" xmi:id="_DHfN45ocEei5foLskM0Fzg" type="Interaction_SubfragmentCompartment"> + <children xmi:type="notation:Shape" xmi:id="_DHfN5JocEei5foLskM0Fzg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_DHfN5ZocEei5foLskM0Fzg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_sfO8sJodEei5foLskM0Fzg" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_se9P4JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sfO8sZodEei5foLskM0Fzg" x="40" y="66" width="20" height="301"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WTEHYJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DHfN6JocEei5foLskM0Fzg" x="74" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_DHfN6ZocEei5foLskM0Fzg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_DHfN6pocEei5foLskM0Fzg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_tJrA0JodEei5foLskM0Fzg" type="BehaviorExecutionSpecification_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_tJrn4JodEei5foLskM0Fzg" type="BehaviorExecutionSpecification_Behavior"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_tJrn4ZodEei5foLskM0Fzg" x="18" y="18"/> + </children> + <element xmi:type="uml:BehaviorExecutionSpecification" href="bug536631-durationLinks.uml#_tJdlcJodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tJrA0ZodEei5foLskM0Fzg" x="40" y="126" width="20" height="141"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_7O85cJodEei5foLskM0Fzg" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_7OtB0JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7O85cZodEei5foLskM0Fzg" x="50" y="146" width="20" height="100"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WfmHgJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DHfN7ZocEei5foLskM0Fzg" x="354" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_DHfN7pocEei5foLskM0Fzg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_DHfN75ocEei5foLskM0Fzg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_vmLfgJodEei5foLskM0Fzg" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug536631-durationLinks.uml#_vlp7EZodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vmLfgZodEei5foLskM0Fzg" x="40" y="426"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WmtcIJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DHfN8pocEei5foLskM0Fzg" x="634" y="10" height="466"/> + </children> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DHfN85ocEei5foLskM0Fzg"/> + </children> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DHfN9JocEei5foLskM0Fzg"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_DHfN9ZocEei5foLskM0Fzg" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_DHfN9pocEei5foLskM0Fzg"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_DHfN95ocEei5foLskM0Fzg" diagramKindId="org.eclipse.papyrus.uml.diagram.sequence"> + <owner xmi:type="uml:Model" href="bug536631-durationLinks.uml#_VI4MMJobEei5foLskM0Fzg"/> + </styles> + <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_DHfN-JocEei5foLskM0Fzg" name="css_stylesheets" eObjectListValue="_9bFrwJobEei5foLskM0Fzg"/> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <edges xmi:type="notation:Connector" xmi:id="_t7v-AJodEei5foLskM0Fzg" type="Message_AsynchEdge" source="_DHfN5JocEei5foLskM0Fzg" target="_DHfN6ZocEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_t7v-A5odEei5foLskM0Fzg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_t7wlEJodEei5foLskM0Fzg" x="-43" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_t7wlEZodEei5foLskM0Fzg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_t7wlEpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_t7v-AZodEei5foLskM0Fzg"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_t7k-4JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_t7v-ApodEei5foLskM0Fzg" points="[-10, -2, -290, -20]$[270, 18, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t769IJodEei5foLskM0Fzg" id="(0.5,0.20857142857142857)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t769IZodEei5foLskM0Fzg" id="(0.5,0.20857142857142857)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_uLhfYJodEei5foLskM0Fzg" type="Message_AsynchEdge" source="_DHfN6ZocEei5foLskM0Fzg" target="_DHfN5JocEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_uLhfY5odEei5foLskM0Fzg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_uLhfZJodEei5foLskM0Fzg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_uLhfZZodEei5foLskM0Fzg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_uLhfZpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_uLhfYZodEei5foLskM0Fzg"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_uLZjkJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uLhfYpodEei5foLskM0Fzg" points="[-10, -1, 270, -40]$[-290, 39, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uLo0IJodEei5foLskM0Fzg" id="(0.5,0.29428571428571426)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uLpbMJodEei5foLskM0Fzg" id="(0.5,0.29428571428571426)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_ucIuQJodEei5foLskM0Fzg" type="Message_AsynchEdge" source="_DHfN5JocEei5foLskM0Fzg" target="_DHfN6ZocEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_ucIuQ5odEei5foLskM0Fzg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ucIuRJodEei5foLskM0Fzg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_ucIuRZodEei5foLskM0Fzg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ucIuRpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_ucIuQZodEei5foLskM0Fzg"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_ucBZgJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ucIuQpodEei5foLskM0Fzg" points="[-10, 9, -290, -100]$[280, 109, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ucWJoJodEei5foLskM0Fzg" id="(0.5,0.43714285714285717)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ucWJoZodEei5foLskM0Fzg" id="(0.5,0.43714285714285717)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_u7cgcJodEei5foLskM0Fzg" type="Message_AsynchEdge" source="_DHfN5JocEei5foLskM0Fzg" target="_DHfN6ZocEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_u7cgc5odEei5foLskM0Fzg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_u7cgdJodEei5foLskM0Fzg" x="-3" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_u7cgdZodEei5foLskM0Fzg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_u7cgdpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_u7cgcZodEei5foLskM0Fzg"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_u7PFEJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_u7cgcpodEei5foLskM0Fzg" points="[0, 0, -280, 0]$[280, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_u7otsJodEei5foLskM0Fzg" id="(0.5,0.78)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_u7otsZodEei5foLskM0Fzg" id="(0.5,0.78)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_vl3WcJodEei5foLskM0Fzg" type="Message_DeleteEdge" source="_DHfN6ZocEei5foLskM0Fzg" target="_DHfN7pocEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_vl39gJodEei5foLskM0Fzg" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_vl39gZodEei5foLskM0Fzg" x="-35" y="30"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_vl39gpodEei5foLskM0Fzg" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_vl39g5odEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_vl3WcZodEei5foLskM0Fzg"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_vlos8JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vl3WcpodEei5foLskM0Fzg" points="[0, 0, -280, -100]$[280, 100, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vmFY4JodEei5foLskM0Fzg" id="(0.5,0.5228571428571429)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vmFY4ZodEei5foLskM0Fzg" id="(0.5,0.9141630901287554)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_9uBj8JodEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_sfO8sJodEei5foLskM0Fzg" target="_tJrA0JodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_9uBj85odEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_9uBj9JodEei5foLskM0Fzg" x="19" y="-6"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_9uBj9ZodEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_9uBj9podEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_9uBj8ZodEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#_9t4aAJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9uBj8podEei5foLskM0Fzg" points="[0, -150, -280, -130]$[280, -90, 0, -70]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9uNKIJodEei5foLskM0Fzg" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9uNKIZodEei5foLskM0Fzg" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="__GWBwJodEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_t7v-AJodEei5foLskM0Fzg" target="_t7v-AJodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="__GWBw5odEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="__GWBxJodEei5foLskM0Fzg" x="-40" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="__GWBxZodEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="__GWBxpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="__GWBwZodEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#__GADgJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__GWBwpodEei5foLskM0Fzg" points="[-130, 7, -130, 7]$[130, 7, 130, 7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__GoVoJodEei5foLskM0Fzg" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__GoVoZodEei5foLskM0Fzg" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="__-l4YJodEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_7O85cJodEei5foLskM0Fzg" target="_uLhfYJodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="__-l4Y5odEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="__-l4ZJodEei5foLskM0Fzg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="__-l4ZZodEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="__-l4ZpodEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="__-l4YZodEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#__-bgUJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__-l4YpodEei5foLskM0Fzg" points="[0, -50, 150, -67]$[-280, 10, -130, -7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__-yssJodEei5foLskM0Fzg" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__-yssZodEei5foLskM0Fzg" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_A2FhEJoeEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_7O85cJodEei5foLskM0Fzg" target="_tJrA0JodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_A2GIIJoeEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_A2GIIZoeEei5foLskM0Fzg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_A2GIIpoeEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_A2GII5oeEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_A2FhEZoeEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#_A19lQJoeEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_A2FhEpoeEei5foLskM0Fzg" points="[0, 50, 10, 50]$[-10, 71, 0, 71]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_A2SVYJoeEei5foLskM0Fzg" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_A2SVYZoeEei5foLskM0Fzg" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_CASqYJoeEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_ucIuQJodEei5foLskM0Fzg" target="_vl3WcJodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_CASqY5oeEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_CASqZJoeEei5foLskM0Fzg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_CASqZZoeEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_CASqZpoeEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_CASqYZoeEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#_CAI5YJoeEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_CASqYpoeEei5foLskM0Fzg" points="[135, 7, -140, -110]$[135, 67, -140, -50]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CAiiAJoeEei5foLskM0Fzg" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CAiiAZoeEei5foLskM0Fzg" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_DUQzsJoeEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_vl3WcJodEei5foLskM0Fzg" target="_vmLfgJodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_DUQzs5oeEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_DUQztJoeEei5foLskM0Fzg" x="11" y="-27"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_DUQztZoeEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_DUQztpoeEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_DUQzsZoeEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#_DT-f0JoeEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DUQzspoeEei5foLskM0Fzg" points="[-140, -50, -280, -100]$[140, 50, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DUgEQJoeEei5foLskM0Fzg" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DUgEQZoeEei5foLskM0Fzg" id="center"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_E9jswJoeEei5foLskM0Fzg" type="DurationConstraint_Edge" source="_sfO8sJodEei5foLskM0Fzg" target="_u7cgcJodEei5foLskM0Fzg"> + <children xmi:type="notation:DecorationNode" xmi:id="_E9jsw5oeEei5foLskM0Fzg" type="DurationConstraint_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_E9jsxJoeEei5foLskM0Fzg" x="15" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_E9jsxZoeEei5foLskM0Fzg" type="DurationConstraint_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_E9jsxpoeEei5foLskM0Fzg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_E9jswZoeEei5foLskM0Fzg"/> + <element xmi:type="uml:DurationConstraint" href="bug536631-durationLinks.uml#_E9YGkJoeEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_E9jswpoeEei5foLskM0Fzg" points="[0, 151, -140, -172]$[280, 330, 140, 7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_E9yWQJoeEei5foLskM0Fzg" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_E9yWQZoeEei5foLskM0Fzg" id="end"/> + </edges> + </notation:Diagram> + <notation:Diagram xmi:id="_JrvkQJpMEei-GLAJvy8iyw" type="PapyrusUMLSequenceDiagram" name="durationObservationsLinksTest" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_JrvkQZpMEei-GLAJvy8iyw" type="Interaction_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkQppMEei-GLAJvy8iyw" type="Interaction_NameLabel"/> + <children xmi:type="notation:BasicCompartment" xmi:id="_JrvkQ5pMEei-GLAJvy8iyw" type="Interaction_SubfragmentCompartment"> + <children xmi:type="notation:Shape" xmi:id="_JrvkRJpMEei-GLAJvy8iyw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkRZpMEei-GLAJvy8iyw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_JrvkRppMEei-GLAJvy8iyw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_se9P4JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkR5pMEei-GLAJvy8iyw" x="40" y="66" width="20" height="301"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WTEHYJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkSJpMEei-GLAJvy8iyw" x="74" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_JrvkSZpMEei-GLAJvy8iyw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkSppMEei-GLAJvy8iyw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_JrvkS5pMEei-GLAJvy8iyw" type="BehaviorExecutionSpecification_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkTJpMEei-GLAJvy8iyw" type="BehaviorExecutionSpecification_Behavior"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkTZpMEei-GLAJvy8iyw" x="18" y="18"/> + </children> + <element xmi:type="uml:BehaviorExecutionSpecification" href="bug536631-durationLinks.uml#_tJdlcJodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkTppMEei-GLAJvy8iyw" x="40" y="126" width="20" height="141"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_JrvkT5pMEei-GLAJvy8iyw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_7OtB0JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkUJpMEei-GLAJvy8iyw" x="50" y="146" width="20" height="100"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WfmHgJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkUZpMEei-GLAJvy8iyw" x="354" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_JrvkUppMEei-GLAJvy8iyw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkU5pMEei-GLAJvy8iyw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_JrvkVJpMEei-GLAJvy8iyw" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug536631-durationLinks.uml#_vlp7EZodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkVZpMEei-GLAJvy8iyw" x="40" y="426"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WmtcIJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkVppMEei-GLAJvy8iyw" x="634" y="10" height="466"/> + </children> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkV5pMEei-GLAJvy8iyw"/> + </children> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JrvkWJpMEei-GLAJvy8iyw"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_JrvkWZpMEei-GLAJvy8iyw" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_JrvkWppMEei-GLAJvy8iyw"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_JrvkW5pMEei-GLAJvy8iyw" diagramKindId="org.eclipse.papyrus.uml.diagram.sequence"> + <owner xmi:type="uml:Model" href="bug536631-durationLinks.uml#_VI4MMJobEei5foLskM0Fzg"/> + </styles> + <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_JrvkXJpMEei-GLAJvy8iyw" name="css_stylesheets" eObjectListValue="_9bFrwJobEei5foLskM0Fzg"/> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <edges xmi:type="notation:Connector" xmi:id="_JrvklppMEei-GLAJvy8iyw" type="Message_AsynchEdge" source="_JrvkRJpMEei-GLAJvy8iyw" target="_JrvkSZpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_Jrvkl5pMEei-GLAJvy8iyw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkmJpMEei-GLAJvy8iyw" x="-43" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkmZpMEei-GLAJvy8iyw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkmppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_Jrvkm5pMEei-GLAJvy8iyw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_t7k-4JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JrvknJpMEei-GLAJvy8iyw" points="[-10, -2, -290, -20]$[270, 18, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvknZpMEei-GLAJvy8iyw" id="(0.5,0.20857142857142857)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvknppMEei-GLAJvy8iyw" id="(0.5,0.20857142857142857)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_Jrvkn5pMEei-GLAJvy8iyw" type="Message_AsynchEdge" source="_JrvkSZpMEei-GLAJvy8iyw" target="_JrvkRJpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkoJpMEei-GLAJvy8iyw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkoZpMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkoppMEei-GLAJvy8iyw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_Jrvko5pMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_JrvkpJpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_uLZjkJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JrvkpZpMEei-GLAJvy8iyw" points="[-10, -1, 270, -40]$[-290, 39, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvkpppMEei-GLAJvy8iyw" id="(0.5,0.29428571428571426)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jrvkp5pMEei-GLAJvy8iyw" id="(0.5,0.29428571428571426)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_JrvkqJpMEei-GLAJvy8iyw" type="Message_AsynchEdge" source="_JrvkRJpMEei-GLAJvy8iyw" target="_JrvkSZpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkqZpMEei-GLAJvy8iyw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkqppMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_Jrvkq5pMEei-GLAJvy8iyw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkrJpMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_JrvkrZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_ucBZgJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JrvkrppMEei-GLAJvy8iyw" points="[-10, 9, -290, -100]$[280, 109, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jrvkr5pMEei-GLAJvy8iyw" id="(0.5,0.43714285714285717)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvksJpMEei-GLAJvy8iyw" id="(0.5,0.43714285714285717)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_JrvksZpMEei-GLAJvy8iyw" type="Message_AsynchEdge" source="_JrvkRJpMEei-GLAJvy8iyw" target="_JrvkSZpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvksppMEei-GLAJvy8iyw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_Jrvks5pMEei-GLAJvy8iyw" x="-3" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvktJpMEei-GLAJvy8iyw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvktZpMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_JrvktppMEei-GLAJvy8iyw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_u7PFEJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jrvkt5pMEei-GLAJvy8iyw" points="[0, 0, -280, 0]$[280, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvkuJpMEei-GLAJvy8iyw" id="(0.5,0.78)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvkuZpMEei-GLAJvy8iyw" id="(0.5,0.78)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_JrvkuppMEei-GLAJvy8iyw" type="Message_DeleteEdge" source="_JrvkSZpMEei-GLAJvy8iyw" target="_JrvkUppMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_Jrvku5pMEei-GLAJvy8iyw" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkvJpMEei-GLAJvy8iyw" x="-35" y="30"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_JrvkvZpMEei-GLAJvy8iyw" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_JrvkvppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_Jrvkv5pMEei-GLAJvy8iyw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_vlos8JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JrvkwJpMEei-GLAJvy8iyw" points="[0, 0, -280, -100]$[280, 100, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvkwZpMEei-GLAJvy8iyw" id="(0.5,0.5228571428571429)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JrvkwppMEei-GLAJvy8iyw" id="(0.5,0.9141630901287554)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_kB28YJpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkRppMEei-GLAJvy8iyw" target="_JrvkS5pMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_kB28Y5pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_kB28ZJpMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_kB3jcJpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_kB3jcZpMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_kB28YZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_kB1uQJpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kB28YppMEei-GLAJvy8iyw" points="[0, -150, -280, -130]$[280, -90, 0, -70]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kCGM8JpMEei-GLAJvy8iyw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kCGM8ZpMEei-GLAJvy8iyw" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_lRWOUJpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvklppMEei-GLAJvy8iyw" target="_JrvklppMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_lRWOU5pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lRWOVJpMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_lRWOVZpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lRWOVppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_lRWOUZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_lRUZIJpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lRWOUppMEei-GLAJvy8iyw" points="[-130, -4, -130, -4]$[130, -4, 130, -4]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lRvP4JpMEei-GLAJvy8iyw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lRv28JpMEei-GLAJvy8iyw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_l3u44JpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkT5pMEei-GLAJvy8iyw" target="_Jrvkn5pMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_l3vf8JpMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_l3vf8ZpMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_l3vf8ppMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_l3vf85pMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_l3u44ZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_l3tDsJpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_l3u44ppMEei-GLAJvy8iyw" points="[0, -50, 150, -67]$[-280, 10, -130, -7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l4HTYJpMEei-GLAJvy8iyw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l4HTYZpMEei-GLAJvy8iyw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_m7W5EJpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkT5pMEei-GLAJvy8iyw" target="_JrvkS5pMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_m7W5E5pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7W5FJpMEei-GLAJvy8iyw" x="-51" y="-101"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_m7W5FZpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7W5FppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_m7W5EZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_m7Vq8JpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m7W5EppMEei-GLAJvy8iyw" points="[0, 50, 10, 50]$[-10, 71, 0, 71]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m7teYJpMEei-GLAJvy8iyw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m7teYZpMEei-GLAJvy8iyw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_oP308JpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkqJpMEei-GLAJvy8iyw" target="_JrvkuppMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_oP3085pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_oP309JpMEei-GLAJvy8iyw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_oP309ZpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_oP309ppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_oP308ZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_oP2m0JpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oP308ppMEei-GLAJvy8iyw" points="[135, 7, -140, -110]$[135, 67, -140, -50]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oQPoYJpMEei-GLAJvy8iyw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oQPoYZpMEei-GLAJvy8iyw" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_p9Rx8JpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkuppMEei-GLAJvy8iyw" target="_JrvkVJpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_p9Rx85pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_p9Rx9JpMEei-GLAJvy8iyw" x="34" y="-76"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_p9Rx9ZpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_p9Rx9ppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_p9Rx8ZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_p9P8wJpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_p9Rx8ppMEei-GLAJvy8iyw" points="[-140, -50, -280, -100]$[140, 50, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_p9qzgJpMEei-GLAJvy8iyw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_p9qzgZpMEei-GLAJvy8iyw" id="center"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_sy-zwJpMEei-GLAJvy8iyw" type="DurationObservation_Edge" source="_JrvkRppMEei-GLAJvy8iyw" target="_JrvksZpMEei-GLAJvy8iyw"> + <children xmi:type="notation:DecorationNode" xmi:id="_sy-zw5pMEei-GLAJvy8iyw" type="DurationObservation_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_sy-zxJpMEei-GLAJvy8iyw" x="-69" y="41"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_sy-zxZpMEei-GLAJvy8iyw" type="DurationObservation_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_sy-zxppMEei-GLAJvy8iyw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_sy-zwZpMEei-GLAJvy8iyw"/> + <element xmi:type="uml:DurationObservation" href="bug536631-durationLinks.uml#_sy9loJpMEei-GLAJvy8iyw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sy-zwppMEei-GLAJvy8iyw" points="[0, 151, -140, -183]$[280, 330, 140, -4]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_szYcYJpMEei-GLAJvy8iyw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_szYcYZpMEei-GLAJvy8iyw" id="end"/> + </edges> + </notation:Diagram> + <notation:Diagram xmi:id="_aoBs4JsVEeiGQY78R_GwXw" type="PapyrusUMLSequenceDiagram" name="generalOrderingLinksTest" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_aoBs4ZsVEeiGQY78R_GwXw" type="Interaction_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBs4psVEeiGQY78R_GwXw" type="Interaction_NameLabel"/> + <children xmi:type="notation:BasicCompartment" xmi:id="_aoBs45sVEeiGQY78R_GwXw" type="Interaction_SubfragmentCompartment"> + <children xmi:type="notation:Shape" xmi:id="_aoBs5JsVEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBs5ZsVEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_aoBs5psVEeiGQY78R_GwXw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_se9P4JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs55sVEeiGQY78R_GwXw" x="40" y="66" width="20" height="301"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WTEHYJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs6JsVEeiGQY78R_GwXw" x="74" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_aoBs6ZsVEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBs6psVEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_aoBs65sVEeiGQY78R_GwXw" type="BehaviorExecutionSpecification_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBs7JsVEeiGQY78R_GwXw" type="BehaviorExecutionSpecification_Behavior"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBs7ZsVEeiGQY78R_GwXw" x="18" y="18"/> + </children> + <element xmi:type="uml:BehaviorExecutionSpecification" href="bug536631-durationLinks.uml#_tJdlcJodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs7psVEeiGQY78R_GwXw" x="40" y="126" width="20" height="141"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_aoBs75sVEeiGQY78R_GwXw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinks.uml#_7OtB0JodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs8JsVEeiGQY78R_GwXw" x="50" y="146" width="20" height="100"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WfmHgJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs8ZsVEeiGQY78R_GwXw" x="354" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_aoBs8psVEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBs85sVEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_aoBs9JsVEeiGQY78R_GwXw" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug536631-durationLinks.uml#_vlp7EZodEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs9ZsVEeiGQY78R_GwXw" x="40" y="426"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinks.uml#_WmtcIJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs9psVEeiGQY78R_GwXw" x="634" y="10" height="466"/> + </children> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs95sVEeiGQY78R_GwXw"/> + </children> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aoBs-JsVEeiGQY78R_GwXw"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_aoBs-ZsVEeiGQY78R_GwXw" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_aoBs-psVEeiGQY78R_GwXw"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_aoBs-5sVEeiGQY78R_GwXw" diagramKindId="org.eclipse.papyrus.uml.diagram.sequence"> + <owner xmi:type="uml:Model" href="bug536631-durationLinks.uml#_VI4MMJobEei5foLskM0Fzg"/> + </styles> + <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_aoBs_JsVEeiGQY78R_GwXw" name="css_stylesheets" eObjectListValue="_9bFrwJobEei5foLskM0Fzg"/> + <element xmi:type="uml:Interaction" href="bug536631-durationLinks.uml#_VJw9AJobEei5foLskM0Fzg"/> + <edges xmi:type="notation:Connector" xmi:id="_aoBtNpsVEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_aoBs5JsVEeiGQY78R_GwXw" target="_aoBs6ZsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtN5sVEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtOJsVEeiGQY78R_GwXw" x="-43" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtOZsVEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtOpsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_aoBtO5sVEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_t7k-4JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aoBtPJsVEeiGQY78R_GwXw" points="[-10, -2, -290, -20]$[270, 18, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtPZsVEeiGQY78R_GwXw" id="(0.5,0.20857142857142857)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtPpsVEeiGQY78R_GwXw" id="(0.5,0.20857142857142857)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_aoBtP5sVEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_aoBs6ZsVEeiGQY78R_GwXw" target="_aoBs5JsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtQJsVEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtQZsVEeiGQY78R_GwXw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtQpsVEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtQ5sVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_aoBtRJsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_uLZjkJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aoBtRZsVEeiGQY78R_GwXw" points="[-10, -1, 270, -40]$[-290, 39, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtRpsVEeiGQY78R_GwXw" id="(0.5,0.29428571428571426)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtR5sVEeiGQY78R_GwXw" id="(0.5,0.29428571428571426)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_aoBtSJsVEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_aoBs5JsVEeiGQY78R_GwXw" target="_aoBs6ZsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtSZsVEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtSpsVEeiGQY78R_GwXw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtS5sVEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtTJsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_aoBtTZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_ucBZgJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aoBtTpsVEeiGQY78R_GwXw" points="[-10, 9, -290, -100]$[280, 109, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtT5sVEeiGQY78R_GwXw" id="(0.5,0.43714285714285717)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtUJsVEeiGQY78R_GwXw" id="(0.5,0.43714285714285717)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_aoBtUZsVEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_aoBs5JsVEeiGQY78R_GwXw" target="_aoBs6ZsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtUpsVEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtU5sVEeiGQY78R_GwXw" x="-3" y="7"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtVJsVEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtVZsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_aoBtVpsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_u7PFEJodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aoBtV5sVEeiGQY78R_GwXw" points="[0, 0, -280, 0]$[280, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtWJsVEeiGQY78R_GwXw" id="(0.5,0.78)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtWZsVEeiGQY78R_GwXw" id="(0.5,0.78)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_aoBtWpsVEeiGQY78R_GwXw" type="Message_DeleteEdge" source="_aoBs6ZsVEeiGQY78R_GwXw" target="_aoBs8psVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtW5sVEeiGQY78R_GwXw" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtXJsVEeiGQY78R_GwXw" x="-35" y="30"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_aoBtXZsVEeiGQY78R_GwXw" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_aoBtXpsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_aoBtX5sVEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinks.uml#_vlos8JodEei5foLskM0Fzg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aoBtYJsVEeiGQY78R_GwXw" points="[0, 0, -280, -100]$[280, 100, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtYZsVEeiGQY78R_GwXw" id="(0.5,0.5228571428571429)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aoBtYpsVEeiGQY78R_GwXw" id="(0.5,0.9141630901287554)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_eGFIIJsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBs5psVEeiGQY78R_GwXw" target="_aoBs65sVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_eGHkYJsVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_eGHkYZsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_eGFIIZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_eFRP0JsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eGFIIpsVEeiGQY78R_GwXw" points="[0, -150, -280, -130]$[280, -90, 0, -70]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eG5ngJsVEeiGQY78R_GwXw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eG5ngZsVEeiGQY78R_GwXw" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_goHnEJsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBtNpsVEeiGQY78R_GwXw" target="_aoBtNpsVEeiGQY78R_GwXw"> + <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hYHgoJsVEeiGQY78R_GwXw" source="PapyrusCSSForceValue"> + <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hYIHsJsVEeiGQY78R_GwXw" key="routing" value="true"/> + </eAnnotations> + <children xmi:type="notation:DecorationNode" xmi:id="_goIOIJsVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_goIOIZsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_goHnEZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_gnwasJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_goHnEpsVEeiGQY78R_GwXw" points="[-130, -4, -130, -4]$[-70, -36, -70, -36]$[26, -36, 26, -36]$[130, -4, 130, -4]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gobJEJsVEeiGQY78R_GwXw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gobJEZsVEeiGQY78R_GwXw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_nJEyoJsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBs75sVEeiGQY78R_GwXw" target="_aoBtP5sVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_nJFZsJsVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_nJFZsZsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_nJEyoZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_nIxQoJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nJEyopsVEeiGQY78R_GwXw" points="[0, -50, 150, -67]$[-280, 10, -130, -7]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nJUDMJsVEeiGQY78R_GwXw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nJUDMZsVEeiGQY78R_GwXw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_pxrzoJsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBs75sVEeiGQY78R_GwXw" target="_aoBs65sVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_pxrzo5sVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_pxrzpJsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_pxrzoZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_pxZfwJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pxrzopsVEeiGQY78R_GwXw" points="[0, 50, 10, 50]$[40, 50, 50, 50]$[40, 70, 50, 70]$[-10, 71, 0, 71]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_px7rQJsVEeiGQY78R_GwXw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_px7rQZsVEeiGQY78R_GwXw" id="end"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_to3gkJsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBtSJsVEeiGQY78R_GwXw" target="_aoBtWpsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_to4HoJsVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_to4HoZsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_to3gkZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_tolMsJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_to3gkpsVEeiGQY78R_GwXw" points="[135, 7, -140, -110]$[135, 67, -140, -50]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tpH_QJsVEeiGQY78R_GwXw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tpH_QZsVEeiGQY78R_GwXw" id="start"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_vK4F4JsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBtWpsVEeiGQY78R_GwXw" target="_aoBs9JsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_vK4F45sVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_vK4F5JsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_vK4F4ZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_vKlyAJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vK4F4psVEeiGQY78R_GwXw" points="[-140, -50, -280, -100]$[9, -21, -131, -71]$[140, 50, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vLGIUJsVEeiGQY78R_GwXw" id="start"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vLGIUZsVEeiGQY78R_GwXw" id="center"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_wn9H4JsVEeiGQY78R_GwXw" type="GeneralOrdering_Edge" source="_aoBs5psVEeiGQY78R_GwXw" target="_aoBtUZsVEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_wn9H45sVEeiGQY78R_GwXw" type="GeneralOrdering_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_wn9H5JsVEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_wn9H4ZsVEeiGQY78R_GwXw"/> + <element xmi:type="uml:GeneralOrdering" href="bug536631-durationLinks.uml#_wnq0AJsVEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wn9H4psVEeiGQY78R_GwXw" points="[0, 151, -140, -183]$[280, 330, 140, -4]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_woLxYJsVEeiGQY78R_GwXw" id="end"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_woMYcJsVEeiGQY78R_GwXw" id="end"/> + </edges> + </notation:Diagram> +</xmi:XMI> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.uml b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.uml new file mode 100644 index 00000000000..14b9ea2f875 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinks.uml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_VI4MMJobEei5foLskM0Fzg" name="durationLinksTest"> + <packageImport xmi:type="uml:PackageImport" xmi:id="_VQ4RoJobEei5foLskM0Fzg"> + <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/> + </packageImport> + <packagedElement xmi:type="uml:Interaction" xmi:id="_VJw9AJobEei5foLskM0Fzg" name="Interaction1"> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="_9t4aAJodEei5foLskM0Fzg" name="DurationConstraint1" constrainedElement="_se-eAJodEei5foLskM0Fzg _tJeMgJodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="_9t5BEJodEei5foLskM0Fzg" max="_9t5oIZodEei5foLskM0Fzg" min="_9t5oIJodEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="__GADgJodEei5foLskM0Fzg" name="DurationConstraint2" constrainedElement="_t7ll8JodEei5foLskM0Fzg _t7mNAJodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="__GAqkJodEei5foLskM0Fzg" max="__GBRoZodEei5foLskM0Fzg" min="__GBRoJodEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="__-bgUJodEei5foLskM0Fzg" name="DurationConstraint3" constrainedElement="_7OuP8JodEei5foLskM0Fzg _uLaxsJodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="__-cHYJodEei5foLskM0Fzg" max="__-cucZodEei5foLskM0Fzg" min="__-cucJodEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="_A19lQJoeEei5foLskM0Fzg" name="DurationConstraint4" constrainedElement="_7OuP8ZodEei5foLskM0Fzg _tJeMgZodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="_A1-zYJoeEei5foLskM0Fzg" max="_A1-zYpoeEei5foLskM0Fzg" min="_A1-zYZoeEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="_CAI5YJoeEei5foLskM0Fzg" name="DurationConstraint5" constrainedElement="_ucCAkJodEei5foLskM0Fzg _vlp7EJodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="_CAJgcJoeEei5foLskM0Fzg" max="_CAJgcpoeEei5foLskM0Fzg" min="_CAJgcZoeEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="_DT-f0JoeEei5foLskM0Fzg" name="DurationConstraint6" constrainedElement="_vlp7EJodEei5foLskM0Fzg _vlp7EZodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="_DT_t8JoeEei5foLskM0Fzg" max="_DUAVAJoeEei5foLskM0Fzg" min="_DT_t8ZoeEei5foLskM0Fzg"/> + </ownedRule> + <ownedRule xmi:type="uml:DurationConstraint" xmi:id="_E9YGkJoeEei5foLskM0Fzg" name="DurationConstraint7" constrainedElement="_se_FEJodEei5foLskM0Fzg _u7QTMZodEei5foLskM0Fzg"> + <specification xmi:type="uml:DurationInterval" xmi:id="_E9YtoJoeEei5foLskM0Fzg" max="_E9YtopoeEei5foLskM0Fzg" min="_E9YtoZoeEei5foLskM0Fzg"/> + </ownedRule> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_eFRP0JsVEeiGQY78R_GwXw" name="GeneralOrdering1" after="_tJeMgJodEei5foLskM0Fzg" before="_se-eAJodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_gnwasJsVEeiGQY78R_GwXw" name="GeneralOrdering2" after="_t7mNAJodEei5foLskM0Fzg" before="_t7ll8JodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_nIxQoJsVEeiGQY78R_GwXw" name="GeneralOrdering3" after="_uLaxsJodEei5foLskM0Fzg" before="_7OuP8JodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_pxZfwJsVEeiGQY78R_GwXw" name="GeneralOrdering4" after="_tJeMgZodEei5foLskM0Fzg" before="_7OuP8ZodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_tolMsJsVEeiGQY78R_GwXw" name="GeneralOrdering5" after="_vlp7EJodEei5foLskM0Fzg" before="_ucCAkJodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_vKlyAJsVEeiGQY78R_GwXw" name="GeneralOrdering6" after="_vlp7EZodEei5foLskM0Fzg" before="_vlp7EJodEei5foLskM0Fzg"/> + <generalOrdering xmi:type="uml:GeneralOrdering" xmi:id="_wnq0AJsVEeiGQY78R_GwXw" name="GeneralOrdering7" after="_u7QTMZodEei5foLskM0Fzg" before="_se_FEJodEei5foLskM0Fzg"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_WTEHYJobEei5foLskM0Fzg" name="Lifeline1" coveredBy="_se-eAJodEei5foLskM0Fzg _se9P4JodEei5foLskM0Fzg _t7ll8JodEei5foLskM0Fzg _uLaxsJodEei5foLskM0Fzg _ucBZgZodEei5foLskM0Fzg _se_FEJodEei5foLskM0Fzg _u7QTMJodEei5foLskM0Fzg"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_WfmHgJobEei5foLskM0Fzg" name="Lifeline2" coveredBy="_tJeMgJodEei5foLskM0Fzg _tJdlcJodEei5foLskM0Fzg _7OuP8JodEei5foLskM0Fzg _7OtB0JodEei5foLskM0Fzg _t7mNAJodEei5foLskM0Fzg _uLaKoJodEei5foLskM0Fzg _7OuP8ZodEei5foLskM0Fzg _tJeMgZodEei5foLskM0Fzg _ucCAkJodEei5foLskM0Fzg _vlp7EJodEei5foLskM0Fzg _u7QTMZodEei5foLskM0Fzg"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_WmtcIJobEei5foLskM0Fzg" name="Lifeline3" coveredBy="_vlp7EZodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_se-eAJodEei5foLskM0Fzg" name="ActionExecutionSpecification1Start" covered="_WTEHYJobEei5foLskM0Fzg" toAfter="_eFRP0JsVEeiGQY78R_GwXw" execution="_se9P4JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ActionExecutionSpecification" xmi:id="_se9P4JodEei5foLskM0Fzg" name="ActionExecutionSpecification1" covered="_WTEHYJobEei5foLskM0Fzg" finish="_se_FEJodEei5foLskM0Fzg" start="_se-eAJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_tJeMgJodEei5foLskM0Fzg" name="BehaviorExecutionSpecification2Start" covered="_WfmHgJobEei5foLskM0Fzg" toBefore="_eFRP0JsVEeiGQY78R_GwXw" execution="_tJdlcJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:BehaviorExecutionSpecification" xmi:id="_tJdlcJodEei5foLskM0Fzg" name="BehaviorExecutionSpecification2" covered="_WfmHgJobEei5foLskM0Fzg" finish="_tJeMgZodEei5foLskM0Fzg" start="_tJeMgJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_t7ll8JodEei5foLskM0Fzg" name="Message1SendEvent" covered="_WTEHYJobEei5foLskM0Fzg" toAfter="_gnwasJsVEeiGQY78R_GwXw" message="_t7k-4JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_7OuP8JodEei5foLskM0Fzg" name="ActionExecutionSpecification3Start" covered="_WfmHgJobEei5foLskM0Fzg" toAfter="_nIxQoJsVEeiGQY78R_GwXw" execution="_7OtB0JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ActionExecutionSpecification" xmi:id="_7OtB0JodEei5foLskM0Fzg" name="ActionExecutionSpecification3" covered="_WfmHgJobEei5foLskM0Fzg" finish="_7OuP8ZodEei5foLskM0Fzg" start="_7OuP8JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_t7mNAJodEei5foLskM0Fzg" name="Message1ReceiveEvent" covered="_WfmHgJobEei5foLskM0Fzg" toBefore="_gnwasJsVEeiGQY78R_GwXw" message="_t7k-4JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_uLaKoJodEei5foLskM0Fzg" name="Message2SendEvent" covered="_WfmHgJobEei5foLskM0Fzg" message="_uLZjkJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_uLaxsJodEei5foLskM0Fzg" name="Message2ReceiveEvent" covered="_WTEHYJobEei5foLskM0Fzg" toBefore="_nIxQoJsVEeiGQY78R_GwXw" message="_uLZjkJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_7OuP8ZodEei5foLskM0Fzg" name="ActionExecutionSpecification3Finish" covered="_WfmHgJobEei5foLskM0Fzg" toAfter="_pxZfwJsVEeiGQY78R_GwXw" execution="_7OtB0JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_tJeMgZodEei5foLskM0Fzg" name="BehaviorExecutionSpecification2Finish" covered="_WfmHgJobEei5foLskM0Fzg" toBefore="_pxZfwJsVEeiGQY78R_GwXw" execution="_tJdlcJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_ucBZgZodEei5foLskM0Fzg" name="Message3SendEvent" covered="_WTEHYJobEei5foLskM0Fzg" message="_ucBZgJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_ucCAkJodEei5foLskM0Fzg" name="Message3ReceiveEvent" covered="_WfmHgJobEei5foLskM0Fzg" toAfter="_tolMsJsVEeiGQY78R_GwXw" message="_ucBZgJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_vlp7EJodEei5foLskM0Fzg" name="Message5SendEvent" covered="_WfmHgJobEei5foLskM0Fzg" toAfter="_vKlyAJsVEeiGQY78R_GwXw" toBefore="_tolMsJsVEeiGQY78R_GwXw" message="_vlos8JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_se_FEJodEei5foLskM0Fzg" name="ActionExecutionSpecification1Finish" covered="_WTEHYJobEei5foLskM0Fzg" toAfter="_wnq0AJsVEeiGQY78R_GwXw" execution="_se9P4JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:DestructionOccurrenceSpecification" xmi:id="_vlp7EZodEei5foLskM0Fzg" name="Message5ReceiveDestroyEvent" covered="_WmtcIJobEei5foLskM0Fzg" toBefore="_vKlyAJsVEeiGQY78R_GwXw" message="_vlos8JodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_u7QTMJodEei5foLskM0Fzg" name="Message4SendEvent" covered="_WTEHYJobEei5foLskM0Fzg" message="_u7PFEJodEei5foLskM0Fzg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_u7QTMZodEei5foLskM0Fzg" name="Message4ReceiveEvent" covered="_WfmHgJobEei5foLskM0Fzg" toBefore="_wnq0AJsVEeiGQY78R_GwXw" message="_u7PFEJodEei5foLskM0Fzg"/> + <message xmi:type="uml:Message" xmi:id="_t7k-4JodEei5foLskM0Fzg" name="Message1" messageSort="asynchCall" receiveEvent="_t7mNAJodEei5foLskM0Fzg" sendEvent="_t7ll8JodEei5foLskM0Fzg"/> + <message xmi:type="uml:Message" xmi:id="_uLZjkJodEei5foLskM0Fzg" name="Message2" messageSort="asynchCall" receiveEvent="_uLaxsJodEei5foLskM0Fzg" sendEvent="_uLaKoJodEei5foLskM0Fzg"/> + <message xmi:type="uml:Message" xmi:id="_ucBZgJodEei5foLskM0Fzg" name="Message3" messageSort="asynchCall" receiveEvent="_ucCAkJodEei5foLskM0Fzg" sendEvent="_ucBZgZodEei5foLskM0Fzg"/> + <message xmi:type="uml:Message" xmi:id="_u7PFEJodEei5foLskM0Fzg" name="Message4" messageSort="asynchCall" receiveEvent="_u7QTMZodEei5foLskM0Fzg" sendEvent="_u7QTMJodEei5foLskM0Fzg"/> + <message xmi:type="uml:Message" xmi:id="_vlos8JodEei5foLskM0Fzg" name="Message5" messageSort="deleteMessage" receiveEvent="_vlp7EZodEei5foLskM0Fzg" sendEvent="_vlp7EJodEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_9t5oIJodEei5foLskM0Fzg" name="MinDuration1"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_9t5oIpodEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_9t5oIZodEei5foLskM0Fzg" name="MaxDuration1"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_9t5oI5odEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="__GBRoJodEei5foLskM0Fzg" name="MinDuration2"> + <expr xmi:type="uml:LiteralInteger" xmi:id="__GBRopodEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="__GBRoZodEei5foLskM0Fzg" name="MaxDuration2"> + <expr xmi:type="uml:LiteralInteger" xmi:id="__GBRo5odEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="__-cucJodEei5foLskM0Fzg" name="MinDuration3"> + <expr xmi:type="uml:LiteralInteger" xmi:id="__-cucpodEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="__-cucZodEei5foLskM0Fzg" name="MaxDuration3"> + <expr xmi:type="uml:LiteralInteger" xmi:id="__-cuc5odEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_A1-zYZoeEei5foLskM0Fzg" name="MinDuration4"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_A1-zY5oeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_A1-zYpoeEei5foLskM0Fzg" name="MaxDuration4"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_A1-zZJoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_CAJgcZoeEei5foLskM0Fzg" name="MinDuration5"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_CAJgc5oeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_CAJgcpoeEei5foLskM0Fzg" name="MaxDuration5"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_CAJgdJoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_DT_t8ZoeEei5foLskM0Fzg" name="MinDuration6"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_DUAVAZoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_DUAVAJoeEei5foLskM0Fzg" name="MaxDuration6"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_DUAVApoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_E9YtoZoeEei5foLskM0Fzg" name="MinDuration7"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_E9ZUsJoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:Duration" xmi:id="_E9YtopoeEei5foLskM0Fzg" name="MaxDuration7"> + <expr xmi:type="uml:LiteralInteger" xmi:id="_E9ZUsZoeEei5foLskM0Fzg"/> + </packagedElement> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_kB1uQJpMEei-GLAJvy8iyw" name="DurationObservation1" event="_se-eAJodEei5foLskM0Fzg _tJeMgJodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_lRUZIJpMEei-GLAJvy8iyw" name="DurationObservation2" event="_t7ll8JodEei5foLskM0Fzg _t7mNAJodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_l3tDsJpMEei-GLAJvy8iyw" name="DurationObservation3" event="_7OuP8JodEei5foLskM0Fzg _uLaxsJodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_m7Vq8JpMEei-GLAJvy8iyw" name="DurationObservation4" event="_7OuP8ZodEei5foLskM0Fzg _tJeMgZodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_oP2m0JpMEei-GLAJvy8iyw" name="DurationObservation5" event="_ucCAkJodEei5foLskM0Fzg _vlp7EJodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_p9P8wJpMEei-GLAJvy8iyw" name="DurationObservation6" event="_vlp7EJodEei5foLskM0Fzg _vlp7EZodEei5foLskM0Fzg"/> + <packagedElement xmi:type="uml:DurationObservation" xmi:id="_sy9loJpMEei-GLAJvy8iyw" name="DurationObservation7" event="_se_FEJodEei5foLskM0Fzg _u7QTMZodEei5foLskM0Fzg"/> +</uml:Model> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.di b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.di new file mode 100644 index 00000000000..8c549eecdc6 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.di @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.infra.services.edit.TypeContext"/> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.notation b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.notation new file mode 100644 index 00000000000..b6533625ca4 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.notation @@ -0,0 +1,116 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML"> + <notation:Diagram xmi:id="_nHl9MJsbEeiGQY78R_GwXw" type="PapyrusUMLSequenceDiagram" name="durationLinksCreation" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_nHl9MZsbEeiGQY78R_GwXw" type="Interaction_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_nHl9MpsbEeiGQY78R_GwXw" type="Interaction_NameLabel"/> + <children xmi:type="notation:BasicCompartment" xmi:id="_nHl9M5sbEeiGQY78R_GwXw" type="Interaction_SubfragmentCompartment"> + <children xmi:type="notation:Shape" xmi:id="_q4xv0JsbEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_q4xv0psbEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_uoMA0JsbEeiGQY78R_GwXw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinksCreation.uml#_uoF6MJsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uoMA0ZsbEeiGQY78R_GwXw" x="40" y="86" width="20" height="261"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinksCreation.uml#_q4usgJsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_q4xv0ZsbEeiGQY78R_GwXw" x="34" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_q-WMUJsbEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_q-WMUpsbEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_4AdXwJsbEeiGQY78R_GwXw" type="BehaviorExecutionSpecification_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_4Ad-0ZsbEeiGQY78R_GwXw" type="BehaviorExecutionSpecification_Behavior"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_4Ad-0psbEeiGQY78R_GwXw" x="18" y="18"/> + </children> + <element xmi:type="uml:BehaviorExecutionSpecification" href="bug536631-durationLinksCreation.uml#_4AU04JsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4Ad-0JsbEeiGQY78R_GwXw" x="40" y="146" width="20" height="100"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_E1H9EJscEeiGQY78R_GwXw" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug536631-durationLinksCreation.uml#_E07IwJscEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E1H9EZscEeiGQY78R_GwXw" x="40" y="386" width="20" height="100"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinksCreation.uml#_q-TwEJsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_q-WMUZsbEeiGQY78R_GwXw" x="274" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_rSkI0JsbEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_rSkI0psbEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_5eSocJuvEeiGQY78R_GwXw" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug536631-durationLinksCreation.uml#_5auXEJuvEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5eSocZuvEeiGQY78R_GwXw" x="40" y="366"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinksCreation.uml#_rSgecJsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rSkI0ZsbEeiGQY78R_GwXw" x="514" y="10" height="406"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_ra2iIJsbEeiGQY78R_GwXw" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_ra2iIpsbEeiGQY78R_GwXw" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_tcJrgJsbEeiGQY78R_GwXw" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug536631-durationLinksCreation.uml#_tb0UUZsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tcJrgZsbEeiGQY78R_GwXw" x="40" y="286"/> + </children> + <element xmi:type="uml:Lifeline" href="bug536631-durationLinksCreation.uml#_raze0JsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ra2iIZsbEeiGQY78R_GwXw" x="794" y="10" height="326"/> + </children> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nHl9NJsbEeiGQY78R_GwXw"/> + </children> + <element xmi:type="uml:Interaction" href="bug536631-durationLinksCreation.uml#_nHeocJsbEeiGQY78R_GwXw"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nHl9NZsbEeiGQY78R_GwXw"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_nHl9NpsbEeiGQY78R_GwXw" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_nHl9N5sbEeiGQY78R_GwXw"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_nHl9OJsbEeiGQY78R_GwXw" diagramKindId="org.eclipse.papyrus.uml.diagram.sequence"> + <owner xmi:type="uml:Model" href="bug536631-durationLinksCreation.uml#_nG8c8JsbEeiGQY78R_GwXw"/> + </styles> + <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_EleasJsgEeiGQY78R_GwXw" name="css_stylesheets" eObjectListValue="_ElaJQJsgEeiGQY78R_GwXw"/> + <element xmi:type="uml:Interaction" href="bug536631-durationLinksCreation.uml#_nHeocJsbEeiGQY78R_GwXw"/> + <edges xmi:type="notation:Connector" xmi:id="_tb7CAJsbEeiGQY78R_GwXw" type="Message_DeleteEdge" source="_rSkI0JsbEeiGQY78R_GwXw" target="_ra2iIJsbEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_tb7CA5sbEeiGQY78R_GwXw" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_tb7CBJsbEeiGQY78R_GwXw" x="29" y="-33"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_tb7CBZsbEeiGQY78R_GwXw" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_tb7CBpsbEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_tb7CAZsbEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinksCreation.uml#_tbzGMJsbEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tb7CApsbEeiGQY78R_GwXw" points="[0, 0, -280, -100]$[280, 100, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tcEL8JsbEeiGQY78R_GwXw" id="(0.5,0.5566502463054186)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tcEL8ZsbEeiGQY78R_GwXw" id="(0.5,1.0)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_5n8S8JsbEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_q4xv0JsbEeiGQY78R_GwXw" target="_q-WMUJsbEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_5n8S85sbEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5n8S9JsbEeiGQY78R_GwXw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_5n8S9ZsbEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5n8S9psbEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_5n8S8ZsbEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinksCreation.uml#_5n2zYJsbEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5n8S8psbEeiGQY78R_GwXw" points="[0, 0, -240, 0]$[240, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5oGD8JsbEeiGQY78R_GwXw" id="(0.5,0.78)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5oGrAJsbEeiGQY78R_GwXw" id="(0.5,0.78)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_54kv8JsbEeiGQY78R_GwXw" type="Message_AsynchEdge" source="_q-WMUJsbEeiGQY78R_GwXw" target="_q4xv0JsbEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_54lXAJsbEeiGQY78R_GwXw" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_54lXAZsbEeiGQY78R_GwXw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_54lXApsbEeiGQY78R_GwXw" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_54lXA5sbEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_54kv8ZsbEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinksCreation.uml#_54Zw0JsbEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_54kv8psbEeiGQY78R_GwXw" points="[0, 0, 240, 0]$[-240, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_55Lz8JsbEeiGQY78R_GwXw" id="(0.5,0.8942857142857142)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_55Lz8ZsbEeiGQY78R_GwXw" id="(0.5,0.8942857142857142)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_5d2jkJuvEeiGQY78R_GwXw" type="Message_DeleteEdge" source="_q-WMUJsbEeiGQY78R_GwXw" target="_rSkI0JsbEeiGQY78R_GwXw"> + <children xmi:type="notation:DecorationNode" xmi:id="_5d2jk5uvEeiGQY78R_GwXw" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5d3KoJuvEeiGQY78R_GwXw" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_5d3KoZuvEeiGQY78R_GwXw" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5d3KopuvEeiGQY78R_GwXw" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_5d2jkZuvEeiGQY78R_GwXw"/> + <element xmi:type="uml:Message" href="bug536631-durationLinksCreation.uml#_5ar60JuvEeiGQY78R_GwXw"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5d2jkpuvEeiGQY78R_GwXw" points="[0, 0, -240, -120]$[240, 120, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5eHpUJuvEeiGQY78R_GwXw" id="(0.5,0.4085714285714286)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5eHpUZuvEeiGQY78R_GwXw" id="(0.5,1.0)"/> + </edges> + </notation:Diagram> + <css:StyleSheetReference xmi:id="_ElaJQJsgEeiGQY78R_GwXw" path="/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/style.css"/> +</xmi:XMI> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.uml b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.uml new file mode 100644 index 00000000000..0a7cdae9ea9 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug536631-durationLinksCreation.uml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_nG8c8JsbEeiGQY78R_GwXw" name="durationLinksCreation"> + <packageImport xmi:type="uml:PackageImport" xmi:id="_nLnhkJsbEeiGQY78R_GwXw"> + <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/> + </packageImport> + <packagedElement xmi:type="uml:Interaction" xmi:id="_nHeocJsbEeiGQY78R_GwXw" name="Interaction1"> + <lifeline xmi:type="uml:Lifeline" xmi:id="_q4usgJsbEeiGQY78R_GwXw" name="Lifeline1" coveredBy="_uoHvYJsbEeiGQY78R_GwXw _uoF6MJsbEeiGQY78R_GwXw _uoHvYZsbEeiGQY78R_GwXw _5n4BgJsbEeiGQY78R_GwXw _54aX4ZsbEeiGQY78R_GwXw"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_q-TwEJsbEeiGQY78R_GwXw" name="Lifeline2" coveredBy="_4AWDAJsbEeiGQY78R_GwXw _4AU04JsbEeiGQY78R_GwXw _5atwAJuvEeiGQY78R_GwXw _E0898JscEeiGQY78R_GwXw _E07IwJscEeiGQY78R_GwXw _E09lAJscEeiGQY78R_GwXw _5n4BgZsbEeiGQY78R_GwXw _54aX4JsbEeiGQY78R_GwXw"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_rSgecJsbEeiGQY78R_GwXw" name="Lifeline3" coveredBy="_tb0UUJsbEeiGQY78R_GwXw _5auXEJuvEeiGQY78R_GwXw"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_raze0JsbEeiGQY78R_GwXw" name="Lifeline4" coveredBy="_tb0UUZsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_uoHvYJsbEeiGQY78R_GwXw" name="ActionExecutionSpecification1Start" covered="_q4usgJsbEeiGQY78R_GwXw" execution="_uoF6MJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ActionExecutionSpecification" xmi:id="_uoF6MJsbEeiGQY78R_GwXw" name="ActionExecutionSpecification1" covered="_q4usgJsbEeiGQY78R_GwXw" finish="_uoHvYZsbEeiGQY78R_GwXw" start="_uoHvYJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_4AWDAJsbEeiGQY78R_GwXw" name="BehaviorExecutionSpecification2Start" covered="_q-TwEJsbEeiGQY78R_GwXw" execution="_4AU04JsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:BehaviorExecutionSpecification" xmi:id="_4AU04JsbEeiGQY78R_GwXw" name="BehaviorExecutionSpecification2" covered="_q-TwEJsbEeiGQY78R_GwXw" finish="_5atwAJuvEeiGQY78R_GwXw" start="_4AWDAJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_tb0UUJsbEeiGQY78R_GwXw" name="Message2SendEvent" covered="_rSgecJsbEeiGQY78R_GwXw" message="_tbzGMJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_5atwAJuvEeiGQY78R_GwXw" name="Message1SendEvent" covered="_q-TwEJsbEeiGQY78R_GwXw" message="_5ar60JuvEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:DestructionOccurrenceSpecification" xmi:id="_tb0UUZsbEeiGQY78R_GwXw" name="Message2ReceiveDestroyEvent" covered="_raze0JsbEeiGQY78R_GwXw" message="_tbzGMJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_uoHvYZsbEeiGQY78R_GwXw" name="ActionExecutionSpecification1Finish" covered="_q4usgJsbEeiGQY78R_GwXw" execution="_uoF6MJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_E0898JscEeiGQY78R_GwXw" name="ActionExecutionSpecification3Start" covered="_q-TwEJsbEeiGQY78R_GwXw" execution="_E07IwJscEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ActionExecutionSpecification" xmi:id="_E07IwJscEeiGQY78R_GwXw" name="ActionExecutionSpecification3" covered="_q-TwEJsbEeiGQY78R_GwXw" finish="_E09lAJscEeiGQY78R_GwXw" start="_E0898JscEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:DestructionOccurrenceSpecification" xmi:id="_5auXEJuvEeiGQY78R_GwXw" name="Message1ReceiveDestroyEvent" covered="_rSgecJsbEeiGQY78R_GwXw" message="_5ar60JuvEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_E09lAJscEeiGQY78R_GwXw" name="ActionExecutionSpecification3Finish" covered="_q-TwEJsbEeiGQY78R_GwXw" execution="_E07IwJscEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_5n4BgJsbEeiGQY78R_GwXw" name="Message3SendEvent" covered="_q4usgJsbEeiGQY78R_GwXw" message="_5n2zYJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_5n4BgZsbEeiGQY78R_GwXw" name="Message3ReceiveEvent" covered="_q-TwEJsbEeiGQY78R_GwXw" message="_5n2zYJsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_54aX4JsbEeiGQY78R_GwXw" name="Message4SendEvent" covered="_q-TwEJsbEeiGQY78R_GwXw" message="_54Zw0JsbEeiGQY78R_GwXw"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_54aX4ZsbEeiGQY78R_GwXw" name="Message4ReceiveEvent" covered="_q4usgJsbEeiGQY78R_GwXw" message="_54Zw0JsbEeiGQY78R_GwXw"/> + <message xmi:type="uml:Message" xmi:id="_tbzGMJsbEeiGQY78R_GwXw" name="Message2" messageSort="deleteMessage" receiveEvent="_tb0UUZsbEeiGQY78R_GwXw" sendEvent="_tb0UUJsbEeiGQY78R_GwXw"/> + <message xmi:type="uml:Message" xmi:id="_5n2zYJsbEeiGQY78R_GwXw" name="Message3" messageSort="asynchCall" receiveEvent="_5n4BgZsbEeiGQY78R_GwXw" sendEvent="_5n4BgJsbEeiGQY78R_GwXw"/> + <message xmi:type="uml:Message" xmi:id="_54Zw0JsbEeiGQY78R_GwXw" name="Message4" messageSort="asynchCall" receiveEvent="_54aX4ZsbEeiGQY78R_GwXw" sendEvent="_54aX4JsbEeiGQY78R_GwXw"/> + <message xmi:type="uml:Message" xmi:id="_5ar60JuvEeiGQY78R_GwXw" name="Message1" messageSort="deleteMessage" receiveEvent="_5auXEJuvEeiGQY78R_GwXw" sendEvent="_5atwAJuvEeiGQY78R_GwXw"/> + </packagedElement> +</uml:Model> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.di b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.di new file mode 100644 index 00000000000..8c549eecdc6 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.di @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.infra.services.edit.TypeContext"/> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.notation b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.notation new file mode 100644 index 00000000000..32cf86dacdc --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.notation @@ -0,0 +1,497 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML"> + <notation:Diagram xmi:id="_Oy700LVZEeiUzZPp6fDTcg" type="PapyrusUMLClassDiagram" name="Class Diagram" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_QodzELVZEeiUzZPp6fDTcg" type="Class_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_QotqsLVZEeiUzZPp6fDTcg" type="Class_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_QouRwLVZEeiUzZPp6fDTcg" type="Class_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_QouRwbVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_QowuALVZEeiUzZPp6fDTcg" type="Class_AttributeCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_QowuAbVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_QowuArVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_QowuA7VZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QowuBLVZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_QoxVELVZEeiUzZPp6fDTcg" type="Class_OperationCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_QoxVEbVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_QoxVErVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_QoxVE7VZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QoxVFLVZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_QoxVFbVZEeiUzZPp6fDTcg" type="Class_NestedClassifierCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_QoxVFrVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_QoxVF7VZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_QoxVGLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QoxVGbVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Class" href="bug537571-times.uml#_QoSz8LVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QodzEbVZEeiUzZPp6fDTcg" x="60" y="80"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_R0FRoLVZEeiUzZPp6fDTcg" type="Class_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_R0F4sbVZEeiUzZPp6fDTcg" type="Class_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_R0F4srVZEeiUzZPp6fDTcg" type="Class_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_R0F4s7VZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_R0F4tLVZEeiUzZPp6fDTcg" type="Class_AttributeCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_R0F4tbVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_R0F4trVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_R0F4t7VZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R0F4uLVZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_R0F4ubVZEeiUzZPp6fDTcg" type="Class_OperationCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_R0F4urVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_R0F4u7VZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_R0F4vLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R0F4vbVZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_R0F4vrVZEeiUzZPp6fDTcg" type="Class_NestedClassifierCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_R0F4v7VZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_R0F4wLVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_R0F4wbVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R0F4wrVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Class" href="bug537571-times.uml#_R0COULVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R0F4sLVZEeiUzZPp6fDTcg" x="260" y="80"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_SerGwLVZEeiUzZPp6fDTcg" type="Class_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_Sert0LVZEeiUzZPp6fDTcg" type="Class_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_Sert0bVZEeiUzZPp6fDTcg" type="Class_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_Sert0rVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_Sert07VZEeiUzZPp6fDTcg" type="Class_AttributeCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_Sert1LVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_Sert1bVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_Sert1rVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Sert17VZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_Sert2LVZEeiUzZPp6fDTcg" type="Class_OperationCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_Sert2bVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_Sert2rVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_Sert27VZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Sert3LVZEeiUzZPp6fDTcg"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_Sert3bVZEeiUzZPp6fDTcg" type="Class_NestedClassifierCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_Sert3rVZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_Sert37VZEeiUzZPp6fDTcg"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_Sert4LVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Sert4bVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Class" href="bug537571-times.uml#_SepRkLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SerGwbVZEeiUzZPp6fDTcg" x="460" y="80"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_T7nBgLt9EeiBPK1YjKozYQ" type="Class_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_T7nokLt9EeiBPK1YjKozYQ" type="Class_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_T7nokbt9EeiBPK1YjKozYQ" type="Class_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_T7nokrt9EeiBPK1YjKozYQ" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_T7nok7t9EeiBPK1YjKozYQ" type="Class_AttributeCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_T7nolLt9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_T7nolbt9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_T7nolrt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T7nol7t9EeiBPK1YjKozYQ"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_T7nomLt9EeiBPK1YjKozYQ" type="Class_OperationCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_T7nombt9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_T7nomrt9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_T7nom7t9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T7nonLt9EeiBPK1YjKozYQ"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_T7nonbt9EeiBPK1YjKozYQ" type="Class_NestedClassifierCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_T7nonrt9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:SortingStyle" xmi:id="_T7non7t9EeiBPK1YjKozYQ"/> + <styles xmi:type="notation:FilteringStyle" xmi:id="_T7nooLt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T7noobt9EeiBPK1YjKozYQ"/> + </children> + <element xmi:type="uml:Class" href="bug537571-times.uml#_T7POELt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T7nBgbt9EeiBPK1YjKozYQ" x="260" y="280"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_Oy700bVZEeiUzZPp6fDTcg" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_Oy700rVZEeiUzZPp6fDTcg"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_Oy7007VZEeiUzZPp6fDTcg" diagramKindId="org.eclipse.papyrus.uml.diagram.class"> + <owner xmi:type="uml:Model" href="bug537571-times.uml#_Ow1jELVZEeiUzZPp6fDTcg"/> + </styles> + <element xmi:type="uml:Model" href="bug537571-times.uml#_Ow1jELVZEeiUzZPp6fDTcg"/> + <edges xmi:type="notation:Connector" xmi:id="_TfYV0LVZEeiUzZPp6fDTcg" type="Association_Edge" source="_QodzELVZEeiUzZPp6fDTcg" target="_R0FRoLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_TfYV07VZEeiUzZPp6fDTcg" type="Association_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfYV1LVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_TfYV1bVZEeiUzZPp6fDTcg" type="Association_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfYV1rVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_TfY84LVZEeiUzZPp6fDTcg" type="Association_TargetRoleLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfY84bVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_TfY84rVZEeiUzZPp6fDTcg" type="Association_SourceRoleLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfY847VZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_TfY85LVZEeiUzZPp6fDTcg" type="Association_SourceMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfY85bVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_TfY85rVZEeiUzZPp6fDTcg" type="Association_TargetMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_TfY857VZEeiUzZPp6fDTcg" y="-20"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_TfYV0bVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Association" href="bug537571-times.uml#_TfGpALVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TfYV0rVZEeiUzZPp6fDTcg" points="[160, 100, -643984, -643984]$[260, 100, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TgiMYLVZEeiUzZPp6fDTcg" id="(1.0,0.2)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TgiMYbVZEeiUzZPp6fDTcg" id="(0.0,0.2)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_UG5o0LVZEeiUzZPp6fDTcg" type="Association_Edge" source="_R0FRoLVZEeiUzZPp6fDTcg" target="_SerGwLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o07VZEeiUzZPp6fDTcg" type="Association_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o1LVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o1bVZEeiUzZPp6fDTcg" type="Association_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o1rVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o17VZEeiUzZPp6fDTcg" type="Association_TargetRoleLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o2LVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o2bVZEeiUzZPp6fDTcg" type="Association_SourceRoleLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o2rVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o27VZEeiUzZPp6fDTcg" type="Association_SourceMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o3LVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_UG5o3bVZEeiUzZPp6fDTcg" type="Association_TargetMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_UG5o3rVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_UG5o0bVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Association" href="bug537571-times.uml#_UGuCoLVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UG5o0rVZEeiUzZPp6fDTcg" points="[360, 100, -643984, -643984]$[460, 100, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UHYJ8LVZEeiUzZPp6fDTcg" id="(1.0,0.2)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UHYJ8bVZEeiUzZPp6fDTcg" id="(0.0,0.2)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_VQDE4Lt9EeiBPK1YjKozYQ" type="Association_Edge" source="_SerGwLVZEeiUzZPp6fDTcg" target="_T7nBgLt9EeiBPK1YjKozYQ" routing="Rectilinear"> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE47t9EeiBPK1YjKozYQ" type="Association_StereotypeLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Xe2ewLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE5Lt9EeiBPK1YjKozYQ" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE5bt9EeiBPK1YjKozYQ" type="Association_NameLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Xe-akLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE5rt9EeiBPK1YjKozYQ" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE57t9EeiBPK1YjKozYQ" type="Association_TargetRoleLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_XfGWYLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE6Lt9EeiBPK1YjKozYQ" x="39" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE6bt9EeiBPK1YjKozYQ" type="Association_SourceRoleLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_XfO5QLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE6rt9EeiBPK1YjKozYQ" x="-39" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE67t9EeiBPK1YjKozYQ" type="Association_SourceMultiplicityLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_XfWOALt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE7Lt9EeiBPK1YjKozYQ" x="39" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_VQDE7bt9EeiBPK1YjKozYQ" type="Association_TargetMultiplicityLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Xfh0MLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_VQDE7rt9EeiBPK1YjKozYQ" x="-39" y="-20"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_VQDE4bt9EeiBPK1YjKozYQ"/> + <element xmi:type="uml:Association" href="bug537571-times.uml#_VPx_ILt9EeiBPK1YjKozYQ"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VQDE4rt9EeiBPK1YjKozYQ" points="[500, 180, -643984, -643984]$[500, 300, -643984, -643984]$[360, 300, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VQeisLt9EeiBPK1YjKozYQ" id="(0.4,1.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VQeisbt9EeiBPK1YjKozYQ" id="(1.0,0.2)"/> + </edges> + </notation:Diagram> + <notation:Diagram xmi:id="_ikWw4LVZEeiUzZPp6fDTcg" type="CompositeStructure" name="structure" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_ikYmELVZEeiUzZPp6fDTcg" type="Collaboration_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_ikYmErVZEeiUzZPp6fDTcg" type="Collaboration_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_ikYmE7VZEeiUzZPp6fDTcg" type="Collaboration_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ikYmFLVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_ikYmFbVZEeiUzZPp6fDTcg" type="Collaboration_StructureCompartment"> + <children xmi:type="notation:Shape" xmi:id="_jNfNcLVZEeiUzZPp6fDTcg" type="Property_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_jNf0gLVZEeiUzZPp6fDTcg" type="Property_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_jNf0gbVZEeiUzZPp6fDTcg" type="Property_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_jNf0grVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_jNf0g7VZEeiUzZPp6fDTcg" type="Property_StructureCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_jNf0hLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jNf0hbVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Property" href="bug537571-times.uml#_jNXRoLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jNfNcbVZEeiUzZPp6fDTcg" x="47" y="47"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_js2qALVZEeiUzZPp6fDTcg" type="Property_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_js3RELVZEeiUzZPp6fDTcg" type="Property_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_js3REbVZEeiUzZPp6fDTcg" type="Property_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_js3RErVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_js3RE7VZEeiUzZPp6fDTcg" type="Property_StructureCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_js3RFLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_js3RFbVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Property" href="bug537571-times.uml#_jsxxgLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_js2qAbVZEeiUzZPp6fDTcg" x="255" y="51"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_kEqtELVZEeiUzZPp6fDTcg" type="Property_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_kErUILVZEeiUzZPp6fDTcg" type="Property_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_kErUIbVZEeiUzZPp6fDTcg" type="Property_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_kErUIrVZEeiUzZPp6fDTcg" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_kErUI7VZEeiUzZPp6fDTcg" type="Property_StructureCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_kErUJLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kErUJbVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Property" href="bug537571-times.uml#_kEnCsLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kEqtEbVZEeiUzZPp6fDTcg" x="234" y="142"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_juIfELt9EeiBPK1YjKozYQ" type="Property_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_juJGILt9EeiBPK1YjKozYQ" type="Property_NameLabel"/> + <children xmi:type="notation:DecorationNode" xmi:id="_juJGIbt9EeiBPK1YjKozYQ" type="Property_FloatingNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_juJGIrt9EeiBPK1YjKozYQ" y="15"/> + </children> + <children xmi:type="notation:BasicCompartment" xmi:id="_juJGI7t9EeiBPK1YjKozYQ" type="Property_StructureCompartment"> + <styles xmi:type="notation:TitleStyle" xmi:id="_juJGJLt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_juJGJbt9EeiBPK1YjKozYQ"/> + </children> + <element xmi:type="uml:Property" href="bug537571-times.uml#_jt844Lt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_juIfEbt9EeiBPK1YjKozYQ" x="34" y="142"/> + </children> + <styles xmi:type="notation:TitleStyle" xmi:id="_ikYmFrVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ikYmF7VZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Collaboration" href="bug537571-times.uml#_Z_udYLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ikYmEbVZEeiUzZPp6fDTcg" x="40" y="40" width="500" height="250"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_ikWw4bVZEeiUzZPp6fDTcg" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_ikWw4rVZEeiUzZPp6fDTcg"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_ikWw47VZEeiUzZPp6fDTcg" diagramKindId="org.eclipse.papyrus.uml.diagram.compositeStructure.root.structuredClassifier"> + <owner xmi:type="uml:Collaboration" href="bug537571-times.uml#_Z_udYLVZEeiUzZPp6fDTcg"/> + </styles> + <element xmi:type="uml:Collaboration" href="bug537571-times.uml#_Z_udYLVZEeiUzZPp6fDTcg"/> + <edges xmi:type="notation:Connector" xmi:id="_lBWXwLVZEeiUzZPp6fDTcg" type="Connector_Edge" source="_jNfNcLVZEeiUzZPp6fDTcg" target="_js2qALVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_lBWXw7VZEeiUzZPp6fDTcg" type="Connector_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lBWXxLVZEeiUzZPp6fDTcg" y="60"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_lBWXxbVZEeiUzZPp6fDTcg" type="Connector_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lBWXxrVZEeiUzZPp6fDTcg" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_lBWXx7VZEeiUzZPp6fDTcg" type="Connector_SourceMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lBWXyLVZEeiUzZPp6fDTcg" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_lBWXybVZEeiUzZPp6fDTcg" type="Connector_TargetMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_lBWXyrVZEeiUzZPp6fDTcg" y="20"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_lBWXwbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Connector" href="bug537571-times.uml#_lBHHMLVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lBWXwrVZEeiUzZPp6fDTcg" points="[140, 125, -643984, -643984]$[320, 129, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lB1f8LVZEeiUzZPp6fDTcg" id="(1.0,0.32608695652173914)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lB1f8bVZEeiUzZPp6fDTcg" id="(0.0,0.2391304347826087)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_m7xdELVZEeiUzZPp6fDTcg" type="Connector_Edge" source="_js2qALVZEeiUzZPp6fDTcg" target="_kEqtELVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_m7xdE7VZEeiUzZPp6fDTcg" type="Connector_StereotypeLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_hHw5wLt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7xdFLVZEeiUzZPp6fDTcg" x="1" y="58"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_m7xdFbVZEeiUzZPp6fDTcg" type="Connector_NameLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_hH2ZULt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7xdFrVZEeiUzZPp6fDTcg" x="7" y="-26"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_m7xdF7VZEeiUzZPp6fDTcg" type="Connector_SourceMultiplicityLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_hH7R0Lt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7xdGLVZEeiUzZPp6fDTcg" x="-7" y="16"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_m7xdGbVZEeiUzZPp6fDTcg" type="Connector_TargetMultiplicityLabel"> + <styles xmi:type="notation:BooleanValueStyle" xmi:id="_hIAKULt9EeiBPK1YjKozYQ" name="IS_UPDATED_POSITION" booleanValue="true"/> + <layoutConstraint xmi:type="notation:Location" xmi:id="_m7xdGrVZEeiUzZPp6fDTcg" x="10" y="16"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_m7xdEbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Connector" href="bug537571-times.uml#_m7qvYLVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m7xdErVZEeiUzZPp6fDTcg" points="[340, 175, -643984, -643984]$[300, 218, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m8AGkLVZEeiUzZPp6fDTcg" id="(0.4148936170212766,1.0)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m8AtoLVZEeiUzZPp6fDTcg" id="(0.5357142857142857,0.0)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_ks_UALt9EeiBPK1YjKozYQ" type="Connector_Edge" source="_kEqtELVZEeiUzZPp6fDTcg" target="_juIfELt9EeiBPK1YjKozYQ"> + <children xmi:type="notation:DecorationNode" xmi:id="_ks_UA7t9EeiBPK1YjKozYQ" type="Connector_StereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ks_UBLt9EeiBPK1YjKozYQ" y="60"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_ks_UBbt9EeiBPK1YjKozYQ" type="Connector_NameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ks_7ELt9EeiBPK1YjKozYQ" y="-20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_ks_7Ebt9EeiBPK1YjKozYQ" type="Connector_SourceMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ks_7Ert9EeiBPK1YjKozYQ" y="20"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_ks_7E7t9EeiBPK1YjKozYQ" type="Connector_TargetMultiplicityLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ks_7FLt9EeiBPK1YjKozYQ" y="20"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_ks_UAbt9EeiBPK1YjKozYQ"/> + <element xmi:type="uml:Connector" href="bug537571-times.uml#_ks3YMLt9EeiBPK1YjKozYQ"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ks_UArt9EeiBPK1YjKozYQ" points="[280, 240, -643984, -643984]$[210, 240, -643984, -643984]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ktPysLt9EeiBPK1YjKozYQ" id="(0.0,0.43478260869565216)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ktQZwLt9EeiBPK1YjKozYQ" id="(1.0,0.43478260869565216)"/> + </edges> + </notation:Diagram> + <notation:Diagram xmi:id="_sQzBALVZEeiUzZPp6fDTcg" type="PapyrusUMLSequenceDiagram" name="scenario" measurementUnit="Pixel"> + <children xmi:type="notation:Shape" xmi:id="_sQzBAbVZEeiUzZPp6fDTcg" type="Interaction_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_sQzBArVZEeiUzZPp6fDTcg" type="Interaction_NameLabel"/> + <children xmi:type="notation:BasicCompartment" xmi:id="_sQzBA7VZEeiUzZPp6fDTcg" type="Interaction_SubfragmentCompartment"> + <children xmi:type="notation:Shape" xmi:id="_t3i8YLVZEeiUzZPp6fDTcg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_t3i8YrVZEeiUzZPp6fDTcg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_XdWMILp7EeiqHsvDY6I0Gg" type="ActionExecutionSpecification_Shape"> + <element xmi:type="uml:ActionExecutionSpecification" href="bug537571-times.uml#_Xa7KQLp7EeiqHsvDY6I0Gg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XdWMIbp7EeiqHsvDY6I0Gg" x="40" y="325" width="20" height="100"/> + </children> + <element xmi:type="uml:Lifeline" href="bug537571-times.uml#_t3f5ELVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t3i8YbVZEeiUzZPp6fDTcg" x="83" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_uRwMILVZEeiUzZPp6fDTcg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_uRwMIrVZEeiUzZPp6fDTcg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_3hGQkLVZEeiUzZPp6fDTcg" type="BehaviorExecutionSpecification_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_3hG3oLVZEeiUzZPp6fDTcg" type="BehaviorExecutionSpecification_Behavior"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_3hG3obVZEeiUzZPp6fDTcg" x="18" y="18"/> + </children> + <element xmi:type="uml:BehaviorExecutionSpecification" href="bug537571-times.uml#_3hEbYLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3hGQkbVZEeiUzZPp6fDTcg" x="40" y="90" width="20" height="101"/> + </children> + <element xmi:type="uml:Lifeline" href="bug537571-times.uml#_uRtI0LVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uRwMIbVZEeiUzZPp6fDTcg" x="251" y="10"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_upCqwLVZEeiUzZPp6fDTcg" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_upCqwrVZEeiUzZPp6fDTcg" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_k_pLULXMEeickIck9Vt91A" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug537571-times.uml#_k_MfYLXMEeickIck9Vt91A"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_k_pyYLXMEeickIck9Vt91A" x="50" y="191"/> + </children> + <element xmi:type="uml:Lifeline" href="bug537571-times.uml#_uo_AYLVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_upCqwbVZEeiUzZPp6fDTcg" x="526" y="101" width="100" height="212"/> + </children> + <children xmi:type="notation:Shape" xmi:id="_O0G8MLt9EeiBPK1YjKozYQ" type="Lifeline_Shape"> + <children xmi:type="notation:DecorationNode" xmi:id="_O0G8Mrt9EeiBPK1YjKozYQ" type="Lifeline_NameLabel"/> + <children xmi:type="notation:Shape" xmi:id="_4xdH4Lt9EeiBPK1YjKozYQ" type="DestructionOccurrenceSpecification_Shape"> + <element xmi:type="uml:DestructionOccurrenceSpecification" href="bug537571-times.uml#_4w4gILt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4xdH4bt9EeiBPK1YjKozYQ" x="43" y="106"/> + </children> + <element xmi:type="uml:Lifeline" href="bug537571-times.uml#_Oz9yQLt9EeiBPK1YjKozYQ"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_O0G8Mbt9EeiBPK1YjKozYQ" x="382" y="203" width="100" height="52"/> + </children> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sQzBBLVZEeiUzZPp6fDTcg"/> + </children> + <element xmi:type="uml:Interaction" href="bug537571-times.uml#_phfiILVZEeiUzZPp6fDTcg"/> + <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sQzBBbVZEeiUzZPp6fDTcg"/> + </children> + <styles xmi:type="notation:StringValueStyle" xmi:id="_sQzBBrVZEeiUzZPp6fDTcg" name="diagram_compatibility_version" stringValue="1.4.0"/> + <styles xmi:type="notation:DiagramStyle" xmi:id="_sQzBB7VZEeiUzZPp6fDTcg"/> + <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_sQzBCLVZEeiUzZPp6fDTcg" diagramKindId="org.eclipse.papyrus.uml.diagram.sequence"> + <owner xmi:type="uml:Interaction" href="bug537571-times.uml#_phfiILVZEeiUzZPp6fDTcg"/> + </styles> + <element xmi:type="uml:Interaction" href="bug537571-times.uml#_phfiILVZEeiUzZPp6fDTcg"/> + <edges xmi:type="notation:Connector" xmi:id="_3gS_ULVZEeiUzZPp6fDTcg" type="Message_SynchEdge" source="_t3i8YLVZEeiUzZPp6fDTcg" target="_uRwMILVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_3gS_U7VZEeiUzZPp6fDTcg" type="Message_SynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_3gS_VLVZEeiUzZPp6fDTcg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_3gS_VbVZEeiUzZPp6fDTcg" type="Message_SynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_3gS_VrVZEeiUzZPp6fDTcg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_3gS_UbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_3gEV0LVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3gS_UrVZEeiUzZPp6fDTcg" points="[0, 0, -168, 0]$[168, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3g8fkLVZEeiUzZPp6fDTcg" id="(0.5,0.12857142857142856)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3g8fkbVZEeiUzZPp6fDTcg" id="(0.5,0.12857142857142856)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_3hLwILVZEeiUzZPp6fDTcg" type="Message_ReplyEdge" source="_uRwMILVZEeiUzZPp6fDTcg" target="_t3i8YLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_3hLwI7VZEeiUzZPp6fDTcg" type="Message_ReplyNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_3hLwJLVZEeiUzZPp6fDTcg" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_3hLwJbVZEeiUzZPp6fDTcg" type="Message_ReplyStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_3hLwJrVZEeiUzZPp6fDTcg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_3hLwIbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_3hKiALVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3hLwIrVZEeiUzZPp6fDTcg" points="[0, 0, 168, 0]$[-168, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3hMXMLVZEeiUzZPp6fDTcg" id="(0.5,0.2714285714285714)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3hMXMbVZEeiUzZPp6fDTcg" id="(0.5,0.2714285714285714)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_4W86gLVZEeiUzZPp6fDTcg" type="Message_AsynchEdge" source="_uRwMILVZEeiUzZPp6fDTcg" target="_upCqwLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_4W9hkLVZEeiUzZPp6fDTcg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_4W9hkbVZEeiUzZPp6fDTcg" x="31" y="-23"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_4W9hkrVZEeiUzZPp6fDTcg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_4W9hk7VZEeiUzZPp6fDTcg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_4W86gbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_4W2M0LVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4W86grVZEeiUzZPp6fDTcg" points="[-10, 2, -181, -20]$[171, 22, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4XVVALVZEeiUzZPp6fDTcg" id="(0.5,0.16428571428571428)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4XV8ELVZEeiUzZPp6fDTcg" id="(0.5,0.27830188679245293)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_5ni_sLVZEeiUzZPp6fDTcg" type="Message_AsynchEdge" source="_upCqwLVZEeiUzZPp6fDTcg" target="_uRwMILVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_5ni_s7VZEeiUzZPp6fDTcg" type="Message_AsynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5ni_tLVZEeiUzZPp6fDTcg" x="12" y="15"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_5njmwLVZEeiUzZPp6fDTcg" type="Message_AsynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_5njmwbVZEeiUzZPp6fDTcg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_5ni_sbVZEeiUzZPp6fDTcg"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_5nc5ELVZEeiUzZPp6fDTcg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5ni_srVZEeiUzZPp6fDTcg" points="[0, 0, 171, 0]$[-181, 0, -10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5nxCILVZEeiUzZPp6fDTcg" id="(0.5,0.3726415094339622)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5nxCIbVZEeiUzZPp6fDTcg" id="(0.5,0.24285714285714285)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_QTnBILXMEeickIck9Vt91A" type="Message_CreateEdge" source="_uRwMILVZEeiUzZPp6fDTcg" target="_upCqwLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_QTnBI7XMEeickIck9Vt91A" type="Message_CreateNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_QTnBJLXMEeickIck9Vt91A" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_QTnBJbXMEeickIck9Vt91A" type="Message_CreateStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_QTnBJrXMEeickIck9Vt91A" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_QTnBIbXMEeickIck9Vt91A"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_QTcpELXMEeickIck9Vt91A"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QTnBIrXMEeickIck9Vt91A" points="[10, -1, -161, 5]$[171, -6, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QUE7MLXMEeickIck9Vt91A" id="(0.5,0.14)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QUE7MbXMEeickIck9Vt91A" id="(0.5,0.033018867924528336)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_k_SmALXMEeickIck9Vt91A" type="Message_DeleteEdge" source="_uRwMILVZEeiUzZPp6fDTcg" target="_upCqwLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_k_TNELXMEeickIck9Vt91A" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_k_TNEbXMEeickIck9Vt91A" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_k_TNErXMEeickIck9Vt91A" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_k_TNE7XMEeickIck9Vt91A" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_k_SmAbXMEeickIck9Vt91A"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_k_L4ULXMEeickIck9Vt91A"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_k_SmArXMEeickIck9Vt91A" points="[0, 0, -171, 0]$[171, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_k_gocLXMEeickIck9Vt91A" id="(0.5,0.4328571428571429)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_k_gocbXMEeickIck9Vt91A" id="(0.5,1.0)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_ZKlKALp7EeiqHsvDY6I0Gg" type="Message_SynchEdge" source="_uRwMILVZEeiUzZPp6fDTcg" target="_t3i8YLVZEeiUzZPp6fDTcg"> + <children xmi:type="notation:DecorationNode" xmi:id="_ZKlxELp7EeiqHsvDY6I0Gg" type="Message_SynchNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ZKlxEbp7EeiqHsvDY6I0Gg" x="1" y="14"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_ZKlxErp7EeiqHsvDY6I0Gg" type="Message_SynchStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_ZKlxE7p7EeiqHsvDY6I0Gg" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_ZKlKAbp7EeiqHsvDY6I0Gg"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_ZKC-gLp7EeiqHsvDY6I0Gg"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZKlKArp7EeiqHsvDY6I0Gg" points="[0, 0, 168, 0]$[-158, 0, 10, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZLiMQLp7EeiqHsvDY6I0Gg" id="(0.5,0.5257142857142857)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZLiMQbp7EeiqHsvDY6I0Gg" id="(0.5,0.5257142857142857)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_xxV7ILt9EeiBPK1YjKozYQ" type="Message_CreateEdge" source="_upCqwLVZEeiUzZPp6fDTcg" target="_O0G8MLt9EeiBPK1YjKozYQ"> + <children xmi:type="notation:DecorationNode" xmi:id="_xxWiMLt9EeiBPK1YjKozYQ" type="Message_CreateNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_xxWiMbt9EeiBPK1YjKozYQ" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_xxWiMrt9EeiBPK1YjKozYQ" type="Message_CreateStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_xxWiM7t9EeiBPK1YjKozYQ" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_xxV7Ibt9EeiBPK1YjKozYQ"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_xxDnQLt9EeiBPK1YjKozYQ"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xxV7Irt9EeiBPK1YjKozYQ" points="[0, 0, -147, 0]$[147, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xxrSULt9EeiBPK1YjKozYQ" id="(0.5,0.5141509433962265)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xxrSUbt9EeiBPK1YjKozYQ" id="(0.5,0.13461538461538414)"/> + </edges> + <edges xmi:type="notation:Connector" xmi:id="_4xEGULt9EeiBPK1YjKozYQ" type="Message_DeleteEdge" source="_upCqwLVZEeiUzZPp6fDTcg" target="_O0G8MLt9EeiBPK1YjKozYQ"> + <children xmi:type="notation:DecorationNode" xmi:id="_4xEGU7t9EeiBPK1YjKozYQ" type="Message_DeleteNameLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_4xEGVLt9EeiBPK1YjKozYQ" x="1" y="-13"/> + </children> + <children xmi:type="notation:DecorationNode" xmi:id="_4xEGVbt9EeiBPK1YjKozYQ" type="Message_DeleteStereotypeLabel"> + <layoutConstraint xmi:type="notation:Location" xmi:id="_4xEGVrt9EeiBPK1YjKozYQ" x="1" y="-33"/> + </children> + <styles xmi:type="notation:FontStyle" xmi:id="_4xEGUbt9EeiBPK1YjKozYQ"/> + <element xmi:type="uml:Message" href="bug537571-times.uml#_4wwkULt9EeiBPK1YjKozYQ"/> + <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4xEGUrt9EeiBPK1YjKozYQ" points="[0, 0, 144, 0]$[-144, 0, 0, 0]"/> + <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4xT98Lt9EeiBPK1YjKozYQ" id="(0.5,0.7264150943396226)"/> + <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4xT98bt9EeiBPK1YjKozYQ" id="(0.5,1.0)"/> + </edges> + </notation:Diagram> +</xmi:XMI> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.uml b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.uml new file mode 100644 index 00000000000..8b8c650f7e4 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/resource/bugs/bug537571-times.uml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_Ow1jELVZEeiUzZPp6fDTcg" name="times"> + <packageImport xmi:type="uml:PackageImport" xmi:id="_O79N8LVZEeiUzZPp6fDTcg"> + <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/> + </packageImport> + <packagedElement xmi:type="uml:Class" xmi:id="_QoSz8LVZEeiUzZPp6fDTcg" name="Foo"> + <ownedAttribute xmi:type="uml:Property" xmi:id="_TfJFQLVZEeiUzZPp6fDTcg" name="bar" type="_R0COULVZEeiUzZPp6fDTcg" association="_TfGpALVZEeiUzZPp6fDTcg"> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_TfKTYLVZEeiUzZPp6fDTcg"/> + <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TfK6cLVZEeiUzZPp6fDTcg" value="1"/> + </ownedAttribute> + </packagedElement> + <packagedElement xmi:type="uml:Class" xmi:id="_R0COULVZEeiUzZPp6fDTcg" name="Bar"> + <ownedAttribute xmi:type="uml:Property" xmi:id="_UGupsLVZEeiUzZPp6fDTcg" name="thing" type="_SepRkLVZEeiUzZPp6fDTcg" association="_UGuCoLVZEeiUzZPp6fDTcg"> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_UGupsbVZEeiUzZPp6fDTcg"/> + <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_UGupsrVZEeiUzZPp6fDTcg" value="1"/> + </ownedAttribute> + </packagedElement> + <packagedElement xmi:type="uml:Class" xmi:id="_SepRkLVZEeiUzZPp6fDTcg" name="Thing"> + <ownedAttribute xmi:type="uml:Property" xmi:id="_VP4FwLt9EeiBPK1YjKozYQ" name="whatsit" type="_T7POELt9EeiBPK1YjKozYQ" association="_VPx_ILt9EeiBPK1YjKozYQ"> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_VP568Lt9EeiBPK1YjKozYQ"/> + <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_VP568bt9EeiBPK1YjKozYQ" value="1"/> + </ownedAttribute> + </packagedElement> + <packagedElement xmi:type="uml:Association" xmi:id="_TfGpALVZEeiUzZPp6fDTcg" memberEnd="_TfJFQLVZEeiUzZPp6fDTcg _TfK6cbVZEeiUzZPp6fDTcg"> + <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_TfH3ILVZEeiUzZPp6fDTcg" source="org.eclipse.papyrus"> + <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_TfIeMLVZEeiUzZPp6fDTcg" key="nature" value="UML_Nature"/> + </eAnnotations> + <ownedEnd xmi:type="uml:Property" xmi:id="_TfK6cbVZEeiUzZPp6fDTcg" name="foo" type="_QoSz8LVZEeiUzZPp6fDTcg" association="_TfGpALVZEeiUzZPp6fDTcg"/> + </packagedElement> + <packagedElement xmi:type="uml:Association" xmi:id="_UGuCoLVZEeiUzZPp6fDTcg" memberEnd="_UGupsLVZEeiUzZPp6fDTcg _UGups7VZEeiUzZPp6fDTcg"> + <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UGuCobVZEeiUzZPp6fDTcg" source="org.eclipse.papyrus"> + <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UGuCorVZEeiUzZPp6fDTcg" key="nature" value="UML_Nature"/> + </eAnnotations> + <ownedEnd xmi:type="uml:Property" xmi:id="_UGups7VZEeiUzZPp6fDTcg" name="bar" type="_R0COULVZEeiUzZPp6fDTcg" association="_UGuCoLVZEeiUzZPp6fDTcg"/> + </packagedElement> + <packagedElement xmi:type="uml:Collaboration" xmi:id="_Z_udYLVZEeiUzZPp6fDTcg" name="scenario"> + <ownedAttribute xmi:type="uml:Property" xmi:id="_jNXRoLVZEeiUzZPp6fDTcg" name="foo" type="_QoSz8LVZEeiUzZPp6fDTcg"/> + <ownedAttribute xmi:type="uml:Property" xmi:id="_jsxxgLVZEeiUzZPp6fDTcg" name="bar" type="_R0COULVZEeiUzZPp6fDTcg"/> + <ownedAttribute xmi:type="uml:Property" xmi:id="_kEnCsLVZEeiUzZPp6fDTcg" name="thing" type="_SepRkLVZEeiUzZPp6fDTcg"/> + <ownedAttribute xmi:type="uml:Property" xmi:id="_jt844Lt9EeiBPK1YjKozYQ" name="whatsit" type="_T7POELt9EeiBPK1YjKozYQ"/> + <ownedConnector xmi:type="uml:Connector" xmi:id="_lBHHMLVZEeiUzZPp6fDTcg" name="Connector4"> + <end xmi:type="uml:ConnectorEnd" xmi:id="_lBPDALVZEeiUzZPp6fDTcg" role="_jNXRoLVZEeiUzZPp6fDTcg"/> + <end xmi:type="uml:ConnectorEnd" xmi:id="_lBPqELVZEeiUzZPp6fDTcg" role="_jsxxgLVZEeiUzZPp6fDTcg"/> + </ownedConnector> + <ownedConnector xmi:type="uml:Connector" xmi:id="_m7qvYLVZEeiUzZPp6fDTcg" name="Connector5"> + <end xmi:type="uml:ConnectorEnd" xmi:id="_m7rWcLVZEeiUzZPp6fDTcg" role="_jsxxgLVZEeiUzZPp6fDTcg"/> + <end xmi:type="uml:ConnectorEnd" xmi:id="_m7rWcbVZEeiUzZPp6fDTcg" role="_kEnCsLVZEeiUzZPp6fDTcg"/> + </ownedConnector> + <ownedConnector xmi:type="uml:Connector" xmi:id="_ks3YMLt9EeiBPK1YjKozYQ" name="Connector8"> + <end xmi:type="uml:ConnectorEnd" xmi:id="_ks5NYLt9EeiBPK1YjKozYQ" role="_kEnCsLVZEeiUzZPp6fDTcg"/> + <end xmi:type="uml:ConnectorEnd" xmi:id="_ks5NYbt9EeiBPK1YjKozYQ" role="_jt844Lt9EeiBPK1YjKozYQ"/> + </ownedConnector> + <ownedBehavior xmi:type="uml:Interaction" xmi:id="_phfiILVZEeiUzZPp6fDTcg" name="interaction"> + <lifeline xmi:type="uml:Lifeline" xmi:id="_t3f5ELVZEeiUzZPp6fDTcg" name="foo" represents="_jNXRoLVZEeiUzZPp6fDTcg" coveredBy="_3gLqkLVZEeiUzZPp6fDTcg _3hLJEbVZEeiUzZPp6fDTcg _XbUy4Lp7EeiqHsvDY6I0Gg _Xa7KQLp7EeiqHsvDY6I0Gg _ZKJsMLp7EeiqHsvDY6I0Gg _XbVZ8Lp7EeiqHsvDY6I0Gg"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_uRtI0LVZEeiUzZPp6fDTcg" name="bar" represents="_jsxxgLVZEeiUzZPp6fDTcg" coveredBy="_3gMRoLVZEeiUzZPp6fDTcg _QTdQILXMEeickIck9Vt91A _4W2z4LVZEeiUzZPp6fDTcg _5nc5ErVZEeiUzZPp6fDTcg _3hLJELVZEeiUzZPp6fDTcg _k_L4UbXMEeickIck9Vt91A _ZKJFILp7EeiqHsvDY6I0Gg _3hEbYLVZEeiUzZPp6fDTcg"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_uo_AYLVZEeiUzZPp6fDTcg" name="thing" represents="_kEnCsLVZEeiUzZPp6fDTcg" coveredBy="_QTd3MLXMEeickIck9Vt91A _4W2z4bVZEeiUzZPp6fDTcg _5nc5EbVZEeiUzZPp6fDTcg _xxK8ALt9EeiBPK1YjKozYQ _4wzAkLt9EeiBPK1YjKozYQ _k_MfYLXMEeickIck9Vt91A"/> + <lifeline xmi:type="uml:Lifeline" xmi:id="_Oz9yQLt9EeiBPK1YjKozYQ" name="whatsit" represents="_jt844Lt9EeiBPK1YjKozYQ" coveredBy="_xxMKILt9EeiBPK1YjKozYQ _4w4gILt9EeiBPK1YjKozYQ"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_3gLqkLVZEeiUzZPp6fDTcg" name="message1-send" covered="_t3f5ELVZEeiUzZPp6fDTcg" message="_3gEV0LVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_3gMRoLVZEeiUzZPp6fDTcg" name="message1-recv" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_3gEV0LVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:BehaviorExecutionSpecification" xmi:id="_3hEbYLVZEeiUzZPp6fDTcg" name="exec1" covered="_uRtI0LVZEeiUzZPp6fDTcg" finish="_3hLJELVZEeiUzZPp6fDTcg" start="_3gMRoLVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_QTdQILXMEeickIck9Vt91A" name="create1-send" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_QTcpELXMEeickIck9Vt91A"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_QTd3MLXMEeickIck9Vt91A" name="create1-recv" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_QTcpELXMEeickIck9Vt91A"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_4W2z4LVZEeiUzZPp6fDTcg" name="message2-send" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_4W2M0LVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_4W2z4bVZEeiUzZPp6fDTcg" name="message2-recv" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_4W2M0LVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_5nc5EbVZEeiUzZPp6fDTcg" name="message3-send" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_5nc5ELVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_5nc5ErVZEeiUzZPp6fDTcg" name="message3-recv" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_5nc5ELVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_3hLJELVZEeiUzZPp6fDTcg" name="reply1-send" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_3hKiALVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_3hLJEbVZEeiUzZPp6fDTcg" name="reply1-recv" covered="_t3f5ELVZEeiUzZPp6fDTcg" message="_3hKiALVZEeiUzZPp6fDTcg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_xxK8ALt9EeiBPK1YjKozYQ" name="create2-send" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_xxDnQLt9EeiBPK1YjKozYQ"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_xxMKILt9EeiBPK1YjKozYQ" name="create2-recv" covered="_Oz9yQLt9EeiBPK1YjKozYQ" message="_xxDnQLt9EeiBPK1YjKozYQ"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_4wzAkLt9EeiBPK1YjKozYQ" name="delete1-send" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_4wwkULt9EeiBPK1YjKozYQ"/> + <fragment xmi:type="uml:DestructionOccurrenceSpecification" xmi:id="_4w4gILt9EeiBPK1YjKozYQ" name="destroy1" covered="_Oz9yQLt9EeiBPK1YjKozYQ" message="_4wwkULt9EeiBPK1YjKozYQ"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_k_L4UbXMEeickIck9Vt91A" name="delete2-send" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_k_L4ULXMEeickIck9Vt91A"/> + <fragment xmi:type="uml:DestructionOccurrenceSpecification" xmi:id="_k_MfYLXMEeickIck9Vt91A" name="destroy2" covered="_uo_AYLVZEeiUzZPp6fDTcg" message="_k_L4ULXMEeickIck9Vt91A"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_XbUy4Lp7EeiqHsvDY6I0Gg" name="exec2-start" covered="_t3f5ELVZEeiUzZPp6fDTcg" execution="_Xa7KQLp7EeiqHsvDY6I0Gg"/> + <fragment xmi:type="uml:ActionExecutionSpecification" xmi:id="_Xa7KQLp7EeiqHsvDY6I0Gg" name="exec2" covered="_t3f5ELVZEeiUzZPp6fDTcg" finish="_XbVZ8Lp7EeiqHsvDY6I0Gg" start="_XbUy4Lp7EeiqHsvDY6I0Gg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_ZKJFILp7EeiqHsvDY6I0Gg" name="message4-send" covered="_uRtI0LVZEeiUzZPp6fDTcg" message="_ZKC-gLp7EeiqHsvDY6I0Gg"/> + <fragment xmi:type="uml:MessageOccurrenceSpecification" xmi:id="_ZKJsMLp7EeiqHsvDY6I0Gg" name="message4-recv" covered="_t3f5ELVZEeiUzZPp6fDTcg" message="_ZKC-gLp7EeiqHsvDY6I0Gg"/> + <fragment xmi:type="uml:ExecutionOccurrenceSpecification" xmi:id="_XbVZ8Lp7EeiqHsvDY6I0Gg" name="exec2-finish" covered="_t3f5ELVZEeiUzZPp6fDTcg" execution="_Xa7KQLp7EeiqHsvDY6I0Gg"/> + <message xmi:type="uml:Message" xmi:id="_3gEV0LVZEeiUzZPp6fDTcg" name="message1" receiveEvent="_3gMRoLVZEeiUzZPp6fDTcg" sendEvent="_3gLqkLVZEeiUzZPp6fDTcg"/> + <message xmi:type="uml:Message" xmi:id="_QTcpELXMEeickIck9Vt91A" name="create1" messageSort="createMessage" receiveEvent="_QTd3MLXMEeickIck9Vt91A" sendEvent="_QTdQILXMEeickIck9Vt91A"/> + <message xmi:type="uml:Message" xmi:id="_4W2M0LVZEeiUzZPp6fDTcg" name="message2" messageSort="asynchCall" receiveEvent="_4W2z4bVZEeiUzZPp6fDTcg" sendEvent="_4W2z4LVZEeiUzZPp6fDTcg"/> + <message xmi:type="uml:Message" xmi:id="_5nc5ELVZEeiUzZPp6fDTcg" name="message3" messageSort="asynchCall" receiveEvent="_5nc5ErVZEeiUzZPp6fDTcg" sendEvent="_5nc5EbVZEeiUzZPp6fDTcg"/> + <message xmi:type="uml:Message" xmi:id="_3hKiALVZEeiUzZPp6fDTcg" name="reply1" messageSort="reply" receiveEvent="_3hLJEbVZEeiUzZPp6fDTcg" sendEvent="_3hLJELVZEeiUzZPp6fDTcg"/> + <message xmi:type="uml:Message" xmi:id="_xxDnQLt9EeiBPK1YjKozYQ" name="create2" messageSort="createMessage" receiveEvent="_xxMKILt9EeiBPK1YjKozYQ" sendEvent="_xxK8ALt9EeiBPK1YjKozYQ"/> + <message xmi:type="uml:Message" xmi:id="_4wwkULt9EeiBPK1YjKozYQ" name="delete1" messageSort="deleteMessage" receiveEvent="_4w4gILt9EeiBPK1YjKozYQ" sendEvent="_4wzAkLt9EeiBPK1YjKozYQ"/> + <message xmi:type="uml:Message" xmi:id="_k_L4ULXMEeickIck9Vt91A" name="delete2" messageSort="deleteMessage" receiveEvent="_k_MfYLXMEeickIck9Vt91A" sendEvent="_k_L4UbXMEeickIck9Vt91A"/> + <message xmi:type="uml:Message" xmi:id="_ZKC-gLp7EeiqHsvDY6I0Gg" name="message4" receiveEvent="_ZKJsMLp7EeiqHsvDY6I0Gg" sendEvent="_ZKJFILp7EeiqHsvDY6I0Gg"/> + </ownedBehavior> + </packagedElement> + <packagedElement xmi:type="uml:Class" xmi:id="_T7POELt9EeiBPK1YjKozYQ" name="Whatsit"/> + <packagedElement xmi:type="uml:Association" xmi:id="_VPx_ILt9EeiBPK1YjKozYQ" memberEnd="_VP4FwLt9EeiBPK1YjKozYQ _VP568rt9EeiBPK1YjKozYQ"> + <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VP23oLt9EeiBPK1YjKozYQ" source="org.eclipse.papyrus"> + <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VP3esLt9EeiBPK1YjKozYQ" key="nature" value="UML_Nature"/> + </eAnnotations> + <ownedEnd xmi:type="uml:Property" xmi:id="_VP568rt9EeiBPK1YjKozYQ" name="thing" type="_SepRkLVZEeiUzZPp6fDTcg" association="_VPx_ILt9EeiBPK1YjKozYQ"/> + </packagedElement> +</uml:Model> diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkCreationTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkCreationTest.java new file mode 100644 index 00000000000..391e0904c4b --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkCreationTest.java @@ -0,0 +1,311 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import java.util.Random; +import java.util.Set; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.PolylineConnection; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; +import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.CenterAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.ConnectionSourceAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.ConnectionTargetAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.NodeBottomAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.NodeTopAnchor; +import org.eclipse.uml2.uml.ActionExecutionSpecification; +import org.eclipse.uml2.uml.BehaviorExecutionSpecification; +import org.eclipse.uml2.uml.DestructionOccurrenceSpecification; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.Message; +import org.eclipse.uml2.uml.NamedElement; +import org.hamcrest.core.IsInstanceOf; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +public abstract class AbstractOccurrenceLinkCreationTest<T extends NamedElement> extends AbstractPapyrusTest { + + @Rule + public final PapyrusEditorFixture editor = new PapyrusEditorFixture(); + + IGraphicalEditPart exec1, exec2, exec3, destruction1, destruction2; + ConnectionNodeEditPart message3, message4; + ConnectionNodeEditPart[] links; + + private Class<T> umlClass; + + private String paletteToolId; + + private Class<? extends Connection> figureClass; + + public AbstractOccurrenceLinkCreationTest(Class<T> umlClass, String paletteToolId, Class<? extends Connection> figureClass) { + this.umlClass = umlClass; + this.paletteToolId = paletteToolId; + this.figureClass = figureClass; + } + + @Before + public void getElements() { + exec1 = (IGraphicalEditPart) editor.findEditPart("ActionExecutionSpecification1", ActionExecutionSpecification.class); + exec2 = (IGraphicalEditPart) editor.findEditPart("BehaviorExecutionSpecification2", BehaviorExecutionSpecification.class); + exec3 = (IGraphicalEditPart) editor.findEditPart("ActionExecutionSpecification3", ActionExecutionSpecification.class); + destruction1 = (IGraphicalEditPart) editor.findEditPart("Message1ReceiveDestroyEvent", DestructionOccurrenceSpecification.class); + destruction2 = (IGraphicalEditPart) editor.findEditPart("Message2ReceiveDestroyEvent", DestructionOccurrenceSpecification.class); + + message3 = (ConnectionNodeEditPart) editor.findEditPart("Message3", Message.class); + message4 = (ConnectionNodeEditPart) editor.findEditPart("Message4", Message.class); + } + + @Test + public void testLinkCreationOnMessageSourceToTarget() throws Exception { + editor.getActiveDiagramEditor().getDiagramGraphicalViewer().reveal(message4); + + Point message3Source = findSourcePoint(message3); + Point message4Target = findTargetPoint(message4); + + editor.createLink(paletteToolId, message3, message4, message3Source, message4Target); + + Message umlMessage3 = (Message) EMFHelper.getEObject(message3); + Message umlMessage4 = (Message) EMFHelper.getEObject(message4); + + // There's no T in the model before we create the link, so just find the only one + Set<T> allInstances = EMFHelper.allInstances(umlMessage3.eResource(), umlClass); + T newLink = allInstances.iterator().next(); + + EditPart newLinkEditPart = editor.findEditPart(newLink); + Assert.assertThat(newLinkEditPart, IsInstanceOf.instanceOf(ConnectionNodeEditPart.class)); + ConnectionNodeEditPart newConnection = (ConnectionNodeEditPart) newLinkEditPart; + + Element source = getSemanticSource(newLink); + Element target = getSemanticTarget(newLink); + + Assert.assertEquals(umlMessage3.getSendEvent(), source); + Assert.assertEquals(umlMessage4.getReceiveEvent(), target); + Assert.assertThat(newConnection.getConnectionFigure(), IsInstanceOf.instanceOf(figureClass)); + Assert.assertThat(newConnection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(ConnectionSourceAnchor.class)); + Assert.assertThat(newConnection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(ConnectionTargetAnchor.class)); + } + + @Test + public void testLinkCreationOnMessageTargetToSource() throws Exception { + editor.getActiveDiagramEditor().getDiagramGraphicalViewer().reveal(message4); + + Point message3Target = findTargetPoint(message3); + Point message4Source = findSourcePoint(message4); + + editor.createLink(paletteToolId, message3, message4, message3Target, message4Source); + + Message umlMessage3 = (Message) EMFHelper.getEObject(message3); + Message umlMessage4 = (Message) EMFHelper.getEObject(message4); + + // There's no T in the model before we create the link, so just find the only one + Set<T> allInstances = EMFHelper.allInstances(umlMessage3.eResource(), umlClass); + T newLink = allInstances.iterator().next(); + + EditPart newLinkEditPart = editor.findEditPart(newLink); + Assert.assertThat(newLinkEditPart, IsInstanceOf.instanceOf(ConnectionNodeEditPart.class)); + ConnectionNodeEditPart newConnection = (ConnectionNodeEditPart) newLinkEditPart; + + Element source = getSemanticSource(newLink); + Element target = getSemanticTarget(newLink); + + Assert.assertEquals(umlMessage3.getReceiveEvent(), source); + Assert.assertEquals(umlMessage4.getSendEvent(), target); + Assert.assertThat(newConnection.getConnectionFigure(), IsInstanceOf.instanceOf(figureClass)); + Assert.assertThat(newConnection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(ConnectionTargetAnchor.class)); + Assert.assertThat(newConnection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(ConnectionSourceAnchor.class)); + } + + @Test + public void testLinkCreationOnExecSpecStartToFinish() throws Exception { + editor.getActiveDiagramEditor().getDiagramGraphicalViewer().reveal(exec2); + + Point exec1Start = findStartPoint(exec1); + Point exec2Finish = findFinishPoint(exec2); + + editor.createLink(paletteToolId, exec1, exec2, exec1Start, exec2Finish); + + ActionExecutionSpecification umlExec1 = (ActionExecutionSpecification) EMFHelper.getEObject(exec1); + BehaviorExecutionSpecification umlExec2 = (BehaviorExecutionSpecification) EMFHelper.getEObject(exec2); + + // There's no T in the model before we create the link, so just find the only one + Set<T> allInstances = EMFHelper.allInstances(umlExec1.eResource(), umlClass); + T newLink = allInstances.iterator().next(); + + EditPart newLinkEditPart = editor.findEditPart(newLink); + Assert.assertThat(newLinkEditPart, IsInstanceOf.instanceOf(ConnectionNodeEditPart.class)); + ConnectionNodeEditPart newConnection = (ConnectionNodeEditPart) newLinkEditPart; + + Element source = getSemanticSource(newLink); + Element target = getSemanticTarget(newLink); + + Assert.assertEquals(umlExec1.getStart(), source); + Assert.assertEquals(umlExec2.getFinish(), target); + Assert.assertThat(newConnection.getConnectionFigure(), IsInstanceOf.instanceOf(figureClass)); + Assert.assertThat(newConnection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(NodeTopAnchor.class)); + Assert.assertThat(newConnection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(NodeBottomAnchor.class)); + } + + @Test + public void testLinkCreationOnExecSpecFinishToStart() throws Exception { + editor.getActiveDiagramEditor().getDiagramGraphicalViewer().reveal(exec3); + + Point exec1Finish = findFinishPoint(exec1); + Point exec3Start = findStartPoint(exec3); + + editor.createLink(paletteToolId, exec1, exec3, exec1Finish, exec3Start); + + ActionExecutionSpecification umlExec1 = (ActionExecutionSpecification) EMFHelper.getEObject(exec1); + ActionExecutionSpecification umlExec3 = (ActionExecutionSpecification) EMFHelper.getEObject(exec3); + + // There's no T in the model before we create the link, so just find the only one + Set<T> allInstances = EMFHelper.allInstances(umlExec1.eResource(), umlClass); + T newLink = allInstances.iterator().next(); + + EditPart newLinkEditPart = editor.findEditPart(newLink); + Assert.assertThat(newLinkEditPart, IsInstanceOf.instanceOf(ConnectionNodeEditPart.class)); + ConnectionNodeEditPart newConnection = (ConnectionNodeEditPart) newLinkEditPart; + + Element source = getSemanticSource(newLink); + Element target = getSemanticTarget(newLink); + + Assert.assertEquals(umlExec1.getFinish(), source); + Assert.assertEquals(umlExec3.getStart(), target); + Assert.assertThat(newConnection.getConnectionFigure(), IsInstanceOf.instanceOf(figureClass)); + Assert.assertThat(newConnection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(NodeBottomAnchor.class)); + Assert.assertThat(newConnection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(NodeTopAnchor.class)); + } + + @Test + public void testLinkCreationOnDestruction() throws Exception { + editor.getActiveDiagramEditor().getDiagramGraphicalViewer().reveal(destruction2); + + Point destruction1Any = findAnyPoint(destruction1); + Point destruction2Any = findAnyPoint(destruction2); + + editor.createLink(paletteToolId, destruction1, destruction2, destruction1Any, destruction2Any); + + DestructionOccurrenceSpecification umlDest1 = (DestructionOccurrenceSpecification) EMFHelper.getEObject(destruction1); + DestructionOccurrenceSpecification umlDest2 = (DestructionOccurrenceSpecification) EMFHelper.getEObject(destruction2); + + // There's no T in the model before we create the link, so just find the only one + Set<T> allInstances = EMFHelper.allInstances(umlDest1.eResource(), umlClass); + T newLink = allInstances.iterator().next(); + + EditPart newLinkEditPart = editor.findEditPart(newLink); + Assert.assertThat(newLinkEditPart, IsInstanceOf.instanceOf(ConnectionNodeEditPart.class)); + ConnectionNodeEditPart newConnection = (ConnectionNodeEditPart) newLinkEditPart; + + Element source = getSemanticSource(newLink); + Element target = getSemanticTarget(newLink); + + Assert.assertEquals(umlDest1, source); + Assert.assertEquals(umlDest2, target); + Assert.assertThat(newConnection.getConnectionFigure(), IsInstanceOf.instanceOf(figureClass)); + Assert.assertThat(newConnection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(CenterAnchor.class)); + Assert.assertThat(newConnection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(CenterAnchor.class)); + } + + protected abstract Element getSemanticSource(T link); + + protected abstract Element getSemanticTarget(T link); + + private Point findSourcePoint(ConnectionNodeEditPart editPart) { + PolylineConnection connection = (PolylineConnection) editPart.getConnectionFigure(); + Point start = connection.getStart().getCopy(); + Point end = connection.getEnd().getCopy(); + + connection.translateToAbsolute(start); + connection.translateToAbsolute(end); + + // Messages are straight lines, so just shift the X/Y slightly towards the source side + int newX = (int) (0.75 * start.x() + 0.25 * end.x()); + int newY = (int) (0.75 * start.y() + 0.25 * end.y()); + + return new Point(newX, newY); + } + + private Point findTargetPoint(ConnectionNodeEditPart editPart) { + PolylineConnection connection = (PolylineConnection) editPart.getConnectionFigure(); + Point end = connection.getEnd().getCopy(); + Point start = connection.getStart().getCopy(); + + connection.translateToAbsolute(start); + connection.translateToAbsolute(end); + + // Messages are straight lines, so just shift the X/Y slightly towards the target side + int newX = (int) (0.75 * end.x() + 0.25 * start.x()); + int newY = (int) (0.75 * end.y() + 0.25 * start.y()); + + return new Point(newX, newY); + } + + private Point findStartPoint(IGraphicalEditPart editPart) { + IFigure figure = editPart.getFigure(); + Rectangle bounds = figure.getBounds(); + + Point top = bounds.getTop().getCopy(); + Point bottom = bounds.getBottom().getCopy(); + figure.translateToAbsolute(top); + figure.translateToAbsolute(bottom); + + int newX = top.x() + 7; // Slightly shift to the right (arbitrary small value) + int newY = (int) (0.75 * top.y() + 0.25 * bottom.y()); // Shift to the bottom (We just need to be on the upper half of the ExecSpec to target the start event) + + return new Point(newX, newY); + } + + private Point findFinishPoint(IGraphicalEditPart editPart) { + IFigure figure = editPart.getFigure(); + Rectangle bounds = figure.getBounds(); + + Point top = bounds.getTop().getCopy(); + Point bottom = bounds.getBottom().getCopy(); + figure.translateToAbsolute(top); + figure.translateToAbsolute(bottom); + + int newX = bottom.x() - 4; // Slightly shift to the left (arbitrary value between -10 and 10) + int newY = (int) (0.25 * top.y() + 0.75 * bottom.y()); // Shift to the top (We just need to be on the lower half of the ExecSpec to target the finish event) + + return new Point(newX, newY); + } + + private Point findAnyPoint(IGraphicalEditPart editPart) { + IFigure figure = editPart.getFigure(); + Rectangle bounds = figure.getBounds(); + + Point topLeft = bounds.getTopLeft().getCopy(); + Point bottomRight = bounds.getBottomRight().getCopy(); + + Random r = new Random(); + int x = topLeft.x() + r.nextInt(bottomRight.x() - topLeft.x()); + int y = topLeft.y() + r.nextInt(bottomRight.y() - topLeft.y()); + + return new Point(x, y); + } + + + +} + diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkTest.java new file mode 100644 index 00000000000..5ac44948f59 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/AbstractOccurrenceLinkTest.java @@ -0,0 +1,320 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import java.util.Arrays; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.ConnectionAnchor; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.PolylineConnection; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.requests.ChangeBoundsRequest; +import org.eclipse.gef.requests.ReconnectRequest; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; +import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.CenterAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.ConnectionSourceAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.ConnectionTargetAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.NodeBottomAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.anchors.NodeTopAnchor; +import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UpdateWeakReferenceForExecSpecEditPolicy; +import org.eclipse.uml2.uml.ActionExecutionSpecification; +import org.eclipse.uml2.uml.DestructionOccurrenceSpecification; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.Lifeline; +import org.eclipse.uml2.uml.Message; +import org.eclipse.uml2.uml.NamedElement; +import org.eclipse.uml2.uml.OccurrenceSpecification; +import org.hamcrest.core.IsEqual; +import org.hamcrest.core.IsInstanceOf; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +/** + * <p> + * Base test class for DurationLinks (DurationConstraint and DurationObservation) and GeneralOrdering + * </p> + * <p> + * These links are really similar in that they use the same Anchors representing + * {@link OccurrenceSpecification}s, thus mostly behave the same. The only differences + * are semantic, and they use a different figure. + * </p> + */ +public abstract class AbstractOccurrenceLinkTest<T extends NamedElement> extends AbstractPapyrusTest { + + @Rule + public final PapyrusEditorFixture editor = new PapyrusEditorFixture(); + + IGraphicalEditPart lifeline1, lifeline3, exec1, exec3, destruction; + ConnectionNodeEditPart message1, message4; + ConnectionNodeEditPart[] links; + + private String[] linkNames; + + private Class<T> umlClass; + + private Class<? extends Connection> connectionFigure; + + public AbstractOccurrenceLinkTest(String[] linkNames, Class<T> umlClass, Class<? extends Connection> connectionFigure) { + Assert.assertTrue("Test setup error: there should be at least 7 links defined for this test class", linkNames.length >= 7); + this.linkNames = linkNames; + this.umlClass = umlClass; + this.connectionFigure = connectionFigure; + } + + @Before + public void getElements() { + lifeline1 = (IGraphicalEditPart) editor.findEditPart("Lifeline1", Lifeline.class); + lifeline3 = (IGraphicalEditPart) editor.findEditPart("Lifeline3", Lifeline.class); + exec1 = (IGraphicalEditPart) editor.findEditPart("ActionExecutionSpecification1", ActionExecutionSpecification.class); + exec3 = (IGraphicalEditPart) editor.findEditPart("ActionExecutionSpecification3", ActionExecutionSpecification.class); + destruction = (IGraphicalEditPart) editor.findEditPart("Message5ReceiveDestroyEvent", DestructionOccurrenceSpecification.class); + + message1 = (ConnectionNodeEditPart) editor.findEditPart("Message1", Message.class); + message4 = (ConnectionNodeEditPart) editor.findEditPart("Message4", Message.class); + + links = Arrays.stream(linkNames).map(name -> editor.findEditPart(name, umlClass)) + .map(ConnectionNodeEditPart.class::cast) + .toArray(ConnectionNodeEditPart[]::new); + } + + @Test + public void testLinksAnchors() { + checkFixedAnchors(links[0], NodeTopAnchor.class, NodeTopAnchor.class); + checkFixedAnchors(links[1], ConnectionSourceAnchor.class, ConnectionTargetAnchor.class); + checkFixedAnchors(links[2], NodeTopAnchor.class, ConnectionTargetAnchor.class); + checkFixedAnchors(links[3], NodeBottomAnchor.class, NodeBottomAnchor.class); + checkFixedAnchors(links[4], ConnectionTargetAnchor.class, ConnectionSourceAnchor.class); + checkFixedAnchors(links[5], ConnectionSourceAnchor.class, CenterAnchor.class); + checkFixedAnchors(links[6], NodeBottomAnchor.class, ConnectionTargetAnchor.class); + } + + @Test + public void testLinksDisplay() { + for (ConnectionNodeEditPart link : links) { + Assert.assertThat(link.getFigure(), IsInstanceOf.instanceOf(connectionFigure)); + } + + // Check the initial anchors. Note that this test is fragile, since the anchors + // depend on the start/finish position of ExecSpecs, Messages and the position of + // destruction events. + // If any of these elements change, the assertions will fail, even if the Link + // anchor itself is correct. + // Anchors are aligned on the grid (Or in the middle of two points on the grid, e.g. for the X location + // on an ExecutionSpecification). + // It seems that message anchors are not always perfectly aligned on the grid (Values "301", "401") + checkPosition(links[0], 130, 100, 410, 160); + checkPosition(links[1], 140, 180, 400, 180); + checkPosition(links[2], 420, 180, 140, 240); + checkPosition(links[3], 420, 280, 410, 301); + checkPosition(links[4], 410, 340, 410, 400); + checkPosition(links[5], 410, 400, 690, 500); + checkPosition(links[6], 130, 401, 410, 580); + } + + @Test + public void testAnchorUpdateOnMessages() { + // Move a message + ReconnectRequest request = new ReconnectRequest(RequestConstants.REQ_RECONNECT_SOURCE); + request.setConnectionEditPart(message1); + + Point sourceLocation = ((PolylineConnection) message1.getConnectionFigure()).getStart().getCopy(); + sourceLocation.setY(sourceLocation.y() - 40); + // sourceLocation.setX(sourceLocation.x() + 3); // Move slightly to the right, to make sure we hover the lifeline and not the exec spec + request.setLocation(sourceLocation); + + EditPart targetEditPart = lifeline1.getTargetEditPart(request); + request.setTargetEditPart(targetEditPart); + + editor.execute(targetEditPart.getCommand(request)); + + // Check that the duration link follows + /** + * FIXME: newStartX should be 140, but the Message Reconnect is incorrect, and the DurationLink simply follows + * The Message Start Anchor is moved to the left side of the ExecSpec, instead of the right side. + * When the MessageReconnect bug is fixed, this should be changed back to 140 + */ + int newStartX = 120; + checkPosition(links[1], newStartX, 140, 400, 180); + } + + @Test + public void testAnchorUpdateOnExecSpec() { + // Move an ExecutionSpecification + ChangeBoundsRequest request = new ChangeBoundsRequest(RequestConstants.REQ_MOVE); + request.setEditParts(exec1); + request.setMoveDelta(new Point(0, 40)); + + Point center = exec1.getFigure().getBounds().getCenter().getCopy(); + center.setY(center.y() + 40); + request.setLocation(center); // Probably doesn't matter + + // By default, messages located below an ExecSpec will move with it. We don't want that here. + disableMoveMessages(request, exec1); + + EditPart targetPart = exec1.getTargetEditPart(request); + editor.execute(targetPart.getCommand(request)); + + // Check that the duration links (1 and 7) follow + checkPosition(links[0], 130, 140, 410, 160); + checkPosition(links[6], 130, 440, 410, 580); + } + + private void disableMoveMessages(ChangeBoundsRequest request, IGraphicalEditPart editPart) { + // Unfortunately, there is no request constant to specify this; this is done via a Keyboard + // listener installed on a specific EditPolicy, so we have to fake the Shift key-press + EditPolicy editPolicy = editPart.getEditPolicy(UpdateWeakReferenceForExecSpecEditPolicy.UDPATE_WEAK_REFERENCE_FOR_EXECSPEC); + ((UpdateWeakReferenceForExecSpecEditPolicy) editPolicy).setKeyPressState(true); + } + + @Test + public void testAnchorUpdateOnDestruction() { + // Move a DestructionOccurrence. Note: it's currently not possible to move the Destruction directly, + // so we move the lifeline horizontally instead. + ChangeBoundsRequest request = new ChangeBoundsRequest(RequestConstants.REQ_MOVE); + request.setEditParts(lifeline3); // Lifeline3 owns a DestructionOccurrenceSpecification + request.setMoveDelta(new Point(120, 0)); + + Point center = lifeline3.getFigure().getBounds().getCenter().getCopy(); + center.setX(center.x() + 120); + request.setLocation(center); // Probably doesn't matter + + EditPart targetPart = lifeline3.getTargetEditPart(request); + editor.execute(targetPart.getCommand(request)); + + // Check that the duration link follows + checkPosition(links[5], 410, 400, 810, 500); + } + + @Test + @SuppressWarnings("unchecked") + public void testLinkDisappearOnSemanticChange() { + T link = (T) EMFHelper.getEObject(links[0]); + + // First change doesn't change source/target; the link should remain + doUnrelatedChange(link); + Assert.assertTrue("The edit part for " + linkNames[0] + " should still be active", links[0].isActive()); + + // Second change modifies the target; the link should be deleted + doChangeTarget(link); + checkDeleted(links[0]); + } + + @Test + public void testLinkDisappearOnAnchorageChange() { + editor.delete(message1); + checkDeleted(links[1]); + + editor.delete(exec3); + checkDeleted(links[2]); + checkDeleted(links[3]); + + editor.delete(destruction); + checkDeleted(links[5]); + checkDeleted(links[4]); // This is indirect: the deletion of the Destruction removes the Delete Message as well, on which link5 is anchored + + // Other durations are still present & active + Assert.assertTrue(linkNames[0] + " should still be active", links[0].isActive()); + Assert.assertTrue(linkNames[6] + " should still be active", links[6].isActive()); + } + + // Link deletion shouldn't deleted linked events + @Test + public void testLinkDeletion() { + Message umlMessage1 = (Message) EMFHelper.getEObject(message1); + Assert.assertNotNull(umlMessage1.eResource()); + + for (ConnectionNodeEditPart linkPart : links) { + @SuppressWarnings("unchecked") + T link = (T) EMFHelper.getEObject(linkPart); + Element source = getSourceElement(link); + Element target = getTargetElement(link); + + Assert.assertNotNull(source); + Assert.assertNotNull(target); + + editor.delete(linkPart); + + // Check that source/target events are still present in the UML Model + Assert.assertEquals(umlMessage1.eResource(), source.eResource()); + Assert.assertEquals(umlMessage1.eResource(), target.eResource()); + } + + // Check that the Message/Exec/Destruction edit parts are unaffected + Assert.assertTrue(message1.isActive()); + Assert.assertTrue(message4.isActive()); + Assert.assertTrue(exec1.isActive()); + Assert.assertTrue(exec3.isActive()); + Assert.assertTrue(destruction.isActive()); + } + + private static void checkDeleted(EditPart editPart) { + Assert.assertFalse("The edit part should be destroyed", editPart.isActive()); + View view = (View) editPart.getModel(); + Assert.assertNull("The edit part's view should no longer be contained in the model", view.eContainer()); + } + + private static void checkPosition(ConnectionNodeEditPart connection, int startX, int startY, int endX, int endY) { + PolylineConnection polyline = (PolylineConnection) connection.getConnectionFigure(); + int[] expected = new int[] { startX, startY, endX, endY }; + + Point start = absolute(polyline, polyline.getStart()); + Point end = absolute(polyline, polyline.getEnd()); + int[] actual = new int[] { start.x(), start.y(), end.x(), end.y() }; + + Assert.assertThat(actual, IsEqual.equalTo(expected)); + } + + private static Point absolute(IFigure reference, Point pointInReference) { + Point result = pointInReference.getCopy(); + reference.translateToAbsolute(result); + return result; + } + + private static void checkFixedAnchors(ConnectionNodeEditPart connection, Class<? extends ConnectionAnchor> sourceAnchor, Class<? extends ConnectionAnchor> targetAnchor) { + String connectionName = ((NamedElement) EMFHelper.getEObject(connection)).getName(); + + Assert.assertThat("Invalid source anchor for " + connectionName, connection.getConnectionFigure().getSourceAnchor(), IsInstanceOf.instanceOf(sourceAnchor)); + Assert.assertThat("Invalid target anchor for " + connectionName, connection.getConnectionFigure().getTargetAnchor(), IsInstanceOf.instanceOf(targetAnchor)); + } + + /** + * Execute a semantic change on the given link that doesn't affect + * its source or target + * + * @param linkToChange + */ + protected abstract void doUnrelatedChange(T linkToChange); + + /** + * Execute a semantic change on the given link that modifies its target + * + * @param linkToChange + */ + protected abstract void doChangeTarget(T linkToChange); + + protected abstract Element getSourceElement(T link); + + protected abstract Element getTargetElement(T link); +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests.java index 33c4a3fa01b..062fe1de45b 100644 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests.java +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests.java @@ -10,7 +10,7 @@ * * Contributors: * CEA LIST - Initial API and implementation - * Christian W. Damus - bugs 533673, 530201 + * Christian W. Damus - bugs 533673, 530201, 536486 * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; @@ -41,6 +41,14 @@ import org.junit.runners.Suite.SuiteClasses; TestCFOperandsCoveredNodes.class, TestCFOperandsSemanticCoverage.class, TestCFOperandsReorder.class, + TestDurationConstraintDisplay.class, + TestDurationObservationDisplay.class, + TestGeneralOrderingDisplay.class, + DurationConstraintCreationTest.class, + DurationObservationCreationTest.class, + GeneralOrderingCreationTest.class, + TimeElementCreationTest.class, + TimeElementMoveTest.class, }) public class BugTests { diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests2.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests2.java index 7234aa803a0..ac539452195 100644 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests2.java +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/BugTests2.java @@ -1,21 +1,20 @@ package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; -import org.junit.runner.RunWith; import org.eclipse.papyrus.junit.framework.classification.ClassificationSuite; +import org.junit.runner.RunWith; import org.junit.runners.Suite.SuiteClasses; @RunWith(ClassificationSuite.class) /* TestLifelineAutoResize_383723.class, TestLifelineLabelCustomize_383722.class */ -@SuiteClasses({ - TestCombinedFragmentName_382951.class, - TestCreationUndo_384618.class, - TestDestructionNode_384201.class, - TestDurationConstraints_384596.class, - TestExecutionSpecificationDimension_384572.class, - TestInteractionConstraint_382966.class, - TestMessageCreate_379661.class, - TestMessageLostFound_384202.class, - TestNestedExecution_384616.class +@SuiteClasses({ + TestCombinedFragmentName_382951.class, + TestCreationUndo_384618.class, + TestDestructionNode_384201.class, + TestExecutionSpecificationDimension_384572.class, + TestInteractionConstraint_382966.class, + TestMessageCreate_379661.class, + TestMessageLostFound_384202.class, + TestNestedExecution_384616.class }) public class BugTests2 { } diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationConstraintCreationTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationConstraintCreationTest.java new file mode 100644 index 00000000000..7415acafe78 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationConstraintCreationTest.java @@ -0,0 +1,43 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.DurationLinkFigure; +import org.eclipse.uml2.uml.DurationConstraint; +import org.eclipse.uml2.uml.Element; + +/** + * Creation test for DurationConstraintLinks + */ +@PluginResource({ "resource/bugs/bug536631-durationLinksCreation.di", "resource/bugs/style.css" }) +@ActiveDiagram("durationLinksCreation") +public class DurationConstraintCreationTest extends AbstractOccurrenceLinkCreationTest<DurationConstraint> { + + public DurationConstraintCreationTest() { + super(DurationConstraint.class, "createDurationConstraintEdgeTool", DurationLinkFigure.class); + } + + @Override + protected Element getSemanticSource(DurationConstraint link) { + return link.getConstrainedElements().get(0); + } + + @Override + protected Element getSemanticTarget(DurationConstraint link) { + return link.getConstrainedElements().size() > 1 ? link.getConstrainedElements().get(1) : link.getConstrainedElements().get(0); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationObservationCreationTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationObservationCreationTest.java new file mode 100644 index 00000000000..59ac3a0cc1b --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/DurationObservationCreationTest.java @@ -0,0 +1,43 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.DurationLinkFigure; +import org.eclipse.uml2.uml.DurationObservation; +import org.eclipse.uml2.uml.Element; + +/** + * Creation test for DurationObservationLinks + */ +@PluginResource({ "resource/bugs/bug536631-durationLinksCreation.di", "resource/bugs/style.css" }) +@ActiveDiagram("durationLinksCreation") +public class DurationObservationCreationTest extends AbstractOccurrenceLinkCreationTest<DurationObservation> { + + public DurationObservationCreationTest() { + super(DurationObservation.class, "createDurationObservationEdgeTool", DurationLinkFigure.class); + } + + @Override + protected Element getSemanticSource(DurationObservation link) { + return link.getEvents().get(0); + } + + @Override + protected Element getSemanticTarget(DurationObservation link) { + return link.getEvents().size() > 1 ? link.getEvents().get(1) : link.getEvents().get(0); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/GeneralOrderingCreationTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/GeneralOrderingCreationTest.java new file mode 100644 index 00000000000..262d07caa04 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/GeneralOrderingCreationTest.java @@ -0,0 +1,43 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.GeneralOrderingDescriptor; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.GeneralOrdering; + +/** + * Creation test for GeneralOrdering Links + */ +@PluginResource({ "resource/bugs/bug536631-durationLinksCreation.di", "resource/bugs/style.css" }) +@ActiveDiagram("durationLinksCreation") +public class GeneralOrderingCreationTest extends AbstractOccurrenceLinkCreationTest<GeneralOrdering> { + + public GeneralOrderingCreationTest() { + super(GeneralOrdering.class, "createGeneralOrdering8CreationTool", GeneralOrderingDescriptor.class); + } + + @Override + protected Element getSemanticSource(GeneralOrdering link) { + return link.getBefore(); + } + + @Override + protected Element getSemanticTarget(GeneralOrdering link) { + return link.getAfter(); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraintDisplay.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraintDisplay.java new file mode 100644 index 00000000000..6b7b866cfa2 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraintDisplay.java @@ -0,0 +1,82 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils; +import org.eclipse.papyrus.infra.services.edit.service.IElementEditService; +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.DurationLinkFigure; +import org.eclipse.uml2.uml.DurationConstraint; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.UMLPackage.Literals; + +/** + * Test class to verify that DurationConstraint links are properly displayed, and properly + * react to changes in the diagram around them (Visual or semantic). + */ +@PluginResource({ "resource/bugs/bug536631-durationLinks.di", "resource/bugs/style.css" }) +@ActiveDiagram("durationConstraintsLinksTest") +public class TestDurationConstraintDisplay extends AbstractOccurrenceLinkTest<DurationConstraint> { + + public TestDurationConstraintDisplay() { + super(new String[] { + "DurationConstraint1", + "DurationConstraint2", + "DurationConstraint3", + "DurationConstraint4", + "DurationConstraint5", + "DurationConstraint6", + "DurationConstraint7", + }, DurationConstraint.class, DurationLinkFigure.class); + } + + @Override + protected void doUnrelatedChange(DurationConstraint linkToChange) { + DurationConstraint duration2 = (DurationConstraint) EMFHelper.getEObject(links[1]); + + List<Element> values = new ArrayList<>(linkToChange.getConstrainedElements()); + values.add(duration2.getConstrainedElements().get(1)); + + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.CONSTRAINT__CONSTRAINED_ELEMENT, values); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected void doChangeTarget(DurationConstraint linkToChange) { + List<Element> values = new ArrayList<>(linkToChange.getConstrainedElements()); + values.remove(1); + + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.CONSTRAINT__CONSTRAINED_ELEMENT, values); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected Element getSourceElement(DurationConstraint link) { + return link.getConstrainedElements().get(0); + } + + @Override + protected Element getTargetElement(DurationConstraint link) { + return link.getConstrainedElements().size() == 1 ? link.getConstrainedElements().get(0) : link.getConstrainedElements().get(1); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraints_384596.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraints_384596.java deleted file mode 100644 index 997b94307f5..00000000000 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationConstraints_384596.java +++ /dev/null @@ -1,228 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2012 CEA LIST. - * - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * CEA LIST - Initial API and implementation - * - *****************************************************************************/ -package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.draw2d.geometry.Dimension; -import org.eclipse.draw2d.geometry.Point; -import org.eclipse.draw2d.geometry.Rectangle; -import org.eclipse.gef.EditPart; -import org.eclipse.gef.commands.Command; -import org.eclipse.gef.commands.UnexecutableCommand; -import org.eclipse.gef.requests.DirectEditRequest; -import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest; -import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequestFactory; -import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; -import org.eclipse.gmf.runtime.emf.type.core.IElementType; -import org.eclipse.papyrus.commands.ICreationCommand; -import org.eclipse.papyrus.junit.framework.classification.FailingTest; -import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart; -import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationConstraintEditPart; -import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationConstraintLabelEditPart; -import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart; -import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes; -import org.eclipse.papyrus.uml.diagram.sequence.tests.ISequenceDiagramTestsConstants; -import org.eclipse.papyrus.uml.diagram.sequence.tests.canonical.CreateSequenceDiagramCommand; -import org.eclipse.papyrus.uml.diagram.sequence.tests.canonical.TestTopNode; -import org.eclipse.papyrus.uml.tools.utils.ValueSpecificationUtil; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.Widget; -import org.eclipse.uml2.uml.ActionExecutionSpecification; -import org.eclipse.uml2.uml.DurationConstraint; -import org.eclipse.uml2.uml.Interval; -import org.eclipse.uml2.uml.OccurrenceSpecification; -import org.eclipse.uml2.uml.ValueSpecification; -import org.junit.Test; - -/** - * An embedded textuel editor shall allow editing duration constraints. This editor shall be accessible on the diagram. - * When the two values of the interval are equal, the value shall be displayed only once. - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=384596 - * - */ -public class TestDurationConstraints_384596 extends TestTopNode { - - private static final String SEP = ".."; - - /** The occurrence specification(s) which are the nearest from a creation request */ - public static final String NEAREST_OCCURRENCE_SPECIFICATION = "Nearest occurrence specification"; //$NON-NLS-1$ - - /** The occurrence specification(s) which are the nearest from a creation request (2nd end of creation) */ - public static final String NEAREST_OCCURRENCE_SPECIFICATION_2 = "Nearest occurrence specification (end)"; //$NON-NLS-1$ - - private static final String EDIT = "Edit: "; - - @Override - protected ICreationCommand getDiagramCommandCreation() { - return new CreateSequenceDiagramCommand(); - } - - @Override - protected String getProjectName() { - return ISequenceDiagramTestsConstants.PROJECT_NAME; - } - - @Override - protected String getFileName() { - return ISequenceDiagramTestsConstants.FILE_NAME; - } - - @FailingTest ("To be erased or rewritten to take new architecture into account") - @Test - public void testDurationEdition() { - createNode(UMLElementTypes.Lifeline_Shape, getRootEditPart(), new Point(100, 100), new Dimension(62, 200), null); - final LifelineEditPart lifeline1 = (LifelineEditPart)getRootEditPart().getChildren().get(0); - waitForComplete(); - - createNode(UMLElementTypes.ActionExecutionSpecification_Shape, lifeline1, new Point(131, 200), new Dimension(20, 40), null); - waitForComplete(); - - ActionExecutionSpecificationEditPart esp = (ActionExecutionSpecificationEditPart)lifeline1.getChildren().get(1); - createDuraitonConstraint(lifeline1, esp); - - DurationConstraintEditPart dp = (DurationConstraintEditPart)lifeline1.getChildren().get(2); - - // edit text - WrappingLabel label = verifyEditText(dp, "1s", "2s"); - assertTrue(EDIT + TEST_THE_EXECUTION, label.getText().contains("1s..2s")); - - label = verifyEditText(dp, "d", "d+3"); - assertTrue(EDIT + TEST_THE_EXECUTION, label.getText().contains("d..d+3")); - - getEMFCommandStack().undo(); - assertTrue(EDIT + TEST_THE_UNDO, label.getText().contains("1s..2s")); - - label = verifyEditText(dp, "1", "1"); - assertTrue(EDIT + TEST_THE_EXECUTION, label.getText().contains("1") && !label.getText().contains(SEP)); - - } - - protected WrappingLabel verifyEditText(DurationConstraintEditPart dp, String min, String max) { - DurationConstraintLabelEditPart lp = (DurationConstraintLabelEditPart)dp.getChildren().get(0); - WrappingLabel label = performEditRequest(lp); - - Composite composite = (Composite)lp.getViewer().getControl(); - Text editor = findEditor(composite, label); - - editor.setText(min + SEP + max); - input(editor, SWT.CR); - - DurationConstraint constraint = (DurationConstraint)dp.resolveSemanticElement(); - ValueSpecification spec = constraint.getSpecification(); - assertTrue(EDIT + TEST_THE_EXECUTION, min.equals(ValueSpecificationUtil.getSpecificationValue(((Interval)spec).getMin()))); - assertTrue(EDIT + TEST_THE_EXECUTION, max.equals(ValueSpecificationUtil.getSpecificationValue(((Interval)spec).getMax()))); - - waitForComplete(); - return label; - } - - protected void createDuraitonConstraint(final LifelineEditPart lifeline1, ActionExecutionSpecificationEditPart esp) { - ActionExecutionSpecification aes = (ActionExecutionSpecification)esp.resolveSemanticElement(); - - Map<String, Object> extendedData = new HashMap<String, Object>(); - List<OccurrenceSpecification> events = new ArrayList<OccurrenceSpecification>(2); - events.add(aes.getStart()); - extendedData.put(NEAREST_OCCURRENCE_SPECIFICATION, events); - - events = new ArrayList<OccurrenceSpecification>(2); - events.add(aes.getFinish()); - extendedData.put(NEAREST_OCCURRENCE_SPECIFICATION_2, events); - - createNode(UMLElementTypes.DurationConstraint_Shape, lifeline1, getAbsoluteBounds(esp).getBottom(), new Dimension(20, 40), extendedData); - waitForComplete(); - } - - public void input(Widget widget, char... character) { - if(widget.isDisposed()) { - return; - } - - for(char c : character) { - Event e = createKeyEvent(widget, 0, c); - e.type = SWT.KeyDown; - widget.notifyListeners(SWT.KeyDown, e); - - e = createKeyEvent(widget, 0, c); - e.type = SWT.KeyUp; - widget.notifyListeners(SWT.KeyUp, e); - } - waitForComplete(); - - Event e = new Event(); - e.type = SWT.DefaultSelection; - widget.notifyListeners(SWT.DefaultSelection, e); - } - - private Event createKeyEvent(Widget widget, int keyCode, char character) { - Event event = new Event(); - event.time = (int)System.currentTimeMillis(); - event.widget = widget; - event.display = Display.getDefault(); - event.keyCode = keyCode; - event.character = character; - return event; - } - - private Text findEditor(Composite composite, WrappingLabel label) { - for(Control c : composite.getChildren()) { - if(c instanceof Text) { - if(label.getText().equals(((Text)c).getText())) { - return (Text)c; - } - } - } - return null; - } - - protected WrappingLabel performEditRequest(DurationConstraintLabelEditPart lp) { - WrappingLabel label = (WrappingLabel)lp.getFigure(); - Rectangle b = label.getBounds().getCopy(); - label.translateToAbsolute(b); - DirectEditRequest req = new DirectEditRequest(); - req.setLocation(b.getCenter()); - lp.performRequest(req); - return label; - } - - public void createNode(IElementType type, EditPart parentPart, Point location, Dimension size, Map<String, Object> extendedData) { - //CREATION - CreateViewRequest requestcreation = CreateViewRequestFactory.getCreateShapeRequest(type, getRootEditPart().getDiagramPreferencesHint()); - requestcreation.setLocation(location); - requestcreation.setSize(size); - if(extendedData != null) { - requestcreation.getExtendedData().putAll(extendedData); - } - Command command = parentPart.getCommand(requestcreation); - assertNotNull(CREATION + COMMAND_NULL, command); - assertTrue(CREATION + TEST_IF_THE_COMMAND_IS_CREATED, command != UnexecutableCommand.INSTANCE); - assertTrue(CREATION + TEST_IF_THE_COMMAND_CAN_BE_EXECUTED, command.canExecute() == true); - - getDiagramCommandStack().execute(command); - } - -} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationObservationDisplay.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationObservationDisplay.java new file mode 100644 index 00000000000..97a03e90bda --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestDurationObservationDisplay.java @@ -0,0 +1,83 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils; +import org.eclipse.papyrus.infra.services.edit.service.IElementEditService; +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.DurationLinkFigure; +import org.eclipse.uml2.uml.DurationObservation; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.UMLPackage.Literals; + +/** + * Test class to verify that DurationObservation links are properly displayed, and properly + * react to changes in the diagram around them (Visual or semantic). + */ +@PluginResource({ "resource/bugs/bug536631-durationLinks.di", "resource/bugs/style.css" }) +@ActiveDiagram("durationObservationsLinksTest") +public class TestDurationObservationDisplay extends AbstractOccurrenceLinkTest<DurationObservation> { + + public TestDurationObservationDisplay() { + super(new String[] { + "DurationObservation1", + "DurationObservation2", + "DurationObservation3", + "DurationObservation4", + "DurationObservation5", + "DurationObservation6", + "DurationObservation7" + }, DurationObservation.class, + DurationLinkFigure.class); + } + + @Override + protected void doUnrelatedChange(DurationObservation linkToChange) { + DurationObservation duration2 = (DurationObservation) EMFHelper.getEObject(links[1]); + + List<Element> values = new ArrayList<>(linkToChange.getEvents()); + values.add(duration2.getEvents().get(1)); + + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.DURATION_OBSERVATION__EVENT, values); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected void doChangeTarget(DurationObservation linkToChange) { + List<Element> values = new ArrayList<>(linkToChange.getEvents()); + values.remove(1); + + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.DURATION_OBSERVATION__EVENT, values); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected Element getSourceElement(DurationObservation link) { + return link.getEvents().get(0); + } + + @Override + protected Element getTargetElement(DurationObservation link) { + return link.getEvents().size() == 1 ? link.getEvents().get(0) : link.getEvents().get(1); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestGeneralOrderingDisplay.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestGeneralOrderingDisplay.java new file mode 100644 index 00000000000..fecdc346bec --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TestGeneralOrderingDisplay.java @@ -0,0 +1,76 @@ +/***************************************************************************** + * Copyright (c) 2018 CEA LIST, EclipseSource 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils; +import org.eclipse.papyrus.infra.services.edit.service.IElementEditService; +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.figures.GeneralOrderingDescriptor; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.GeneralOrdering; +import org.eclipse.uml2.uml.UMLPackage.Literals; + +/** + * Test class to verify that DurationObservation links are properly displayed, and properly + * react to changes in the diagram around them (Visual or semantic). + */ +@PluginResource({ "resource/bugs/bug536631-durationLinks.di", "resource/bugs/style.css" }) +@ActiveDiagram("generalOrderingLinksTest") +public class TestGeneralOrderingDisplay extends AbstractOccurrenceLinkTest<GeneralOrdering> { + + public TestGeneralOrderingDisplay() { + super(new String[] { + "GeneralOrdering1", + "GeneralOrdering2", + "GeneralOrdering3", + "GeneralOrdering4", + "GeneralOrdering5", + "GeneralOrdering6", + "GeneralOrdering7" + }, GeneralOrdering.class, + GeneralOrderingDescriptor.class); + } + + @Override + protected void doUnrelatedChange(GeneralOrdering linkToChange) { + // Rename the GeneralOrdering (This part of the test doesn't make much sense for GO; it + // was mostly designed for DurationLinks, which use a generic list to hold their source/target) + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.NAMED_ELEMENT__NAME, linkToChange.getName() + "Renamed"); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected void doChangeTarget(GeneralOrdering linkToChange) { + GeneralOrdering ordering2 = (GeneralOrdering) EMFHelper.getEObject(links[1]); + + IElementEditService provider = ElementEditServiceUtils.getCommandProvider(linkToChange); + SetRequest request = new SetRequest(linkToChange, Literals.GENERAL_ORDERING__AFTER, ordering2.getAfter()); + editor.execute(provider.getEditCommand(request)); + } + + @Override + protected Element getSourceElement(GeneralOrdering link) { + return link.getBefore(); + } + + @Override + protected Element getTargetElement(GeneralOrdering link) { + return link.getAfter(); + } + +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementCreationTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementCreationTest.java new file mode 100644 index 00000000000..dc4c61f571b --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementCreationTest.java @@ -0,0 +1,451 @@ +/***************************************************************************** + * Copyright (c) 2018 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import static org.eclipse.papyrus.junit.matchers.MoreMatchers.greaterThan; +import static org.eclipse.papyrus.junit.matchers.MoreMatchers.lessThan; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.draw2d.geometry.Translatable; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.GraphicalEditPart; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequestFactory; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.papyrus.infra.gmfdiag.common.service.palette.AspectUnspecifiedTypeCreationTool; +import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry; +import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; +import org.eclipse.papyrus.junit.matchers.CommandMatchers; +import org.eclipse.papyrus.junit.matchers.DiagramMatchers; +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.uml2.uml.DestructionOccurrenceSpecification; +import org.eclipse.uml2.uml.Element; +import org.eclipse.uml2.uml.ExecutionOccurrenceSpecification; +import org.eclipse.uml2.uml.ExecutionSpecification; +import org.eclipse.uml2.uml.Lifeline; +import org.eclipse.uml2.uml.Message; +import org.eclipse.uml2.uml.MessageEnd; +import org.eclipse.uml2.uml.NamedElement; +import org.eclipse.uml2.uml.TimeConstraint; +import org.eclipse.uml2.uml.TimeObservation; +import org.hamcrest.CustomTypeSafeMatcher; +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +/** + * Regression tests for creation of {@link TimeObservation}s and {@link TimeConstraint}s + * in the sequence diagram editor, especially those tracked under the umbrella of + * <a href="http://eclip.se/537571">bug 537571</a>. + * + * @author Christian W. Damus + * @see <a href="http://eclip.se/537571">bug 537571</a> + */ +@PluginResource("resource/bugs/bug537571-times.di") +@ActiveDiagram("scenario") +@RunWith(Parameterized.class) +public class TimeElementCreationTest extends AbstractPapyrusTest { + + @Rule + public final PapyrusEditorFixture editor = new PapyrusEditorFixture(); + + private final What what; + + static { + // Kick the modeled element types registry that is needed by the tests + ElementTypeSetConfigurationRegistry.getInstance(); + } + + /** + * Initializes me. + * + * @param what + * what to create + */ + public TimeElementCreationTest(What what) { + super(); + + this.what = what; + } + + @Test + public void createOnMessageSendOnLifeline() { + EditPart lifelineEP = editor.findEditPart("foo", Lifeline.class); + EditPart messageEP = editor.findEditPart("message1", Message.class); + PointList points = getGeometry(messageEP, PointList.class); + + EditPart timeEP = editor.createShape(lifelineEP, what.getElementType(), + points.getFirstPoint(), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a message-end observed", event, instanceOf(MessageEnd.class)); + assertThat("Wrong message-end observed", event.getName(), is("message1-send")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(lifelineEP)); + } + + @Test + public void createOnMessageReceiveOnLifeline() { + EditPart lifelineEP = editor.findEditPart("foo", Lifeline.class); + EditPart messageEP = editor.findEditPart("reply1", Message.class); + PointList points = getGeometry(messageEP, PointList.class); + + EditPart timeEP = editor.createShape(lifelineEP, what.getElementType(), + points.getLastPoint(), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a message-end observed", event, instanceOf(MessageEnd.class)); + assertThat("Wrong message-end observed", event.getName(), is("reply1-recv")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(lifelineEP)); + } + + @Test + public void createOnMessageReceiveOnExecution() { + EditPart execEP = editor.findEditPart("exec2", ExecutionSpecification.class); + EditPart messageEP = editor.findEditPart("message4", Message.class); + Rectangle bounds = getGeometry(execEP, Rectangle.class); + PointList points = getGeometry(messageEP, PointList.class); + + EditPart timeEP = editor.createShape(execEP, what.getElementType(), + new Point(bounds.getTop().x(), points.getLastPoint().y()), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a message-end observed", event, instanceOf(MessageEnd.class)); + assertThat("Wrong message-end observed", event.getName(), is("message4-recv")); + what.assertOwner(this, timeElement); + + EditPart lifelineEP = editor.findEditPart("foo", Lifeline.class); + assertThat("Wrong parent edit-part", timeEP.getParent(), is(lifelineEP)); + } + + @Test + public void createOnDestructionOccurrence() { + EditPart destructionEP = editor.findEditPart("destroy2", DestructionOccurrenceSpecification.class); + Rectangle bounds = getGeometry(destructionEP, Rectangle.class); + + EditPart timeEP = editor.createShape(destructionEP, what.getElementType(), + bounds.getCenter(), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a destruction occurrence observed", event, instanceOf(DestructionOccurrenceSpecification.class)); + assertThat("Wrong destruction occurrence observed", event.getName(), is("destroy2")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(destructionEP)); + } + + @Test + public void createOnExecutionStart() { + EditPart execEP = editor.findEditPart("exec2", ExecutionSpecification.class); + Rectangle bounds = getGeometry(execEP, Rectangle.class); + + EditPart timeEP = editor.createShape(execEP, what.getElementType(), + bounds.getTop().getTranslated(0, 7), null); // Within threshold below the top + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not an execution occurrence observed", event, instanceOf(ExecutionOccurrenceSpecification.class)); + assertThat("Wrong execution occurrence observed", event.getName(), is("exec2-start")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(execEP)); + } + + @Test + public void createOnExecutionFinish() { + EditPart execEP = editor.findEditPart("exec2", ExecutionSpecification.class); + Rectangle bounds = getGeometry(execEP, Rectangle.class); + + EditPart timeEP = editor.createShape(execEP, what.getElementType(), + bounds.getBottom().getTranslated(0, -7), null); // Above the bottom + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not an execution occurrence observed", event, instanceOf(ExecutionOccurrenceSpecification.class)); + assertThat("Wrong execution occurrence observed", event.getName(), is("exec2-finish")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(execEP)); + } + + /** + * Test placement of the time element on a lifeline creation where the creation message + * is incoming from the left. + */ + @Test + public void createOnLifelineCreationLeftToRightCreateMessage() { + EditPart lifelineEP = editor.findEditPart("thing", Lifeline.class); + Point llTop = getGeometry(lifelineEP, Rectangle.class).getTop(); + + EditPart timeEP = editor.createShape(lifelineEP, what.getElementType(), + llTop.getTranslated(0, 7), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a message-end observed", event, instanceOf(MessageEnd.class)); + assertThat("Wrong message-end observed", event.getName(), is("create1-recv")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(lifelineEP)); + + Rectangle timeBounds = getGeometry(timeEP, Rectangle.class); + assertThat("Wrong side of lifeline head", timeBounds.getCenter().x(), greaterThan(llTop.x())); + } + + /** + * Test placement of the time element on a lifeline creation where the creation message + * is incoming from the right. + */ + @Test + public void createOnLifelineCreationRightToLeftCreateMessage() { + EditPart lifelineEP = editor.findEditPart("whatsit", Lifeline.class); + Point llTop = getGeometry(lifelineEP, Rectangle.class).getTop(); + + EditPart timeEP = editor.createShape(lifelineEP, what.getElementType(), + llTop.getTranslated(0, 7), null); + Element timeElement = what.getSemanticElement(timeEP); + + NamedElement event = what.getEvent(timeElement); + assertThat("Not a message-end observed", event, instanceOf(MessageEnd.class)); + assertThat("Wrong message-end observed", event.getName(), is("create2-recv")); + what.assertOwner(this, timeElement); + + assertThat("Wrong parent edit-part", timeEP.getParent(), is(lifelineEP)); + + Rectangle timeBounds = getGeometry(timeEP, Rectangle.class); + assertThat("Wrong side of lifeline head", timeBounds.getCenter().x(), lessThan(llTop.x())); + } + + /** + * Verify that a time observation cannot be created just anywhere on the lifeline + * (it applies only to an occurrence specification). + */ + @Test + public void noCreateOnLifeline() { + IGraphicalEditPart lifelineEP = (IGraphicalEditPart) editor.findEditPart("foo", Lifeline.class); + EditPart messageEP = editor.findEditPart("message1", Message.class); + PointList points = getGeometry(messageEP, PointList.class); + + CreateViewRequest request = CreateViewRequestFactory.getCreateShapeRequest( + what.getElementType(), + lifelineEP.getDiagramPreferencesHint()); + + request.setLocation(points.getFirstPoint().getTranslated(0, -30)); + // Default size + + // The edit-parts depend on the tool setting this + CreateElementRequest semanticRequest = null; + if (!request.getViewDescriptors().isEmpty()) { + semanticRequest = (CreateElementRequest) ((CreateElementRequestAdapter) request.getViewDescriptors().get(0).getElementAdapter()).getAdapter(CreateElementRequest.class); + if (semanticRequest != null) { + semanticRequest.setParameter(AspectUnspecifiedTypeCreationTool.INITIAL_MOUSE_LOCATION_FOR_CREATION, request.getLocation().getCopy()); + } + } + + EditPart target = lifelineEP.getTargetEditPart(request); + assertThat("No target edit part", target, notNullValue()); + Command command = target.getCommand(request); + assertThat("Should not be able to create", command, not(CommandMatchers.GEF.canExecute())); + } + + // + // Test framework + // + + @Parameters(name = "{0}") + public static Iterable<Object[]> parameters() { + return Stream.of(What.values()).map(l -> new Object[] { l }).collect(Collectors.toList()); + } + + @Before + public void maximizeEditor() { + IEditorPart editor = this.editor.getEditor(); + IWorkbenchPage page = editor.getSite().getPage(); + page.setPartState(page.getReference(editor), IWorkbenchPage.STATE_MAXIMIZED); + this.editor.flushDisplayEvents(); + } + + /** + * Work around the absence of an {@code equals} method in the {@link PointList} class. + * + * @param geometry + * a geometry to test for equality with an actual observed geometry + * @return the geometry matcher + */ + static Matcher<Object> equalGeometry(Object geometry) { + return new CustomTypeSafeMatcher<Object>("equals " + geometry) { + @Override + protected boolean matchesSafely(Object item) { + + return ((item instanceof PointList) && (geometry instanceof PointList)) + ? Arrays.equals(((PointList) item).toIntArray(), + ((PointList) geometry).toIntArray()) + : Objects.equals(item, geometry); + } + }; + } + + /** + * Query the geometry of an interaction element in the diagram. + * + * @param interactionElement + * an interaction element (interaction fragment or message) + * @param type + * the type, either {@link Rectangle} or {@link PointList}, of the geometry to get + * + * @return its geometry, either a {@link Rectangle}, {@link PointList}, or {@code null} + * for elements that have no geometry of their own but would be implied by others (such + * as execution occurrences) + * + * @throws IllegalArgumentException + * if the geometry {@link type} is not recognized + */ + <T extends Translatable> T getGeometry(EObject interactionElement, Class<T> type) { + T result = null; + GraphicalEditPart editPart = Optional.ofNullable(editor.findEditPart(interactionElement)) + .filter(GraphicalEditPart.class::isInstance).map(GraphicalEditPart.class::cast) + .orElse(null); + + // Some things don't have edit-parts, such as execution occurrences + if (editPart != null) { + result = getGeometry(editPart, type); + } + + return result; + } + + /** + * Query the geometry of an edit-part in the diagram. + * + * @param editPart + * an edit-part + * @param type + * the type, either {@link Rectangle} or {@link PointList}, of the geometry to get + * + * @return its geometry, either a {@link Rectangle}, {@link PointList}, or {@code null} + * for elements that have no geometry of their own but would be implied by others (such + * as execution occurrences) + * + * @throws IllegalArgumentException + * if the geometry {@link type} is not recognized + */ + static <T extends Translatable> T getGeometry(EditPart editPart, Class<T> type) { + if (!Rectangle.class.isAssignableFrom(type) && !PointList.class.isAssignableFrom(type)) { + throw new IllegalArgumentException("unrecognized geometry type: " + type.getName()); + } + + Object result = null; + + // Some things don't have edit-parts, such as execution occurrences + if (editPart instanceof IGraphicalEditPart) { + IFigure figure = ((IGraphicalEditPart) editPart).getFigure(); + result = (figure instanceof Connection) + ? ((Connection) figure).getPoints().getCopy() + : figure.getBounds().getCopy(); + figure.getParent().translateToAbsolute((Translatable) result); + } + + return type.cast(result); + } + + // + // Nested types + // + + enum What { + OBSERVATION(TimeObservation.class, UMLElementTypes.TimeObservation_Shape, TimeObservation::getEvent), // + CONSTRAINT(TimeConstraint.class, UMLElementTypes.TimeConstraint_Shape, + con -> con.getConstrainedElements().stream().filter(NamedElement.class::isInstance) + .map(NamedElement.class::cast).findFirst().orElse(null)); + + private final Class<?> type; + private final IElementType elementType; + private final Function<? super Element, ? extends NamedElement> eventFunction; + + @SuppressWarnings("unchecked") + <T> What(Class<T> type, IElementType elementType, Function<? super T, ? extends NamedElement> eventFunction) { + this.type = type; + this.elementType = elementType; + this.eventFunction = (Function<? super Element, ? extends NamedElement>) eventFunction; + } + + IElementType getElementType() { + return elementType; + } + + Element getSemanticElement(EditPart editPart) { + assertThat(editPart, DiagramMatchers.semanticThat(instanceOf(type))); + return (Element) editPart.getAdapter(EObject.class); + } + + NamedElement getEvent(Element timeElement) { + return eventFunction.apply(timeElement); + } + + void assertOwner(TimeElementCreationTest test, Element timeElement) { + Element expectedOwner; + + switch (this) { + case CONSTRAINT: + // The interaction + expectedOwner = (Element) test.editor.getActiveDiagram().resolveSemanticElement(); + break; + default: + expectedOwner = test.editor.getModel(); + break; + } + + assertThat("Wrong owner", timeElement.getOwner(), is(expectedOwner)); + } + } +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementMoveTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementMoveTest.java new file mode 100644 index 00000000000..fa290a310f6 --- /dev/null +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/TimeElementMoveTest.java @@ -0,0 +1,195 @@ +/***************************************************************************** + * Copyright (c) 2018 Christian W. Damus, CEA LIST, and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christian W. Damus - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.uml.diagram.sequence.tests.bug; + +import static org.eclipse.papyrus.uml.diagram.sequence.tests.bug.TimeElementCreationTest.getGeometry; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; + +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.ConnectionEditPart; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.Request; +import org.eclipse.gef.RequestConstants; +import org.eclipse.gef.requests.BendpointRequest; +import org.eclipse.gef.requests.ChangeBoundsRequest; +import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry; +import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest; +import org.eclipse.papyrus.junit.utils.rules.ActiveDiagram; +import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; +import org.eclipse.papyrus.junit.utils.rules.PluginResource; +import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.TimeElementCreationTest.What; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.uml2.uml.ExecutionSpecification; +import org.eclipse.uml2.uml.Lifeline; +import org.eclipse.uml2.uml.Message; +import org.eclipse.uml2.uml.TimeConstraint; +import org.eclipse.uml2.uml.TimeObservation; +import org.hamcrest.CustomTypeSafeMatcher; +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +/** + * Regression tests for moving (with undo) of {@link TimeObservation}s and + * {@link TimeConstraint}s in the sequence diagram editor. + * + * @author Christian W. Damus + * @see <a href="http://eclip.se/537571">bug 537571</a> + */ +@PluginResource("resource/bugs/bug537571-times.di") +@ActiveDiagram("scenario") +@RunWith(Parameterized.class) +public class TimeElementMoveTest extends AbstractPapyrusTest { + private static final boolean SEND = true; + private static final boolean RECV = true; + + @Rule + public final PapyrusEditorFixture editor = new PapyrusEditorFixture(); + + private final What what; + + static { + // Kick the modeled element types registry that is needed by the tests + ElementTypeSetConfigurationRegistry.getInstance(); + } + + /** + * Initializes me. + * + * @param what + * what to create + */ + public TimeElementMoveTest(What what) { + super(); + + this.what = what; + } + + @Test + public void moveOnMessageSendOnLifeline() { + EditPart lifelineEP = editor.findEditPart("foo", Lifeline.class); + EditPart messageEP = editor.findEditPart("message1", Message.class); + PointList points = getGeometry(messageEP, PointList.class); + + EditPart timeEP = editor.createShape(lifelineEP, what.getElementType(), + points.getFirstPoint(), null); + + moveMessageAssertion(messageEP, timeEP, SEND); + } + + private void moveMessageAssertion(EditPart messageEP, EditPart timeEP, boolean sourceEnd) { + PointList messageGeom = getGeometry(messageEP, PointList.class); + int messageY = (sourceEnd ? messageGeom.getFirstPoint() : messageGeom.getLastPoint()).y(); + Rectangle original = getGeometry(timeEP, Rectangle.class); + Rectangle expected = original.getCopy(); + expected.setY(messageY - 20); + + move(messageEP, 0, -20); + + assertThat("Not moved correctly", getGeometry(timeEP, Rectangle.class), equalGeometry(expected)); + + expected.translate(0, 20); + editor.undo(); + + assertThat("Not tracked on undo", getGeometry(timeEP, Rectangle.class), equalGeometry(original)); + } + + @Test + public void moveOnMessageReceiveOnExecution() { + EditPart execEP = editor.findEditPart("exec2", ExecutionSpecification.class); + EditPart messageEP = editor.findEditPart("message4", Message.class); + Rectangle bounds = getGeometry(execEP, Rectangle.class); + PointList points = getGeometry(messageEP, PointList.class); + + EditPart timeEP = editor.createShape(execEP, what.getElementType(), + new Point(bounds.getTop().x(), points.getLastPoint().y()), null); + + moveMessageAssertion(messageEP, timeEP, RECV); + } + + // + // Test framework + // + + @Parameters(name = "{0}") + public static Iterable<Object[]> parameters() { + return TimeElementCreationTest.parameters(); + } + + @Before + public void maximizeEditor() { + IEditorPart editor = this.editor.getEditor(); + IWorkbenchPage page = editor.getSite().getPage(); + page.setPartState(page.getReference(editor), IWorkbenchPage.STATE_MAXIMIZED); + this.editor.flushDisplayEvents(); + } + + /** + * Work around the absence of an {@code equals} method in the {@link PointList} class. + * + * @param geometry + * a geometry to test for equality with an actual observed geometry + * @return the geometry matcher + */ + static Matcher<Object> equalGeometry(Object geometry) { + return new CustomTypeSafeMatcher<Object>("equals " + geometry) { + @Override + protected boolean matchesSafely(Object item) { + + return ((item instanceof PointList) && (geometry instanceof PointList)) + ? Arrays.equals(((PointList) item).toIntArray(), + ((PointList) geometry).toIntArray()) + : Objects.equals(item, geometry); + } + }; + } + + void move(EditPart editPart, int deltaX, int deltaY) { + Request move; + if (editPart instanceof ConnectionEditPart) { + ConnectionEditPart connection = (ConnectionEditPart) editPart; + Point mid = getGeometry(connection, PointList.class).getMidpoint(); + mid.translate(deltaX, deltaY); + + // Messages are moved by the gesture that creates bendpoints + BendpointRequest bendpoint = new BendpointRequest(); + bendpoint.setType(RequestConstants.REQ_CREATE_BENDPOINT); + bendpoint.setSource(connection); + bendpoint.setLocation(mid); + move = bendpoint; + } else { + ChangeBoundsRequest bounds = new ChangeBoundsRequest(RequestConstants.REQ_MOVE); + bounds.setEditParts(editPart); + bounds.setConstrainedMove(false); + bounds.setMoveDelta(new Point(deltaX, deltaY)); + move = bounds; + } + + EditPart target = editPart.getTargetEditPart(move); + editor.execute(Optional.ofNullable(target).orElse(editPart).getCommand(move)); + } +} diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramChildNode.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramChildNode.java index 592168389df..08ca1cd2a13 100644 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramChildNode.java +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramChildNode.java @@ -79,10 +79,10 @@ public class TestSequenceDiagramChildNode extends TestChildNode { testToManageChildNode(UMLElementTypes.BehaviorExecutionSpecification_Shape, lifelineProvider); } -// @Test -// public void testToManageDestructionOccurrence() { -// testToManageChildNode(UMLElementTypes.DestructionOccurrenceSpecification_Shape, lifelineProvider); -// } + // @Test + // public void testToManageDestructionOccurrence() { + // testToManageChildNode(UMLElementTypes.DestructionOccurrenceSpecification_Shape, lifelineProvider); + // } @@ -93,15 +93,6 @@ public class TestSequenceDiagramChildNode extends TestChildNode { semanticChild = true; } - - @Test - public void testToManageTimeConstraint() { - createChildNode(UMLElementTypes.ActionExecutionSpecification_Shape, lifelineProvider); - semanticChild = false; - testToManageChildNode(UMLElementTypes.TimeConstraint_Shape, executionProvider); - semanticChild = true; - } - @Test public void testToManageDurationConstraint() { createChildNode(UMLElementTypes.ActionExecutionSpecification_Shape, lifelineProvider); @@ -109,7 +100,7 @@ public class TestSequenceDiagramChildNode extends TestChildNode { testToCreateChildNode(UMLElementTypes.ActionExecutionSpecification_Shape, executionProvider); { - //DESTROY SEMANTIC+ VIEW + // DESTROY SEMANTIC+ VIEW IChildTestProvider provider = executionProvider; assertTrue(DESTROY_DELETION + INITIALIZATION_TEST, provider.getEditPartChildrenSize() == 1); assertTrue(DESTROY_DELETION + INITIALIZATION_TEST, provider.getViewChildrenSize() == 1); @@ -142,34 +133,42 @@ public class TestSequenceDiagramChildNode extends TestChildNode { IChildTestProvider executionProvider = new IChildTestProvider() { + @Override public int getEditPartChildrenSize() { return TestSequenceDiagramChildNode.this.lifelineProvider.getEditPartChildrenSize() - 1; // ignore ActionExecution } + @Override public int getSemanticChildrenSize() { return TestSequenceDiagramChildNode.this.lifelineProvider.getSemanticChildrenSize() - 1; } + @Override public int getViewChildrenSize() { return TestSequenceDiagramChildNode.this.lifelineProvider.getViewChildrenSize() - 1; } + @Override public Element getDropElement() { return null; } + @Override public GraphicalEditPart getParentEditPart() { return TestSequenceDiagramChildNode.this.lifelineProvider.getParentEditPart(); } + @Override public GraphicalEditPart getDestroyEditPart() { - return (GraphicalEditPart)getParentEditPart().getChildren().get(2); + return (GraphicalEditPart) getParentEditPart().getChildren().get(2); } + @Override public boolean hasSemanticChild() { return semanticChild; } + @Override public Point getChildLocation(GraphicalEditPart parentEditPart) { return TestSequenceDiagramChildNode.this.lifelineProvider.getChildLocation(parentEditPart); } @@ -177,15 +176,17 @@ public class TestSequenceDiagramChildNode extends TestChildNode { IChildTestProvider lifelineProvider = new IChildTestProvider() { + @Override public int getEditPartChildrenSize() { return getParentEditPart().getChildren().size() - 1; // ignore LifelineNameEditPart } + @Override public int getSemanticChildrenSize() { - Lifeline lifeline = ((Lifeline)getParentEditPart().getNotationView().getElement()); + Lifeline lifeline = ((Lifeline) getParentEditPart().getNotationView().getElement()); int count = 0; - for(InteractionFragment f : lifeline.getCoveredBys()) { - if(f instanceof DestructionOccurrenceSpecification || f instanceof ActionExecutionSpecification || f instanceof BehaviorExecutionSpecification) { + for (InteractionFragment f : lifeline.getCoveredBys()) { + if (f instanceof DestructionOccurrenceSpecification || f instanceof ActionExecutionSpecification || f instanceof BehaviorExecutionSpecification) { count++; } } @@ -193,41 +194,47 @@ public class TestSequenceDiagramChildNode extends TestChildNode { return count; } + @Override public int getViewChildrenSize() { int count = 0; - Lifeline lifeline = ((Lifeline)getParentEditPart().getNotationView().getElement()); + Lifeline lifeline = ((Lifeline) getParentEditPart().getNotationView().getElement()); EList children = getParentEditPart().getNotationView().getChildren(); - for(Object object : children) { - View view = (View)object; - if(lifeline != ViewUtil.resolveSemanticElement(view)) { + for (Object object : children) { + View view = (View) object; + if (lifeline != ViewUtil.resolveSemanticElement(view)) { count++; } } return count; } + @Override public Element getDropElement() { return null; } + @Override public GraphicalEditPart getParentEditPart() { - if(containerEditPart == null) { - GraphicalEditPart ep = (GraphicalEditPart)getRootEditPart().getChildren().get(0); + if (containerEditPart == null) { + GraphicalEditPart ep = (GraphicalEditPart) getRootEditPart().getChildren().get(0); containerEditPart = ep; } return containerEditPart; } + @Override public GraphicalEditPart getDestroyEditPart() { - return (GraphicalEditPart)getParentEditPart().getChildren().get(1); + return (GraphicalEditPart) getParentEditPart().getChildren().get(1); } + @Override public boolean hasSemanticChild() { return semanticChild; } + @Override public Point getChildLocation(GraphicalEditPart parentEditPart) { - IFigure LifelineFigure = ((LifelineEditPart)parentEditPart).getPrimaryShape(); + IFigure LifelineFigure = ((LifelineEditPart) parentEditPart).getPrimaryShape(); DisplayUtils.flushEventLoop(); Rectangle b = LifelineFigure.getBounds().getCopy(); LifelineFigure.translateToAbsolute(b); diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramInsideInteraction.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramInsideInteraction.java index 9047b6bed50..ce98612832f 100644 --- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramInsideInteraction.java +++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/canonical/TestSequenceDiagramInsideInteraction.java @@ -1,7 +1,7 @@ /***************************************************************************** * Copyright (c) 2012 CEA LIST. * - * + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -66,11 +66,11 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh if (name.length() < ((ITextAwareEditPart) namedEditPart).getEditText().length()) { Assert.assertEquals(" the name must contain the name of the metaclass", name, ((ITextAwareEditPart) namedEditPart).getEditText().substring(0, name.length())); //$NON-NLS-1$ } else { - + if(createdEditPart instanceof InteractionUseEditPart){ //this is a particularity of interactionUse Assert.assertEquals(" the name must contain the name of the metaclass", "Ref", ((ITextAwareEditPart) namedEditPart).getEditText()); //$NON-NLS-1$ - + } else{ // not the same it sure but display the mistake is important @@ -110,7 +110,7 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh @Override protected boolean isSemanticTest() { - + return false; } @@ -142,11 +142,6 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh testToManageNode(UMLElementTypes.ConsiderIgnoreFragment_Shape, UMLPackage.eINSTANCE.getConsiderIgnoreFragment(),UMLElementTypes.Interaction_Shape, false); } - @Test - public void testToManageDurationObservation() { - - testToManageNode(UMLElementTypes.DurationObservation_Shape,UMLPackage.eINSTANCE.getDurationObservation(),UMLElementTypes.Interaction_Shape ,false); - } /** * Test to manage comment. */ @@ -159,7 +154,7 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh public void testToManageInteractionUse() { testToManageNode(UMLElementTypes.InteractionUse_Shape, UMLPackage.eINSTANCE.getInteractionUse(),UMLElementTypes.Interaction_Shape, false); } - + /** * @see org.eclipse.papyrus.uml.diagram.tests.canonical.AbstractTestNode#testDrop(org.eclipse.gmf.runtime.emf.type.core.IElementType, org.eclipse.emf.ecore.EClass, int, int, int) * @@ -175,7 +170,7 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh // DROP assertEquals(DROP + INITIALIZATION_TEST, expectedGraphicalChildren, getRootView().getChildren().size()); DropObjectsRequest dropObjectsRequest = new DropObjectsRequest(); - ArrayList<Element> list = new ArrayList<Element>(); + ArrayList<Element> list = new ArrayList<>(); for (Element element : getRootSemanticModel().getModel().getOwnedElements()) { if (element != null && element.eClass().equals(eClass)) { list.add(element); @@ -201,7 +196,7 @@ public class TestSequenceDiagramInsideInteraction extends AbstractTestSequenceCh super.testDrop(type, eClass, expectedGraphicalChildren, expectedSemanticChildren, addedGraphicalChildren); } } - + /** * @see org.eclipse.papyrus.uml.diagram.tests.canonical.AbstractTestNode#createViewRequestShapeContainer() * |