summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBoutheina Bannour2014-02-03 08:06:17 (EST)
committerCamille Letavernier2014-02-03 10:40:36 (EST)
commitfe77295c9b5615f45ee98d8e62c5425b1cc8a3c5 (patch)
tree8bd9e6c7f1e374db6eeb5d3dcdafd692126e7ec5
parentaad7355541827b218fcced78739b5922914a7598 (diff)
downloadorg.eclipse.papyrus-fe77295c9b5615f45ee98d8e62c5425b1cc8a3c5.zip
org.eclipse.papyrus-fe77295c9b5615f45ee98d8e62c5425b1cc8a3c5.tar.gz
org.eclipse.papyrus-fe77295c9b5615f45ee98d8e62c5425b1cc8a3c5.tar.bz2
Sequence diagram improvements:
417365: [Sequence Diagram] Lifeline management – when lifeline header gets resized, all associated elements should be updated to keep the same relative position. https://bugs.eclipse.org/bugs/show_bug.cgi?id=417365 417372: [Sequence Diagram] Stereotype enhancement https://bugs.eclipse.org/bugs/show_bug.cgi?id=417372 417373: [Sequence Diagram] Editor crashes due to general ordering handling https://bugs.eclipse.org/bugs/show_bug.cgi?id=417373 417374: [Sequence Diagram] Order of fragments due to Message reconnection. https://bugs.eclipse.org/bugs/show_bug.cgi?id=417374 417375: [Sequence Diagram] Order of fragment due to execution behavior resize https://bugs.eclipse.org/bugs/show_bug.cgi?id=417375 417376: [Sequence Diagram] Display the behavior of Execution specification as a label https://bugs.eclipse.org/bugs/show_bug.cgi?id=417376
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/SequencePaletteFactory.java23
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomMessage2CreateCommand.java7
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java12
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationBehaviorEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomBehaviorExecutionSpecificationEditPart.java44
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomCombinedFragmentEditPart.java13
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomContinuationEditPart.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDestructionOccurrenceSpecificationEditPart.java9
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintAppliedStereotypeEditPart.java41
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java9
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationAppliedStereotypeEditPart.java34
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationEditPart.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomGeneralOrderingEditPart.java51
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionEditPart.java18
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionOperandEditPart.java36
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionUseEditPart.java9
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantEditPart.java323
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantLabelEditPart.java25
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintAppliedStereotypeEditPart.java36
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintLabelEditPart.java59
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationAppliedStereotypeEditPart.java36
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationLabelEditPart.java14
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateEditPart.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java658
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandGuardEditPart.java175
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AbstractHeadImpactLayoutEditPolicy.java244
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeCommentCreationEditPolicyEx.java325
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeExternalNodeLabelEditPolicy.java205
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CombinedFragmentHeadImpactLayoutEditPolicy.java111
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ExecutionGraphicalNodeEditPolicy.java6
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionCompartmentXYLayoutEditPolicy.java12
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsCreationEditPolicy.java17
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsOrderingEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionHeadImpactLayoutEditPolicy.java137
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionOperandAppliedStereotypeLabelDisplayEditPolicy.java56
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineHeadImpactLayoutEditPolicy.java44
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineSelectionEditPolicy.java27
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java8
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/AppliedStereotypeLabelFigure.java157
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/CombinedFragmentFigure.java28
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/InteractionUseRectangleFigure.java5
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/StereotypeInteractionFigure.java180
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomCombinedFragmentPreferencePage.java8
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomConsiderIgnoreFragmentPreferencePage.java8
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPartProvider.java4
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/PostEditPolicyProvider.java100
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/BehaviorDisplayHelper.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineHeadUtil.java389
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineResizeHelper.java4
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationHelper.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OperandBoundsComputeHelper.java4
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipHook.java174
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipUtil.java8
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/model/sequenceDiagram.gmfgen22
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml10
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragment2EditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragmentEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CommentEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConsiderIgnoreFragmentEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintContextAppliedStereotypeEditPart.java26
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ContinuationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DestructionOccurrenceSpecificationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintInMessageEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionUseEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantEditPart.java14
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantLabelEditPart.java772
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeConstraintEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ActionExecutionSpecificationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/BehaviorExecutionSpecificationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CombinedFragmentPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CommentPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConsiderIgnoreFragmentPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConstraintPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ContinuationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DestructionOccurrenceSpecificationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintInMessagePreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationObservationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionOperandPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionUsePreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/LifelinePreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/StateInvariantPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeConstraintPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeObservationPreferencePage.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLParserProvider.java18
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java4
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/databinding/StereotypeAppearanceObservableValue.java85
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositeforview/AppearanceForAppliedStereotypeComposite.java94
-rw-r--r--plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/StereotypeUtil.java117
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/META-INF/MANIFEST.MF3
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/org.eclipse.papyrus.uml.diagram.sequence.tests.launch2
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/AllTests.java3
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGateNameOnCombinedFragment.java8
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGraphicalGate_389531.java9
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestMakeSameHeightForLifelines_402978.java10
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/AllTests_20130916.java28
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/BaseStereotypesTest.java473
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/CombinedFragmentStereotypesTest.java58
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ContinuationStereotypesTest.java66
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationConstraintStereotypesTest.java58
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationObservationStereotypesTest.java57
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ExecutionSpecificationStereotypesTest.java64
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373.java58
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_LifelineManagement_417365.java316
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterMessageReconnection_417375.java150
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterResizeExecutions_417374.java93
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GateStereotypesTest.java104
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GeneralOrderingStereotypesTest.java62
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionOperandStereotypesTest.java63
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionStereotypesTest.java95
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionUseStereotypesTest.java58
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/LifelineStereotypesTest.java69
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/MessageStereotypesTest.java124
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayBehaviorForBehaviorExecutionSpecification_417376.java158
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayInvariantForStateInvariant_417377.java179
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/StateInvariantStereotypesTest.java59
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeConstraintStereotypesTest.java72
-rw-r--r--tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeObservationStereotypesTest.java66
130 files changed, 6958 insertions, 757 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/SequencePaletteFactory.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/SequencePaletteFactory.java
index 1a8fb7e..0d7490b 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/SequencePaletteFactory.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/SequencePaletteFactory.java
@@ -47,6 +47,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AnnotatedLinkStart
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.HighlightEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
+import org.eclipse.papyrus.uml.diagram.sequence.util.TooltipHook;
import org.eclipse.swt.widgets.Display;
/**
@@ -375,12 +376,34 @@ public class SequencePaletteFactory extends PaletteFactory.Adapter {
private EditPart source;
+ private TooltipHook tooltipHook = null;
+
public AspectUnspecifiedTypeConnectionToolEx(List<IElementType> elementTypes) {
super(elementTypes);
setDisabledCursor(Cursors.NO);
}
@Override
+ public void setViewer(EditPartViewer viewer) {
+ super.setViewer(viewer);
+ if(tooltipHook == null || !tooltipHook.isHooked(viewer)) {
+ if(tooltipHook != null) {
+ tooltipHook.dispose();
+ }
+ tooltipHook = new TooltipHook(viewer);
+ }
+ }
+
+ @Override
+ public void deactivate() {
+ super.deactivate();
+ if(tooltipHook != null) {
+ tooltipHook.dispose();
+ tooltipHook = null;
+ }
+ }
+
+ @Override
protected void setConnectionSource(EditPart source) {
this.source = source;
super.setConnectionSource(source);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomMessage2CreateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomMessage2CreateCommand.java
index f03e7a9..86d7193 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomMessage2CreateCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomMessage2CreateCommand.java
@@ -111,8 +111,11 @@ public class CustomMessage2CreateCommand extends Message2CreateCommand {
}
if(message != null) {
//Do reset message end to target ExecutionSpecification. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=402975
- if(getTarget() instanceof ExecutionSpecification) {
- OccurrenceSpecificationHelper.resetExecutionStart((ExecutionSpecification)getTarget(), message.getReceiveEvent());
+ if(getTarget() instanceof ExecutionOccurrenceSpecification) {
+ ExecutionSpecification execution = ((ExecutionOccurrenceSpecification)getTarget()).getExecution();
+ if(execution != null) {
+ OccurrenceSpecificationHelper.resetExecutionStart(execution, message.getReceiveEvent());
+ }
}
if(getSource() instanceof ExecutionOccurrenceSpecification) {
ExecutionSpecification execution = ((ExecutionOccurrenceSpecification)getSource()).getExecution();
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java
index 747860f..ecaf1e9 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java
@@ -51,18 +51,26 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.datatype.GradientData;
import org.eclipse.papyrus.infra.emf.appearance.helper.AppearanceHelper;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
import org.eclipse.papyrus.uml.diagram.common.figure.node.PapyrusNodeFigure;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineXYLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.HighlightUtil;
import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineEditPartUtil;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
import org.eclipse.swt.graphics.Color;
import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.UMLPackage;
-public abstract class AbstractExecutionSpecificationEditPart extends ShapeNodeEditPart {
+/**
+ * Add implementing IPapyrusEditPart to displaying Stereotypes.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public abstract class AbstractExecutionSpecificationEditPart extends ShapeNodeEditPart implements IPapyrusEditPart {
public static final String EXECUTION_FIX_ANCHOR_POSITION = "Execution Fix Anchor Position";
@@ -206,6 +214,8 @@ public abstract class AbstractExecutionSpecificationEditPart extends ShapeNodeEd
HighlightUtil.unhighlight();
}
});
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
}
@Override
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationBehaviorEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationBehaviorEditPart.java
index e719a63..d3f54db 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationBehaviorEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationBehaviorEditPart.java
@@ -101,7 +101,7 @@ public class BehaviorExecutionSpecificationBehaviorEditPart extends
if (obj instanceof OpaqueBehavior) {
OpaqueBehavior opaque = (OpaqueBehavior) obj;
if (opaque.isSetLanguages()) {
- StringBuffer buf = new StringBuffer(printString);
+ StringBuffer buf = new StringBuffer();
buf.append("{");
EList<String> languages = opaque.getLanguages();
EList<String> bodies = opaque.getBodies();
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomBehaviorExecutionSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomBehaviorExecutionSpecificationEditPart.java
index f0e0f71..f5c9146 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomBehaviorExecutionSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomBehaviorExecutionSpecificationEditPart.java
@@ -33,6 +33,7 @@ import org.eclipse.gef.EditPartListener;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
+import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
@@ -311,12 +312,28 @@ public class CustomBehaviorExecutionSpecificationEditPart extends BehaviorExecut
helper.listenObject(behavior);
}
}
- if(getParent() != null) {
- getParent().addEditPartListener(selfRemovingListener = new EditPartListener.Stub() {
+ addSelfRemovingListener(getParent());
+ }
+
+ private void addSelfRemovingListener(EditPart editPart) {
+ if(editPart == null || editPart instanceof RootEditPart) {
+ return;
+ }
+ if(selfRemovingListener == null) {
+ selfRemovingListener = new EditPartListener.Stub() {
@Override
public void removingChild(EditPart child, int index) {
- if(child == CustomBehaviorExecutionSpecificationEditPart.this) {
+ boolean removeBehavior = false;
+ EditPart editPart = CustomBehaviorExecutionSpecificationEditPart.this;
+ while(editPart != null && !(editPart instanceof RootEditPart)) {
+ if(editPart == child) {
+ removeBehavior = true;
+ break;
+ }
+ editPart = editPart.getParent();
+ }
+ if(removeBehavior) {
List children = new ArrayList(getChildren());
for(Object object : children) {
if(object instanceof BehaviorExecutionSpecificationBehaviorEditPart) {
@@ -326,16 +343,29 @@ public class CustomBehaviorExecutionSpecificationEditPart extends BehaviorExecut
}
}
}
- });
+ };
+ }
+ if(editPart != null) {
+ editPart.removeEditPartListener(selfRemovingListener);
+ editPart.addEditPartListener(selfRemovingListener);
+ addSelfRemovingListener(editPart.getParent());
+ }
+ }
+
+ private void removeSelfRemovingListener(EditPart editPart) {
+ if(editPart == null || editPart instanceof RootEditPart || selfRemovingListener == null) {
+ return;
+ }
+ if(editPart != null) {
+ editPart.removeEditPartListener(selfRemovingListener);
+ removeSelfRemovingListener(editPart.getParent());
}
}
@Override
public void deactivate() {
helper.unlistenAll();
- if(getParent() != null) {
- getParent().removeEditPartListener(selfRemovingListener);
- }
+ removeSelfRemovingListener(getParent());
super.deactivate();
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomCombinedFragmentEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomCombinedFragmentEditPart.java
index 0b046c4..b3cce07 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomCombinedFragmentEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomCombinedFragmentEditPart.java
@@ -84,11 +84,16 @@ import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.papyrus.infra.emf.appearance.helper.AppearanceHelper;
import org.eclipse.papyrus.infra.emf.appearance.helper.ShadowFigureHelper;
import org.eclipse.papyrus.infra.emf.appearance.helper.VisualInformationPapyrusConstants;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.PapyrusNodeFigure;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CombinedFragmentHeadImpactLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.GateCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.GatesHolderGraphicalNodeEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomCombinedFragmentItemSemanticEditPolicy;
@@ -115,9 +120,11 @@ import org.eclipse.uml2.uml.Lifeline;
import org.eclipse.uml2.uml.UMLPackage;
/**
+ * Add implementing IPapyrusEditPart to displaying Stereotypes.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomCombinedFragmentEditPart extends CombinedFragmentEditPart implements ITextAwareEditPart {
+public class CustomCombinedFragmentEditPart extends CombinedFragmentEditPart implements ITextAwareEditPart, IPapyrusEditPart {
/**
* Title for dialog of bloc operator modification error
@@ -166,6 +173,10 @@ public class CustomCombinedFragmentEditPart extends CombinedFragmentEditPart imp
//Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=389531
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new GatesHolderGraphicalNodeEditPolicy());
installEditPolicy("Gate Creation Edit Policy", new GateCreationEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeNodeLabelDisplayEditPolicy());
+ //ignore impact layout when head changed.
+ installEditPolicy(AbstractHeadImpactLayoutEditPolicy.HEAD_IMPACT_LAYOUT_POLICY, new CombinedFragmentHeadImpactLayoutEditPolicy());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomContinuationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomContinuationEditPart.java
index 459b906..96e64ae 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomContinuationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomContinuationEditPart.java
@@ -21,6 +21,7 @@ import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomContinuationItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.locator.ContinuationLocator;
import org.eclipse.uml2.uml.UMLPackage;
@@ -28,7 +29,7 @@ import org.eclipse.uml2.uml.UMLPackage;
/**
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomContinuationEditPart extends ContinuationEditPart {
+public class CustomContinuationEditPart extends ContinuationEditPart implements IPapyrusEditPart {
/**
* Constructor.
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDestructionOccurrenceSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDestructionOccurrenceSpecificationEditPart.java
index de39664..f804188 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDestructionOccurrenceSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDestructionOccurrenceSpecificationEditPart.java
@@ -20,12 +20,17 @@ import org.eclipse.emf.common.notify.Notification;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomDestructionOccurrenceSpecificationItemSemanticEditPolicy;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
/**
+ * Add implementing interface IPapyrusEditPart to displaying Stereotypes.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomDestructionOccurrenceSpecificationEditPart extends DestructionOccurrenceSpecificationEditPart {
+public class CustomDestructionOccurrenceSpecificationEditPart extends DestructionOccurrenceSpecificationEditPart implements IPapyrusEditPart {
/**
* Constructor.
@@ -43,6 +48,8 @@ public class CustomDestructionOccurrenceSpecificationEditPart extends Destructio
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomDestructionOccurrenceSpecificationItemSemanticEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
}
@Override
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintAppliedStereotypeEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintAppliedStereotypeEditPart.java
index 354b27e..962151a 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintAppliedStereotypeEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintAppliedStereotypeEditPart.java
@@ -14,14 +14,13 @@
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import org.eclipse.draw2d.IFigure;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
-import org.eclipse.papyrus.uml.appearance.helper.AppliedStereotypeHelper;
-import org.eclipse.papyrus.uml.appearance.helper.UMLVisualInformationPapyrusConstant;
-import org.eclipse.papyrus.uml.diagram.common.editpolicies.AbstractAppliedStereotypeDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeExternalNodeLabelEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.AppliedStereotypeLabelFigure;
/**
* @author Jin Liu (jin.liu@soyatec.com)
@@ -44,21 +43,27 @@ public class CustomDurationConstraintAppliedStereotypeEditPart extends DurationC
return getFigure();
}
- @Override
- protected void refreshVisuals() {
- super.refreshVisuals();
- View view = getNotationView();
- View parentView = null;
- EObject parent = view.eContainer();
- if(parent instanceof View) {
- parentView = (View)parent;
+ protected void refreshLabel() {
+ //We do NOT want to update label with the Parser.
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
}
- String stereotypespresentationLocation = AppliedStereotypeHelper.getAppliedStereotypesPropertiesLocalization(parentView);
- if(UMLVisualInformationPapyrusConstant.STEREOTYPE_BRACE_LOCATION.equals(stereotypespresentationLocation)) {
- EditPolicy editPolicy = getEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
- if(editPolicy instanceof AbstractAppliedStereotypeDisplayEditPolicy) {
- ((AbstractAppliedStereotypeDisplayEditPolicy)editPolicy).refreshDisplay();
- }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
}
}
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ removeEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeExternalNodeLabelEditPolicy());
+ }
+
+ @Override
+ protected IFigure createFigurePrim() {
+ return new AppliedStereotypeLabelFigure();
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java
index 6b13cf9..fb7fec0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java
@@ -61,12 +61,14 @@ import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.uml.diagram.common.draw2d.LinesBorder;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.common.locator.ExternalLabelPositionLocator;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper.FixedAnchorEx;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExternalLabelPrimaryDragRoleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomDurationConstraintItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
@@ -74,14 +76,17 @@ import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
import org.eclipse.uml2.uml.DurationConstraint;
import org.eclipse.uml2.uml.InteractionFragment;
import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
/**
+ * Add implementing IPapyrusEditPart to displaying Stereotypes.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomDurationConstraintEditPart extends DurationConstraintEditPart {
+public class CustomDurationConstraintEditPart extends DurationConstraintEditPart implements IPapyrusEditPart {
private static final String ARROW = "Arrow";
@@ -107,6 +112,8 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomDurationConstraintItemSemanticEditPolicy());
+ //install a editpolicy to display stereotypes, there's a bug on super class.
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationAppliedStereotypeEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationAppliedStereotypeEditPart.java
index d073a47..b5c2de0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationAppliedStereotypeEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationAppliedStereotypeEditPart.java
@@ -14,8 +14,13 @@
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import org.eclipse.draw2d.IFigure;
+import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeExternalNodeLabelEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.AppliedStereotypeLabelFigure;
/**
* @author Jin Liu (jin.liu@soyatec.com)
@@ -37,4 +42,33 @@ public class CustomDurationObservationAppliedStereotypeEditPart extends Duration
public IFigure getPrimaryShape() {
return getFigure();
}
+
+ protected void refreshLabel() {
+ //We do NOT want to update label with the Parser.
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
+ }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
+ }
+ }
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ removeEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
+ View view = getPrimaryView();
+ View stereotypeChangedView = view;
+ if(view != null) {
+ // stereotypeChangedView = ViewUtil.getChildBySemanticHint(view, UMLVisualIDRegistry.getType(DurationObservationLabelEditPart.VISUAL_ID));
+ }
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeExternalNodeLabelEditPolicy(stereotypeChangedView));
+ }
+
+ @Override
+ protected IFigure createFigurePrim() {
+ return new AppliedStereotypeLabelFigure();
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationEditPart.java
index a811e32..d085394 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationObservationEditPart.java
@@ -28,6 +28,7 @@ import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.uml.diagram.common.locator.ExternalLabelPositionLocator;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomConnectionHandleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomExternalLabelPrimaryDragRoleEditPolicy;
@@ -38,7 +39,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
/**
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomDurationObservationEditPart extends DurationObservationEditPart {
+public class CustomDurationObservationEditPart extends DurationObservationEditPart implements IPapyrusEditPart {
/**
* Constructor.
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomGeneralOrderingEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomGeneralOrderingEditPart.java
index 124ea3b..2951db1 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomGeneralOrderingEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomGeneralOrderingEditPart.java
@@ -26,10 +26,15 @@ import org.eclipse.draw2d.Shape;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.gef.ConnectionEditPart;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusUMLElementFigure;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomGeneralOrderingItemSemanticEditPolicy;
import org.eclipse.swt.SWT;
@@ -39,7 +44,7 @@ import org.eclipse.swt.graphics.Image;
/**
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomGeneralOrderingEditPart extends GeneralOrderingEditPart {
+public class CustomGeneralOrderingEditPart extends GeneralOrderingEditPart implements IPapyrusEditPart {
/**
* Constructor.
@@ -83,6 +88,50 @@ public class CustomGeneralOrderingEditPart extends GeneralOrderingEditPart {
getPrimaryShape().setLineWidth(width);
}
+ @Override
+ public EditPart getTargetEditPart(Request request) {
+ EditPart ep = super.getTargetEditPart(request);
+ if(ep != null && ep instanceof org.eclipse.gef.ConnectionEditPart) {
+ if(request instanceof ReconnectRequest) {
+ ReconnectRequest rRequest = (ReconnectRequest)request;
+
+ // If source anchor is moved, the connection's source edit part
+ // should not be taken into account for a cyclic dependency
+ // check so as to avoid false checks. Same goes for the target
+ // anchor. See bugzilla# 417373 -- we do not want to target a
+ // connection that is already connected to us so that we do not
+ // introduce a cyclic connection
+ if(isCyclicConnectionRequest((org.eclipse.gef.ConnectionEditPart)ep, rRequest.getConnectionEditPart())) {
+ return null;
+ }
+ }
+ }
+
+ return ep;
+ }
+
+ /**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417373
+ *
+ * The ends of GeneralOrderingEditPart are MessageEndEditParts which parent are Message*EditParts, once we move the ends of the messages, we
+ * should IGNORE to move current GeneralOrdering, otherwise cyclic dependency occur.
+ *
+ */
+ private boolean isCyclicConnectionRequest(ConnectionEditPart currentConn, ConnectionEditPart reqConn) {
+ if(currentConn == null || reqConn == null) {
+ return false;
+ }
+ EditPart source = currentConn.getSource();
+ EditPart target = currentConn.getTarget();
+ if(reqConn == source || reqConn == target) {
+ return true;
+ }
+ if(reqConn == source.getParent() || reqConn == target.getParent()) {
+ return true;
+ }
+ return false;
+ }
+
/**
* Copied inherits from UMLEdgeFigure to manage stereotype label
*/
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionEditPart.java
index c8f0d53..006aaac 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionEditPart.java
@@ -52,16 +52,22 @@ import org.eclipse.gmf.runtime.notation.Shape;
import org.eclipse.gmf.runtime.notation.Size;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.InteractionRectangleFigure;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
import org.eclipse.papyrus.uml.diagram.common.util.MessageDirection;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.GateCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionFragmentsCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionGraphicalNodeEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionHeadImpactLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomInteractionItemSemanticEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.StereotypeInteractionFigure;
import org.eclipse.papyrus.uml.diagram.sequence.locator.GateLocator;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
@@ -73,9 +79,11 @@ import org.eclipse.uml2.uml.Interaction;
import org.eclipse.uml2.uml.UMLPackage;
/**
+ * Add implementing IPapyrusEditPart to displaying Stereotypes.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomInteractionEditPart extends InteractionEditPart {
+public class CustomInteractionEditPart extends InteractionEditPart implements IPapyrusEditPart {
/**
* Notfier for listen and unlistend model element.
@@ -150,6 +158,9 @@ public class CustomInteractionEditPart extends InteractionEditPart {
return command;
}
});
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeNodeLabelDisplayEditPolicy());
+ installEditPolicy(AbstractHeadImpactLayoutEditPolicy.HEAD_IMPACT_LAYOUT_POLICY, new InteractionHeadImpactLayoutEditPolicy());
}
/**
@@ -157,7 +168,7 @@ public class CustomInteractionEditPart extends InteractionEditPart {
*/
@Override
protected IFigure createNodeShape() {
- return primaryShape = new InteractionRectangleFigure() {
+ return primaryShape = new StereotypeInteractionFigure() {
@Override
public Dimension getMinimumSize(int wHint, int hHint) {
@@ -181,6 +192,7 @@ public class CustomInteractionEditPart extends InteractionEditPart {
}
return bounds.getSize();
}
+
};
}
@@ -535,4 +547,6 @@ public class CustomInteractionEditPart extends InteractionEditPart {
};
return result;
}
+
+
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionOperandEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionOperandEditPart.java
index eaf62c9..22ea650 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionOperandEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionOperandEditPart.java
@@ -76,11 +76,15 @@ import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.datatype.GradientData;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.PapyrusNodeFigure;
import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ExecutionSpecificationEndEditPart.DummyCommand;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandGuardEditPart.GuardFigure;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CombinedFragmentCreationEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionOperandAppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomInteractionOperandItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.locator.ContinuationLocator;
import org.eclipse.papyrus.uml.diagram.sequence.locator.TextCellEditorLocator;
@@ -109,7 +113,7 @@ import org.eclipse.uml2.uml.ValueSpecification;
/**
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomInteractionOperandEditPart extends InteractionOperandEditPart implements ITextAwareEditPart {
+public class CustomInteractionOperandEditPart extends InteractionOperandEditPart implements ITextAwareEditPart, IPapyrusEditPart {
/**
* Notfier for listen and unlistend model element.
@@ -175,6 +179,8 @@ public class CustomInteractionOperandEditPart extends InteractionOperandEditPart
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomInteractionOperandItemSemanticEditPolicy());
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new GuardConditionDirectEditPolicy());
removeEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE);
+ // display stereotype
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new InteractionOperandAppliedStereotypeLabelDisplayEditPolicy());
}
/**
@@ -391,6 +397,7 @@ public class CustomInteractionOperandEditPart extends InteractionOperandEditPart
}
if(InteractionOperandModelElementFactory.isGuardVisibilityChanged(notification)) {
refreshChildren();
+ refreshGuard();
}
}
@@ -445,7 +452,8 @@ public class CustomInteractionOperandEditPart extends InteractionOperandEditPart
}
/**
- * //Show or Hide Guard: https://bugs.eclipse.org/bugs/show_bug.cgi?id=402966
+ * //Show or Hide Guard:
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=402966
*/
public boolean isGuardVisible() {
return InteractionOperandModelElementFactory.isGuardVisible(getPrimaryView());
@@ -462,7 +470,12 @@ public class CustomInteractionOperandEditPart extends InteractionOperandEditPart
public WrappingLabel getInteractionConstraintLabel() {
IGraphicalEditPart child = getChildBySemanticHint(InteractionOperandGuardEditPart.GUARD_TYPE);
if(child instanceof InteractionOperandGuardEditPart) {
- return (WrappingLabel)((InteractionOperandGuardEditPart)child).getFigure();
+ IFigure figure = ((InteractionOperandGuardEditPart)child).getFigure();
+ if(figure instanceof WrappingLabel) {
+ return ((WrappingLabel)figure);
+ } else if(figure instanceof GuardFigure) {
+ return ((GuardFigure)figure).getPrimaryLabel();
+ }
}
return getPrimaryShape().getInteractionConstraintLabel();
}
@@ -472,6 +485,23 @@ public class CustomInteractionOperandEditPart extends InteractionOperandEditPart
super.refreshVisuals();
refreshLabelIcon();
refreshTransparency();
+ refreshGuard();
+ }
+
+ /**
+ * refresh guard label.
+ */
+ protected void refreshGuard() {
+ IGraphicalEditPart guard = getChildBySemanticHint(InteractionOperandGuardEditPart.GUARD_TYPE);
+ if(!(guard instanceof InteractionOperandGuardEditPart)) {
+ return;
+ }
+ ((InteractionOperandGuardEditPart)guard).refreshLabel();
+ // Refresh Stereotypes.
+ EditPolicy editPolicy = getEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
+ if(editPolicy instanceof AppliedStereotypeLabelDisplayEditPolicy) {
+ ((AppliedStereotypeLabelDisplayEditPolicy)editPolicy).refreshDisplay();
+ }
}
@Override
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionUseEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionUseEditPart.java
index 24e57d6..2e4b678 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionUseEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomInteractionUseEditPart.java
@@ -37,7 +37,10 @@ import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.datatype.GradientData;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.papyrus.infra.emf.appearance.helper.AppearanceHelper;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.GateCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.GatesHolderGraphicalNodeEditPolicy;
@@ -55,9 +58,11 @@ import org.eclipse.uml2.uml.InteractionUse;
import org.eclipse.uml2.uml.UMLPackage;
/**
+ * Add implementing IPapyrusEditPart to displaying Stereotypes.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomInteractionUseEditPart extends InteractionUseEditPart {
+public class CustomInteractionUseEditPart extends InteractionUseEditPart implements IPapyrusEditPart {
/**
* Title for dialog of no actual gate's manual creation
@@ -140,6 +145,8 @@ public class CustomInteractionUseEditPart extends InteractionUseEditPart {
//Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=389531
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new GatesHolderGraphicalNodeEditPolicy());
installEditPolicy("Gate Creation Edit Policy", new GateCreationEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeNodeLabelDisplayEditPolicy());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java
index a85d708..83c3038 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java
@@ -89,7 +89,9 @@ import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil;
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomStateInvariantEditPart.StateInvariantLocator;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionCompartmentXYLayoutEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineHeadImpactLayoutEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineLabelEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineSelectionEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineXYLayoutEditPolicy;
@@ -424,6 +426,7 @@ public class CustomLifelineEditPart extends LifelineEditPart {
installEditPolicy(EditPolicy.COMPONENT_ROLE, new LifelineMessageCreateHelper.ComponentEditPolicyEx());
// custom label, fix bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=383722
installEditPolicy(IMaskManagedLabelEditPolicy.MASK_MANAGED_LABEL_EDIT_POLICY, new LifelineLabelEditPolicy());
+ installEditPolicy(AbstractHeadImpactLayoutEditPolicy.HEAD_IMPACT_LAYOUT_POLICY, new LifelineHeadImpactLayoutEditPolicy());
}
protected LayoutEditPolicy createLayoutEditPolicy() {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantEditPart.java
index a72845b..aa82e7e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantEditPart.java
@@ -13,33 +13,79 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.OrderedLayout;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.draw2d.text.FlowPage;
import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.draw2d.ui.text.TextFlowEx;
import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.DecorationNode;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.BorderItemResizableEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IMultilineEditableFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
+import org.eclipse.papyrus.uml.diagram.common.providers.UIAdapterImpl;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ExecutionSpecificationEndEditPart.DummyCommand;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomStateInvariantItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.locator.CenterLocator;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
+import org.eclipse.papyrus.uml.diagram.sequence.util.CommandHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.util.NotificationHelper;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.uml2.uml.StateInvariant;
+import org.eclipse.uml2.uml.UMLPackage;
/**
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomStateInvariantEditPart extends StateInvariantEditPart {
+public class CustomStateInvariantEditPart extends StateInvariantEditPart implements IPapyrusEditPart {
+
+ /**
+ * Notfier for listen and unlistend model element.
+ */
+ private NotificationHelper notifierHelper = new NotificationHelper(new UIAdapterImpl() {
+
+ @Override
+ protected void safeNotifyChanged(Notification msg) {
+ handleNotificationEvent(msg);
+ }
+ });
/**
* Constructor.
@@ -50,6 +96,24 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
super(view);
}
+ @Override
+ public void activate() {
+ super.activate();
+ EObject element = resolveSemanticElement();
+ if(element instanceof StateInvariant && ((StateInvariant)element).getInvariant() != null) {
+ notifierHelper.listenObject(((StateInvariant)element).getInvariant());
+ }
+ }
+
+ @Override
+ public void deactivate() {
+ EObject element = resolveSemanticElement();
+ if(element instanceof StateInvariant && ((StateInvariant)element).getInvariant() != null) {
+ notifierHelper.unlistenObject(((StateInvariant)element).getInvariant());
+ }
+ super.deactivate();
+ }
+
/**
* @Override
*/
@@ -57,16 +121,71 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomStateInvariantItemSemanticEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeNodeLabelDisplayEditPolicy());
}
@Override
protected void handleNotificationEvent(Notification notification) {
super.handleNotificationEvent(notification);
Object feature = notification.getFeature();
- if((getModel() != null) && (getModel() == notification.getNotifier())) {
+ Object notifier = notification.getNotifier();
+ if((getModel() != null) && (getModel() == notifier)) {
if(NotationPackage.eINSTANCE.getLineStyle_LineWidth().equals(feature)) {
refreshLineWidth();
}
+ } else if(UMLPackage.eINSTANCE.getStateInvariant_Invariant() == feature) {
+ if(Notification.SET == notification.getEventType() || Notification.UNSET == notification.getEventType()) {
+ notifierHelper.unlistenObject((Notifier)notification.getOldValue());
+ notifierHelper.listenObject((Notifier)notification.getNewValue());
+ }
+ refreshLabels();
+ } else if(notifier != null) {
+ EObject element = resolveSemanticElement();
+ if(element instanceof StateInvariant && notifier == ((StateInvariant)element).getInvariant()) {
+ refreshLabels();
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#getModelChildren()
+ *
+ * @return
+ */
+ @Override
+ protected List getModelChildren() {
+ List<Object> modelChildren = new ArrayList<Object>(super.getModelChildren());
+ boolean hasInvariantView = false;
+ for(Object object : modelChildren) {
+ if(object instanceof View && UMLVisualIDRegistry.getType(StateInvariantLabelEditPart.VISUAL_ID).equals(((View)object).getType())) {
+ hasInvariantView = true;
+ break;
+ }
+ }
+ if(!hasInvariantView) {
+ final View view = getNotationView();
+ final DecorationNode guardNode = NotationFactory.eINSTANCE.createDecorationNode();
+ guardNode.setType(UMLVisualIDRegistry.getType(StateInvariantLabelEditPart.VISUAL_ID));
+ CommandHelper.executeCommandWithoutHistory(getEditingDomain(), new DummyCommand() {
+
+ @Override
+ public void execute() {
+ ViewUtil.insertChildView(view, guardNode, ViewUtil.APPEND, true);
+ }
+ }, true);
+ modelChildren.add(guardNode);
+ }
+ return modelChildren;
+ }
+
+ @Override
+ protected void setFontColor(Color color) {
+ super.setFontColor(color);
+ StateInvariantFigure primaryShape = getPrimaryShape();
+ if(primaryShape != null && primaryShape.getConstraintContentContainer() != null) {
+ primaryShape.getConstraintContentContainer().setForegroundColor(color);
}
}
@@ -75,6 +194,19 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
super.refreshVisuals();
refreshLineWidth();
refreshTransparency();
+ refreshLabels();
+ }
+
+ /**
+ * Refresh Invariant.
+ */
+ protected void refreshLabels() {
+ List parts = getChildren();
+ for(Object p : parts) {
+ if(p instanceof CustomStateInvariantLabelEditPart) {
+ ((CustomStateInvariantLabelEditPart)p).refreshLabel();
+ }
+ }
}
@Override
@@ -110,6 +242,35 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
}
/**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart#addFixedChild(org.eclipse.gef.EditPart)
+ *
+ * @param childEditPart
+ * @return
+ */
+ @Override
+ protected boolean addFixedChild(EditPart childEditPart) {
+ if(childEditPart instanceof CustomStateInvariantLabelEditPart) {
+ ((CustomStateInvariantLabelEditPart)childEditPart).setLabel(getPrimaryShape().getInvariantFigure());
+ return true;
+ }
+ return super.addFixedChild(childEditPart);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart#removeFixedChild(org.eclipse.gef.EditPart)
+ *
+ * @param childEditPart
+ * @return
+ */
+ @Override
+ protected boolean removeFixedChild(EditPart childEditPart) {
+ if(childEditPart instanceof CustomStateInvariantLabelEditPart) {
+ return true;
+ }
+ return super.removeFixedChild(childEditPart);
+ }
+
+ /**
* @see org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart#createNodeShape()
*
* @return
@@ -119,7 +280,11 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
return primaryShape = new StateInvariantFigure();
}
- public class StateInvariantFigure extends ContinuationFigure {
+ public class StateInvariantFigure extends ContinuationFigure implements ILabelFigure, IMultilineEditableFigure, IPapyrusNodeUMLElementFigure {
+
+ protected static final String LEFT_BRACE = "{";
+
+ protected static final String RIGHT_BRACE = "}";
/**
* The transparency of this shape in percent.
@@ -127,6 +292,63 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
*/
private int transparency = 0;
+ private FlowPage constraintContentContainer;
+
+ private TextFlowEx constraintContent;
+
+ private CenteredWrappedLabel fFigureContinuationNameLabel;
+
+ private Label stereotypesLabel;
+
+ private Label stereotypePropertiesLabel;
+
+ private IFigure labelContainer;
+
+ /**
+ * Constructor.
+ *
+ */
+ public StateInvariantFigure() {
+ super();
+ getChildren().clear();
+ setBorder(new MarginBorder(8));
+ RoundedRectangle contents = new RoundedRectangle();
+ contents.setCornerDimensions(new Dimension(getMapMode().DPtoLP(50), getMapMode().DPtoLP(50)));
+ contents.setOutline(false);
+ this.add(contents);
+ //Name figure
+ fFigureContinuationNameLabel = new CenteredWrappedLabel();
+ contents.add(fFigureContinuationNameLabel);
+
+ //Invariant figure
+ constraintContentContainer = new FlowPage();
+ constraintContentContainer.setOpaque(false);
+ constraintContentContainer.setHorizontalAligment(PositionConstants.CENTER);
+ constraintContent = new TextFlowEx("");
+ constraintContentContainer.add(constraintContent);
+ contents.add(constraintContentContainer);
+
+ //Contents layout.
+ ToolbarLayout layout = new ToolbarLayout(false);
+ layout.setStretchMinorAxis(true);
+ layout.setMinorAlignment(OrderedLayout.ALIGN_CENTER);
+ contents.setLayoutManager(layout);
+ labelContainer = contents;
+ }
+
+ public FlowPage getConstraintContentContainer() {
+ return constraintContentContainer;
+ }
+
+ @Override
+ public CenteredWrappedLabel getFigureContinuationNameLabel() {
+ return fFigureContinuationNameLabel;
+ }
+
+ public IFigure getInvariantFigure() {
+ return this;
+ }
+
protected void fillShape(Graphics graphics) {
graphics.pushState();
applyTransparency(graphics);
@@ -170,6 +392,101 @@ public class CustomStateInvariantEditPart extends StateInvariantEditPart {
protected void applyTransparency(Graphics g) {
g.setAlpha(255 - transparency * 255 / 100);
}
+
+ public void setText(String text) {
+ if(constraintContent != null) {
+ constraintContent.setText(LEFT_BRACE + text + RIGHT_BRACE);
+ }
+ }
+
+ public String getText() {
+ if(constraintContent != null) {
+ return constraintContent.getText();
+ }
+ return null;
+ }
+
+ public void setIcon(Image icon) {
+
+ }
+
+ public Image getIcon() {
+ return null;
+ }
+
+ public Point getEditionLocation() {
+ if(constraintContentContainer != null) {
+ return constraintContentContainer.getLocation();
+ }
+ return null;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusUMLElementFigure#setStereotypeDisplay(java.lang.String,
+ * org.eclipse.swt.graphics.Image)
+ *
+ * @param stereotypes
+ * @param image
+ */
+
+ public void setStereotypeDisplay(String stereotypes, Image image) {
+ if(stereotypes == null || stereotypes.trim().equals("")) {
+ if(stereotypesLabel != null) {
+ labelContainer.remove(stereotypesLabel);
+ }
+ stereotypesLabel = null;
+ } else {
+ if(stereotypesLabel == null) {
+ stereotypesLabel = new Label(stereotypes, image);
+ labelContainer.add(stereotypesLabel, 0);
+ } else {
+ stereotypesLabel.setText(stereotypes);
+ stereotypesLabel.setIcon(image);
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInBrace(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInBrace(String stereotypeProperties) {
+ if(stereotypeProperties == null || stereotypeProperties.trim().equals("")) {
+ if(stereotypePropertiesLabel != null) {
+ labelContainer.remove(stereotypePropertiesLabel);
+ }
+ stereotypePropertiesLabel = null;
+ } else {
+ if(stereotypePropertiesLabel == null) {
+ stereotypePropertiesLabel = new Label();
+ int index = labelContainer.getChildren().indexOf(stereotypesLabel);
+ labelContainer.add(stereotypePropertiesLabel, index + 1);
+ }
+ stereotypePropertiesLabel.setText(LEFT_BRACE + stereotypeProperties + RIGHT_BRACE);
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInCompartment(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInCompartment(String stereotypeProperties) {
+
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#getStereotypesLabel()
+ *
+ * @return
+ */
+
+ public Label getStereotypesLabel() {
+ return stereotypesLabel;
+ }
}
static class StateInvariantLocator extends CenterLocator {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantLabelEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantLabelEditPart.java
new file mode 100644
index 0000000..394aaff
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomStateInvariantLabelEditPart.java
@@ -0,0 +1,25 @@
+package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.uml2.uml.StateInvariant;
+
+public class CustomStateInvariantLabelEditPart extends StateInvariantLabelEditPart {
+
+ /**
+ * Constructor.
+ *
+ * @param view
+ */
+ public CustomStateInvariantLabelEditPart(View view) {
+ super(view);
+ }
+
+ protected EObject getParserElement() {
+ EObject element = resolveSemanticElement();
+ if(element instanceof StateInvariant) {
+ return ((StateInvariant)element).getInvariant();
+ }
+ return element;
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintAppliedStereotypeEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintAppliedStereotypeEditPart.java
index 04a8870..bf59a12 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintAppliedStereotypeEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintAppliedStereotypeEditPart.java
@@ -14,8 +14,15 @@
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import org.eclipse.draw2d.IFigure;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeExternalNodeLabelEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.AppliedStereotypeLabelFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
/**
* @author Jin Liu (jin.liu@soyatec.com)
@@ -37,4 +44,33 @@ public class CustomTimeConstraintAppliedStereotypeEditPart extends TimeConstrain
public IFigure getPrimaryShape() {
return getFigure();
}
+
+ protected void refreshLabel() {
+ //We do NOT want to update label with the Parser.
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
+ }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
+ }
+ }
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ removeEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
+ View stereotypeChangedView = null;
+ View view = getPrimaryView();
+ if(view != null) {
+ stereotypeChangedView = ViewUtil.getChildBySemanticHint(view, UMLVisualIDRegistry.getType(TimeConstraintLabelEditPart.VISUAL_ID));
+ }
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeExternalNodeLabelEditPolicy(stereotypeChangedView));
+ }
+
+ @Override
+ protected IFigure createFigurePrim() {
+ return new AppliedStereotypeLabelFigure();
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintLabelEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintLabelEditPart.java
new file mode 100644
index 0000000..1814d0e
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeConstraintLabelEditPart.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomConnectionHandleEditPolicy;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
+
+
+/**
+ * Support displaying Stereotype as a Comment Node for TimeConstraint.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class CustomTimeConstraintLabelEditPart extends TimeConstraintLabelEditPart implements IPapyrusEditPart {
+
+ /**
+ * Constructor.
+ *
+ * @param view
+ */
+ public CustomTimeConstraintLabelEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart#getPrimaryShape()
+ *
+ * @return
+ */
+
+ public IFigure getPrimaryShape() {
+ return getFigure();
+ }
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE, new CustomConnectionHandleEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationAppliedStereotypeEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationAppliedStereotypeEditPart.java
index b033d89..7efe246 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationAppliedStereotypeEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationAppliedStereotypeEditPart.java
@@ -14,8 +14,15 @@
package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import org.eclipse.draw2d.IFigure;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeExternalNodeLabelEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.AppliedStereotypeLabelFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.swt.graphics.Image;
/**
@@ -43,4 +50,33 @@ public class CustomTimeObservationAppliedStereotypeEditPart extends TimeObservat
protected Image getLabelIcon() {
return null;
}
+
+ protected void refreshLabel() {
+ //We do NOT want to update label with the Parser.
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
+ }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
+ }
+ }
+
+ @Override
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ removeEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY);
+ View stereotypeChangedView = null;
+ View view = getPrimaryView();
+ if(view != null) {
+ stereotypeChangedView = ViewUtil.getChildBySemanticHint(view, UMLVisualIDRegistry.getType(TimeObservationLabelEditPart.VISUAL_ID));
+ }
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeExternalNodeLabelEditPolicy(stereotypeChangedView));
+ }
+
+ @Override
+ protected IFigure createFigurePrim() {
+ return new AppliedStereotypeLabelFigure();
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationLabelEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationLabelEditPart.java
index 02d0e05..e91e09d 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationLabelEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomTimeObservationLabelEditPart.java
@@ -42,15 +42,21 @@ import org.eclipse.gmf.runtime.notation.IdentityAnchor;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.emf.appearance.helper.AppearanceHelper;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomConnectionHandleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.ElementIconUtil;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
import org.eclipse.swt.graphics.Image;
/**
+ * Add implementing IPapyrusEditPart to support displaying Stereotype as a Comment, because the label is always selected when a TimeObservation is
+ * selected.
+ *
* @author Jin Liu (jin.liu@soyatec.com)
*/
-public class CustomTimeObservationLabelEditPart extends TimeObservationLabelEditPart implements INodeEditPart {
+public class CustomTimeObservationLabelEditPart extends TimeObservationLabelEditPart implements INodeEditPart, IPapyrusEditPart {
/**
* Constructor.
@@ -68,6 +74,8 @@ public class CustomTimeObservationLabelEditPart extends TimeObservationLabelEdit
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE, new CustomConnectionHandleEditPolicy());
+ //install a editpolicy to display stereotypes
+ installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
}
/**
@@ -271,4 +279,8 @@ public class CustomTimeObservationLabelEditPart extends TimeObservationLabelEdit
locator.relocate(getFigure());
}
}
+
+ public IFigure getPrimaryShape() {
+ return getFigure();
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateEditPart.java
index 94864b8..58156f7 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateEditPart.java
@@ -425,6 +425,9 @@ public class GateEditPart extends AbstractBorderEditPart implements IBorderItemE
}
protected ConnectionAnchor createAnchor(PrecisionPoint p) {
+ if(p == null) {
+ return createDefaultAnchor();
+ }
return new SlidableAnchor(this, p) {
public Point getLocation(Point reference) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java
index 420c9a3..82fd63e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java
@@ -4,75 +4,38 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.draw2d.ConnectionLocator;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.RunnableWithResult;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
-import org.eclipse.gef.Request;
-import org.eclipse.gef.requests.DirectEditRequest;
-import org.eclipse.gef.tools.DirectEditManager;
import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
-import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
-import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
-import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.LabelEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
-import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
-import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
-import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
-import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
-import org.eclipse.gmf.runtime.notation.FontStyle;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
-import org.eclipse.jface.viewers.ICellEditorValidator;
-import org.eclipse.jface.window.Window;
-import org.eclipse.papyrus.extensionpoints.editors.configuration.IAdvancedEditorConfiguration;
-import org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConfiguration;
-import org.eclipse.papyrus.extensionpoints.editors.configuration.IPopupEditorConfiguration;
-import org.eclipse.papyrus.extensionpoints.editors.ui.ExtendedDirectEditionDialog;
-import org.eclipse.papyrus.extensionpoints.editors.ui.ILabelEditorDialog;
-import org.eclipse.papyrus.extensionpoints.editors.ui.IPopupEditorHelper;
-import org.eclipse.papyrus.extensionpoints.editors.utils.DirectEditorsUtil;
-import org.eclipse.papyrus.extensionpoints.editors.utils.IDirectEditorsIds;
-import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEditPolicy;
-import org.eclipse.papyrus.uml.diagram.common.directedit.MultilineLabelDirectEditManager;
-import org.eclipse.papyrus.uml.diagram.common.editpolicies.IDirectEdition;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
import org.eclipse.papyrus.uml.diagram.common.util.MessageDirection;
-import org.eclipse.papyrus.uml.diagram.sequence.Activator;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeExternalNodeLabelEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.locator.GateLocator;
import org.eclipse.papyrus.uml.diagram.sequence.parsers.MessageFormatParser;
import org.eclipse.papyrus.uml.diagram.sequence.util.GateHelper;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.accessibility.AccessibleEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.PlatformUI;
import org.eclipse.uml2.uml.CombinedFragment;
-import org.eclipse.uml2.uml.Feature;
import org.eclipse.uml2.uml.Gate;
import org.eclipse.uml2.uml.Interaction;
import org.eclipse.uml2.uml.Lifeline;
@@ -81,21 +44,16 @@ import org.eclipse.uml2.uml.MessageEnd;
import org.eclipse.uml2.uml.OccurrenceSpecification;
import org.eclipse.uml2.uml.UMLPackage;
-public class GateNameEditPart extends LabelEditPart implements ITextAwareEditPart, IBorderItemEditPart {
+/**
+ * 1. Refactoring with a BorderItemLabelEditPart.
+ * 2. Add displaying stereotypes.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class GateNameEditPart extends BorderItemLabelEditPart implements IPapyrusEditPart {
public static final String GATE_NAME_TYPE = "Gate_Name";
- private DirectEditManager manager;
-
- private IParser parser;
-
- private List<?> parserElements;
-
- private String defaultText;
-
- protected int directEditionMode = IDirectEdition.UNDEFINED_DIRECT_EDITOR;
-
- protected IDirectEditorConfiguration configuration;
static {
registerSnapBackPosition(GATE_NAME_TYPE, new Point(-32, 0));
}
@@ -113,6 +71,12 @@ public class GateNameEditPart extends LabelEditPart implements ITextAwareEditPar
super.createDefaultEditPolicies();
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy());
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new UMLTextSelectionEditPolicy());
+ //Display stereotype on name figure.
+ installEditPolicy(AppliedStereotypeLabelDisplayEditPolicy.STEREOTYPE_LABEL_POLICY, new AppliedStereotypeExternalNodeLabelEditPolicy());
+ }
+
+ public IFigure getPrimaryShape() {
+ return getFigure();
}
public IBorderItemLocator getBorderItemLocator() {
@@ -124,499 +88,60 @@ public class GateNameEditPart extends LabelEditPart implements ITextAwareEditPar
return null;
}
- public void refreshBounds() {
- int x = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
- int y = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
- int width = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
- int height = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
- if(x == 0 && y == 0) {
+ @Override
+ protected Point getLocation() {
+ Point location = super.getLocation();
+ if(location.x == 0 && location.y == 0) {
+ Dimension size = getSize();
EditPart parent = getParent();
if(parent instanceof GateEditPart) {
GateEditPart gateEditPart = ((GateEditPart)parent);
EObject elt = gateEditPart.resolveSemanticElement();
- Dimension preferredSize = getFigure().getPreferredSize(width, height);
+ Dimension preferredSize = getFigure().getPreferredSize(size.width, size.height);
IBorderItemLocator locator = gateEditPart.getBorderItemLocator();
if(locator instanceof GateLocator) {
int alignment = ((GateLocator)locator).getAlignment(((GateLocator)locator).getConstraint());
if(PositionConstants.LEFT == alignment) {
if(gateEditPart.getTargetConnections().isEmpty()) {
- x = -preferredSize.width - 1;
+ location.x = -preferredSize.width - 1;
} else {
- x = GateEditPart.DEFAULT_SIZE.width + 1;
+ location.x = GateEditPart.DEFAULT_SIZE.width + 1;
}
if(elt instanceof Gate && GateHelper.isInnerCFGate((Gate)elt)) {
- y = GateEditPart.DEFAULT_SIZE.height - 2;//move fown
+ location.y = GateEditPart.DEFAULT_SIZE.height - 2;//move fown
} else {
- y = -GateEditPart.DEFAULT_SIZE.height + 2;//move up
+ location.y = -GateEditPart.DEFAULT_SIZE.height + 2;//move up
}
} else if(PositionConstants.RIGHT == alignment) {
if(gateEditPart.getSourceConnections().isEmpty()) {
- x = GateEditPart.DEFAULT_SIZE.width + 1;
+ location.x = GateEditPart.DEFAULT_SIZE.width + 1;
} else {
- x = -preferredSize.width - 1;
+ location.x = -preferredSize.width - 1;
}
if(elt instanceof Gate && GateHelper.isInnerCFGate((Gate)elt)) {
- y = GateEditPart.DEFAULT_SIZE.height - 2;//move fown
+ location.y = GateEditPart.DEFAULT_SIZE.height - 2;//move fown
} else {
- y = -GateEditPart.DEFAULT_SIZE.height + 2;//move up
+ location.y = -GateEditPart.DEFAULT_SIZE.height + 2;//move up
}
} else if(PositionConstants.TOP == alignment) {
- y = -GateEditPart.DEFAULT_SIZE.height - 1;
+ location.y = -GateEditPart.DEFAULT_SIZE.height - 1;
} else if(PositionConstants.BOTTOM == alignment) {
- y = GateEditPart.DEFAULT_SIZE.height + 1;
+ location.y = GateEditPart.DEFAULT_SIZE.height + 1;
}
}
- // SetBoundsCommand cmd = new SetBoundsCommand(getEditingDomain(), "", new EObjectAdapter(getNotationView()), new Point(x, y));
- // CommandHelper.executeCommandWithoutHistory(getEditingDomain(), new GMFtoEMFCommandWrapper(cmd));
- }
- }
- IBorderItemLocator borderItemLocator = getBorderItemLocator();
- if(borderItemLocator != null) {
- borderItemLocator.setConstraint(new Rectangle(x, y, width, height));
- }
- }
-
- public int getKeyPoint() {
- return ConnectionLocator.MIDDLE;
- }
-
- protected String getLabelTextHelper(IFigure figure) {
- if(figure instanceof WrappingLabel) {
- return ((WrappingLabel)figure).getText();
- } else if(figure instanceof ILabelFigure) {
- return ((ILabelFigure)figure).getText();
- } else {
- return ((Label)figure).getText();
- }
- }
-
- protected void setLabelTextHelper(IFigure figure, String text) {
- if(figure instanceof WrappingLabel) {
- ((WrappingLabel)figure).setText(text);
- } else if(figure instanceof ILabelFigure) {
- ((ILabelFigure)figure).setText(text);
- } else {
- ((Label)figure).setText(text);
- }
- }
-
- protected Image getLabelIconHelper(IFigure figure) {
- if(figure instanceof WrappingLabel) {
- return ((WrappingLabel)figure).getIcon();
- } else if(figure instanceof ILabelFigure) {
- return ((ILabelFigure)figure).getIcon();
- } else {
- return ((Label)figure).getIcon();
- }
- }
-
- protected void setLabelIconHelper(IFigure figure, Image icon) {
- if(figure instanceof WrappingLabel) {
- ((WrappingLabel)figure).setIcon(icon);
- } else if(figure instanceof ILabelFigure) {
- ((ILabelFigure)figure).setIcon(icon);
- } else {
- ((Label)figure).setIcon(icon);
- }
- }
-
- public void setLabel(WrappingLabel figure) {
- unregisterVisuals();
- setFigure(figure);
- defaultText = getLabelTextHelper(figure);
- registerVisuals();
- refreshVisuals();
- }
-
- protected List getModelChildren() {
- return Collections.EMPTY_LIST;
- }
-
- public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
- return null;
- }
-
- protected EObject getParserElement() {
- return resolveSemanticElement();
- }
-
- protected Image getLabelIcon() {
- return null;
- }
-
- protected String getLabelText() {
- String text = null;
- EObject parserElement = getParserElement();
- if(parserElement != null && getParser() != null) {
- text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue());
- }
- if(text == null || text.length() == 0) {
- text = defaultText;
- }
- return text;
- }
-
- public void setLabelText(String text) {
- setLabelTextHelper(getFigure(), text);
- Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
- if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
- ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
- }
- Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
- if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
- ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
- }
- }
-
- public String getEditText() {
- if(getParserElement() == null || getParser() == null) {
- return ""; //$NON-NLS-1$
- }
- return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue());
- }
-
- protected boolean isEditable() {
- return getParser() != null;
- }
-
- public ICellEditorValidator getEditTextValidator() {
- return new ICellEditorValidator() {
-
- public String isValid(final Object value) {
- if(value instanceof String) {
- final EObject element = getParserElement();
- final IParser parser = getParser();
- try {
- IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() {
-
- public void run() {
- setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value));
- }
- });
- return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage();
- } catch (InterruptedException ie) {
- ie.printStackTrace();
- }
- }
- // shouldn't get here
- return null;
- }
- };
- }
-
- public IContentAssistProcessor getCompletionProcessor() {
- if(getParserElement() == null || getParser() == null) {
- return null;
- }
- return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement()));
- }
-
- public ParserOptions getParserOptions() {
- return ParserOptions.NONE;
- }
-
- public IParser getParser() {
- if(parser == null) {
- parser = new GateNameParser();
- }
- return parser;
- }
-
- protected DirectEditManager getManager() {
- if(manager == null) {
- setManager(new MultilineLabelDirectEditManager(this, MultilineLabelDirectEditManager.getTextCellEditorClass(this), UMLEditPartFactory.getTextCellEditorLocator(this)));
- }
- return manager;
- }
-
- protected void setManager(DirectEditManager manager) {
- this.manager = manager;
- }
-
- protected void performDirectEdit() {
- getManager().show();
- }
-
- protected void performDirectEdit(Point eventLocation) {
- if(getManager() instanceof TextDirectEditManager) {
- ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint());
- }
- }
-
- private void performDirectEdit(char initialCharacter) {
- if(getManager() instanceof TextDirectEditManager) {
- ((TextDirectEditManager)getManager()).show(initialCharacter);
- } else {
- performDirectEdit();
- }
- }
-
- protected void performDirectEditRequest(Request request) {
- final Request theRequest = request;
- if(IDirectEdition.UNDEFINED_DIRECT_EDITOR == directEditionMode) {
- directEditionMode = getDirectEditionType();
- }
- switch(directEditionMode) {
- case IDirectEdition.NO_DIRECT_EDITION:
- // no direct edition mode => does nothing
- return;
- case IDirectEdition.EXTENDED_DIRECT_EDITOR:
- updateExtendedEditorConfiguration();
- if(configuration == null || configuration.getLanguage() == null) {
- performDefaultDirectEditorEdit(theRequest);
- } else {
- configuration.preEditAction(resolveSemanticElement());
- Dialog dialog = null;
- if(configuration instanceof IPopupEditorConfiguration) {
- IPopupEditorHelper helper = ((IPopupEditorConfiguration)configuration).createPopupEditorHelper(this);
- helper.showEditor();
- return;
- } else if(configuration instanceof IAdvancedEditorConfiguration) {
- dialog = ((IAdvancedEditorConfiguration)configuration).createDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), configuration.getTextToEdit(resolveSemanticElement()));
- } else if(configuration instanceof IDirectEditorConfiguration) {
- dialog = new ExtendedDirectEditionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), ((IDirectEditorConfiguration)configuration).getTextToEdit(resolveSemanticElement()), (IDirectEditorConfiguration)configuration);
- } else {
- return;
- }
- final Dialog finalDialog = dialog;
- if(Window.OK == dialog.open()) {
- TransactionalEditingDomain domain = getEditingDomain();
- RecordingCommand command = new RecordingCommand(domain, "Edit Label") {
-
- @Override
- protected void doExecute() {
- configuration.postEditAction(resolveSemanticElement(), ((ILabelEditorDialog)finalDialog).getValue());
- }
- };
- domain.getCommandStack().execute(command);
- }
- }
- break;
- case IDirectEdition.DEFAULT_DIRECT_EDITOR:
- // initialize the direct edit manager
- try {
- getEditingDomain().runExclusive(new Runnable() {
-
- public void run() {
- if(isActive() && isEditable()) {
- if(theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
- Character initialChar = (Character)theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
- performDirectEdit(initialChar.charValue());
- } else if((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) {
- DirectEditRequest editRequest = (DirectEditRequest)theRequest;
- performDirectEdit(editRequest.getLocation());
- } else {
- performDirectEdit();
- }
- }
- }
- });
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- break;
- default:
- break;
- }
- }
-
- protected void refreshVisuals() {
- super.refreshVisuals();
- refreshLabel();
- refreshFont();
- refreshFontColor();
- refreshUnderline();
- refreshStrikeThrough();
- }
-
- protected void refreshLabel() {
- EditPolicy maskLabelPolicy = getEditPolicy(IMaskManagedLabelEditPolicy.MASK_MANAGED_LABEL_EDIT_POLICY);
- if(maskLabelPolicy == null) {
- setLabelTextHelper(getFigure(), getLabelText());
- setLabelIconHelper(getFigure(), getLabelIcon());
- }
- Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
- if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
- ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
- }
- Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
- if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
- ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
- }
- refreshBounds();
- }
-
- protected void refreshUnderline() {
- FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
- if(style != null && getFigure() instanceof WrappingLabel) {
- ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline());
- }
- if(resolveSemanticElement() instanceof Feature) {
- if(((Feature)resolveSemanticElement()).isStatic()) {
- ((WrappingLabel)getFigure()).setTextUnderline(true);
- } else {
- ((WrappingLabel)getFigure()).setTextUnderline(false);
- }
- }
- }
-
- protected void refreshStrikeThrough() {
- FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
- if(style != null && getFigure() instanceof WrappingLabel) {
- ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough());
- }
- }
-
- protected void refreshFont() {
- FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
- if(style != null) {
- FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD : SWT.NORMAL) | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
- setFont(fontData);
- }
- }
-
- protected void setFontColor(Color color) {
- getFigure().setForegroundColor(color);
- }
-
- protected void addSemanticListeners() {
- if(getParser() instanceof ISemanticParser) {
- EObject element = resolveSemanticElement();
- parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element);
- for(int i = 0; i < parserElements.size(); i++) {
- addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$
- }
- } else {
- super.addSemanticListeners();
- }
- }
-
- protected void removeSemanticListeners() {
- if(parserElements != null) {
- for(int i = 0; i < parserElements.size(); i++) {
- removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
- }
- } else {
- super.removeSemanticListeners();
- }
- }
-
- protected AccessibleEditPart getAccessibleEditPart() {
- if(accessibleEP == null) {
- accessibleEP = new AccessibleGraphicalEditPart() {
-
- public void getName(AccessibleEvent e) {
- e.result = getLabelTextHelper(getFigure());
- }
- };
- }
- return accessibleEP;
- }
-
- private View getFontStyleOwnerView() {
- return (View)getModel();
- }
-
- public int getDirectEditionType() {
- if(checkExtendedEditor()) {
- initExtendedEditorConfiguration();
- return IDirectEdition.EXTENDED_DIRECT_EDITOR;
- }
- if(checkDefaultEdition()) {
- return IDirectEdition.DEFAULT_DIRECT_EDITOR;
- }
- // not a named element. no specific editor => do nothing
- return IDirectEdition.NO_DIRECT_EDITION;
- }
-
- protected boolean checkExtendedEditor() {
- if(resolveSemanticElement() != null) {
- return DirectEditorsUtil.hasSpecificEditorConfiguration(resolveSemanticElement().eClass().getInstanceClassName());
- }
- return false;
- }
-
- protected boolean checkDefaultEdition() {
- return (getParser() != null);
- }
-
- protected void initExtendedEditorConfiguration() {
- if(configuration == null) {
- final String languagePreferred = Activator.getDefault().getPreferenceStore().getString(IDirectEditorsIds.EDITOR_FOR_ELEMENT + resolveSemanticElement().eClass().getInstanceClassName());
- if(languagePreferred != null && !languagePreferred.equals("")) {
- configuration = DirectEditorsUtil.findEditorConfiguration(languagePreferred, resolveSemanticElement().eClass().getInstanceClassName());
- } else {
- configuration = DirectEditorsUtil.findEditorConfiguration(IDirectEditorsIds.UML_LANGUAGE, resolveSemanticElement().eClass().getInstanceClassName());
}
}
+ return location;
}
- protected void updateExtendedEditorConfiguration() {
- String languagePreferred = Activator.getDefault().getPreferenceStore().getString(IDirectEditorsIds.EDITOR_FOR_ELEMENT + resolveSemanticElement().eClass().getInstanceClassName());
- if(languagePreferred != null && !languagePreferred.equals("") && languagePreferred != configuration.getLanguage()) {
- configuration = DirectEditorsUtil.findEditorConfiguration(languagePreferred, resolveSemanticElement().eClass().getInstanceClassName());
- } else if(IDirectEditorsIds.SIMPLE_DIRECT_EDITOR.equals(languagePreferred)) {
- configuration = null;
- }
+ @Override
+ protected IParser createParser() {
+ return new GateNameParser();
}
- protected void performDefaultDirectEditorEdit(final Request theRequest) {
- // initialize the direct edit manager
- try {
- getEditingDomain().runExclusive(new Runnable() {
-
- public void run() {
- if(isActive() && isEditable()) {
- if(theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
- Character initialChar = (Character)theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
- performDirectEdit(initialChar.charValue());
- } else if((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) {
- DirectEditRequest editRequest = (DirectEditRequest)theRequest;
- performDirectEdit(editRequest.getLocation());
- } else {
- performDirectEdit();
- }
- }
- }
- });
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- protected void handleNotificationEvent(Notification event) {
- Object feature = event.getFeature();
- if(NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
- Integer c = (Integer)event.getNewValue();
- setFontColor(DiagramColorRegistry.getInstance().getColor(c));
- } else if(NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) {
- refreshUnderline();
- } else if(NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) {
- refreshStrikeThrough();
- } else if(NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) {
- refreshFont();
- } else {
- if(getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) {
- refreshLabel();
- }
- if(getParser() instanceof ISemanticParser) {
- ISemanticParser modelParser = (ISemanticParser)getParser();
- if(modelParser.areSemanticElementsAffected(null, event)) {
- removeSemanticListeners();
- if(resolveSemanticElement() != null) {
- addSemanticListeners();
- }
- refreshLabel();
- }
- }
- }
- super.handleNotificationEvent(event);
- }
-
- protected IFigure createFigure() {
- WrappingLabel label = new WrappingLabel();
- defaultText = getLabelTextHelper(label);
- return label;
+ @Override
+ protected IFigure createFigurePrim() {
+ return new GateNameFigure();
}
public class GateNameParser extends MessageFormatParser implements ISemanticParser {
@@ -759,4 +284,101 @@ public class GateNameEditPart extends LabelEditPart implements ITextAwareEditPar
return isValidFeature(feature);
}
}
+
+ public class GateNameFigure extends Figure implements ILabelFigure, IPapyrusNodeUMLElementFigure {
+
+ protected static final String LEFT_BRACE = "{";
+
+ protected static final String RIGHT_BRACE = "}";
+
+ private WrappingLabel namedLabel;
+
+ private Label stereotypesLabel;
+
+ private Label stereotypePropertiesLabel;
+
+ /**
+ * Constructor.
+ *
+ */
+ public GateNameFigure() {
+ setBorder(new MarginBorder(2));
+ ToolbarLayout layout = new ToolbarLayout(false);
+ layout.setStretchMinorAxis(true);
+ setLayoutManager(layout);
+ createContents();
+ }
+
+ protected void createContents() {
+ namedLabel = new WrappingLabel();
+ namedLabel.setTextWrap(true);
+ namedLabel.setAlignment(PositionConstants.CENTER);
+ add(namedLabel);
+ }
+
+ public void setStereotypeDisplay(String stereotypes, Image image) {
+ if(stereotypes == null || stereotypes.trim().equals("")) {
+ if(stereotypesLabel != null) {
+ this.remove(stereotypesLabel);
+ }
+ stereotypesLabel = null;
+ } else {
+ if(stereotypesLabel == null) {
+ stereotypesLabel = new Label(stereotypes, image);
+ this.add(stereotypesLabel, 0);
+ } else {
+ stereotypesLabel.setText(stereotypes);
+ stereotypesLabel.setIcon(image);
+ }
+ }
+ }
+
+
+ public void setStereotypePropertiesInBrace(String stereotypeProperties) {
+ if(stereotypeProperties == null || stereotypeProperties.trim().equals("")) {
+ if(stereotypePropertiesLabel != null) {
+ this.remove(stereotypePropertiesLabel);
+ }
+ stereotypePropertiesLabel = null;
+ } else {
+ if(stereotypePropertiesLabel == null) {
+ stereotypePropertiesLabel = new Label();
+ int index = this.getChildren().indexOf(stereotypesLabel);
+ this.add(stereotypePropertiesLabel, index + 1);
+ }
+ stereotypePropertiesLabel.setText(LEFT_BRACE + stereotypeProperties + RIGHT_BRACE);
+ }
+ }
+
+
+ public void setStereotypePropertiesInCompartment(String stereotypeProperties) {
+
+ }
+
+
+ public Label getStereotypesLabel() {
+ return stereotypesLabel;
+ }
+
+
+ public void setText(String text) {
+ namedLabel.setText(text);
+ }
+
+
+ public String getText() {
+ return namedLabel.getText();
+ }
+
+
+ public void setIcon(Image icon) {
+ namedLabel.setIcon(icon);
+ }
+
+
+ public Image getIcon() {
+ return namedLabel.getIcon();
+ }
+
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandGuardEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandGuardEditPart.java
index 2ffea82..aeacb75 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandGuardEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandGuardEditPart.java
@@ -20,8 +20,11 @@ import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
@@ -44,6 +47,7 @@ import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.DirectEditRequest;
import org.eclipse.gef.requests.GroupRequest;
+import org.eclipse.gef.tools.CellEditorLocator;
import org.eclipse.gef.tools.DirectEditManager;
import org.eclipse.gmf.runtime.common.core.command.CommandResult;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
@@ -72,6 +76,7 @@ import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest;
import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.gef.ui.internal.parts.TextCellEditorEx;
import org.eclipse.gmf.runtime.notation.FontStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
@@ -93,8 +98,10 @@ import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEd
import org.eclipse.papyrus.uml.diagram.common.directedit.MultilineLabelDirectEditManager;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.IDirectEdition;
import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
import org.eclipse.papyrus.uml.diagram.sequence.Activator;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.locator.TextCellEditorLocator;
import org.eclipse.papyrus.uml.diagram.sequence.parsers.MessageFormatParser;
import org.eclipse.papyrus.uml.diagram.sequence.util.ElementIconUtil;
import org.eclipse.papyrus.uml.diagram.sequence.util.InteractionOperandModelElementFactory;
@@ -148,7 +155,7 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy());
- installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new UMLTextSelectionEditPolicy());
+ // installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new UMLTextSelectionEditPolicy());
installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, createPrimaryDragEditPolicy());
//Do NOT allow delete guard, it also disable the Delete menu.
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new SemanticEditPolicy() {
@@ -381,11 +388,17 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
protected DirectEditManager getManager() {
if(manager == null) {
- setManager(new MultilineLabelDirectEditManager(this, MultilineLabelDirectEditManager.getTextCellEditorClass(this), UMLEditPartFactory.getTextCellEditorLocator(this)));
+ WrappingLabel primaryLabel = getPrimaryFigure().getPrimaryLabel();
+ CellEditorLocator locator = new TextCellEditorLocator(primaryLabel);
+ setManager(new MultilineLabelDirectEditManager(this, TextCellEditorEx.class, locator));
}
return manager;
}
+ public GuardFigure getPrimaryFigure() {
+ return (GuardFigure)getFigure();
+ }
+
protected void setManager(DirectEditManager manager) {
this.manager = manager;
}
@@ -488,14 +501,14 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
@Override
public void refreshBounds() {
- // int width = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
- // int height = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
- // Dimension size = new Dimension(width, height);
+ int width = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
+ int height = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
+ Dimension size = new Dimension(width, height);
int x = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
int y = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
Point loc = new Point(x, y);
- IFigure figure = getFigure();
- Dimension size = figure.getPreferredSize(-1, -1);
+ // IFigure figure = getFigure();
+ // Dimension size = figure.getPreferredSize(-1, -1);
((GraphicalEditPart)getParent()).setLayoutConstraint(this, figure, new Rectangle(loc, size));
}
@@ -674,7 +687,8 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
}
protected IFigure createFigure() {
- WrappingLabel label = new WrappingLabel();
+ GuardFigure label = new GuardFigure();
+ // WrappingLabel label = new WrappingLabel();
defaultText = getLabelTextHelper(label);
return label;
}
@@ -683,7 +697,14 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
if(interactionOperand == null) {
return "";
}
- CombinedFragment enclosingCF = (CombinedFragment)interactionOperand.getOwner();
+ Element owner = interactionOperand.getOwner();
+ while(owner != null && !(owner instanceof CombinedFragment)) {
+ owner = owner.getOwner();
+ }
+ CombinedFragment enclosingCF = (CombinedFragment)owner;
+ if (enclosingCF == null){
+ return "";
+ }
InteractionOperatorKind cfOperator = enclosingCF.getInteractionOperator();
InteractionConstraint guard = interactionOperand.getGuard();
String specValue = null;
@@ -879,4 +900,140 @@ public class InteractionOperandGuardEditPart extends ShapeEditPart implements IT
return defaultInt;
}
}
+
+ public class GuardFigure extends Figure implements ILabelFigure, IPapyrusNodeUMLElementFigure {
+
+ private WrappingLabel primaryLabel;
+
+ private Label stereotypeLabel;
+
+ private WrappingLabel stereotypePropertiesInBraceContent;
+
+ /**
+ * Constructor.
+ *
+ */
+ public GuardFigure() {
+ ToolbarLayout layout = new ToolbarLayout(false);
+ layout.setStretchMinorAxis(true);
+ setLayoutManager(layout);
+ primaryLabel = new WrappingLabel();
+ primaryLabel.setTextWrap(true);
+ primaryLabel.setAlignment(PositionConstants.CENTER);
+ this.add(primaryLabel);
+ }
+
+ public WrappingLabel getPrimaryLabel() {
+ return primaryLabel;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusUMLElementFigure#setStereotypeDisplay(java.lang.String,
+ * org.eclipse.swt.graphics.Image)
+ *
+ * @param stereotypes
+ * @param image
+ */
+
+ public void setStereotypeDisplay(String stereotypes, Image image) {
+ if((stereotypes == null || stereotypes.trim().equals("")) && image == null) {
+ if(stereotypeLabel != null) {
+ remove(stereotypeLabel);
+ }
+ stereotypeLabel = null;
+ } else {
+ if(stereotypeLabel == null) {
+ stereotypeLabel = new Label();
+ add(stereotypeLabel, 0);
+ }
+ stereotypeLabel.setText(stereotypes);
+ stereotypeLabel.setIcon(image);
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInBrace(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInBrace(String stereotypeProperties) {
+ if(stereotypeProperties == null || stereotypeProperties.trim().equals("")) {
+ if(stereotypePropertiesInBraceContent != null) {
+ remove(stereotypePropertiesInBraceContent);
+ }
+ stereotypePropertiesInBraceContent = null;
+ } else {
+ if(stereotypePropertiesInBraceContent == null) {
+ stereotypePropertiesInBraceContent = new WrappingLabel();
+ stereotypePropertiesInBraceContent.setOpaque(false);
+ int index = getChildren().indexOf(stereotypeLabel);
+ this.add(stereotypePropertiesInBraceContent, index + 1);
+ }
+ stereotypePropertiesInBraceContent.setText("{" + stereotypeProperties + "}");
+ }
+
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInCompartment(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInCompartment(String stereotypeProperties) {
+
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#getStereotypesLabel()
+ *
+ * @return
+ */
+
+ public Label getStereotypesLabel() {
+ return stereotypeLabel;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#setText(java.lang.String)
+ *
+ * @param text
+ */
+
+ public void setText(String text) {
+ primaryLabel.setText(text);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#getText()
+ *
+ * @return
+ */
+
+ public String getText() {
+ return primaryLabel.getText();
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#setIcon(org.eclipse.swt.graphics.Image)
+ *
+ * @param icon
+ */
+
+ public void setIcon(Image icon) {
+ primaryLabel.setIcon(icon);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#getIcon()
+ *
+ * @return
+ */
+
+ public Image getIcon() {
+ return primaryLabel.getIcon();
+ }
+
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AbstractHeadImpactLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AbstractHeadImpactLayoutEditPolicy.java
new file mode 100644
index 0000000..643015f
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AbstractHeadImpactLayoutEditPolicy.java
@@ -0,0 +1,244 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.impl.DynamicEObjectImpl;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.editpolicies.GraphicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
+import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.Bounds;
+import org.eclipse.gmf.runtime.notation.LayoutConstraint;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.core.listenerservice.IPapyrusListener;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.appearance.helper.UMLVisualInformationPapyrusConstant;
+import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener;
+import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener.StereotypeCustomNotification;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+
+
+/**
+ * Ignore the impact layout when the head get changed.
+ * 1. Font of head label changes.
+ * 2. Stereotype changes.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public abstract class AbstractHeadImpactLayoutEditPolicy extends GraphicalEditPolicy implements NotificationListener, IPapyrusListener {
+
+ public static final String HEAD_IMPACT_LAYOUT_POLICY = "HeadImpactLayoutEditPolicy";
+
+ /** host semantic element */
+ protected Element hostSemanticElement;
+
+ protected int currentHeadHeight = -1;
+
+ public void activate() {
+ // retrieve the view and the element managed by the edit part
+ View view = getView();
+ if(view == null) {
+ return;
+ }
+ hostSemanticElement = getUMLElement();
+ // adds a listener on the view and the element controlled by the
+ // editpart
+ getDiagramEventBroker().addNotificationListener(view, this);
+ if(hostSemanticElement == null) {
+ return;
+ }
+ getDiagramEventBroker().addNotificationListener(hostSemanticElement, this);
+ // adds the listener for stereotype application and applied stereotypes
+ // add listener to react to the application and remove of a stereotype
+ // add a lister to each already applied stereotyped
+ for(EObject stereotypeApplication : hostSemanticElement.getStereotypeApplications()) {
+ getDiagramEventBroker().addNotificationListener(stereotypeApplication, this);
+ }
+ currentHeadHeight = getHeadHeight();
+ }
+
+ /**
+ * Fix positions after impact layout.
+ */
+ public void impactLayout() {
+ int headHeight = getHeadHeight();
+ if(currentHeadHeight > 0 && headHeight != currentHeadHeight) {
+ doImpactLayout(headHeight - currentHeadHeight);
+ }
+ currentHeadHeight = headHeight;
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void deactivate() {
+ // retrieve the view and the element managed by the edit part
+ View view = getView();
+ if(view == null) {
+ return;
+ }
+ getDiagramEventBroker().removeNotificationListener(view, this);
+ if(hostSemanticElement == null) {
+ return;
+ }
+ // remove listeners to applied stereotyped
+ for(EObject stereotypeApplication : hostSemanticElement.getStereotypeApplications()) {
+ getDiagramEventBroker().removeNotificationListener(stereotypeApplication, this);
+ }
+ // remove notification on element
+ getDiagramEventBroker().removeNotificationListener(hostSemanticElement, this);
+ // removes the reference to the semantic element
+ hostSemanticElement = null;
+ }
+
+ /**
+ * Gets the diagram event broker from the editing domain.
+ *
+ * @return the diagram event broker
+ */
+ protected DiagramEventBroker getDiagramEventBroker() {
+ TransactionalEditingDomain theEditingDomain = ((IGraphicalEditPart)getHost()).getEditingDomain();
+ if(theEditingDomain != null) {
+ return DiagramEventBroker.getInstance(theEditingDomain);
+ }
+ return null;
+ }
+
+ /**
+ * Returns the uml element controlled by the host edit part
+ *
+ * @return the uml element controlled by the host edit part
+ */
+ protected Element getUMLElement() {
+ EObject element = getView().getElement();
+ if(element instanceof Element) {
+ return (Element)element;
+ }
+ return null;
+ }
+
+ /**
+ * Returns the view controlled by the host edit part
+ *
+ * @return the view controlled by the host edit part
+ */
+ protected View getView() {
+ return (View)getHost().getModel();
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener#notifyChanged(org.eclipse.emf.common.notify.Notification)
+ *
+ * @param notification
+ */
+ public void notifyChanged(Notification notification) {
+ Object feature = notification.getFeature();
+ boolean headChanged = false;
+ if(NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) {
+ headChanged = true;
+ } else if(notification.getNotifier() instanceof EAnnotation && UMLVisualInformationPapyrusConstant.STEREOTYPE_ANNOTATION == ((EAnnotation)notification.getNotifier()).getSource()) {
+ headChanged = true;
+ } else if((notification.getNotifier() instanceof DynamicEObjectImpl) && (hostSemanticElement != null) && (hostSemanticElement.getStereotypeApplications().contains(notification.getNotifier()))) {
+ headChanged = true;
+ } else if(PapyrusStereotypeListener.MODIFIED_STEREOTYPE == notification.getEventType()) {
+ headChanged = true;
+ } else if(notification instanceof StereotypeCustomNotification) {
+ headChanged = true;
+ }
+ if(headChanged) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ impactLayout();
+ }
+ });
+ }
+ }
+
+ protected Rectangle getBoundsRect() {
+ Rectangle r = new Rectangle();
+ View view = getView();
+ if(view instanceof Node) {
+ LayoutConstraint layoutConstraint = ((Node)view).getLayoutConstraint();
+ if(layoutConstraint instanceof Bounds) {
+ Bounds b = (Bounds)layoutConstraint;
+ r.x = b.getX();
+ r.y = b.getY();
+ r.width = b.getWidth();
+ r.height = b.getHeight();
+ }
+ }
+ Rectangle bounds = getHostFigure().getBounds();
+ if(r.x == -1) {
+ r.x = bounds.x;
+ }
+ if(r.y == -1) {
+ r.y = bounds.y;
+ }
+ if(r.width == -1) {
+ r.width = bounds.width;
+ }
+ if(r.height == -1) {
+ r.height = bounds.height;
+ }
+ Dimension preferredSize = getHostFigure().getPreferredSize();
+ if(r.width == 0) {
+ r.width = preferredSize.width;
+ }
+ if(r.height == 0) {
+ r.height = preferredSize.height;
+ }
+ return r;
+ }
+
+ protected IFigure getPrimaryShape() {
+ if(getHost() instanceof IPapyrusEditPart) {
+ return ((IPapyrusEditPart)getHost()).getPrimaryShape();
+ }
+ return getHostFigure();
+ }
+
+ protected TransactionalEditingDomain getEditingDomain() {
+ EditPart host = getHost();
+ if(host instanceof IGraphicalEditPart) {
+ return ((IGraphicalEditPart)host).getEditingDomain();
+ }
+ return null;
+ }
+
+ /**
+ * Compute the height of the head.
+ */
+ protected abstract int getHeadHeight();
+
+ /**
+ * Layout contents when the height of head has been changed.
+ *
+ * @param resizeDelta
+ */
+ protected abstract void doImpactLayout(int resizeDelta);
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeCommentCreationEditPolicyEx.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeCommentCreationEditPolicyEx.java
new file mode 100644
index 0000000..ea6f52e
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeCommentCreationEditPolicyEx.java
@@ -0,0 +1,325 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.Transaction;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.impl.InternalTransaction;
+import org.eclipse.emf.transaction.impl.InternalTransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.BorderedBorderItemEditPart;
+import org.eclipse.gmf.runtime.notation.BasicCompartment;
+import org.eclipse.gmf.runtime.notation.Bounds;
+import org.eclipse.gmf.runtime.notation.Connector;
+import org.eclipse.gmf.runtime.notation.DecorationNode;
+import org.eclipse.gmf.runtime.notation.EObjectValueStyle;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
+import org.eclipse.gmf.runtime.notation.LayoutConstraint;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
+import org.eclipse.gmf.runtime.notation.Shape;
+import org.eclipse.gmf.runtime.notation.TitleStyle;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
+import org.eclipse.papyrus.uml.appearance.helper.AppliedStereotypeHelper;
+import org.eclipse.papyrus.uml.appearance.helper.UMLVisualInformationPapyrusConstant;
+import org.eclipse.papyrus.uml.diagram.common.Activator;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDurationConstraintEditPart;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.command.CreateAppliedStereotypeCommentViewCommand;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypesCommentEditPart;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypesCommentLinkEditPart;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.CombinedFragment;
+import org.eclipse.uml2.uml.InteractionOperand;
+import org.eclipse.uml2.uml.Lifeline;
+
+
+/**
+ * Rewrite the CreateAppliedStereotypeCommentViewCommand to create all Comment View on the Interaction, but not the container of current node.
+ *
+ * Because we can not add any Node on some container view such as Lifeline.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class AppliedStereotypeCommentCreationEditPolicyEx extends AppliedStereotypeCommentCreationEditPolicy {
+
+ /**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+ public class CreateAppliedStereotypeCommentViewCommandEx extends CreateAppliedStereotypeCommentViewCommand {
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * @param owner
+ * @param x
+ * @param y
+ * @param base_Element
+ * @param isABordererElement
+ */
+ public CreateAppliedStereotypeCommentViewCommandEx(TransactionalEditingDomain domain, View owner, int x, int y, EObject base_Element, boolean isABordererElement) {
+ super(domain, owner, x, y, base_Element, isABordererElement);
+ }
+
+ public void doExecute() {
+
+ //create the node
+ Node node = NotationFactory.eINSTANCE.createShape();
+ node.setVisible(true);
+ Bounds bounds = NotationFactory.eINSTANCE.createBounds();
+ bounds.setX(x);
+ bounds.setY(y);
+ node.setLayoutConstraint(bounds);
+ TitleStyle ts = NotationFactory.eINSTANCE.createTitleStyle();
+ ts.setShowTitle(true);
+ node.getStyles().add(ts);
+ node.setElement(null);
+ node.setType(AppliedStereotypesCommentEditPart.ID);
+
+ connectCommentNode(owner, node);
+
+ EObjectValueStyle eObjectValueStyle = (EObjectValueStyle)node.createStyle(NotationPackage.eINSTANCE.getEObjectValueStyle());
+ eObjectValueStyle.setEObjectValue(base_element);
+ eObjectValueStyle.setName("BASE_ELEMENT");
+
+ //create the link
+ Connector edge = NotationFactory.eINSTANCE.createConnector();
+ edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ RelativeBendpoints bendpoints = NotationFactory.eINSTANCE.createRelativeBendpoints();
+ ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(2);
+ points.add(new RelativeBendpoint());
+ points.add(new RelativeBendpoint());
+ bendpoints.setPoints(points);
+ edge.setBendpoints(bendpoints);
+ ViewUtil.insertChildView(owner.getDiagram(), edge, -1, true);
+ edge.setType(AppliedStereotypesCommentLinkEditPart.ID);
+ edge.setElement(base_element);
+ IdentityAnchor anchor = NotationFactory.eINSTANCE.createIdentityAnchor();
+ edge.setSourceAnchor(anchor);
+ anchor = NotationFactory.eINSTANCE.createIdentityAnchor();
+ edge.setTargetAnchor(anchor);
+ View source = owner;
+ while(source != null && !(source instanceof Shape || source instanceof Edge)) {
+ source = (View)source.eContainer();
+ }
+ edge.setSource(source);
+ edge.setTarget(node);
+ edge.setElement(null);
+ eObjectValueStyle = (EObjectValueStyle)edge.createStyle(NotationPackage.eINSTANCE.getEObjectValueStyle());
+ eObjectValueStyle.setEObjectValue(base_element);
+ eObjectValueStyle.setName("BASE_ELEMENT");
+
+ //copy EAnnotation
+ final EAnnotation stereotypeAnnotation = owner.getEAnnotation(UMLVisualInformationPapyrusConstant.STEREOTYPE_ANNOTATION);
+ EAnnotation stereotypeAnnotationCopy = EcoreUtil.copy(stereotypeAnnotation);
+ node.getEAnnotations().add(stereotypeAnnotationCopy);
+ RecordingCommand cmd = AppliedStereotypeHelper.getSetAppliedStereotypePropertiesLocalizationCommand(domain, node, UMLVisualInformationPapyrusConstant.STEREOTYPE_COMPARTMENT_LOCATION);
+ cmd.execute();
+
+ String presentationKind = AppliedStereotypeHelper.getAppliedStereotypePresentationKind(node);
+ cmd = AppliedStereotypeHelper.getRemoveAppliedStereotypeCommand(domain, node, AppliedStereotypeHelper.getStereotypesToDisplay(node), presentationKind);
+ cmd.execute();
+ }
+
+ /**
+ * add the comment node form the owner
+ *
+ * @param owner
+ * the view from which we want to display a comment stereotype, cannot be null
+ * @param commentNode
+ * node that represent the comment , cannot be null
+ */
+ private void connectCommentNode(View owner, Node commentNode) {
+
+ //in the case of the edge the comment has to be placed into the common parent of each end
+ // if(owner instanceof Edge) {
+ // View viewSource = ((Edge)owner).getSource();
+ // View viewTarget = ((Edge)owner).getSource();
+ // //list of source parents
+ // ArrayList<View> parentsSource = getParentTree(viewSource);
+ // //list of source targets
+ // ArrayList<View> parentsTarget = getParentTree(viewTarget);
+ // View commonParent = null;
+ // int index = 0;
+ // //find the common
+ // while(commonParent == null && index < parentsSource.size()) {
+ // if(parentsTarget.contains(parentsSource.get(index))) {
+ // commonParent = parentsSource.get(index);
+ // if(!(commonParent instanceof BasicCompartment)) {
+ // commonParent = null;
+ // }
+ // }
+ // index++;
+ // }
+ // // a common has been found
+ // if(commonParent != null) {
+ // ((Bounds)commentNode.getLayoutConstraint()).setX(100);
+ // ((Bounds)commentNode.getLayoutConstraint()).setY(100);
+ // ViewUtil.insertChildView(commonParent, commentNode, ViewUtil.APPEND, true);
+ // return;
+ // }
+ // }
+ //generic case
+ View econtainer = (View)owner.eContainer();
+ if(owner instanceof Edge) {
+ econtainer = (View)((Edge)owner).getSource().eContainer();
+ ((Bounds)commentNode.getLayoutConstraint()).setX(100);
+ ((Bounds)commentNode.getLayoutConstraint()).setY(100);
+ while(econtainer instanceof Edge) {
+ econtainer = (View)((Edge)econtainer).getSource().eContainer();
+ }
+ }
+ //for the case of a port
+ if(isBorderedElement) {
+ if(econtainer.eContainer() != null) {
+ econtainer = (View)econtainer.eContainer();
+ }
+ }
+ //Ignore to create on self container.
+ if(ViewUtil.resolveSemanticElement(owner) == ViewUtil.resolveSemanticElement(econtainer)) {
+ econtainer = (View)econtainer.eContainer();
+ }
+ //We should NOT add any child to Lifeline Directly.
+ while(econtainer != null && (ViewUtil.resolveSemanticElement(econtainer) instanceof Lifeline || ViewUtil.resolveSemanticElement(econtainer) instanceof CombinedFragment || ViewUtil.resolveSemanticElement(econtainer) instanceof InteractionOperand)) {
+ econtainer = (View)econtainer.eContainer();
+ }
+ ViewUtil.insertChildView(econtainer, commentNode, ViewUtil.APPEND, true);
+
+ }
+
+ /**
+ * @param view
+ * the view for which we look for its parents, cannot be null
+ * @return the list of parents of a view
+ */
+ private ArrayList<View> getParentTree(View view) {
+ ArrayList<View> parents = new ArrayList<View>();
+ View currentView = view;
+ while(currentView != null) {
+ currentView = (View)currentView.eContainer();
+ if(currentView != null) {
+ if(!(currentView instanceof DecorationNode) && !(currentView instanceof BasicCompartment)) {
+ //parents.addAll(currentView.getChildren());
+ }
+ parents.add(currentView);
+ }
+
+ }
+ return parents;
+ }
+ }
+
+ protected void executeAppliedStereotypeCommentCreation(final EditPart editPart, final TransactionalEditingDomain domain, final EObject semanticElement) {
+ try {
+ domain.runExclusive(new Runnable() {
+
+ public void run() {
+ Display.getCurrent().asyncExec(new Runnable() {
+
+ public void run() {
+ int x = 200;
+ int y = 100;
+ if(editPart.getModel() instanceof Node) {
+ LayoutConstraint constraint = ((Node)editPart.getModel()).getLayoutConstraint();
+ if(constraint instanceof Bounds) {
+ x = x + ((Bounds)constraint).getX();
+ y = ((Bounds)constraint).getY();
+ }
+
+ }
+ if(editPart.getModel() instanceof Edge && ((((Edge)editPart.getModel()).getSource()) instanceof Node)) {
+
+ LayoutConstraint constraint = ((Node)((Edge)editPart.getModel()).getSource()).getLayoutConstraint();
+ if(constraint instanceof Bounds) {
+ x = x + ((Bounds)constraint).getX();
+ y = ((Bounds)constraint).getY() - 100;
+ }
+
+ }
+ boolean isBorderElement = false;
+ if(!(editPart instanceof CustomDurationConstraintEditPart)) {
+ if(editPart instanceof BorderedBorderItemEditPart) {
+ isBorderElement = true;
+ }
+ }
+ if(getAppliedStereotypeCommentNode() == null) {
+ CreateAppliedStereotypeCommentViewCommandEx command = new CreateAppliedStereotypeCommentViewCommandEx(domain, (View)editPart.getModel(), x, y, semanticElement, isBorderElement);
+ //use to avoid to put it in the command stack
+ Map<String, Boolean> options = new HashMap<String, Boolean>();
+ options.put(Transaction.OPTION_UNPROTECTED, Boolean.TRUE);
+ try {
+ InternalTransaction it = ((InternalTransactionalEditingDomain)domain).startTransaction(false, options);
+ command.execute();
+ it.commit();
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ }
+ }
+
+ });
+ }
+ });
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ }
+
+ protected Node getAppliedStereotypeCommentNode() {
+ Node node = super.getAppliedStereotypeCommentNode();
+ if(node != null) {
+ return node;
+ }
+ View view = (View)getHost().getModel();
+ View semanticView = view;
+ while(semanticView != null && !(semanticView instanceof Shape || semanticView instanceof Edge)) {
+ semanticView = (View)semanticView.eContainer();
+ }
+ if(semanticView == null) {
+ return null;
+ }
+ Edge appliedStereotypeLink = null;
+ //look for all links with the id AppliedStereotypesCommentLinkEditPart.ID
+ @SuppressWarnings("unchecked")
+ Iterator<Edge> edgeIterator = semanticView.getSourceEdges().iterator();
+ while(edgeIterator.hasNext()) {
+ Edge edge = (Edge)edgeIterator.next();
+ if(edge.getType().equals(AppliedStereotypesCommentLinkEditPart.ID)) {
+ appliedStereotypeLink = edge;
+ }
+
+ }
+ if(appliedStereotypeLink == null) {
+ return null;
+ }
+ return (Node)appliedStereotypeLink.getTarget();
+
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeExternalNodeLabelEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeExternalNodeLabelEditPolicy.java
new file mode 100644
index 0000000..7aabb28
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AppliedStereotypeExternalNodeLabelEditPolicy.java
@@ -0,0 +1,205 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.appearance.helper.AppliedStereotypeHelper;
+import org.eclipse.papyrus.uml.appearance.helper.UMLVisualInformationPapyrusConstant;
+import org.eclipse.papyrus.uml.diagram.common.Activator;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusUMLElementFigure;
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
+
+
+/**
+ * Display both stereotype and stereotype properties in one figure.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class AppliedStereotypeExternalNodeLabelEditPolicy extends AppliedStereotypeLabelDisplayEditPolicy {
+
+ protected View hostView = null;
+
+ /**
+ * Constructor.
+ *
+ */
+ public AppliedStereotypeExternalNodeLabelEditPolicy() {
+ this(null);
+ }
+
+ /**
+ * Constructor.
+ *
+ */
+ public AppliedStereotypeExternalNodeLabelEditPolicy(View hostView) {
+ this.hostView = hostView;
+ }
+
+ public void activate() {
+ // retrieve the view and the element managed by the edit part
+ View view = getView();
+ if(view == null) {
+ return;
+ }
+ super.activate();
+ if(hostView == null) {
+ // add a listener for TimeObservationEditPart
+ // eContainer = getParent() , but here it's the ECore model
+ EObject parent = view.eContainer();
+ if(parent instanceof View) {
+ hostView = (View)parent;
+ }
+ }
+ getDiagramEventBroker().addNotificationListener(hostView, this);
+
+ refreshDisplay();
+
+ }
+
+ @Override
+ public void deactivate() {
+ if(hostView != null) {
+ getDiagramEventBroker().removeNotificationListener(hostView, this);
+ }
+ super.deactivate();
+ }
+
+ @Override
+ public void refreshDisplay() {
+ super.refreshDisplay();
+ if(getHost() instanceof IPapyrusEditPart) {
+ IFigure figure = ((IPapyrusEditPart)getHost()).getPrimaryShape();
+
+ if(figure instanceof IPapyrusNodeUMLElementFigure) {
+ refreshAppliedStereotypesProperties((IPapyrusNodeUMLElementFigure)figure);
+ }
+ }
+ }
+
+ public String stereotypesToDisplay() {
+ if(hostView == null) {
+ return "";
+ }
+ // list of stereotypes to display
+ String stereotypesToDisplay = AppliedStereotypeHelper.getStereotypesToDisplay(hostView);
+ // Kind of the representation
+ String stereotypespresentationKind = AppliedStereotypeHelper.getAppliedStereotypePresentationKind(hostView);
+
+ // check the presentation kind. if only icon => do not display
+ // stereotypes
+ if(UMLVisualInformationPapyrusConstant.ICON_STEREOTYPE_PRESENTATION.equals(stereotypespresentationKind)) {
+ return ""; // empty string, so stereotype label should not be
+ // displayed
+ }
+
+ // stereotypes with qualified name to display
+ String stereotypesToDisplayWithQN = AppliedStereotypeHelper.getStereotypesQNToDisplay(hostView);
+
+ // the set is empty
+ if(stereotypesToDisplayWithQN.length() == 0 && stereotypesToDisplay.length() == 0) {
+ return "";
+ }
+ // vertical representation
+ if(UMLVisualInformationPapyrusConstant.STEREOTYPE_TEXT_VERTICAL_PRESENTATION.equals(stereotypespresentationKind)) {
+ return Activator.ST_LEFT + stereotypesToDisplay(Activator.ST_RIGHT + "\n" + Activator.ST_LEFT, stereotypesToDisplay, stereotypesToDisplayWithQN) + Activator.ST_RIGHT;
+ } else {// horizontal representation
+ return Activator.ST_LEFT + stereotypesToDisplay(", ", stereotypesToDisplay, stereotypesToDisplayWithQN) + Activator.ST_RIGHT;
+
+ }
+ }
+
+ protected void refreshAppliedStereotypesProperties(IPapyrusNodeUMLElementFigure figure) {
+ if(hostView == null) {
+ return;
+ }
+ final String stereotypesPropertiesToDisplay = AppliedStereotypeHelper.getAppliedStereotypesPropertiesToDisplay(hostView);
+
+ refreshAppliedStereotypesPropertiesInCompartment(stereotypesPropertiesToDisplay, figure);
+ refreshAppliedStereotypesPropertiesInBrace(stereotypesPropertiesToDisplay, figure);
+ }
+
+ /**
+ * Refreshes the stereotypes properties displayed in a compartment of this
+ * edit part.
+ *
+ * @param stereotypesPropertiesToDisplay
+ * list of properties to display
+ * @param figure
+ * the figure in which stereotype will be displayed
+ */
+ protected void refreshAppliedStereotypesPropertiesInCompartment(String stereotypesPropertiesToDisplay, IPapyrusNodeUMLElementFigure figure) {
+ if(hostView == null) {
+ return;
+ }
+ // retrieve the stereotype properties to be displayed
+
+ final boolean displayInCompartment = AppliedStereotypeHelper.hasAppliedStereotypesPropertiesToDisplay(hostView, UMLVisualInformationPapyrusConstant.STEREOTYPE_COMPARTMENT_LOCATION);
+
+ // if the string is not empty, then, the figure has to display it. Else,
+ // it displays nothing
+ if(displayInCompartment) {
+ String todisplay = StereotypeUtil.getPropertiesValues(stereotypesPropertiesToDisplay, getUMLElement());
+ figure.setStereotypePropertiesInCompartment(todisplay);
+ } else {
+ figure.setStereotypePropertiesInCompartment(null);
+ }
+ }
+
+ /**
+ * Refreshes the stereotypes properties displayed above name of the element
+ * in this edit part.
+ */
+ protected void refreshAppliedStereotypesPropertiesInBrace(String stereotypesPropertiesToDisplay, IPapyrusNodeUMLElementFigure figure) {
+ if(hostView == null) {
+ return;
+ }
+ // check if properties have to be displayed in braces.
+ final boolean displayInBrace = AppliedStereotypeHelper.hasAppliedStereotypesPropertiesToDisplay(hostView, UMLVisualInformationPapyrusConstant.STEREOTYPE_BRACE_LOCATION);
+
+ // if the string is not empty, then, the figure has to display it. Else,
+ // it displays nothing
+ if(displayInBrace) {
+ // it has to be displayed in braces, so compute the string to
+ // display
+ String todisplay = StereotypeUtil.getPropertiesValuesInBrace(stereotypesPropertiesToDisplay, getUMLElement());
+ figure.setStereotypePropertiesInBrace(todisplay);
+ } else {
+ figure.setStereotypePropertiesInBrace(null);
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy#refreshStereotypeDisplay()
+ *
+ */
+
+ @Override
+ protected void refreshStereotypeDisplay() {
+ if(getHost() instanceof IPapyrusEditPart) {
+ IFigure figure = ((IPapyrusEditPart)getHost()).getPrimaryShape();
+
+ if(figure instanceof IPapyrusUMLElementFigure) {// calculate text
+ // and icon to
+ // display
+ final String stereotypesToDisplay = stereotypesToDisplay();
+ ((IPapyrusUMLElementFigure)figure).setStereotypeDisplay(tag + (stereotypesToDisplay), null);
+ }
+ }
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CombinedFragmentHeadImpactLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CombinedFragmentHeadImpactLayoutEditPolicy.java
new file mode 100644
index 0000000..ba6322a
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CombinedFragmentHeadImpactLayoutEditPolicy.java
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.List;
+
+import org.eclipse.draw2d.FigureListener;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.LayoutListener;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.ExposeHelper;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
+import org.eclipse.gmf.runtime.notation.Bounds;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.papyrus.commands.wrappers.GEFtoEMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentCombinedFragmentCompartmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.StereotypeInteractionFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.util.CommandHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.util.OperandBoundsComputeHelper;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class CombinedFragmentHeadImpactLayoutEditPolicy extends AbstractHeadImpactLayoutEditPolicy {
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy#getHeadHeight()
+ *
+ * @return
+ */
+
+ @Override
+ protected int getHeadHeight() {
+ IFigure primaryShape = getPrimaryShape();
+ if(primaryShape instanceof StereotypeInteractionFigure) {
+ IFigure headContainer = ((StereotypeInteractionFigure)primaryShape).getHeaderLabel().getParent();
+ Rectangle boundsRect = getBoundsRect();
+ return headContainer.getPreferredSize(boundsRect.width, -1).height;
+ }
+ return 0;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy#doImpactLayout(int)
+ *
+ * @param resizeDelta
+ */
+
+ @Override
+ protected void doImpactLayout(int resizeDelta) {
+ CompoundCommand commands = new CompoundCommand();
+ CombinedFragmentEditPart host = (CombinedFragmentEditPart)getHost();
+ //1. resize the first operand.
+ CombinedFragmentCombinedFragmentCompartmentEditPart compartment = (CombinedFragmentCombinedFragmentCompartmentEditPart)host.getPrimaryChildEditPart();
+ List children = compartment.getChildren();
+ if(!children.isEmpty()) {
+ Object child = children.get(0);
+ if(child instanceof InteractionOperandEditPart) {
+ InteractionOperandEditPart operand = (InteractionOperandEditPart)child;
+ Node shape = (Node)operand.getNotationView();
+ Bounds bounds = (Bounds)shape.getLayoutConstraint();
+ Dimension size = new Dimension(bounds.getWidth(), bounds.getHeight()).expand(0, -resizeDelta);
+ Rectangle newBounds = new Rectangle(new Point(bounds.getX(), bounds.getY() + resizeDelta), size);
+ commands.appendIfCanExecute(new GMFtoEMFCommandWrapper(new SetBoundsCommand(getEditingDomain(), "", operand, newBounds)));
+ Command cmd = OperandBoundsComputeHelper.getShiftEnclosedFragmentsCommand(operand, newBounds, resizeDelta);
+ if(cmd != null) {
+ commands.appendIfCanExecute(new GEFtoEMFCommandWrapper(cmd));
+ }
+ }
+ }
+ if(!commands.isEmpty() && commands.canExecute()) {
+ CommandHelper.executeCommandWithoutHistory(getEditingDomain(), commands, true);
+ }
+ for(Object object : children) {
+ EditPart part = (EditPart)object;
+ EditPart current = part.getParent();
+ while (current != null) {
+ ExposeHelper helper = (ExposeHelper) current
+ .getAdapter(ExposeHelper.class);
+ if (helper != null)
+ helper.exposeDescendant(part);
+ current = current.getParent();
+ }
+ }
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ExecutionGraphicalNodeEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ExecutionGraphicalNodeEditPolicy.java
index 977fda4..30ae9ba 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ExecutionGraphicalNodeEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ExecutionGraphicalNodeEditPolicy.java
@@ -28,6 +28,7 @@ import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.util.FragmentsOrdererHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.OccurrenceSpecificationHelper;
import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.Message;
@@ -93,7 +94,10 @@ public class ExecutionGraphicalNodeEditPolicy extends ElementCreationWithMessage
command = command.chain(new ICommandProxy(new ResetExecutionEndCommand(((IGraphicalEditPart)target).getEditingDomain(), execution, false)));
}
}
- return command;
+ //ordering fragments.
+ //fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417374
+ Command orderingFragmentsCommand = FragmentsOrdererHelper.createOrderingFragmentsCommand(getHost(), request);
+ return command.chain(orderingFragmentsCommand);
}
private boolean relationshipSourceHasChanged(ReconnectRequest request) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionCompartmentXYLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionCompartmentXYLayoutEditPolicy.java
index 64761b0..8dea839 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionCompartmentXYLayoutEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionCompartmentXYLayoutEditPolicy.java
@@ -80,10 +80,12 @@ import org.eclipse.papyrus.uml.diagram.sequence.figures.LifelineFigure;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.HighlightUtil;
import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineEditPartUtil;
+import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineHeadUtil;
import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineMessageCreateHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineResizeHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.OperandBoundsComputeHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypesCommentEditPart;
import org.eclipse.uml2.uml.CombinedFragment;
import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.Interaction;
@@ -650,6 +652,11 @@ public class InteractionCompartmentXYLayoutEditPolicy extends XYLayoutEditPolicy
@Override
public Command getAddCommand(Request request) {
if(request instanceof ChangeBoundsRequest) {
+ //Only allow to move-in AppliedStereotypeCommentEditPart.
+ List editParts = ((ChangeBoundsRequest)request).getEditParts();
+ if(editParts.size() == 1 && editParts.get(0) instanceof AppliedStereotypesCommentEditPart) {
+ return super.getAddCommand(request);
+ }
return UnexecutableCommand.INSTANCE;
}
return super.getAddCommand(request);
@@ -668,6 +675,9 @@ public class InteractionCompartmentXYLayoutEditPolicy extends XYLayoutEditPolicy
ChangeBoundsRequest cbr = (ChangeBoundsRequest)request;
int resizeDirection = cbr.getResizeDirection();
CompoundCommand compoundCmd = new CompoundCommand("Resize of Interaction Compartment Elements");
+ if(cbr.getEditParts() == null) {
+ return super.getCommand(request);
+ }
for(EditPart ep : (List<EditPart>)cbr.getEditParts()) {
if(ep instanceof LifelineEditPart && isVerticalMove(cbr)) {
// Lifeline EditPart
@@ -732,7 +742,7 @@ public class InteractionCompartmentXYLayoutEditPolicy extends XYLayoutEditPolicy
int translate = request.getViewDescriptors().indexOf(viewDescriptor) * 10;
Rectangle target = bounds.getCopy().translate(translate, translate);
if(((IHintedType)UMLElementTypes.Lifeline_3001).getSemanticHint().equals(viewDescriptor.getSemanticHint())) {
- target.setY(SequenceUtil.LIFELINE_VERTICAL_OFFSET);
+ target.setY(LifelineHeadUtil.computeLifelineVerticalPosition(getHost()));
}
return target;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsCreationEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsCreationEditPolicy.java
index 51e84ed..36bd4f9 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsCreationEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsCreationEditPolicy.java
@@ -15,10 +15,13 @@ package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand;
import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.PapyrusCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.util.FragmentsOrdererHelper;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypesCommentEditPart;
/**
* Ordering fragments after creation.
@@ -45,4 +48,18 @@ public class InteractionFragmentsCreationEditPolicy extends PapyrusCreationEditP
}
return command;
}
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy#getReparentViewCommand(org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart)
+ *
+ * @param gep
+ * @return
+ */
+ @Override
+ protected ICommand getReparentViewCommand(IGraphicalEditPart gep) {
+ if(gep instanceof AppliedStereotypesCommentEditPart) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ return super.getReparentViewCommand(gep);
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsOrderingEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsOrderingEditPolicy.java
index 477c899..f9c43d7 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsOrderingEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionFragmentsOrderingEditPolicy.java
@@ -47,7 +47,7 @@ public class InteractionFragmentsOrderingEditPolicy extends GraphicalEditPolicy
@Override
public boolean understandsRequest(Request req) {
Object type = req.getType();
- if(REQ_MOVE.equals(type) || REQ_RESIZE.equals(req)) {
+ if(REQ_MOVE.equals(type) || REQ_RESIZE.equals(type)) {//Correct mistake(also fix bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417375)
return true;
} else if(getHost() instanceof AbstractMessageEditPart) {
return REQ_RECONNECT_SOURCE.equals(type) || REQ_RECONNECT_TARGET.equals(type) || REQ_CREATE_BENDPOINT.equals(type) || REQ_MOVE_BENDPOINT.equals(type);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionHeadImpactLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionHeadImpactLayoutEditPolicy.java
new file mode 100644
index 0000000..313fcda
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionHeadImpactLayoutEditPolicy.java
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PrecisionPoint;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.gef.NodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
+import org.eclipse.gmf.runtime.gef.ui.figures.SlidableAnchor;
+import org.eclipse.gmf.runtime.notation.Anchor;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
+import org.eclipse.gmf.runtime.notation.Location;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GateEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message6EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.StereotypeInteractionFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.util.CommandHelper;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class InteractionHeadImpactLayoutEditPolicy extends AbstractHeadImpactLayoutEditPolicy {
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy#getHeadHeight()
+ *
+ * @return
+ */
+ @Override
+ protected int getHeadHeight() {
+ IFigure primaryShape = getPrimaryShape();
+ if(primaryShape instanceof StereotypeInteractionFigure) {
+ IFigure headContainer = ((StereotypeInteractionFigure)primaryShape).getHeaderLabel().getParent();
+ Rectangle boundsRect = getBoundsRect();
+ return headContainer.getPreferredSize(boundsRect.width, -1).height;
+ }
+ return 0;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AbstractHeadImpactLayoutEditPolicy#doImpactLayout(int)
+ *
+ * @param resizeDelta
+ */
+
+ @Override
+ protected void doImpactLayout(int resizeDelta) {
+ CompoundCommand commands = new CompoundCommand();
+ //1. move gate
+ {
+ List children = getHost().getChildren();
+ List<GateEditPart> gates = new ArrayList<GateEditPart>();
+ for(Object object : children) {
+ if(object instanceof GateEditPart) {
+ gates.add((GateEditPart)object);
+ }
+ }
+ if(!gates.isEmpty()) {
+ Rectangle rect = getBoundsRect();
+ for(GateEditPart gateEditPart : gates) {
+ Node view = (Node)gateEditPart.getNotationView();
+ Location location = (Location)view.getLayoutConstraint();
+ Point pt = new Point(location.getX(), location.getY());
+ if(pt.x == rect.x - GateEditPart.DEFAULT_SIZE.width / 2 || pt.x == rect.right() - GateEditPart.DEFAULT_SIZE.width / 2) {
+ commands.appendIfCanExecute(new GMFtoEMFCommandWrapper(new SetBoundsCommand(getEditingDomain(), "Move gate", gateEditPart, pt.getTranslated(0, resizeDelta))));
+ }
+ }
+ }
+ }
+ //2. move FoundMessage
+ {
+ List sourceConnections = ((NodeEditPart)getHost()).getSourceConnections();
+ for(Object object : sourceConnections) {
+ if(object instanceof Message7EditPart) {
+ Edge edge = (Edge)((Message7EditPart)object).getNotationView();
+ Anchor sourceAnchor = edge.getSourceAnchor();
+ if(sourceAnchor instanceof IdentityAnchor) {
+ String terminal = ((IdentityAnchor)sourceAnchor).getId();
+ PrecisionPoint pt = SlidableAnchor.parseTerminalString(terminal);
+ if(pt.preciseY() > 1) {
+ pt.translate(0, resizeDelta);
+ commands.appendIfCanExecute(SetCommand.create(getEditingDomain(), sourceAnchor, NotationPackage.eINSTANCE.getIdentityAnchor_Id(), "(" + pt.preciseX() + "," + pt.preciseY() + ")"));
+ }
+ }
+ }
+ }
+ }
+ //3. Move LostMessage
+ {
+ List targetConnections = ((NodeEditPart)getHost()).getTargetConnections();
+ for(Object object : targetConnections) {
+ if(object instanceof Message6EditPart) {
+ AbstractMessageEditPart message = (AbstractMessageEditPart)object;
+ Edge edge = (Edge)message.getNotationView();
+ Anchor targetAnchor = edge.getTargetAnchor();
+ if(targetAnchor instanceof IdentityAnchor) {
+ String terminal = ((IdentityAnchor)targetAnchor).getId();
+ PrecisionPoint pt = SlidableAnchor.parseTerminalString(terminal);
+ if(pt.preciseY() > 1) {
+ pt.translate(0, resizeDelta);
+ commands.appendIfCanExecute(SetCommand.create(getEditingDomain(), targetAnchor, NotationPackage.eINSTANCE.getIdentityAnchor_Id(), "(" + pt.preciseX() + "," + pt.preciseY() + ")"));
+ }
+ }
+ }
+ }
+ }
+ if(commands.isEmpty() || !commands.canExecute()) {
+ return;
+ }
+ CommandHelper.executeCommandWithoutHistory(getEditingDomain(), commands, true);
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionOperandAppliedStereotypeLabelDisplayEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionOperandAppliedStereotypeLabelDisplayEditPolicy.java
new file mode 100644
index 0000000..e952504
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionOperandAppliedStereotypeLabelDisplayEditPolicy.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomInteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandGuardEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandGuardEditPart.GuardFigure;
+import org.eclipse.swt.graphics.Image;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class InteractionOperandAppliedStereotypeLabelDisplayEditPolicy extends AppliedStereotypeNodeLabelDisplayEditPolicy {
+
+ @Override
+ protected void refreshStereotypeDisplay() {
+ EditPart host = getHost();
+ if(!(host instanceof CustomInteractionOperandEditPart)) {
+ return;
+ }
+ IGraphicalEditPart guard = ((CustomInteractionOperandEditPart)host).getChildBySemanticHint(InteractionOperandGuardEditPart.GUARD_TYPE);
+ if(!(guard instanceof InteractionOperandGuardEditPart)) {
+ return;
+ }
+ GuardFigure figure = ((InteractionOperandGuardEditPart)guard).getPrimaryFigure();
+ // calculate text and icon to display
+ final String stereotypesToDisplay = stereotypesOnlyToDisplay();
+ // computes the icon to be displayed
+ final Image imageToDisplay = stereotypeIconToDisplay();
+
+ // if the string is not empty, then, the figure has to display it.
+ // Else, it displays
+ // nothing
+ // if (stereotypesToDisplay != "" || imageToDisplay != null) {
+ if(figure instanceof IPapyrusNodeUMLElementFigure) {
+ ((IPapyrusNodeUMLElementFigure)figure).setStereotypeDisplay(tag + (stereotypesOnlyToDisplay().equals("") ? stereotypesToDisplay : stereotypesToDisplay), imageToDisplay);
+ refreshAppliedStereotypesProperties(((IPapyrusNodeUMLElementFigure)figure));
+ }
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineHeadImpactLayoutEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineHeadImpactLayoutEditPolicy.java
new file mode 100644
index 0000000..072df22
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineHeadImpactLayoutEditPolicy.java
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomLifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomLifelineEditPart.CustomLifelineFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineHeadUtil;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class LifelineHeadImpactLayoutEditPolicy extends AbstractHeadImpactLayoutEditPolicy {
+
+ @Override
+ protected int getHeadHeight() {
+ CustomLifelineFigure primaryShape = ((CustomLifelineEditPart)getHost()).getPrimaryShape();
+ RectangleFigure figure = primaryShape.getFigureLifelineNameContainerFigure();
+ Rectangle r = getBoundsRect();
+ Dimension preferredSize = figure.getPreferredSize(r.width, -1);
+ return preferredSize.height;
+ }
+
+ @Override
+ protected void doImpactLayout(int resizeDelta) {
+ LifelineHeadUtil.updateHead((LifelineEditPart)getHost(), resizeDelta);
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineSelectionEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineSelectionEditPolicy.java
index 76dc1d8..f52c491 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineSelectionEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineSelectionEditPolicy.java
@@ -4,9 +4,11 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.Cursors;
+import org.eclipse.draw2d.FigureListener;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Locator;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
@@ -44,11 +46,18 @@ public class LifelineSelectionEditPolicy extends ResizableEditPolicyEx {
// resizable in at least one direction
List<Handle> list = new ArrayList<Handle>();
// createMoveHandle(list);
- Locator locator = new MoveHandleLocator(primaryShape.getFigureLifelineNameContainerFigure());
- MoveHandle moveHandle = new MoveHandle((GraphicalEditPart)getHost(), locator);
+ final RectangleFigure figure = primaryShape.getFigureLifelineNameContainerFigure();
+ final Locator locator = new MoveHandleLocator(figure);
+ final MoveHandle moveHandle = new MoveHandle((GraphicalEditPart)getHost(), locator);
+ figure.addFigureListener(new FigureListener() {
+
+ public void figureMoved(IFigure source) {
+ locator.relocate(moveHandle);
+ }
+ });
moveHandle.setCursor(Cursors.SIZEALL);
list.add(moveHandle);
- createResizeHandle(list, PositionConstants.NORTH);
+// createResizeHandle(list, PositionConstants.NORTH);
final IFigure fig = primaryShape.getFigureLifelineNameContainerFigure();
createResizeHandle(host, list, fig, PositionConstants.WEST);
createResizeHandle(host, list, fig, PositionConstants.EAST);
@@ -57,11 +66,19 @@ public class LifelineSelectionEditPolicy extends ResizableEditPolicyEx {
}
private void createResizeHandle(LifelineEditPart host, List<Handle> list, IFigure fig, int location) {
- Locator locator = new RelativeHandleLocator(fig, location);
+ final Locator locator = new RelativeHandleLocator(fig, location);
Cursor cursor = Cursors.getDirectionalCursor(location, fig.isMirrored());
- ResizeHandle westResizer = new ResizeHandle((GraphicalEditPart)host, locator, cursor);
+ final ResizeHandle westResizer = new ResizeHandle((GraphicalEditPart)host, locator, cursor);
ResizeTracker resizeTracker = new ResizeTracker(host, location);
westResizer.setDragTracker(resizeTracker);
+
+ final RectangleFigure figure = host.getPrimaryShape().getFigureLifelineNameContainerFigure();
+ figure.addFigureListener(new FigureListener() {
+
+ public void figureMoved(IFigure source) {
+ locator.relocate(westResizer);
+ }
+ });
list.add(westResizer);
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java
index 1e4720b..8bd3eb4 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java
@@ -76,6 +76,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.util.FragmentsOrdererHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.LifelineMessageCreateHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpart.AppliedStereotypesCommentLinkEditPart;
import org.eclipse.uml2.uml.Message;
import org.eclipse.uml2.uml.OccurrenceSpecification;
@@ -423,6 +424,13 @@ public class SequenceGraphicalNodeEditPolicy extends GraphicalNodeEditPolicy {
if(request.getConnectionEditPart() instanceof Message4EditPart && request.getTarget() != null && !LifelineMessageCreateHelper.canReconnectMessageCreate(request)) {
return UnexecutableCommand.INSTANCE;
}
+ //Avoid to reconnect AppliedStereotypesCommentLink to another EditPart.
+ ConnectionEditPart connection = request.getConnectionEditPart();
+ if (connection instanceof AppliedStereotypesCommentLinkEditPart) {
+ if (connection.getSource() != getConnectableEditPart()) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ }
Command command = super.getReconnectSourceCommand(request);
////Ordering message occurrence specifications after message reconnected, See https://bugs.eclipse.org/bugs/show_bug.cgi?id=403233
if(command != null && command.canExecute()) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/AppliedStereotypeLabelFigure.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/AppliedStereotypeLabelFigure.java
new file mode 100644
index 0000000..12804f5
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/AppliedStereotypeLabelFigure.java
@@ -0,0 +1,157 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.figures;
+
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
+import org.eclipse.swt.graphics.Image;
+
+
+/**
+ * This figure use to display stereotype and properties in brace.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class AppliedStereotypeLabelFigure extends Figure implements ILabelFigure, IPapyrusNodeUMLElementFigure {
+
+
+ private Label stereotypeLabel;
+
+ private WrappingLabel stereotypePropertiesInBraceContent;
+
+ /**
+ * Constructor.
+ *
+ */
+ public AppliedStereotypeLabelFigure() {
+ createContents();
+ }
+
+ /**
+ * create contents.
+ */
+ protected void createContents() {
+ ToolbarLayout layout = new ToolbarLayout(false);
+ layout.setStretchMinorAxis(true);
+ this.setLayoutManager(layout);
+ this.setBorder(new MarginBorder(3));
+ stereotypeLabel = new Label();
+ stereotypeLabel.setLabelAlignment(PositionConstants.CENTER);
+
+ this.add(stereotypeLabel);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusUMLElementFigure#setStereotypeDisplay(java.lang.String,
+ * org.eclipse.swt.graphics.Image)
+ *
+ * @param stereotypes
+ * @param image
+ */
+
+ public void setStereotypeDisplay(String stereotypes, Image image) {
+ stereotypeLabel.setText(stereotypes);
+ stereotypeLabel.setIcon(image);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInBrace(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInBrace(String stereotypeProperties) {
+ if(stereotypeProperties == null || stereotypeProperties.trim().equals("")) {
+ if(stereotypePropertiesInBraceContent != null) {
+ remove(stereotypePropertiesInBraceContent);
+ }
+ stereotypePropertiesInBraceContent = null;
+ } else {
+ if(stereotypePropertiesInBraceContent == null) {
+ stereotypePropertiesInBraceContent = new WrappingLabel();
+ stereotypePropertiesInBraceContent.setOpaque(false);
+ this.add(stereotypePropertiesInBraceContent);
+ }
+ stereotypePropertiesInBraceContent.setText("{" + stereotypeProperties + "}");
+ }
+
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#setStereotypePropertiesInCompartment(java.lang.String)
+ *
+ * @param stereotypeProperties
+ */
+
+ public void setStereotypePropertiesInCompartment(String stereotypeProperties) {
+
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure#getStereotypesLabel()
+ *
+ * @return
+ */
+
+ public Label getStereotypesLabel() {
+ return stereotypeLabel;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#setText(java.lang.String)
+ *
+ * @param text
+ */
+
+ public void setText(String text) {
+ stereotypeLabel.setText(text);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#getText()
+ *
+ * @return
+ */
+
+ public String getText() {
+ return stereotypeLabel.getText();
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#setIcon(org.eclipse.swt.graphics.Image)
+ *
+ * @param icon
+ */
+
+ public void setIcon(Image icon) {
+ stereotypeLabel.setIcon(icon);
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure#getIcon()
+ *
+ * @return
+ */
+
+ public Image getIcon() {
+ return stereotypeLabel.getIcon();
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/CombinedFragmentFigure.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/CombinedFragmentFigure.java
index aa882dd..a68dfe2 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/CombinedFragmentFigure.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/CombinedFragmentFigure.java
@@ -14,41 +14,45 @@
package org.eclipse.papyrus.uml.diagram.sequence.figures;
import org.eclipse.draw2d.BorderLayout;
-import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
-import org.eclipse.papyrus.uml.diagram.common.figure.node.InteractionRectangleFigure;
-public class CombinedFragmentFigure extends InteractionRectangleFigure {
+/**
+ * Change super type to support displaying stereotypes, modified by [Jin Liu(jin.liu@soyatec.com)]
+ */
+public class CombinedFragmentFigure extends StereotypeInteractionFigure {
private WrappingLabel titleLabel;
+ private RectangleFigure header;
@Override
protected void createContents() {
- add(createHeaderPane(), BorderLayout.TOP);
- add(createContentPane(), BorderLayout.CENTER);
+ super.createContents();
setShadow(false);
interactionContentPane.setOutline(false);
interactionContentPane.setOpaque(false);
interactionContentPane.setBorder(null);
}
- protected Figure createHeaderPane() {
+ @Override
+ protected RectangleFigure createHeader() {
+ header = super.createHeader();
titleLabel = new WrappingLabel();
titleLabel.setAlignment(PositionConstants.RIGHT);
titleLabel.setBorder(new MarginBorder(3, 0, 0, 3));
titleLabel.setTextWrap(false);
- IFigure leftContainer = super.createHeader();
- Figure headerPane = new Figure();
- headerPane.setLayoutManager(new BorderLayout());
- headerPane.add(leftContainer, BorderLayout.LEFT);
- headerPane.add(titleLabel, BorderLayout.RIGHT);
- return headerPane;
+ header.add(titleLabel, BorderLayout.RIGHT);
+ return header;
}
public WrappingLabel getTitleLabel() {
return titleLabel;
}
+
+ public IFigure getHeaderContainer(){
+ return header;
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/InteractionUseRectangleFigure.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/InteractionUseRectangleFigure.java
index 39175a0..2f10f87 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/InteractionUseRectangleFigure.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/InteractionUseRectangleFigure.java
@@ -17,12 +17,13 @@ import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.StackLayout;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
-import org.eclipse.papyrus.uml.diagram.common.figure.node.InteractionRectangleFigure;
/**
* The figure of the InteractionUse
+ *
+ * Change super type to support displaying stereotypes, modified by [Jin Liu(jin.liu@soyatec.com)]
*/
-public class InteractionUseRectangleFigure extends InteractionRectangleFigure {
+public class InteractionUseRectangleFigure extends StereotypeInteractionFigure {
/** A centered label */
protected WrappingLabel centerLabel;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/StereotypeInteractionFigure.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/StereotypeInteractionFigure.java
new file mode 100644
index 0000000..4d227ca
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/figures/StereotypeInteractionFigure.java
@@ -0,0 +1,180 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.figures;
+
+import org.eclipse.draw2d.BorderLayout;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.papyrus.uml.diagram.common.draw2d.InteractionFigure;
+import org.eclipse.papyrus.uml.diagram.common.draw2d.LeftToolbarLayout;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.InteractionRectangleFigure;
+import org.eclipse.swt.graphics.Font;
+
+
+/**
+ * This figure allows to display Stereotypes(both single stereotype name and stereotype in brace) on top of the name label.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class StereotypeInteractionFigure extends InteractionRectangleFigure {
+
+ /**
+ * Constructor.
+ *
+ */
+ public StereotypeInteractionFigure() {
+ }
+
+ /**
+ * Display stereotype on top of the name.
+ *
+ * Return a RectangleFigure has BorderLayout.
+ */
+ protected RectangleFigure createHeader() {
+ interactionLabel = new WrappingLabel() {
+
+ public void setFont(Font f) {
+ super.setFont(f);
+ if(stereotypesLabel != null) {
+ stereotypesLabel.setFont(f);
+ }
+ if(stereotypePropertiesInBraceContent != null) {
+ stereotypePropertiesInBraceContent.setFont(f);
+ }
+ }
+ };
+ interactionLabel.setAlignment(PositionConstants.CENTER);
+ interactionLabel.setBorder(new MarginBorder(1, 1, 3, 3));
+
+ interactionLabelContainer = new InteractionFigure() {
+
+ @Override
+ protected void outlineShape(Graphics graphics) {
+ Rectangle r = getBounds();
+
+ int labelWidth = -1;
+
+ for(Object obj : getChildren()) {
+ if(obj instanceof Label) {//Stereotype labels
+ labelWidth = Math.max(labelWidth, ((Label)obj).getPreferredSize().width);
+ } else if(obj instanceof WrappingLabel) {
+ WrappingLabel wLabel = (WrappingLabel)obj;
+ labelWidth = Math.max(labelWidth, wLabel.getPreferredSize().width);
+ }
+ }
+
+ // case the size of the label is 0 or -1 (no label)
+ if(labelWidth <= 0) {
+ labelWidth = r.width / 4;
+ } else if(labelWidth > r.width) {
+ labelWidth = r.width;
+ }
+
+ PointList points = new PointList();
+
+ Point verticalStart = new Point();
+ Point verticalEnd = new Point();
+ Point diagonalStart = new Point();
+ Point diagonalEnd = new Point();
+ Point horizontalStart = new Point();
+ Point horizontalEnd = new Point();
+
+ verticalStart.x = r.x + labelWidth + 15;
+ verticalStart.y = r.y;
+ points.addPoint(verticalStart);
+
+ verticalEnd.x = verticalStart.x;
+ verticalEnd.y = verticalStart.y + r.height / 2 + 3;
+ points.addPoint(verticalEnd);
+
+ diagonalStart.x = verticalEnd.x;
+ diagonalStart.y = verticalEnd.y;
+ points.addPoint(diagonalStart);
+
+ diagonalEnd.x = diagonalStart.x - r.height / 2 + 3;
+ diagonalEnd.y = r.y + r.height - 1;
+ points.addPoint(diagonalEnd);
+
+ horizontalStart.x = diagonalEnd.x;
+ horizontalStart.y = diagonalEnd.y;
+ points.addPoint(horizontalStart);
+
+ horizontalEnd.x = r.x;
+ horizontalEnd.y = horizontalStart.y;
+ points.addPoint(horizontalEnd);
+
+ graphics.drawPolyline(points);
+ }
+ };
+ interactionLabelContainer.setBorder(new MarginBorder(3, 3, 3, 15));
+ interactionLabelContainer.setLayoutManager(new LeftToolbarLayout());
+
+ interactionLabelContainer.add(interactionLabel);
+
+ Figure header = new Figure();
+ // header.setBorder(new MarginBorder(1, 1, 0, 3));
+ header.setLayoutManager(new ToolbarLayout(false));
+ header.add(interactionLabelContainer);
+
+ RectangleFigure container = new RectangleFigure();
+ container.setOutline(false);
+ container.setFill(false);
+ container.setLayoutManager(new BorderLayout());
+ container.add(header, BorderLayout.LEFT);
+ return container;
+ }
+
+ public void setStereotypes(String stereotypes) {
+ if(stereotypes == null || stereotypes.trim().equals("")) {
+ // Remove label if any
+ if(this.stereotypesLabel != null) {
+ getStereotypeLabelContainer().remove(this.stereotypesLabel);
+ this.stereotypesLabel = null;
+ }
+ return;
+ }
+ super.setStereotypes(stereotypes);
+ }
+
+ public void setStereotypePropertiesInBrace(String stereotypeProperties) {
+ if(stereotypeProperties == null || stereotypeProperties.trim().equals("")) {
+ // Remove label if any
+ if(this.stereotypePropertiesInBraceContent != null) {
+ getStereotypePropertiesInBraceLabelContainer().remove(this.stereotypePropertiesInBraceContent);
+ this.stereotypePropertiesInBraceContent = null;
+ }
+ return;
+ }
+ super.setStereotypePropertiesInBrace(stereotypeProperties);
+ }
+
+ protected IFigure getStereotypeLabelContainer() {
+ return interactionLabelContainer;
+ }
+
+ protected IFigure getStereotypePropertiesInBraceLabelContainer() {
+ return interactionLabelContainer;
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomCombinedFragmentPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomCombinedFragmentPreferencePage.java
index 0097b46..41dc04a 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomCombinedFragmentPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomCombinedFragmentPreferencePage.java
@@ -13,7 +13,6 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
-import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeMap;
@@ -21,12 +20,12 @@ import java.util.TreeMap;
import org.eclipse.gmf.runtime.common.ui.preferences.CheckBoxFieldEditor;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.AbstractGroup;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.BackgroundColor;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.DecorationGroup;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.LabelGroup;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.NodeColorGroup;
-import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.Messages;
import org.eclipse.swt.SWT;
@@ -46,17 +45,12 @@ public class CustomCombinedFragmentPreferencePage extends CombinedFragmentPrefer
public static final String compartments[] = { Messages.CombinedFragmentCombinedFragmentCompartmentEditPart_title };
- /** the list owning the compartment names for the Node */
- protected List<String> compartmentsList;
-
/**
* Constructor.
*
*/
public CustomCombinedFragmentPreferencePage() {
super();
- compartmentsList = new ArrayList<String>();
- initializeCompartmentsList();
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomConsiderIgnoreFragmentPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomConsiderIgnoreFragmentPreferencePage.java
index a10ff5f..f962e67 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomConsiderIgnoreFragmentPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomConsiderIgnoreFragmentPreferencePage.java
@@ -13,16 +13,14 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
-import java.util.ArrayList;
-import java.util.List;
import java.util.TreeMap;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.BackgroundColor;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.DecorationGroup;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.LabelGroup;
import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.NodeColorGroup;
-import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.Messages;
import org.eclipse.papyrus.uml.diagram.sequence.preferences.CustomCombinedFragmentPreferencePage.NodeCompartmentGroupEx;
@@ -35,8 +33,6 @@ public class CustomConsiderIgnoreFragmentPreferencePage extends ConsiderIgnoreFr
public static final String compartments[] = { Messages.CombinedFragmentCombinedFragmentCompartmentEditPart_title };
- /** the list owning the compartment names for the Node */
- protected List<String> compartmentsList;
/**
* @Override
@@ -44,8 +40,6 @@ public class CustomConsiderIgnoreFragmentPreferencePage extends ConsiderIgnoreFr
public CustomConsiderIgnoreFragmentPreferencePage() {
super();
setPreferenceKey(PackageEditPart.MODEL_ID + "_ConsiderIgnoreFragment");
- compartmentsList = new ArrayList<String>();
- initializeCompartmentsList();
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPartProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPartProvider.java
index 2bb1b3a..a826669 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPartProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPartProvider.java
@@ -85,6 +85,8 @@ public class CustomEditPartProvider extends UMLEditPartProvider {
return new CustomTimeConstraintEditPart(view);
case TimeConstraintAppliedStereotypeEditPart.VISUAL_ID:
return new CustomTimeConstraintAppliedStereotypeEditPart(view);
+ case TimeConstraintLabelEditPart.VISUAL_ID:
+ return new CustomTimeConstraintLabelEditPart(view);
case TimeObservationEditPart.VISUAL_ID:
return new CustomTimeObservationEditPart(view);
case TimeObservationLabelEditPart.VISUAL_ID:
@@ -155,6 +157,8 @@ public class CustomEditPartProvider extends UMLEditPartProvider {
return new ExecutionSpecificationEndEditPart(view);
case MessageEndEditPart.VISUAL_ID:
return new MessageEndEditPart(view);
+ case StateInvariantLabelEditPart.VISUAL_ID:
+ return new CustomStateInvariantLabelEditPart(view);
}
return null;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/PostEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/PostEditPolicyProvider.java
new file mode 100644
index 0000000..ec59afc
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/PostEditPolicyProvider.java
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.providers;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomContinuationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDestructionOccurrenceSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDurationConstraintEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomInteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomStateInvariantEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomTimeConstraintLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomTimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GateEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GeneralOrderingEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.AppliedStereotypeCommentCreationEditPolicyEx;
+import org.eclipse.papyrus.uml.diagram.stereotype.edition.editpolicies.AppliedStereotypeCommentCreationEditPolicy;
+
+
+/**
+ * Highest priority EditPolicyProvider, which can ensure the installed EditPolicies correctly.
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class PostEditPolicyProvider implements IEditPolicyProvider {
+
+ /**
+ * @see org.eclipse.gmf.runtime.common.core.service.IProvider#addProviderChangeListener(org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener)
+ *
+ * @param listener
+ */
+
+ public void addProviderChangeListener(IProviderChangeListener listener) {
+
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.common.core.service.IProvider#provides(org.eclipse.gmf.runtime.common.core.service.IOperation)
+ *
+ * @param operation
+ * @return
+ */
+
+ public boolean provides(IOperation operation) {
+ CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation)operation;
+ if(!(epOperation.getEditPart() instanceof GraphicalEditPart) && !(epOperation.getEditPart() instanceof ConnectionEditPart)) {
+ return false;
+ }
+ EditPart gep = epOperation.getEditPart();
+ String diagramType = ((View)gep.getModel()).getDiagram().getType();
+ if(PackageEditPart.MODEL_ID.equals(diagramType)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.common.core.service.IProvider#removeProviderChangeListener(org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener)
+ *
+ * @param listener
+ */
+
+ public void removeProviderChangeListener(IProviderChangeListener listener) {
+
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider#createEditPolicies(org.eclipse.gef.EditPart)
+ *
+ * @param editPart
+ */
+
+ public void createEditPolicies(EditPart editPart) {
+ //Replace AppliedStereotypeCommentCreationEditPolicy to a custom one.
+ if(editPart instanceof AbstractExecutionSpecificationEditPart || editPart instanceof CustomDestructionOccurrenceSpecificationEditPart || editPart instanceof CustomDurationConstraintEditPart || editPart instanceof CustomDurationConstraintEditPart || editPart instanceof CustomStateInvariantEditPart || editPart instanceof CustomTimeConstraintLabelEditPart || editPart instanceof CustomTimeObservationLabelEditPart || editPart instanceof AbstractMessageEditPart || editPart instanceof GeneralOrderingEditPart || editPart instanceof CustomContinuationEditPart || editPart instanceof CustomInteractionOperandEditPart || editPart instanceof GateEditPart) {
+ editPart.installEditPolicy(AppliedStereotypeCommentCreationEditPolicy.APPLIED_STEREOTYPE_COMMENT, new AppliedStereotypeCommentCreationEditPolicyEx());
+ }
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/BehaviorDisplayHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/BehaviorDisplayHelper.java
index 2159805..5e35abe 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/BehaviorDisplayHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/BehaviorDisplayHelper.java
@@ -19,7 +19,6 @@ import org.eclipse.core.databinding.observable.value.ValueDiff;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EcorePackage;
@@ -37,7 +36,6 @@ import org.eclipse.papyrus.views.properties.contexts.DataContextElement;
import org.eclipse.papyrus.views.properties.modelelement.AnnotationModelElement;
import org.eclipse.papyrus.views.properties.modelelement.ModelElement;
import org.eclipse.papyrus.views.properties.modelelement.ModelElementFactory;
-import org.eclipse.uml2.uml.UMLPackage;
/**
* @author Jin Liu (jin.liu@soyatec.com)
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineHeadUtil.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineHeadUtil.java
new file mode 100644
index 0000000..268206c
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineHeadUtil.java
@@ -0,0 +1,389 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.PrecisionPoint;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.gef.ConnectionEditPart;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.gef.ui.figures.SlidableAnchor;
+import org.eclipse.gmf.runtime.notation.Anchor;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
+import org.eclipse.gmf.runtime.notation.LayoutConstraint;
+import org.eclipse.gmf.runtime.notation.Location;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.Shape;
+import org.eclipse.gmf.runtime.notation.Size;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomLifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GateEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message6EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.LifelineFigure;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.CombinedFragment;
+import org.eclipse.uml2.uml.InteractionFragment;
+import org.eclipse.uml2.uml.InteractionUse;
+import org.eclipse.uml2.uml.Lifeline;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class LifelineHeadUtil {
+
+ public static int computeLifelineVerticalPosition(final EditPart parent) {
+ if(parent instanceof GraphicalEditPart) {
+ List children = parent.getChildren();
+ int bottom = -1;
+ for(Object object : children) {
+ if(!(object instanceof LifelineEditPart)) {
+ continue;
+ }
+ LifelineEditPart lifeline = (LifelineEditPart)object;
+ LifelineFigure primaryShape = lifeline.getPrimaryShape();
+ RectangleFigure figure = primaryShape.getFigureLifelineNameContainerFigure();
+ Rectangle r = figure.getBounds().getCopy();
+ if(!r.isEmpty()) {
+ bottom = Math.max(bottom, r.bottom());
+ }
+ }
+ if(bottom != -1) {
+ RectangleFigure figure = new RectangleFigure();
+ figure.setBorder(new MarginBorder(7));
+ ToolbarLayout layout = new ToolbarLayout();
+ layout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
+ Label label = new Label("Lifeline");
+ label.setFont(Display.getDefault().getSystemFont());
+ figure.add(label);
+ figure.setLayoutManager(layout);
+ int height = figure.getPreferredSize().height;
+ return bottom - height - 1;
+ }
+ }
+ return SequenceUtil.LIFELINE_VERTICAL_OFFSET;
+ }
+
+ public static void updateHead(LifelineEditPart lifeline, int resized) {
+ if(lifeline == null || resized == 0) {
+ return;
+ }
+ List<LifelineEditPart> toMovedLifelines = new ArrayList<LifelineEditPart>();
+ collectLifelines(toMovedLifelines, lifeline);
+ List<ShapeNodeEditPart> children = LifelineEditPartUtil.getChildShapeNodeEditPart(lifeline);
+ for(ShapeNodeEditPart child : children) {
+ collectLifelines(toMovedLifelines, child);
+ }
+ EditPart parent = lifeline.getParent();
+ while(parent instanceof LifelineEditPart) {
+ parent = parent.getParent();
+ }
+ List childrenList = parent.getChildren();
+ for(Object object : childrenList) {
+ if(toMovedLifelines.contains(object) || !(object instanceof LifelineEditPart)) {
+ continue;
+ }
+ toMovedLifelines.add((LifelineEditPart)object);
+ }
+ if(toMovedLifelines.isEmpty()) {
+ return;
+ }
+ CompoundCommand command = new CompoundCommand();
+ computeUpdateHeadCommand(command, lifeline, false, resized, new ArrayList<EditPart>());
+ if(command.canExecute()) {
+ CommandHelper.executeCommandWithoutHistory(lifeline.getEditingDomain(), command, true);
+ }
+ }
+
+ private static void computeUpdateHeadCommand(CompoundCommand commands, LifelineEditPart lifeline, boolean moveChildren, int moveDelta, List<EditPart> movedEditParts) {
+ //1. move children of current lifeline.
+ if(moveChildren) {
+ ShapeNodeEditPart nodeToMove = lifeline;
+ EditPart parent = lifeline.getParent();
+ while(parent instanceof LifelineEditPart) {
+ nodeToMove = (ShapeNodeEditPart)parent;
+ parent = parent.getParent();
+ }
+ Command cmd = getVerticalMoveShapeCommand(nodeToMove, moveDelta, false);
+ commands.appendIfCanExecute(cmd);
+ } else {
+ View view = lifeline.getNotationView();
+ LayoutConstraint constraint = ((Shape)view).getLayoutConstraint();
+ if(constraint instanceof Size) {
+ int height = ((Size)constraint).getHeight();
+ if(height == -1) {
+ height = lifeline.getFigure().getBounds().height;
+ }
+ height += moveDelta;
+ commands.appendIfCanExecute(SetCommand.create(lifeline.getEditingDomain(), constraint, NotationPackage.eINSTANCE.getSize_Height(), height));
+ }
+ }
+ movedEditParts.add(lifeline);
+
+ //2. move covered CombinedFragment and InteractionUse
+ EObject elt = lifeline.resolveSemanticElement();
+ if(elt instanceof Lifeline) {
+ EList<InteractionFragment> coveredBys = ((Lifeline)elt).getCoveredBys();
+ EditPartViewer viewer = lifeline.getViewer();
+ for(InteractionFragment fragment : coveredBys) {
+ if(!(fragment instanceof CombinedFragment || fragment instanceof InteractionUse)) {
+ continue;
+ }
+ List<View> views = DiagramEditPartsUtil.findViews(fragment, viewer);
+ if(views.isEmpty()) {
+ continue;
+ }
+ for(View view : views) {
+ EditPart ep = (EditPart)viewer.getEditPartRegistry().get(view);
+ if(ep == null) {
+ continue;
+ }
+ if(movedEditParts.contains(ep)) {
+ continue;
+ }
+ EditPart parent = ep.getParent();
+ boolean parentMoved = false;
+ while(parent != null) {
+ if(movedEditParts.contains(parent)) {
+ parentMoved = true;
+ break;
+ }
+ parent = parent.getParent();
+ }
+ if(parentMoved) {
+ continue;
+ }
+ if(ep instanceof CombinedFragmentEditPart || ep instanceof InteractionUseEditPart) {
+ Command cmd = getVerticalMoveShapeCommand((ShapeNodeEditPart)ep, moveDelta, false);
+ commands.appendIfCanExecute(cmd);
+ movedEditParts.add(ep);
+ List children = ep.getChildren();
+ for(Object object : children) {
+ if(movedEditParts.contains(object)) {
+ continue;
+ }
+ if(object instanceof GateEditPart) {
+ GateEditPart gate = (GateEditPart)object;
+ Command command = getVerticalMoveShapeCommand(gate, moveDelta, false);
+ commands.appendIfCanExecute(command);
+ movedEditParts.add(gate);
+ fillMoveDownMessageEnds(commands, gate, moveDelta, movedEditParts);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //3. move Gate if existed.
+ fillMoveDownMessageEnds(commands, lifeline, moveDelta, movedEditParts);
+ List<ShapeNodeEditPart> childShapeNodeEditParts = LifelineEditPartUtil.getChildShapeNodeEditPart(lifeline);
+ for(ShapeNodeEditPart shapeNodeEditPart : childShapeNodeEditParts) {
+ fillMoveDownMessageEnds(commands, shapeNodeEditPart, moveDelta, movedEditParts);
+ }
+
+ //4. move children of linked lifelines.
+ List<LifelineEditPart> toMovedLifelines = new ArrayList<LifelineEditPart>();
+ collectLifelines(toMovedLifelines, lifeline);
+ List<ShapeNodeEditPart> children = LifelineEditPartUtil.getChildShapeNodeEditPart(lifeline);
+ for(ShapeNodeEditPart child : children) {
+ collectLifelines(toMovedLifelines, child);
+ }
+ EditPart parent = lifeline.getParent();
+ while(parent instanceof LifelineEditPart) {
+ parent = parent.getParent();
+ }
+ List childrenList = parent.getChildren();
+ for(Object object : childrenList) {
+ if(toMovedLifelines.contains(object) || !(object instanceof LifelineEditPart)) {
+ continue;
+ }
+ toMovedLifelines.add((LifelineEditPart)object);
+ }
+ for(LifelineEditPart editPart : toMovedLifelines) {
+ if(movedEditParts.contains(editPart)) {
+ continue;
+ }
+ computeUpdateHeadCommand(commands, editPart, true, moveDelta, movedEditParts);
+ }
+ }
+
+ private static void fillMoveDownMessageEnds(CompoundCommand commands, GraphicalEditPart editPart, int moveDelta, List<EditPart> movedEditParts) {
+ List sourceConnections = editPart.getSourceConnections();
+ for(Object object : sourceConnections) {
+ ConnectionEditPart conn = (ConnectionEditPart)object;
+ EditPart target = conn.getTarget();
+ if(target instanceof GateEditPart) {
+ Command command = getVerticalMoveShapeCommand((GateEditPart)target, moveDelta, false);
+ commands.appendIfCanExecute(command);
+ movedEditParts.add(target);
+ } else if(object instanceof Message6EditPart) {
+ Command command = getMoveAnchorCommand(conn, moveDelta, false);
+ commands.appendIfCanExecute(command);
+ }
+ }
+ List targetConnections = editPart.getTargetConnections();
+ for(Object object : targetConnections) {
+ ConnectionEditPart conn = (ConnectionEditPart)object;
+ if(conn instanceof Message7EditPart) {
+ Command command = getMoveAnchorCommand(conn, moveDelta, true);
+ commands.appendIfCanExecute(command);
+ } else if(conn.getSource() instanceof GateEditPart) {
+ Command command = getVerticalMoveShapeCommand((GateEditPart)conn.getSource(), moveDelta, false);
+ commands.appendIfCanExecute(command);
+ movedEditParts.add(conn.getSource());
+ }
+ }
+ }
+
+ private static Command getMoveAnchorCommand(ConnectionEditPart conn, int moveDelta, boolean moveSource) {
+ EditPart editPart = moveSource ? conn.getSource() : conn.getTarget();
+ if(!(editPart instanceof IGraphicalEditPart)) {
+ return null;
+ }
+ Object model = conn.getModel();
+ if(!(model instanceof Edge)) {
+ return null;
+ }
+ Edge edge = (Edge)model;
+ Anchor anchor = moveSource ? edge.getSourceAnchor() : edge.getTargetAnchor();
+ if(!(anchor instanceof IdentityAnchor)) {
+ return null;
+ }
+ String terminal = ((IdentityAnchor)anchor).getId();
+ PrecisionPoint pt = SlidableAnchor.parseTerminalString(terminal);
+ PrecisionPoint p = null;
+ if(pt.preciseX() > 1 || pt.preciseY() > 1) {
+ p = new PrecisionPoint(pt.preciseX(), pt.preciseY() + moveDelta);
+ } else {
+ Rectangle bounds = SequenceUtil.getAbsoluteBounds((IGraphicalEditPart)editPart);
+ PrecisionPoint location = new PrecisionPoint(pt.preciseX() * bounds.preciseWidth() + bounds.preciseX(), pt.preciseY() * bounds.preciseHeight() + bounds.preciseY());
+ location.translate(0, moveDelta);
+ Dimension d = location.getDifference(bounds.getTopLeft());
+ p = new PrecisionPoint(d.preciseWidth() / bounds.width, d.preciseHeight() / bounds.height);
+ }
+ StringBuffer s = new StringBuffer(24);
+ s.append('('); // 1 char
+ s.append(p.preciseX()); // 10 chars
+ s.append(','); // 1 char
+ s.append(p.preciseY()); // 10 chars
+ s.append(')');
+ return SetCommand.create(getEditingDomain((GraphicalEditPart)editPart), anchor, NotationPackage.eINSTANCE.getIdentityAnchor_Id(), s.toString());
+ }
+
+ private static void collectLifelines(List<LifelineEditPart> toMovedLifelines, GraphicalEditPart editPart) {
+ if(editPart == null) {
+ return;
+ }
+ //1. links from current lifeline
+ List sourceConnections = editPart.getSourceConnections();
+ for(Object object : sourceConnections) {
+ ConnectionEditPart conn = (ConnectionEditPart)object;
+ LifelineEditPart target = getLifeline(conn.getTarget());
+ if(target == null || toMovedLifelines.contains(target) || editPart == target) {
+ continue;
+ }
+ toMovedLifelines.add(target);
+ }
+
+ //2. links to current lifeline.
+ List targetConnections = editPart.getTargetConnections();
+ for(Object object : targetConnections) {
+ ConnectionEditPart conn = (ConnectionEditPart)object;
+ LifelineEditPart source = getLifeline(conn.getSource());
+ if(source == null || toMovedLifelines.contains(source) || editPart == source) {
+ continue;
+ }
+ toMovedLifelines.add(source);
+ }
+
+ if(editPart instanceof CustomLifelineEditPart && ((CustomLifelineEditPart)editPart).isInlineMode()) {
+ List children = ((CustomLifelineEditPart)editPart).getChildren();
+ for(Object object : children) {
+ if(object instanceof LifelineEditPart) {
+ collectLifelines(toMovedLifelines, (LifelineEditPart)object);
+ }
+ }
+ if(toMovedLifelines.isEmpty()) {
+ toMovedLifelines.add((LifelineEditPart)editPart);
+ }
+ }
+ }
+
+ private static Command getVerticalMoveShapeCommand(GraphicalEditPart shapeEditPart, int moveDelta, boolean increaseHeight) {
+ if(shapeEditPart == null || moveDelta == 0) {
+ return null;
+ }
+ Object view = shapeEditPart.getModel();
+ if(!(view instanceof Shape)) {
+ return null;
+ }
+ LayoutConstraint constraint = ((Shape)view).getLayoutConstraint();
+ if(!(constraint instanceof Location)) {
+ return null;
+ }
+ int y = ((Location)constraint).getY();
+ int value = y + moveDelta;
+ Command command = SetCommand.create(getEditingDomain(shapeEditPart), constraint, NotationPackage.eINSTANCE.getLocation_Y(), value);
+ if(increaseHeight && constraint instanceof Size) {
+ int height = ((Size)constraint).getHeight();
+ if(height == -1) {
+ height = shapeEditPart.getFigure().getBounds().height;
+ }
+ height += moveDelta;
+ command = command.chain(SetCommand.create(getEditingDomain(shapeEditPart), constraint, NotationPackage.eINSTANCE.getSize_Height(), height));
+ }
+ return command;
+ }
+
+ private static EditingDomain getEditingDomain(GraphicalEditPart editPart) {
+ if(editPart instanceof IGraphicalEditPart) {
+ return ((IGraphicalEditPart)editPart).getEditingDomain();
+ }
+ return null;
+ }
+
+ private static LifelineEditPart getLifeline(EditPart editPart) {
+ if(editPart == null) {
+ return null;
+ }
+ if(editPart instanceof LifelineEditPart) {
+ return (LifelineEditPart)editPart;
+ }
+ return getLifeline(editPart.getParent());
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineResizeHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineResizeHelper.java
index fffd390..e0c8746 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineResizeHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/LifelineResizeHelper.java
@@ -29,9 +29,9 @@ import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.figures.LifelineFigure;
+import org.eclipse.uml2.uml.ExecutionSpecification;
public class LifelineResizeHelper {
@@ -51,7 +51,7 @@ public class LifelineResizeHelper {
Rectangle childrenRect = null;
List<ShapeNodeEditPart> childShapeNodeEditPart = LifelineEditPartUtil.getChildShapeNodeEditPart(lp);
for(ShapeNodeEditPart child : childShapeNodeEditPart) {
- if(!(child instanceof AbstractExecutionSpecificationEditPart)) {
+ if(!(child.resolveSemanticElement() instanceof ExecutionSpecification)) {
continue;
}
Rectangle rect = SequenceUtil.getAbsoluteBounds(child);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationHelper.java
index f639d8c..6d13ba3 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationHelper.java
@@ -102,7 +102,7 @@ public class OccurrenceSpecificationHelper {
execution.setFinish(newEnd);
}
if(canBeRemoved(oldEnd, newEnd, isStart)) {
- EcoreUtil.delete(oldEnd);
+ EcoreUtil.remove(oldEnd);
}
return true;
}
@@ -128,7 +128,6 @@ public class OccurrenceSpecificationHelper {
} else if(!isStart && UMLPackage.eINSTANCE.getExecutionSpecification_Finish() == feature) {
continue;
}
- System.out.println();
}
return true;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OperandBoundsComputeHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OperandBoundsComputeHelper.java
index 2a4cd36..3ae225e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OperandBoundsComputeHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OperandBoundsComputeHelper.java
@@ -756,7 +756,7 @@ public class OperandBoundsComputeHelper {
return groupRect;
}
- private static Command getShiftEnclosedFragmentsCommand(InteractionOperandEditPart editPart, Rectangle newBounds, int movedY) {
+ public static Command getShiftEnclosedFragmentsCommand(InteractionOperandEditPart editPart, Rectangle newBounds, int movedY) {
if(editPart == null || newBounds == null || movedY == 0) {
return null;
}
@@ -808,7 +808,7 @@ public class OperandBoundsComputeHelper {
*/
public static int computeCombinedFragementHeaderHeight(CombinedFragmentEditPart combinedFragmentEditPart) {
int headerHeight = 0;
- IFigure labelContainer = combinedFragmentEditPart.getPrimaryShape().getHeaderLabel().getParent();
+ IFigure labelContainer = combinedFragmentEditPart.getPrimaryShape().getHeaderContainer();
if(labelContainer != null) {
headerHeight = labelContainer.getPreferredSize().height();
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipHook.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipHook.java
new file mode 100644
index 0000000..6040152
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipHook.java
@@ -0,0 +1,174 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.util;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.eclipse.draw2d.EventDispatcher;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.LightweightSystem;
+import org.eclipse.draw2d.PopUpHelper;
+import org.eclipse.draw2d.SWTEventDispatcher;
+import org.eclipse.draw2d.ToolTipHelper;
+import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gef.ui.parts.GraphicalViewerImpl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class TooltipHook {
+
+ private EditPartViewer viewer;
+
+ private ToolTipHelper toolTipHelper;
+
+ private Shell toolTipShell;
+
+ private boolean toolTipDisplayed;
+
+ private Listener hideListener;
+
+ private Listener showListener;
+
+ private IFigure toolTipSource;
+
+ /**
+ * Constructor.
+ *
+ */
+ public TooltipHook(EditPartViewer viewer) {
+ this.viewer = viewer;
+ hookViewer();
+ }
+
+ public boolean isHooked(EditPartViewer viewer) {
+ if(viewer == null) {
+ return false;
+ }
+ return viewer == this.viewer;
+ }
+
+ private void hookViewer() {
+ if(viewer == null) {
+ return;
+ }
+ try {
+ Method m = GraphicalViewerImpl.class.getDeclaredMethod("getLightweightSystem");
+ m.setAccessible(true);
+ LightweightSystem lws = (LightweightSystem)m.invoke(viewer);
+ Field f = LightweightSystem.class.getDeclaredField("dispatcher");
+ f.setAccessible(true);
+ EventDispatcher dispatcher = (EventDispatcher)f.get(lws);
+ if(dispatcher instanceof SWTEventDispatcher) {
+ Field df = SWTEventDispatcher.class.getDeclaredField("toolTipHelper");
+ df.setAccessible(true);
+ toolTipHelper = (ToolTipHelper)df.get(dispatcher);
+ }
+ if(toolTipHelper == null) {
+ return;
+ }
+ Method m2 = PopUpHelper.class.getDeclaredMethod("getShell");
+ m2.setAccessible(true);
+ toolTipShell = (Shell)m2.invoke(toolTipHelper);
+ } catch (Exception e) {
+ }
+ if(toolTipShell != null) {
+ toolTipShell.addListener(SWT.Hide, hideListener = new Listener() {
+
+ public void handleEvent(Event event) {
+ event.display.asyncExec(new Runnable() {
+
+ public void run() {
+ manageToolTip();
+ }
+ });
+ }
+ });
+ toolTipShell.addListener(SWT.Show, showListener = new Listener() {
+
+ public void handleEvent(Event event) {
+ event.display.asyncExec(new Runnable() {
+
+ public void run() {
+ toolTipSource = getToolTipSource();
+ }
+ });
+ }
+ });
+ }
+ }
+
+ private IFigure getToolTipSource() {
+ if(toolTipHelper == null) {
+ return null;
+ }
+ try {
+ Field f = ToolTipHelper.class.getDeclaredField("currentTipSource");
+ f.setAccessible(true);
+ return (IFigure)f.get(toolTipHelper);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private void manageToolTip() {
+ if(toolTipSource == null) {
+ hideToolTip();
+ return;
+ }
+ IFigure currentToolTipSource = getToolTipSource();
+ if(toolTipSource != currentToolTipSource) {
+ hideToolTip();
+ } else if(toolTipShell != null && !toolTipShell.isDisposed() && !toolTipShell.isVisible()) {
+ displayToolTip();
+ }
+ }
+
+ /**
+ * Display tooltip again.
+ */
+ private void displayToolTip() {
+ toolTipShell.removeListener(SWT.Show, showListener);
+ toolTipShell.setVisible(true);
+ toolTipShell.addListener(SWT.Show, showListener);
+ toolTipDisplayed = true;
+ }
+
+ private void hideToolTip() {
+ if(toolTipDisplayed) {
+ toolTipShell.removeListener(SWT.Hide, hideListener);
+ toolTipShell.setVisible(false);
+ toolTipShell.addListener(SWT.Hide, hideListener);
+ toolTipDisplayed = false;
+ }
+ toolTipSource = null;
+ }
+
+ public void dispose() {
+ toolTipSource = null;
+ toolTipHelper = null;
+ if(toolTipShell != null && !toolTipShell.isDisposed()) {
+ hideToolTip();
+ toolTipShell.removeListener(SWT.Hide, hideListener);
+ toolTipShell.removeListener(SWT.Show, showListener);
+ }
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipUtil.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipUtil.java
index c4167e5..7a8fcef 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipUtil.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/TooltipUtil.java
@@ -47,6 +47,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.preferences.CustomLifelinePrefer
import org.eclipse.uml2.uml.CombinedFragment;
import org.eclipse.uml2.uml.ConnectableElement;
import org.eclipse.uml2.uml.DestructionOccurrenceSpecification;
+import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.GeneralOrdering;
import org.eclipse.uml2.uml.Interaction;
import org.eclipse.uml2.uml.InteractionOperand;
@@ -408,7 +409,12 @@ public class TooltipUtil {
descBuf.append("\n");
} else if(semanticElement instanceof InteractionOperand) {
descBuf.append("parent:name: ");
- CombinedFragment parent = (CombinedFragment)((InteractionOperand)semanticElement).eContainer();
+ InteractionOperand interactionOperand = (InteractionOperand)semanticElement;
+ Element owner = interactionOperand.getOwner();
+ while(owner != null && !(owner instanceof CombinedFragment)) {
+ owner = owner.getOwner();
+ }
+ CombinedFragment parent = (CombinedFragment)owner;
if(parent != null) {
descBuf.append(parent.getLabel());
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/model/sequenceDiagram.gmfgen b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/model/sequenceDiagram.gmfgen
index 151dd19..21a8949 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/model/sequenceDiagram.gmfgen
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/model/sequenceDiagram.gmfgen
@@ -577,7 +577,7 @@
<viewmap
xsi:type="gmfgen:InnerClassViewmap"
className="ContinuationFigure"
- classBody="&#xA;/**&#xA; * @generated&#xA; */&#xA;public class ContinuationFigure extends org.eclipse.draw2d.RoundedRectangle {&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;private org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel fFigureContinuationNameLabel; &#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public ContinuationFigure() {&#xA;&#x9;&#x9;&#xA;&#x9;org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout layoutThis = new org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout();&#xA;&#xA;&#xA;&#x9;this.setLayoutManager(layoutThis);&#xA;&#xA;&#x9;&#x9;this.setCornerDimensions(new org.eclipse.draw2d.geometry.Dimension(getMapMode().DPtoLP(50)&#xA;, getMapMode().DPtoLP(50)&#xA;));&#xA;&#x9;&#x9;createContents();&#xA;&#x9;}&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;private void createContents(){&#xA;&#xA;&#xA;fFigureContinuationNameLabel = new org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel();&#xA;&#xA;&#xA;&#xA;this.add(fFigureContinuationNameLabel);&#xA;&#xA;&#xA;&#x9;}&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#x9;/**&#xA;&#x9; * @generated&#xA;&#x9; */&#xA;&#x9;public org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel getFigureContinuationNameLabel() {&#xA;&#x9;&#x9;return fFigureContinuationNameLabel;&#xA;&#x9;}&#xA;&#xA;&#xA;}&#xA;&#xA;"/>
+ classBody="/*** @generated */ public class ContinuationFigure extends org.eclipse.draw2d.RoundedRectangle { /*** @generated */ private org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel fFigureContinuationNameLabel; /*** @generated */ public ContinuationFigure() { org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout layoutThis = new org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout(); this.setLayoutManager(layoutThis); this.setCornerDimensions(new org.eclipse.draw2d.geometry.Dimension(getMapMode().DPtoLP(50), getMapMode().DPtoLP(50))); createContents(); } /** * @generated */ private void createContents() { fFigureContinuationNameLabel = new org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel(); this.add(fFigureContinuationNameLabel); } /** * @generated */ public org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel getFigureContinuationNameLabel() { return fFigureContinuationNameLabel; } /**generated*/ public IFigure getInvariantFigure(){return this;}}"/>
<modelFacet>
<metaClass
href="../../../plugin/org.eclipse.uml2.uml/model/UML.genmodel#//uml/StateInvariant"/>
@@ -614,6 +614,21 @@
href="../../../plugin/org.eclipse.uml2.uml/model/UML.genmodel#//uml/NamedElement/name"/>
</modelFacet>
</labels>
+ <labels
+ visualID="5023"
+ editPartClassName="StateInvariantLabelEditPart"
+ itemSemanticEditPolicyClassName="StateInvariantILabelItemSemanticEditPolicy"
+ notationViewFactoryClassName="StateInvariantLabelViewFactory"
+ elementIcon="true">
+ <diagramRunTimeClass
+ href="../../../plugin/org.eclipse.gmf.runtime.notation/model/notation.genmodel#//notation/Node"/>
+ <viewmap
+ xsi:type="gmfgen:ParentAssignedViewmap"
+ getterName="getInvariantFigure"
+ figureQualifiedClassName="org.eclipse.draw2d.IFigure"/>
+ <modelFacet
+ parser="/0/@labelParsers/@implementations.9"/>
+ </labels>
</childNodes>
<childNodes
visualID="3018"
@@ -7472,11 +7487,8 @@
qualifiedName="org.eclipse.papyrus.uml.diagram.common.parser.stereotype.AppliedStereotypeParser"/>
<implementations
xsi:type="gmfgen:CustomParser"
- uses="/0/@diagram/@childNodes.14/@labels.1/@modelFacet"
+ uses="/0/@diagram/@childNodes.14/@labels.1/@modelFacet /0/@diagram/@childNodes.8/@labels.1/@modelFacet"
qualifiedName="org.eclipse.papyrus.uml.diagram.common.parser.ConstraintParser"/>
- <implementations
- xsi:type="gmfgen:CustomParser"
- qualifiedName="org.eclipse.papyrus.diagram.common.parser.stereotype.AppliedStereotypeParser"/>
</labelParsers>
<contextMenus
context="/0/@diagram">
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml
index 41ee2ce..01512f5 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml
@@ -220,7 +220,7 @@
<method name="getType()" value="4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,8500"/>
</object>
<object class="org.eclipse.gmf.runtime.notation.Node" id="generated-labels">
- <method name="getType()" value="5001,5003,5004,5007,5002,5008,5009,5013,5010,5014,5011,5015,5005,5012,5006,5018,5019,5016,5017"/>
+ <method name="getType()" value="5001,5003,5004,5007,5002,5008,5023,5009,5013,5010,5014,5011,5015,5005,5012,5006,5018,5019,5016,5017"/>
</object>
<object class="org.eclipse.gmf.runtime.notation.Node" id="generated-compartments">
<method name="getType()" value="7001,7004"/>
@@ -1522,7 +1522,13 @@
name="Lowest">
</Priority>
</editpolicyProvider>
-</extension>
+ <editpolicyProvider
+ class="org.eclipse.papyrus.uml.diagram.sequence.providers.PostEditPolicyProvider">
+ <Priority
+ name="Highest">
+ </Priority>
+ </editpolicyProvider>
+</extension>
<extension
point="org.eclipse.gmf.runtime.emf.type.core.elementTypes">
<metamodel
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java
index b5de6a8..6e0c09b 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java
@@ -41,8 +41,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ActionExecutionSpecificationItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java
index e7fc9df..88a0058 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java
@@ -41,8 +41,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.BehaviorExecutionSpecificationItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragment2EditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragment2EditPart.java
index a39e079..b472cb1 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragment2EditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragment2EditPart.java
@@ -39,8 +39,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CombinedFragment2ItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineChildGraphicalNodeEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragmentEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragmentEditPart.java
index 952ba44..41d17cc 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragmentEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CombinedFragmentEditPart.java
@@ -42,8 +42,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.PapyrusCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.ShowHideCompartmentEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CommentEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CommentEditPart.java
index 99f8a3f..2be64d4 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CommentEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CommentEditPart.java
@@ -40,8 +40,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editparts.AbstractCommentEditPart;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConsiderIgnoreFragmentEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConsiderIgnoreFragmentEditPart.java
index a63d27c..2006633 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConsiderIgnoreFragmentEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConsiderIgnoreFragmentEditPart.java
@@ -39,8 +39,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.ShowHideCompartmentEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CombinedFragmentItemComponentEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintContextAppliedStereotypeEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintContextAppliedStereotypeEditPart.java
index 289c2b3..e22f4a4 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintContextAppliedStereotypeEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintContextAppliedStereotypeEditPart.java
@@ -144,8 +144,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
* @generated
*/
protected String getLabelTextHelper(IFigure figure) {
- if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- return ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).getText();
+ if(figure instanceof WrappingLabel) {
+ return ((WrappingLabel)figure).getText();
} else if(figure instanceof ILabelFigure) {
return ((ILabelFigure)figure).getText();
} else {
@@ -157,8 +157,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
* @generated
*/
protected void setLabelTextHelper(IFigure figure, String text) {
- if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).setText(text);
+ if(figure instanceof WrappingLabel) {
+ ((WrappingLabel)figure).setText(text);
} else if(figure instanceof ILabelFigure) {
((ILabelFigure)figure).setText(text);
} else {
@@ -170,8 +170,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
* @generated
*/
protected Image getLabelIconHelper(IFigure figure) {
- if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- return ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).getIcon();
+ if(figure instanceof WrappingLabel) {
+ return ((WrappingLabel)figure).getIcon();
} else if(figure instanceof ILabelFigure) {
return ((ILabelFigure)figure).getIcon();
} else {
@@ -183,8 +183,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
* @generated
*/
protected void setLabelIconHelper(IFigure figure, Image icon) {
- if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).setIcon(icon);
+ if(figure instanceof WrappingLabel) {
+ ((WrappingLabel)figure).setIcon(icon);
} else if(figure instanceof ILabelFigure) {
((ILabelFigure)figure).setIcon(icon);
} else {
@@ -195,7 +195,7 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
/**
* @generated
*/
- public void setLabel(org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel figure) {
+ public void setLabel(WrappingLabel figure) {
unregisterVisuals();
setFigure(figure);
defaultText = getLabelTextHelper(figure);
@@ -485,8 +485,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
*/
protected void refreshUnderline() {
FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
- if(style != null && getFigure() instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)getFigure()).setTextUnderline(style.isUnderline());
+ if(style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline());
}
if(resolveSemanticElement() instanceof Feature) {
if(((Feature)resolveSemanticElement()).isStatic()) {
@@ -502,8 +502,8 @@ public class ConstraintContextAppliedStereotypeEditPart extends PapyrusLabelEdit
*/
protected void refreshStrikeThrough() {
FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
- if(style != null && getFigure() instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
- ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough());
+ if(style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough());
}
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintEditPart.java
index 19ab031..2da68dc 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ConstraintEditPart.java
@@ -40,8 +40,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editparts.AbstractConstraintEditPart;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeNodeLabelDisplayEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ContinuationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ContinuationEditPart.java
index d907fa7..6dfee63 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ContinuationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ContinuationEditPart.java
@@ -42,8 +42,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout;
import org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DestructionOccurrenceSpecificationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DestructionOccurrenceSpecificationEditPart.java
index c6bc3ce..ba899cd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DestructionOccurrenceSpecificationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DestructionOccurrenceSpecificationEditPart.java
@@ -28,8 +28,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DestructionEventComponentEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DestructionOccurrenceSpecificationItemSemanticEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintEditPart.java
index 48c2628..e9d1915 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintEditPart.java
@@ -51,8 +51,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout;
import org.eclipse.papyrus.uml.diagram.common.draw2d.LinesBorder;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintInMessageEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintInMessageEditPart.java
index 0c1f786..075601d 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintInMessageEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationConstraintInMessageEditPart.java
@@ -51,8 +51,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DurationConstraintInMessageItemSemanticEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
index 24fe999..25d673f 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
@@ -51,8 +51,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DurationObservationItemSemanticEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionEditPart.java
index 3e56c3c..4e46122 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionEditPart.java
@@ -41,8 +41,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.PapyrusCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.ShowHideCompartmentEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.InteractionRectangleFigure;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandEditPart.java
index 0e4c147..dafaded 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionOperandEditPart.java
@@ -45,8 +45,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.BorderItemResizableEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.PapyrusCreationEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionUseEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionUseEditPart.java
index cfeec27..6b71cb6 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionUseEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/InteractionUseEditPart.java
@@ -40,8 +40,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.InteractionUseItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.OpenDiagramEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
index 84733c7..4f5de3c 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
@@ -44,8 +44,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.editparts.NamedElementEditPart;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.AppliedStereotypeLabelDisplayEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.BorderItemResizableEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantEditPart.java
index 913de48..3dea3a0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantEditPart.java
@@ -42,8 +42,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.draw2d.CenterLayout;
import org.eclipse.papyrus.uml.diagram.common.figure.node.CenteredWrappedLabel;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
@@ -139,6 +139,10 @@ public class StateInvariantEditPart extends AbstractBorderItemEditPart {
((StateInvariantNameEditPart)childEditPart).setLabel(getPrimaryShape().getFigureContinuationNameLabel());
return true;
}
+ if(childEditPart instanceof StateInvariantLabelEditPart) {
+ ((StateInvariantLabelEditPart)childEditPart).setLabel(getPrimaryShape().getInvariantFigure());
+ return true;
+ }
return false;
}
@@ -149,6 +153,9 @@ public class StateInvariantEditPart extends AbstractBorderItemEditPart {
if(childEditPart instanceof StateInvariantNameEditPart) {
return true;
}
+ if(childEditPart instanceof StateInvariantLabelEditPart) {
+ return true;
+ }
return false;
}
@@ -1049,6 +1056,11 @@ public class StateInvariantEditPart extends AbstractBorderItemEditPart {
public CenteredWrappedLabel getFigureContinuationNameLabel() {
return fFigureContinuationNameLabel;
}
+
+ /** generated */
+ public IFigure getInvariantFigure() {
+ return this;
+ }
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantLabelEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantLabelEditPart.java
new file mode 100644
index 0000000..d0bc825
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/StateInvariantLabelEditPart.java
@@ -0,0 +1,772 @@
+package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.policies.DefaultNodeLabelDragPolicy;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.extensionpoints.editors.Activator;
+import org.eclipse.papyrus.extensionpoints.editors.configuration.IAdvancedEditorConfiguration;
+import org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConfiguration;
+import org.eclipse.papyrus.extensionpoints.editors.configuration.IPopupEditorConfiguration;
+import org.eclipse.papyrus.extensionpoints.editors.ui.ExtendedDirectEditionDialog;
+import org.eclipse.papyrus.extensionpoints.editors.ui.ILabelEditorDialog;
+import org.eclipse.papyrus.extensionpoints.editors.ui.IPopupEditorHelper;
+import org.eclipse.papyrus.extensionpoints.editors.utils.DirectEditorsUtil;
+import org.eclipse.papyrus.extensionpoints.editors.utils.IDirectEditorsIds;
+import org.eclipse.papyrus.infra.emf.appearance.helper.NameLabelIconHelper;
+import org.eclipse.papyrus.infra.emf.appearance.helper.VisualInformationPapyrusConstants;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusCompartmentEditPart;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEditPolicy;
+import org.eclipse.papyrus.uml.diagram.common.directedit.MultilineLabelDirectEditManager;
+import org.eclipse.papyrus.uml.diagram.common.editpolicies.IDirectEdition;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLParserProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.uml2.uml.Feature;
+
+/**
+ * @generated
+ */
+public class StateInvariantLabelEditPart extends PapyrusCompartmentEditPart implements ITextAwareEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 5023;
+
+ /**
+ * @generated
+ */
+ private DirectEditManager manager;
+
+ /**
+ * @generated
+ */
+ private IParser parser;
+
+ /**
+ * @generated
+ */
+ private List<?> parserElements;
+
+ /**
+ * @generated
+ */
+ private String defaultText;
+
+ /**
+ * direct edition mode (default, undefined, registered editor, etc.)
+ *
+ * @generated
+ */
+ protected int directEditionMode = IDirectEdition.UNDEFINED_DIRECT_EDITOR;
+
+ /**
+ * configuration from a registered edit dialog
+ *
+ * @generated
+ */
+ protected IDirectEditorConfiguration configuration;
+
+ /**
+ * @generated
+ */
+ public StateInvariantLabelEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new UMLTextSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy());
+ installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new DefaultNodeLabelDragPolicy());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelTextHelper(IFigure figure) {
+ if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ return ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).getText();
+ } else if(figure instanceof ILabelFigure) {
+ return ((ILabelFigure)figure).getText();
+ } else {
+ return ((Label)figure).getText();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelTextHelper(IFigure figure, String text) {
+ if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).setText(text);
+ } else if(figure instanceof ILabelFigure) {
+ ((ILabelFigure)figure).setText(text);
+ } else {
+ ((Label)figure).setText(text);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIconHelper(IFigure figure) {
+ if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ return ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).getIcon();
+ } else if(figure instanceof ILabelFigure) {
+ return ((ILabelFigure)figure).getIcon();
+ } else {
+ return ((Label)figure).getIcon();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelIconHelper(IFigure figure, Image icon) {
+ if(figure instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)figure).setIcon(icon);
+ } else if(figure instanceof ILabelFigure) {
+ ((ILabelFigure)figure).setIcon(icon);
+ } else {
+ ((Label)figure).setIcon(icon);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabel(IFigure figure) {
+ unregisterVisuals();
+ setFigure(figure);
+ defaultText = getLabelTextHelper(figure);
+ registerVisuals();
+ refreshVisuals();
+ }
+
+ /**
+ * @generated
+ */
+ protected List getModelChildren() {
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject getParserElement() {
+ return resolveSemanticElement();
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIcon() {
+ EObject parserElement = getParserElement();
+ if(parserElement == null) {
+ return null;
+ }
+ List<View> views = DiagramEditPartsUtil.findViews(parserElement, getViewer());
+ for(View view : views) {
+ if(NameLabelIconHelper.showLabelIcon(view)) {
+ return UMLElementTypes.getImage(parserElement.eClass());
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelText() {
+ String text = null;
+ EObject parserElement = getParserElement();
+ if(parserElement != null && getParser() != null) {
+ text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue());
+ }
+ if(text == null || text.length() == 0) {
+ text = defaultText;
+ }
+ return text;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabelText(String text) {
+ setLabelTextHelper(getFigure(), text);
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
+ }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditText() {
+ if(getParserElement() == null || getParser() == null) {
+ return ""; //$NON-NLS-1$
+ }
+ return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isEditable() {
+ return getParser() != null;
+ }
+
+ /**
+ * @generated
+ */
+ public ICellEditorValidator getEditTextValidator() {
+ return new ICellEditorValidator() {
+
+ public String isValid(final Object value) {
+ if(value instanceof String) {
+ final EObject element = getParserElement();
+ final IParser parser = getParser();
+ try {
+ IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() {
+
+ public void run() {
+ setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value));
+ }
+ });
+ return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+ }
+ // shouldn't get here
+ return null;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor() {
+ if(getParserElement() == null || getParser() == null) {
+ return null;
+ }
+ return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement()));
+ }
+
+ /**
+ * @generated
+ */
+ public ParserOptions getParserOptions() {
+ return ParserOptions.NONE;
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser() {
+ if(parser == null) {
+ parser = UMLParserProvider.getParser(UMLElementTypes.StateInvariant_3017, getParserElement(), UMLVisualIDRegistry.getType(org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantLabelEditPart.VISUAL_ID));
+ }
+ return parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected DirectEditManager getManager() {
+ if(manager == null) {
+ setManager(new MultilineLabelDirectEditManager(this, MultilineLabelDirectEditManager.getTextCellEditorClass(this), UMLEditPartFactory.getTextCellEditorLocator(this)));
+ }
+ return manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setManager(DirectEditManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit() {
+ getManager().show();
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit(Point eventLocation) {
+ if(getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void performDirectEdit(char initialCharacter) {
+ if(getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager)getManager()).show(initialCharacter);
+ } else {
+ performDirectEdit();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEditRequest(Request request) {
+ final Request theRequest = request;
+ if(IDirectEdition.UNDEFINED_DIRECT_EDITOR == directEditionMode) {
+ directEditionMode = getDirectEditionType();
+ }
+ switch(directEditionMode) {
+ case IDirectEdition.NO_DIRECT_EDITION:
+ // no direct edition mode => does nothing
+ return;
+ case IDirectEdition.EXTENDED_DIRECT_EDITOR:
+ updateExtendedEditorConfiguration();
+ if(configuration == null || configuration.getLanguage() == null) {
+ performDefaultDirectEditorEdit(theRequest);
+ } else {
+ configuration.preEditAction(resolveSemanticElement());
+ Dialog dialog = null;
+ if(configuration instanceof IPopupEditorConfiguration) {
+ IPopupEditorHelper helper = ((IPopupEditorConfiguration)configuration).createPopupEditorHelper(this);
+ helper.showEditor();
+ return;
+ } else if(configuration instanceof IAdvancedEditorConfiguration) {
+ dialog = ((IAdvancedEditorConfiguration)configuration).createDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), configuration.getTextToEdit(resolveSemanticElement()));
+ } else if(configuration instanceof IDirectEditorConfiguration) {
+ dialog = new ExtendedDirectEditionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), ((IDirectEditorConfiguration)configuration).getTextToEdit(resolveSemanticElement()), (IDirectEditorConfiguration)configuration);
+ } else {
+ return;
+ }
+ final Dialog finalDialog = dialog;
+ if(Window.OK == dialog.open()) {
+ TransactionalEditingDomain domain = getEditingDomain();
+ RecordingCommand command = new RecordingCommand(domain, "Edit Label") {
+
+ @Override
+ protected void doExecute() {
+ configuration.postEditAction(resolveSemanticElement(), ((ILabelEditorDialog)finalDialog).getValue());
+ }
+ };
+ domain.getCommandStack().execute(command);
+ }
+ }
+ break;
+ case IDirectEdition.DEFAULT_DIRECT_EDITOR:
+ // initialize the direct edit manager
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if(isActive() && isEditable()) {
+ if(theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character)theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest)theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ refreshLabel();
+ refreshFont();
+ refreshFontColor();
+ refreshUnderline();
+ refreshStrikeThrough();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshLabel() {
+ EditPolicy maskLabelPolicy = getEditPolicy(IMaskManagedLabelEditPolicy.MASK_MANAGED_LABEL_EDIT_POLICY);
+ if(maskLabelPolicy == null) {
+ setLabelTextHelper(getFigure(), getLabelText());
+ setLabelIconHelper(getFigure(), getLabelIcon());
+ }
+ Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if(pdEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)pdEditPolicy).refreshFeedback();
+ }
+ Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ if(sfEditPolicy instanceof UMLTextSelectionEditPolicy) {
+ ((UMLTextSelectionEditPolicy)sfEditPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshUnderline() {
+ FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
+ if(style != null && getFigure() instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)getFigure()).setTextUnderline(style.isUnderline());
+ }
+ if(resolveSemanticElement() instanceof Feature) {
+ if(((Feature)resolveSemanticElement()).isStatic()) {
+ ((WrappingLabel)getFigure()).setTextUnderline(true);
+ } else {
+ ((WrappingLabel)getFigure()).setTextUnderline(false);
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshStrikeThrough() {
+ FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
+ if(style != null && getFigure() instanceof org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel) {
+ ((org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFont() {
+ FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle());
+ if(style != null) {
+ FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD : SWT.NORMAL) | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
+ setFont(fontData);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFontColor(Color color) {
+ getFigure().setForegroundColor(color);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addSemanticListeners() {
+ if(getParser() instanceof ISemanticParser) {
+ EObject element = resolveSemanticElement();
+ parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element);
+ for(int i = 0; i < parserElements.size(); i++) {
+ addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$
+ }
+ } else {
+ super.addSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeSemanticListeners() {
+ if(parserElements != null) {
+ for(int i = 0; i < parserElements.size(); i++) {
+ removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
+ }
+ } else {
+ super.removeSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected AccessibleEditPart getAccessibleEditPart() {
+ if(accessibleEP == null) {
+ accessibleEP = new AccessibleGraphicalEditPart() {
+
+ public void getName(AccessibleEvent e) {
+ e.result = getLabelTextHelper(getFigure());
+ }
+ };
+ }
+ return accessibleEP;
+ }
+
+ /**
+ * @generated
+ */
+ private View getFontStyleOwnerView() {
+ return getPrimaryView();
+ }
+
+ /**
+ * Returns the kind of associated editor for direct edition.
+ *
+ * @return an <code>int</code> corresponding to the kind of direct editor, @see org.eclipse.papyrus.uml.diagram.common.editpolicies.IDirectEdition
+ * @generated
+ */
+ public int getDirectEditionType() {
+ if(checkExtendedEditor()) {
+ initExtendedEditorConfiguration();
+ return IDirectEdition.EXTENDED_DIRECT_EDITOR;
+ }
+ if(checkDefaultEdition()) {
+ return IDirectEdition.DEFAULT_DIRECT_EDITOR;
+ }
+ // not a named element. no specific editor => do nothing
+ return IDirectEdition.NO_DIRECT_EDITION;
+ }
+
+ /**
+ * Checks if an extended editor is present.
+ *
+ * @return <code>true</code> if an extended editor is present.
+ * @generated
+ */
+ protected boolean checkExtendedEditor() {
+ if(resolveSemanticElement() != null) {
+ return DirectEditorsUtil.hasSpecificEditorConfiguration(resolveSemanticElement().eClass().getInstanceClassName());
+ }
+ return false;
+ }
+
+ /**
+ * Checks if a default direct edition is available
+ *
+ * @return <code>true</code> if a default direct edition is available
+ * @generated
+ */
+ protected boolean checkDefaultEdition() {
+ return (getParser() != null);
+ }
+
+ /**
+ * Initializes the extended editor configuration
+ *
+ * @generated
+ */
+ protected void initExtendedEditorConfiguration() {
+ if(configuration == null) {
+ final String languagePreferred = Activator.getDefault().getPreferenceStore().getString(IDirectEditorsIds.EDITOR_FOR_ELEMENT + resolveSemanticElement().eClass().getInstanceClassName());
+ if(languagePreferred != null && !languagePreferred.equals("")) {
+ configuration = DirectEditorsUtil.findEditorConfiguration(languagePreferred, resolveSemanticElement().eClass().getInstanceClassName());
+ } else {
+ configuration = DirectEditorsUtil.findEditorConfiguration(IDirectEditorsIds.UML_LANGUAGE, resolveSemanticElement().eClass().getInstanceClassName());
+ }
+ }
+ }
+
+ /**
+ * Updates the preference configuration
+ *
+ * @generated
+ */
+ protected void updateExtendedEditorConfiguration() {
+ String languagePreferred = Activator.getDefault().getPreferenceStore().getString(IDirectEditorsIds.EDITOR_FOR_ELEMENT + resolveSemanticElement().eClass().getInstanceClassName());
+ if(languagePreferred != null && !languagePreferred.equals("") && languagePreferred != configuration.getLanguage()) {
+ configuration = DirectEditorsUtil.findEditorConfiguration(languagePreferred, resolveSemanticElement().eClass().getInstanceClassName());
+ } else if(IDirectEditorsIds.SIMPLE_DIRECT_EDITOR.equals(languagePreferred)) {
+ configuration = null;
+ }
+ }
+
+ /**
+ * Performs the direct edit usually used by GMF editors.
+ *
+ * @param theRequest
+ * the direct edit request that starts the direct edit system
+ * @generated
+ */
+ protected void performDefaultDirectEditorEdit(final Request theRequest) {
+ // initialize the direct edit manager
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if(isActive() && isEditable()) {
+ if(theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character)theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest)theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("PrimaryView"); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleNotificationEvent(Notification event) {
+ refreshLabel();
+ Object feature = event.getFeature();
+ if(NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
+ Integer c = (Integer)event.getNewValue();
+ setFontColor(DiagramColorRegistry.getInstance().getColor(c));
+ } else if(NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) {
+ refreshUnderline();
+ } else if(NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) {
+ refreshStrikeThrough();
+ } else if(NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) {
+ refreshFont();
+ } else {
+ if(getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) {
+ refreshLabel();
+ }
+ if(getParser() instanceof ISemanticParser) {
+ ISemanticParser modelParser = (ISemanticParser)getParser();
+ if(modelParser.areSemanticElementsAffected(null, event)) {
+ removeSemanticListeners();
+ if(resolveSemanticElement() != null) {
+ addSemanticListeners();
+ }
+ refreshLabel();
+ }
+ }
+ }
+ if(event.getNewValue() instanceof EAnnotation && VisualInformationPapyrusConstants.DISPLAY_NAMELABELICON.equals(((EAnnotation)event.getNewValue()).getSource())) {
+ refreshLabel();
+ }
+ super.handleNotificationEvent(event);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFigure() {
+ // Parent should assign one using setLabel() method
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private static final String ADD_PARENT_MODEL = "AddParentModel";
+
+ /**
+ * @generated
+ */
+ public void activate() {
+ super.activate();
+ addOwnerElementListeners();
+ }
+
+ /**
+ * @generated
+ */
+ protected void addOwnerElementListeners() {
+ addListenerFilter(ADD_PARENT_MODEL, this, ((View)getParent().getModel())); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ public void deactivate() {
+ removeOwnerElementListeners();
+ super.deactivate();
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeOwnerElementListeners() {
+ removeListenerFilter(ADD_PARENT_MODEL);
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeConstraintEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeConstraintEditPart.java
index 5127897..9c729ac 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeConstraintEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeConstraintEditPart.java
@@ -49,8 +49,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.TimeConstraintItemSemanticEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
index ff135c1..b72dc24 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
@@ -49,8 +49,8 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.TimeObservationItemSemanticEditPolicy;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
index 21172f1..fe56fd7 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
@@ -76,6 +76,8 @@ public class UMLEditPartFactory implements EditPartFactory {
return new StateInvariantEditPart(view);
case StateInvariantNameEditPart.VISUAL_ID:
return new StateInvariantNameEditPart(view);
+ case StateInvariantLabelEditPart.VISUAL_ID:
+ return new StateInvariantLabelEditPart(view);
case CombinedFragment2EditPart.VISUAL_ID:
return new CombinedFragment2EditPart(view);
case TimeConstraintEditPart.VISUAL_ID:
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ActionExecutionSpecificationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ActionExecutionSpecificationPreferencePage.java
index 7db0b71..f08aea2 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ActionExecutionSpecificationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ActionExecutionSpecificationPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/BehaviorExecutionSpecificationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/BehaviorExecutionSpecificationPreferencePage.java
index 379b045..b75f066 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/BehaviorExecutionSpecificationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/BehaviorExecutionSpecificationPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CombinedFragmentPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CombinedFragmentPreferencePage.java
index 936f2b2..fb73a0b 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CombinedFragmentPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CombinedFragmentPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CommentPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CommentPreferencePage.java
index e77de86..407e196 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CommentPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CommentPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConsiderIgnoreFragmentPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConsiderIgnoreFragmentPreferencePage.java
index c3c63e6..fade456 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConsiderIgnoreFragmentPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConsiderIgnoreFragmentPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConstraintPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConstraintPreferencePage.java
index 51bb0cf..1845540 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConstraintPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ConstraintPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ContinuationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ContinuationPreferencePage.java
index ddbe2f5..eb6f4ed 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ContinuationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/ContinuationPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DestructionOccurrenceSpecificationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DestructionOccurrenceSpecificationPreferencePage.java
index 6c5a727..f5940cc 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DestructionOccurrenceSpecificationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DestructionOccurrenceSpecificationPreferencePage.java
@@ -1,8 +1,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintInMessagePreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintInMessagePreferencePage.java
index 2eb4c57..b203f16 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintInMessagePreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintInMessagePreferencePage.java
@@ -15,9 +15,9 @@ package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
-import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintPreferencePage.java
index 9e031cc..3d311e7 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationConstraintPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationObservationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationObservationPreferencePage.java
index 5c57145..5808e0f 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationObservationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/DurationObservationPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionOperandPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionOperandPreferencePage.java
index 8c9c8f5..4eb1aaf 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionOperandPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionOperandPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionPreferencePage.java
index 3a33114..d9bf0e1 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionPreferencePage.java
@@ -17,8 +17,8 @@ import java.util.Map;
import java.util.TreeMap;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionUsePreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionUsePreferencePage.java
index 90f2773..2461c19 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionUsePreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/InteractionUsePreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/LifelinePreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/LifelinePreferencePage.java
index 8567160..34b74f0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/LifelinePreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/LifelinePreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/StateInvariantPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/StateInvariantPreferencePage.java
index 52ac2db..840f575 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/StateInvariantPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/StateInvariantPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeConstraintPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeConstraintPreferencePage.java
index 76fa6ec..2f06774 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeConstraintPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeConstraintPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeObservationPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeObservationPreferencePage.java
index 4150ce7..eb41874 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeObservationPreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/preferences/TimeObservationPreferencePage.java
@@ -14,8 +14,8 @@
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLParserProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLParserProvider.java
index 9b63118..997594e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLParserProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLParserProvider.java
@@ -58,6 +58,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName7EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageNameEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageReplyAppliedStereotypeEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageSyncAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantLabelEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantNameEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintAppliedStereotypeEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintLabelEditPart;
@@ -133,6 +134,21 @@ public class UMLParserProvider extends AbstractProvider implements IParserProvid
/**
* @generated
*/
+ private ConstraintParser stateInvariantLabel_5023Parser;
+
+ /**
+ * @generated
+ */
+ private IParser getStateInvariantLabel_5023Parser() {
+ if(stateInvariantLabel_5023Parser == null) {
+ stateInvariantLabel_5023Parser = new ConstraintParser();
+ }
+ return stateInvariantLabel_5023Parser;
+ }
+
+ /**
+ * @generated
+ */
private TimeConstraintParser timeConstraintLabel_5009Parser;
/**
@@ -636,6 +652,8 @@ public class UMLParserProvider extends AbstractProvider implements IParserProvid
return getLifelineName_5002Parser();
case StateInvariantNameEditPart.VISUAL_ID:
return getStateInvariantName_5008Parser();
+ case StateInvariantLabelEditPart.VISUAL_ID:
+ return getStateInvariantLabel_5023Parser();
case TimeConstraintLabelEditPart.VISUAL_ID:
return getTimeConstraintLabel_5009Parser();
case TimeConstraintAppliedStereotypeEditPart.VISUAL_ID:
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
index 8cf4da1..7f522e1 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
@@ -54,8 +54,8 @@ import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.papyrus.infra.extendedtypes.types.IExtendedHintedElementType;
import org.eclipse.papyrus.infra.extendedtypes.util.ElementTypeUtils;
-import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.uml.diagram.common.helper.PreferenceInitializerForElementHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
@@ -118,6 +118,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageReplyAppliedSt
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageSyncAppliedStereotypeEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantLabelEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantNameEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintAppliedStereotypeEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintEditPart;
@@ -474,6 +475,7 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
PreferenceInitializerForElementHelper.initFontStyleFromPrefs(node, prefStore, "StateInvariant");
PreferenceInitializerForElementHelper.initBackgroundFromPrefs(node, prefStore, "StateInvariant");
Node label5008 = createLabel(node, UMLVisualIDRegistry.getType(StateInvariantNameEditPart.VISUAL_ID));
+ Node label5023 = createLabel(node, UMLVisualIDRegistry.getType(StateInvariantLabelEditPart.VISUAL_ID));
return node;
}
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/databinding/StereotypeAppearanceObservableValue.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/databinding/StereotypeAppearanceObservableValue.java
index 76d47f5..ce3d318 100644
--- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/databinding/StereotypeAppearanceObservableValue.java
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/databinding/StereotypeAppearanceObservableValue.java
@@ -21,7 +21,12 @@ import static org.eclipse.papyrus.uml.properties.util.StereotypeAppearanceConsta
import static org.eclipse.papyrus.uml.properties.util.StereotypeAppearanceConstants.TEXT_AND_ICON;
import static org.eclipse.papyrus.uml.properties.util.StereotypeAppearanceConstants.VERTICAL;
+import org.eclipse.core.databinding.observable.Diffs;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.core.internal.databinding.Util;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.transaction.RecordingCommand;
@@ -62,6 +67,16 @@ public class StereotypeAppearanceObservableValue extends AbstractObservableValue
protected TransactionalEditingDomain domain;
/**
+ * Try to synchronize annotation value from model.
+ */
+ private Adapter diagramElementListener;
+
+ /**
+ * Cached set value, and fire an event if this value changed.
+ */
+ private String cachedValue;
+
+ /**
*
* Constructor.
*
@@ -80,6 +95,34 @@ public class StereotypeAppearanceObservableValue extends AbstractObservableValue
this.diagramElement = diagramElement;
this.element = element;
this.domain = (TransactionalEditingDomain)domain;
+ if(diagramElement != null) {
+ diagramElement.eAdapters().add(getDiagramElementListener());
+ }
+ }
+
+ /**
+ * Create a listener for DiagramElement.
+ */
+ private Adapter getDiagramElementListener() {
+ if(diagramElementListener == null) {
+ diagramElementListener = new AdapterImpl() {
+
+ @Override
+ public void notifyChanged(Notification msg) {
+ if(!msg.isTouch()) {
+ handleStereotypeChanged(msg);
+ }
+ }
+ };
+ }
+ return diagramElementListener;
+ }
+
+ /**
+ * Synchronize value from model. So that, the binded UI would be updated.
+ */
+ protected void handleStereotypeChanged(Notification msg) {
+ setValue(doGetValue());
}
public Object getValueType() {
@@ -150,18 +193,34 @@ public class StereotypeAppearanceObservableValue extends AbstractObservableValue
}
}
+ @SuppressWarnings("restriction")
@Override
protected void doSetValue(Object value) {
if(value instanceof String) {
+ String oldValue = cachedValue;
String stringValue = (String)value;
-
- if(propertyPath.equals(STEREOTYPE_DISPLAY)) { //Edition of the stereotypeDisplay property
- setStereotypeDisplayValue(stringValue);
- } else if(propertyPath.equals(TEXT_ALIGNMENT)) { //Edition of the textAlignment property
- setTextAlignmentValue(stringValue);
- } else if(propertyPath.equals(DISPLAY_PLACE)) { //Edition of the displayPlace property
- setDisplayPlaceValue(stringValue);
+ if(diagramElement != null) {
+ diagramElement.eAdapters().remove(diagramElementListener);
+ }
+ String currentValue = doGetValue();
+ //Update model with if the real value changed.
+ if(!Util.equals(currentValue, stringValue)) {
+ if(propertyPath.equals(STEREOTYPE_DISPLAY)) { //Edition of the stereotypeDisplay property
+ setStereotypeDisplayValue(stringValue);
+ } else if(propertyPath.equals(TEXT_ALIGNMENT)) { //Edition of the textAlignment property
+ setTextAlignmentValue(stringValue);
+ } else if(propertyPath.equals(DISPLAY_PLACE)) { //Edition of the displayPlace property
+ setDisplayPlaceValue(stringValue);
+ }
+ }
+ //Send an event if value changed. We should use the cached value since it was binded with others, and the real value can be changed externally(such as UNDO/REDO).
+ if(!Util.equals(oldValue, stringValue) && hasListeners()) {
+ fireValueChange(Diffs.createValueDiff(oldValue, stringValue));
+ }
+ if(diagramElement != null) {
+ diagramElement.eAdapters().add(getDiagramElementListener());
}
+ cachedValue = stringValue;
} else {
Activator.log.warn("The value " + value + " is invalid for property " + propertyPath); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -211,4 +270,16 @@ public class StereotypeAppearanceObservableValue extends AbstractObservableValue
domain.getCommandStack().execute(command);
}
+ /**
+ * @see org.eclipse.core.databinding.observable.AbstractObservable#dispose()
+ *
+ */
+
+ @Override
+ public synchronized void dispose() {
+ if(diagramElement != null && diagramElementListener != null) {
+ diagramElement.eAdapters().remove(diagramElementListener);
+ }
+ super.dispose();
+ }
}
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositeforview/AppearanceForAppliedStereotypeComposite.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositeforview/AppearanceForAppliedStereotypeComposite.java
index 69012b1..24fb4ca 100644
--- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositeforview/AppearanceForAppliedStereotypeComposite.java
+++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/profile/ui/compositeforview/AppearanceForAppliedStereotypeComposite.java
@@ -14,14 +14,17 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.properties.profile.ui.compositeforview;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.jface.resource.JFaceColors;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.papyrus.infra.core.utils.EditorUtils;
import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject;
import org.eclipse.papyrus.uml.appearance.helper.AppliedStereotypeHelper;
import org.eclipse.papyrus.uml.profile.Activator;
@@ -29,6 +32,10 @@ import org.eclipse.papyrus.uml.profile.ImageManager;
import org.eclipse.papyrus.uml.profile.tree.DisplayedProfileElementLabelProvider;
import org.eclipse.papyrus.uml.profile.tree.objects.AppliedStereotypePropertyTreeObject;
import org.eclipse.papyrus.uml.profile.tree.objects.AppliedStereotypeTreeObject;
+import org.eclipse.papyrus.uml.profile.tree.objects.StereotypedElementTreeObject;
+import org.eclipse.papyrus.uml.properties.profile.ui.compositesformodel.DecoratedTreeComposite;
+import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener;
+import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener.StereotypeCustomNotification;
import org.eclipse.papyrus.uml.tools.utils.UMLUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
@@ -128,6 +135,8 @@ public class AppearanceForAppliedStereotypeComposite extends org.eclipse.papyrus
*/
protected ISelection selection;
+ private Adapter elementListener;
+
/**
* The Constructor.
*
@@ -200,10 +209,35 @@ public class AppearanceForAppliedStereotypeComposite extends org.eclipse.papyrus
// treeViewer.setLabelProvider(new ProfileElementWithDisplayLabelProvider());
refresh();
+ //Update buttons
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ refreshButtons();
+ }
+ });
return this;
}
/**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417372
+ * Update buttons status when items have been selected from the tree.
+ * If no stereotype selected in Appearance, disable the buttons to apply.
+ */
+ private void refreshButtons() {
+ if(tree == null || tree.isDisposed()) {
+ return;
+ }
+ boolean enabled = getDiagramElement() != null && !treeViewer.getSelection().isEmpty();
+ if(displayButton != null && !displayButton.isDisposed()) {
+ displayButton.setEnabled(enabled);
+ }
+ if(displayButtonQN != null && !displayButtonQN.isDisposed()) {
+ displayButtonQN.setEnabled(enabled);
+ }
+ }
+
+ /**
* Display button pressed.
*/
public void displayButtonPressed(boolean withQualifiedName) {
@@ -313,7 +347,7 @@ public class AppearanceForAppliedStereotypeComposite extends org.eclipse.papyrus
public TransactionalEditingDomain getDomain() {
try {
return ServiceUtilsForEObject.getInstance().getTransactionalEditingDomain(element);
- } catch (Exception ex){
+ } catch (Exception ex) {
Activator.log.error(ex);
return null;
}
@@ -356,13 +390,14 @@ public class AppearanceForAppliedStereotypeComposite extends org.eclipse.papyrus
}
super.refresh();
if((diagramElement == null) && (!displayButton.isDisposed())) {
- displayButton.setEnabled(false);
+ // displayButton.setEnabled(false);
displayButton.setToolTipText("Stereotypes can only be displayed for elements with graphical representation. " + "Currently edited element is a non graphical element. " + "(example: an element selected in the outline is not a graphical element)");
- } else {
+ } else if(!displayButton.isDisposed()) {
// button should be enabled only if a stereotype is selected, but it requires a listener on the tree selection
- displayButton.setEnabled(true);
+ // displayButton.setEnabled(true);
displayButton.setToolTipText("Display selected stereotype for the currently selected element in the diagram");
}
+ refreshButtons();
}
/**
@@ -403,6 +438,55 @@ public class AppearanceForAppliedStereotypeComposite extends org.eclipse.papyrus
}
/**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417372
+ * Add a listener for stereotypes changing.
+ *
+ * @see org.eclipse.papyrus.uml.properties.profile.ui.compositesformodel.AppearanceDecoratedTreeComposite#setElement(org.eclipse.uml2.uml.Element)
+ *
+ * @param element
+ */
+ @Override
+ public void setElement(Element element) {
+ if(getElement() != null && elementListener != null) {
+ getElement().eAdapters().remove(elementListener);
+ }
+ super.setElement(element);
+ if(element != null) {
+ if(elementListener == null) {
+ elementListener = new AdapterImpl() {
+
+ @Override
+ public void notifyChanged(final Notification msg) {
+ handleNotifyChanged(msg);
+ }
+ };
+ }
+ element.eAdapters().add(elementListener);
+ }
+ }
+
+ /**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417372
+ * Refresh if Stereotypes have been changed.
+ *
+ * Stereotypes list is empty in the Appearance after the application of Stereotype in Profile.
+ */
+ protected void handleNotifyChanged(Notification msg) {
+ final int eventType = msg.getEventType();
+ if(msg instanceof StereotypeCustomNotification && (eventType == PapyrusStereotypeListener.APPLIED_STEREOTYPE || eventType == PapyrusStereotypeListener.UNAPPLIED_STEREOTYPE)) {
+ Display.getCurrent().asyncExec(new Runnable() {
+
+ public void run() {
+ if(tree != null && !tree.isDisposed() && treeViewer != null && getElement() != null) {
+ treeViewer.setInput(new StereotypedElementTreeObject(getElement()));
+ }
+ refresh();
+ }
+ });
+ }
+ }
+
+ /**
* Sets the selection.
*
* @param selection
diff --git a/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/StereotypeUtil.java b/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/StereotypeUtil.java
index 0b8c9b1..ea9940f 100644
--- a/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/StereotypeUtil.java
+++ b/plugins/uml/tools/org.eclipse.papyrus.uml.tools.utils/src/org/eclipse/papyrus/uml/tools/utils/StereotypeUtil.java
@@ -62,7 +62,7 @@ public class StereotypeUtil {
/**
* returns the list of all super stereotypes for the specified stereotype
- *
+ *
* @param stereotype
* the stereotype for which super-stereotypes are looked for.
* @return the list of all stereotypes from which the specified stereotype inherits
@@ -80,10 +80,10 @@ public class StereotypeUtil {
/**
* Parse the stereotype image and select those that have an "icon" kind (EAnnotation).
- *
+ *
* @param stereotype
* to parse
- *
+ *
* @return a EList of {@link Image}
*/
public static EList<Image> getIcons(Stereotype stereotype) {
@@ -103,10 +103,10 @@ public class StereotypeUtil {
/**
* Returns the list of names (not qualified) of properties to display.
- *
+ *
* @param stereotype
* @param stPropList
- *
+ *
* @return
*/
private static List<String> getStereoPropertiesToDisplay(org.eclipse.uml2.uml.Stereotype stereotype, List<String> stPropList) {
@@ -124,11 +124,11 @@ public class StereotypeUtil {
/**
* return string that contains value of properties of applied stereotype
- *
+ *
* @param stereotypesPropertiesToDisplay
* list of properties of stereotype to display grammar=
* {<B>stereotypequalifiedName</B>'.'<B>propertyName</B>','}*
- *
+ *
* @return a string withe the following grammar grammar=
* {'\u00AB'<B>StereotypeName</B>'\u00BB''#'
* {<B>propertyName</B>'='<B>propertyValue</B>'|'}*';'}*
@@ -185,7 +185,7 @@ public class StereotypeUtil {
/**
* Computes the display of a property value.
- *
+ *
* @param stereotype
* the stereotype that contains the property to be displayed
* @param property
@@ -207,11 +207,11 @@ public class StereotypeUtil {
// property type is a metaclass
else if((propType instanceof org.eclipse.uml2.uml.Class) && (propType.getAppliedStereotypes() != null) && (propType.getAppliedStereotypes().size() > 0) && propType.getAppliedStereotypes().get(0).getName().equals("Metaclass")) {
- return getPropertyValueForMetaclassType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator,false);
+ return getPropertyValueForMetaclassType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator, false);
}
// property type is a stereotype
else if(propType instanceof org.eclipse.uml2.uml.Stereotype) {
- return getPropertyValueForStereotypeType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator,false);
+ return getPropertyValueForStereotypeType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator, false);
}
// property is a composite class
else if((propType instanceof org.eclipse.uml2.uml.Class) && !(propType instanceof org.eclipse.uml2.uml.Stereotype) && property.isComposite()) {
@@ -220,7 +220,7 @@ public class StereotypeUtil {
// otherwise
else {
- return getPropertyValue(property, stereotype, umlElement, EQUAL_SEPARATOR, separator,false);
+ return getPropertyValue(property, stereotype, umlElement, EQUAL_SEPARATOR, separator, false);
}
}
@@ -228,7 +228,7 @@ public class StereotypeUtil {
/**
* Computes the display of a property value.
- *
+ *
* @param stereotype
* the stereotype that contains the property to be displayed
* @param property
@@ -250,11 +250,11 @@ public class StereotypeUtil {
// property type is a metaclass
else if((propType instanceof org.eclipse.uml2.uml.Class) && (propType.getAppliedStereotypes() != null) && (propType.getAppliedStereotypes().size() > 0) && propType.getAppliedStereotypes().get(0).getName().equals("Metaclass")) {
- return getPropertyValueForMetaclassType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator,true);
+ return getPropertyValueForMetaclassType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator, true);
}
// property type is a stereotype
else if(propType instanceof org.eclipse.uml2.uml.Stereotype) {
- return getPropertyValueForStereotypeType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator,true);
+ return getPropertyValueForStereotypeType(property, stereotype, umlElement, EQUAL_SEPARATOR, separator, true);
}
// property is a composite class
else if((propType instanceof org.eclipse.uml2.uml.Class) && !(propType instanceof org.eclipse.uml2.uml.Stereotype) && property.isComposite()) {
@@ -268,7 +268,7 @@ public class StereotypeUtil {
/**
* Retrieves a property of the specified stereotype, given its name
- *
+ *
* @param stereotype
* the stereotype owner of the property
* @param propertyName
@@ -292,11 +292,11 @@ public class StereotypeUtil {
/**
* return string that contains value of properties of applied stereotype
- *
+ *
* @param stereotypesPropertiesToDisplay
* list of properties of stereotype to display grammar=
* {<B>stereotypequalifiedName</B>'.'<B>propertyName</B>','}*
- *
+ *
* @return a string with the following grammar grammar=
* {(<B>propertyName</B>'='<B>propertyValue</B>',')*
* <B>propertyName</B>'='<B>propertyValue</B>'}
@@ -328,6 +328,9 @@ public class StereotypeUtil {
while(stereoIter.hasNext()) {
Stereotype stereotype = stereoIter.next();
if(stereotype != null) {
+ if(propertyValues != null && propertyValues.trim().length() > 0) {
+ propertyValues += ",";
+ }
propertyValues += displayPropertyValuesForStereotype(stereotype, stPropList, umlElement);
}
}
@@ -369,12 +372,12 @@ public class StereotypeUtil {
// property type is a metaclass
else if((propType instanceof org.eclipse.uml2.uml.Class) && (propType.getAppliedStereotypes() != null) && (propType.getAppliedStereotypes().size() > 0) && propType.getAppliedStereotypes().get(0).getName().equals("Metaclass")) {
- buffer.append(getPropertyValueForMetaclassType(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",",false));
+ buffer.append(getPropertyValueForMetaclassType(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",", false));
}
// property type is a stereotype
else if(propType instanceof org.eclipse.uml2.uml.Stereotype) {
- buffer.append(getPropertyValueForStereotypeType(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",",false));
+ buffer.append(getPropertyValueForStereotypeType(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",", false));
}
// property is a composite class
@@ -384,7 +387,7 @@ public class StereotypeUtil {
// otherwise
else {
- buffer.append(getPropertyValue(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",",false));
+ buffer.append(getPropertyValue(currentProp, stereotype, umlElement, EQUAL_SEPARATOR, ",", false));
}
}// display each property
@@ -398,7 +401,7 @@ public class StereotypeUtil {
/**
* return the string that represents the value of property when its type is an Enumeration
- *
+ *
* @param property
* the property to display
* @param stereotype
@@ -418,7 +421,7 @@ public class StereotypeUtil {
if((property.getLower() != 0) || umlElement.getValue(stereotype, property.getName()) != null) {
if(property.isSetDefault() || umlElement.getValue(stereotype, property.getName()) != null) {
Object val = umlElement.getValue(stereotype, property.getName());
- if (val instanceof EnumerationLiteral) {
+ if(val instanceof EnumerationLiteral) {
out = property.getName() + EQUAL_SEPARATOR + ((EnumerationLiteral)val).getLabel() + PROPERTY_VALUE_SEPARATOR;
} else {
out = property.getName() + EQUAL_SEPARATOR + val + PROPERTY_VALUE_SEPARATOR;
@@ -440,7 +443,7 @@ public class StereotypeUtil {
/**
* return the string that represents the value of property when its type is a Metaclass
- *
+ *
* @param property
* the property to display
* @param stereotype
@@ -458,10 +461,9 @@ public class StereotypeUtil {
String out = "";
if((property.getUpper() == 1) && (umlElement.getValue(stereotype, property.getName()) != null) && (umlElement.getValue(stereotype, property.getName()) instanceof NamedElement)) {
- if(withQualifiedName){
+ if(withQualifiedName) {
out = property.getName() + EQUAL_SEPARATOR + ((NamedElement)(umlElement.getValue(stereotype, property.getName()))).getQualifiedName() + PROPERTY_VALUE_SEPARATOR;
- }
- else{
+ } else {
out = property.getName() + EQUAL_SEPARATOR + ((NamedElement)(umlElement.getValue(stereotype, property.getName()))).getName() + PROPERTY_VALUE_SEPARATOR;
}
}
@@ -473,10 +475,9 @@ public class StereotypeUtil {
if(values != null) {
for(int count = 0; count < values.size(); count++) {
if(values.get(count) instanceof NamedElement) {
- if(withQualifiedName){
+ if(withQualifiedName) {
elementNames.add(((NamedElement)values.get(count)).getQualifiedName());
- }
- else{
+ } else {
elementNames.add(((NamedElement)values.get(count)).getName());
}
}
@@ -494,7 +495,7 @@ public class StereotypeUtil {
/**
* return the string that represents the value of property when its type is a stereotype
- *
+ *
* @param property
* the property to display
* @param stereotype
@@ -517,10 +518,9 @@ public class StereotypeUtil {
Element baseElement = UMLUtil.getBaseElement((EObject)value);
// display the base element's qualified name
- if(withQualifiedName){
+ if(withQualifiedName) {
out = property.getName() + EQUAL_SEPARATOR + ((NamedElement)baseElement).getQualifiedName() + PROPERTY_VALUE_SEPARATOR;
- }
- else{
+ } else {
out = property.getName() + EQUAL_SEPARATOR + ((NamedElement)baseElement).getName() + PROPERTY_VALUE_SEPARATOR;
}
}
@@ -532,10 +532,9 @@ public class StereotypeUtil {
ArrayList baseElements = new ArrayList();
if(values != null) {
for(int k = 0; k < values.size(); k++) {
- if(withQualifiedName){
+ if(withQualifiedName) {
baseElements.add(((NamedElement)UMLUtil.getBaseElement((EObject)values.get(k))).getQualifiedName());
- }
- else{
+ } else {
baseElements.add(((NamedElement)UMLUtil.getBaseElement((EObject)values.get(k))).getName());
}
}
@@ -553,7 +552,7 @@ public class StereotypeUtil {
/**
* return the string that represents the value of property
- *
+ *
* @param property
* the property to display
* @param stereotype
@@ -567,29 +566,27 @@ public class StereotypeUtil {
* @return String withe the following grammar propertyname EQUAL_SEPERATOR propertyValue
* PROPERTY_VALUE_SEPERATOR
*/
- private static String getPropertyValue(Property property, Stereotype stereotype, Element umlElement, final String EQUAL_SEPARATOR, final String PROPERTY_VALUE_SEPARATOR,boolean withDelimitator) {
+ private static String getPropertyValue(Property property, Stereotype stereotype, Element umlElement, final String EQUAL_SEPARATOR, final String PROPERTY_VALUE_SEPARATOR, boolean withDelimitator) {
String out = "";
if((property.getLower() != 0) || umlElement.getValue(stereotype, property.getName()) != null) {
if(property.isSetDefault() || umlElement.getValue(stereotype, property.getName()) != null) {
- if(withDelimitator){
- String value= ""+umlElement.getValue(stereotype, property.getName());
+ if(withDelimitator) {
+ String value = "" + umlElement.getValue(stereotype, property.getName());
out = property.getName() + EQUAL_SEPARATOR + value + PROPERTY_VALUE_SEPARATOR;
- if(value.contains("[")){
- out= out.replace("[", "["+QUOTE);
- out= out.replace("]", QUOTE+"]");
- out= out.replace(", ", QUOTE+","+QUOTE);
- }
- else{
- out = property.getName() + EQUAL_SEPARATOR +QUOTE +value+QUOTE + PROPERTY_VALUE_SEPARATOR;
+ if(value.contains("[")) {
+ out = out.replace("[", "[" + QUOTE);
+ out = out.replace("]", QUOTE + "]");
+ out = out.replace(", ", QUOTE + "," + QUOTE);
+ } else {
+ out = property.getName() + EQUAL_SEPARATOR + QUOTE + value + QUOTE + PROPERTY_VALUE_SEPARATOR;
}
- }
- else{
- if(umlElement.getValue(stereotype, property.getName()) instanceof EObject){
- ILabelProvider labelProvider=getLabelProvider(property);
- return out= property.getName() + EQUAL_SEPARATOR + labelProvider.getText(umlElement.getValue(stereotype, property.getName())) + PROPERTY_VALUE_SEPARATOR;
+ } else {
+ if(umlElement.getValue(stereotype, property.getName()) instanceof EObject) {
+ ILabelProvider labelProvider = getLabelProvider(property);
+ return out = property.getName() + EQUAL_SEPARATOR + labelProvider.getText(umlElement.getValue(stereotype, property.getName())) + PROPERTY_VALUE_SEPARATOR;
+ } else {
+ out = property.getName() + EQUAL_SEPARATOR + umlElement.getValue(stereotype, property.getName()) + PROPERTY_VALUE_SEPARATOR;
}
- else{
- out = property.getName() + EQUAL_SEPARATOR + umlElement.getValue(stereotype, property.getName()) + PROPERTY_VALUE_SEPARATOR;}
}
} else {
out = property.getName() + PROPERTY_VALUE_SEPARATOR;
@@ -601,7 +598,7 @@ public class StereotypeUtil {
return out;
}
- public static ILabelProvider getLabelProvider(EObject eObject) {
+ public static ILabelProvider getLabelProvider(EObject eObject) {
try {
return ServiceUtilsForEObject.getInstance().getService(LabelProviderService.class, eObject).getLabelProvider();
} catch (ServiceException ex) {
@@ -609,12 +606,13 @@ public class StereotypeUtil {
return new LabelProvider();
}
}
+
/**
* Parse the stereotype image and select those that have an "shape" kind (EAnnotation).
- *
+ *
* @param stereotype
* to parse
- *
+ *
* @return a EList of {@link Image}
*/
public static EList<Image> getShapes(Stereotype stereotype) {
@@ -633,7 +631,7 @@ public class StereotypeUtil {
}
/**
- *
+ *
* @param stereotype
* a stereotype
* @return
@@ -650,7 +648,7 @@ public class StereotypeUtil {
}
/**
- *
+ *
* @param stereotype
* a stereotype
* @return
@@ -665,6 +663,7 @@ public class StereotypeUtil {
}
return properties;
}
+
/**
*
* @param property
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 a380e17..cd341df 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
@@ -16,7 +16,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.ui.ide;bundle-version="3.9.0",
org.eclipse.papyrus.infra.core.log;bundle-version="0.10.1",
org.eclipse.papyrus.uml.tools.utils;bundle-version="0.10.1",
- org.eclipse.papyrus.infra.emf.appearance;bundle-version="0.10.1"
+ org.eclipse.papyrus.infra.emf.appearance;bundle-version="0.10.1",
+ org.eclipse.papyrus.uml.appearance;bundle-version="0.10.1"
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/org.eclipse.papyrus.uml.diagram.sequence.tests.launch b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/org.eclipse.papyrus.uml.diagram.sequence.tests.launch
index d49cc5a..348a22d 100644
--- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/org.eclipse.papyrus.uml.diagram.sequence.tests.launch
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/org.eclipse.papyrus.uml.diagram.sequence.tests.launch
@@ -29,7 +29,7 @@
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.papyrus.uml.diagram.sequence.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -Xms256m -Xmx1024m -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx2048m -XX:MaxPermSize=2048m"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
<booleanAttribute key="run_in_ui_thread" value="true"/>
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/AllTests.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/AllTests.java
index 1d9ecdd..ed25256 100644
--- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/AllTests.java
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/AllTests.java
@@ -16,6 +16,7 @@ package org.eclipse.papyrus.uml.diagram.sequence.tests;
import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.BugTests;
import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.BugTests2;
import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.BugTest_m7;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916.AllTests_20130916;
import org.eclipse.papyrus.uml.diagram.sequence.tests.canonical.AllCanonicalTests;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -25,6 +26,6 @@ import org.junit.runners.Suite.SuiteClasses;
* All tests together.
*/
@RunWith(Suite.class)
-@SuiteClasses({ AllCanonicalTests.class, BugTests.class, BugTests2.class, BugTest_m7.class })
+@SuiteClasses({ AllCanonicalTests.class, BugTests.class, BugTests2.class, BugTest_m7.class, AllTests_20130916.class })
public class AllTests {
}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGateNameOnCombinedFragment.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGateNameOnCombinedFragment.java
index b10eaec..b6cccac 100644
--- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGateNameOnCombinedFragment.java
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGateNameOnCombinedFragment.java
@@ -37,6 +37,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.GateHelper;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.uml2.uml.CombinedFragment;
import org.eclipse.uml2.uml.Gate;
import org.eclipse.uml2.uml.Lifeline;
@@ -206,12 +207,15 @@ public class TestGateNameOnCombinedFragment extends AbstractNodeTest {
label.translateToAbsolute(b);
req.setLocation(b.getCenter());
req.getExtendedData().put(SequenceRequestConstant.DIRECT_EDIT_AFTER_CREATION, true);
- messageEditPart.performRequest(req);
+// messageEditPart.performRequest(req);
waitForComplete();
//Deactive the Popup Editor.
- messageEditPart.getViewer().getControl().setFocus();
+ Control control = messageEditPart.getViewer().getControl();
+ control.setFocus();
+ Control focusControl = control.getDisplay().getFocusControl();
+
waitForComplete();
}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGraphicalGate_389531.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGraphicalGate_389531.java
index 76d4c0c..2ce7858 100644
--- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGraphicalGate_389531.java
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestGraphicalGate_389531.java
@@ -15,6 +15,7 @@ package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7;
import java.util.List;
+import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
@@ -27,6 +28,7 @@ import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
@@ -143,7 +145,12 @@ public class TestGraphicalGate_389531 extends AbstractNodeTest {
protected String getGateName(GateEditPart gateEditPart) {
IGraphicalEditPart label = gateEditPart.getChildBySemanticHint(GateNameEditPart.GATE_NAME_TYPE);
if(label != null) {
- return ((WrappingLabel)label.getFigure()).getText();
+ IFigure figure = label.getFigure();
+ if(figure instanceof WrappingLabel) {
+ return ((WrappingLabel)figure).getText();
+ } else if(figure instanceof ILabelFigure) {
+ return ((ILabelFigure)figure).getText();
+ }
}
return null;
}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestMakeSameHeightForLifelines_402978.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestMakeSameHeightForLifelines_402978.java
index 00a98c9..32f9023 100644
--- a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestMakeSameHeightForLifelines_402978.java
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/m7/TestMakeSameHeightForLifelines_402978.java
@@ -48,7 +48,7 @@ public class TestMakeSameHeightForLifelines_402978 extends AbstractNodeTest {
protected String getFileName() {
return ISequenceDiagramTestsConstants.FILE_NAME;
}
-
+
@Test
public void testLifelinesSameSizeHeight() {
LifelineEditPart lifeline1 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), new Dimension(80, 100));
@@ -62,8 +62,8 @@ public class TestMakeSameHeightForLifelines_402978 extends AbstractNodeTest {
assertNotNull("Same size height action", sameSizeHeight);
executeAction(sameSizeHeight);
waitForComplete();
- assertEquals("lifeline1 height", 200, getAbsoluteBounds(lifeline1).height);
- assertEquals("lifeline2 height", 200, getAbsoluteBounds(lifeline2).height);
+ assertTrue("lifeline1 height", Math.abs(200 - getAbsoluteBounds(lifeline1).height) <= 1);//From CSS plugin, there is 1 pixel missing.
+ assertTrue("lifeline2 height", Math.abs(200 - getAbsoluteBounds(lifeline2).height) <= 1);//From CSS plugin, there is 1 pixel missing.
}
@Test
@@ -79,8 +79,8 @@ public class TestMakeSameHeightForLifelines_402978 extends AbstractNodeTest {
assertNotNull("Same size both action", sameSizeBoth);
executeAction(sameSizeBoth);
waitForComplete();
- assertEquals("lifeline1 height", 300, getAbsoluteBounds(lifeline1).height);
- assertEquals("lifeline2 height", 300, getAbsoluteBounds(lifeline2).height);
+ assertTrue("lifeline1 height", Math.abs(300 - getAbsoluteBounds(lifeline1).height) <= 1);//From CSS plugin, there is 1 pixel missing.
+ assertTrue("lifeline2 height", Math.abs(300 - getAbsoluteBounds(lifeline2).height) <= 1);//From CSS plugin, there is 1 pixel missing.
}
private void executeAction(final IContributionItem action) {
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/AllTests_20130916.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/AllTests_20130916.java
new file mode 100644
index 0000000..de64c7d
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/AllTests_20130916.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+@RunWith(Suite.class)
+@SuiteClasses({ CombinedFragmentStereotypesTest.class, ContinuationStereotypesTest.class, DurationConstraintStereotypesTest.class, DurationObservationStereotypesTest.class, ExecutionSpecificationStereotypesTest.class, Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373.class, Fixbug_OrderFragmentsAfterMessageReconnection_417375.class, Fixbug_OrderFragmentsAfterResizeExecutions_417374.class, GateStereotypesTest.class, GeneralOrderingStereotypesTest.class, InteractionOperandStereotypesTest.class, InteractionStereotypesTest.class, InteractionUseStereotypesTest.class, LifelineStereotypesTest.class, MessageStereotypesTest.class, New_DisplayBehaviorForBehaviorExecutionSpecification_417376.class, New_DisplayInvariantForStateInvariant_417377.class, StateInvariantStereotypesTest.class, TimeConstraintStereotypesTest.class, TimeObservationStereotypesTest.class, Fixbug_LifelineManagement_417365.class })
+public class AllTests_20130916 {
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/BaseStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/BaseStereotypesTest.java
new file mode 100644
index 0000000..a226a2b
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/BaseStereotypesTest.java
@@ -0,0 +1,473 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.text.TextFlow;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart;
+import org.eclipse.papyrus.uml.appearance.helper.AppliedStereotypeHelper;
+import org.eclipse.papyrus.uml.appearance.helper.UMLVisualInformationPapyrusConstant;
+import org.eclipse.papyrus.uml.diagram.common.Activator;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.IPapyrusNodeUMLElementFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
+import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.PackageableElement;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class BaseStereotypesTest extends AbstractNodeTest {
+
+ private static final URI SYSML_PROFILE = URI.createURI("pathmap://SysML_PROFILES/SysML.profile.uml");
+
+ private static final String COMPARTMENT = UMLVisualInformationPapyrusConstant.STEREOTYPE_COMPARTMENT_LOCATION;
+
+ private static final String COMMENT = UMLVisualInformationPapyrusConstant.STEREOTYPE_COMMENT_LOCATION;
+
+ private static final String BRACE = UMLVisualInformationPapyrusConstant.STEREOTYPE_BRACE_LOCATION;
+
+ protected void prepareStereotypes(EditPart editPart) {
+ assertNotNull("editPart", editPart);
+ View view = getDiagramElement(editPart);
+ assertNotNull("view", view);
+ Element element = getElement(editPart);
+ assertNotNull("element", element);
+ Stereotype appliedStereotype = applyStereotype(editPart);
+ assertNotNull("appliedStereotype", appliedStereotype);
+ waitForComplete();
+ }
+
+ protected void doTestDisplayStereotypeInCompartment(EditPart editPart, EditPart stereotypeEditPart) {
+ if(stereotypeEditPart == null) {
+ stereotypeEditPart = editPart;
+ }
+ prepareStereotypes(editPart);
+ final View diagramElement = getDiagramElement(editPart);
+ setDisplayPlaceValue(diagramElement, COMPARTMENT);
+ //doCheck
+ //1. Check Compartment
+ final boolean displayInCompartment = AppliedStereotypeHelper.hasAppliedStereotypesPropertiesToDisplay(diagramElement, UMLVisualInformationPapyrusConstant.STEREOTYPE_COMPARTMENT_LOCATION);
+ assertTrue("displayInCompartment", displayInCompartment);
+ final View node = ((GraphicalEditPart)editPart).getNotationView();
+ int i = 0;
+ //we go through all sub nodes
+ Node compartmentNode = null;
+ while(i < node.getChildren().size()) {
+ if((node.getChildren().get(i)) instanceof Node) {
+ final Node currentNode = (Node)(node.getChildren().get(i));
+ if(currentNode.getType().equals("AppliedStereotypeCompartement")) {
+ if(currentNode.isVisible()) {
+ compartmentNode = currentNode;
+ break;
+ }
+ }
+ }
+ i++;
+ }
+ String stereotypesToDisplay = stereotypesOnlyToDisplay(diagramElement, getElement(editPart));
+ if(compartmentNode != null) {
+ EditPart compartmentEditPart = null;
+ List children = editPart.getChildren();
+ for(Object object : children) {
+ if(compartmentNode == ((EditPart)object).getModel()) {
+ compartmentEditPart = (EditPart)object;
+ break;
+ }
+ }
+ if(compartmentEditPart != null) {
+ IFigure figure = findLabelFigure(((org.eclipse.gef.GraphicalEditPart)compartmentEditPart).getFigure(), stereotypesToDisplay);
+ if(figure != null) {
+ return;
+ }
+ }
+ }
+ //2. check on main/external figure.
+ IFigure stereotypeFigure = null;
+ IFigure primaryShape = null;
+ if(stereotypeEditPart instanceof IPapyrusEditPart) {
+ primaryShape = ((IPapyrusEditPart)stereotypeEditPart).getPrimaryShape();
+ } else if(stereotypeEditPart instanceof org.eclipse.gef.GraphicalEditPart) {
+ primaryShape = ((org.eclipse.gef.GraphicalEditPart)stereotypeEditPart).getFigure();
+ }
+ if(primaryShape instanceof IPapyrusNodeUMLElementFigure) {
+ stereotypeFigure = ((IPapyrusNodeUMLElementFigure)primaryShape).getStereotypesLabel();
+ }
+ assertNotNull(stereotypeFigure);
+ String actualValue = getFigureText(stereotypeFigure);
+ assertEquals("stereotype displayed in Compartment", stereotypesToDisplay, actualValue);
+ }
+
+ protected String stereotypesOnlyToDisplay(View diagramElement, Element element) {
+ // list of stereotypes to display
+ String stereotypesToDisplay = AppliedStereotypeHelper.getStereotypesToDisplay(diagramElement);
+ // Kind of the representation
+ String stereotypespresentationKind = AppliedStereotypeHelper.getAppliedStereotypePresentationKind(diagramElement);
+
+ // check the presentation kind. if only icon => do not display
+ // stereotypes
+ if(UMLVisualInformationPapyrusConstant.ICON_STEREOTYPE_PRESENTATION.equals(stereotypespresentationKind)) {
+ return ""; // empty string, so stereotype label should not be
+ // displayed
+ }
+
+ // stereotypes with qualified name to display
+ String stereotypesToDisplayWithQN = AppliedStereotypeHelper.getStereotypesQNToDisplay(diagramElement);
+
+ // the set is empty
+ if(stereotypesToDisplayWithQN.length() == 0 && stereotypesToDisplay.length() == 0) {
+ return "";
+ }
+ // vertical representation
+ if(UMLVisualInformationPapyrusConstant.STEREOTYPE_TEXT_VERTICAL_PRESENTATION.equals(stereotypespresentationKind)) {
+ return Activator.ST_LEFT + stereotypesToDisplay(element, Activator.ST_RIGHT + "\n" + Activator.ST_LEFT, stereotypesToDisplay, stereotypesToDisplayWithQN) + Activator.ST_RIGHT;
+ } else {// horizontal representation
+ return Activator.ST_LEFT + stereotypesToDisplay(element, ", ", stereotypesToDisplay, stereotypesToDisplayWithQN) + Activator.ST_RIGHT;
+
+ }
+ }
+
+ protected String stereotypesToDisplay(Element element, String separator, String stereotypesToDisplay, String stereotypeWithQualifiedName) {
+
+ // AL Changes Feb. 07 - Beg
+ // Style Handling for STEREOTYPE_NAME_APPEARANCE from
+ // ProfileApplicationPreferencePage
+ // Stereotype displayed according to UML standard (first letter forced
+ // to lower case) -
+ // default -
+ // or kept as entered by user (user controlled)
+
+ // Get the preference from PreferenceStore. there should be an assert
+ final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+ assert store != null : "The preference store was not found";
+ if(store == null) {
+ return "";
+ }
+ String sNameAppearance = store.getString(UMLVisualInformationPapyrusConstant.P_STEREOTYPE_NAME_APPEARANCE);
+
+ StringTokenizer strQualifiedName = new StringTokenizer(stereotypesToDisplay, ",");
+ String out = "";
+ while(strQualifiedName.hasMoreElements()) {
+ String currentStereotype = strQualifiedName.nextToken();
+
+ // check if current stereotype is applied
+ final Element umlElement = element;
+ Stereotype stereotype = umlElement.getAppliedStereotype(currentStereotype);
+ if(stereotype != null) {
+ String name = currentStereotype;
+ if((stereotypeWithQualifiedName.indexOf(currentStereotype)) == -1) {
+ // property value contains qualifiedName ==> extract name
+ // from it
+ StringTokenizer strToken = new StringTokenizer(currentStereotype, "::");
+
+ while(strToken.hasMoreTokens()) {
+ name = strToken.nextToken();
+ }
+ }
+ // AL Changes Feb. 07 - Beg
+ // Handling STEREOTYPE_NAME_APPEARANCE preference (from
+ // ProfileApplicationPreferencePage)
+ // Previously lowercase forced onto first letter (standard UML)
+ // stereotypesToDisplay = stereotypesToDisplay+name.substring(0,
+ // 1).toLowerCase()+name.substring(1,
+ // name.length())+","+separator;
+
+ // check that the name has not already been added to the
+ // displayed string
+ if(sNameAppearance.equals(UMLVisualInformationPapyrusConstant.P_STEREOTYPE_NAME_DISPLAY_USER_CONTROLLED)) {
+ if(out.indexOf(name) == -1) {
+ out = out + name + separator;
+ }
+ } else { // VisualInformationPapyrusConstants.P_STEREOTYPE_NAME_DISPLAY_UML_CONFORM))
+ // {
+ name = name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
+ if(out.indexOf(name) == -1) {
+ out = out + name + separator;
+ }
+ }
+ }
+ }
+ if(out.endsWith(",")) {
+ return out.substring(0, out.length() - 1);
+ }
+ if(out.endsWith(separator)) {
+ return out.substring(0, out.length() - separator.length());
+ }
+ return out;
+ }
+
+ protected String getFigureText(IFigure figure) {
+ if(figure instanceof Label) {
+ return ((Label)figure).getText();
+ } else if(figure instanceof WrappingLabel) {
+ return ((WrappingLabel)figure).getText();
+ } else if(figure instanceof ILabelFigure) {
+ return ((ILabelFigure)figure).getText();
+ } else if(figure instanceof TextFlow) {
+ return ((TextFlow)figure).getText();
+ }
+ return null;
+ }
+
+ protected void doTestDisplayStereotypeWithBrace(EditPart editPart, EditPart stereotypeEditPart) {
+ if(stereotypeEditPart == null) {
+ stereotypeEditPart = editPart;
+ }
+ prepareStereotypes(editPart);
+ final View diagramElement = getDiagramElement(editPart);
+ setDisplayPlaceValue(diagramElement, BRACE);
+ //doCheck
+ final boolean displayInBrace = AppliedStereotypeHelper.hasAppliedStereotypesPropertiesToDisplay(diagramElement, UMLVisualInformationPapyrusConstant.STEREOTYPE_BRACE_LOCATION);
+ assertTrue("displayInBrace", displayInBrace);
+ final String stereotypesPropertiesToDisplay = AppliedStereotypeHelper.getAppliedStereotypesPropertiesToDisplay(diagramElement);
+ String todisplay = StereotypeUtil.getPropertiesValuesInBrace(stereotypesPropertiesToDisplay, getElement(editPart));
+ String stereotypeInBrace = "{" + todisplay + "}";
+ IFigure label = findLabelFigure(getFigure(stereotypeEditPart), stereotypeInBrace);
+ assertNotNull("Stereotype displayed with brace", label);
+ }
+
+ private IFigure findLabelFigure(IFigure figure, String labelText) {
+ if(figure == null || labelText == null) {
+ return null;
+ }
+ String value = getFigureText(figure);
+ if(labelText.equals(value)) {
+ return figure;
+ }
+ List children = figure.getChildren();
+ for(Object object : children) {
+ IFigure child = (IFigure)object;
+ IFigure fig = findLabelFigure(child, labelText);
+ if(fig != null) {
+ return fig;
+ }
+ }
+ return null;
+ }
+
+ private IFigure getFigure(EditPart editPart) {
+ if(editPart instanceof org.eclipse.gef.GraphicalEditPart) {
+ return ((org.eclipse.gef.GraphicalEditPart)editPart).getFigure();
+ }
+ return null;
+ }
+
+ protected void doTestDisplayStereotypeComment(EditPart editPart) {
+ prepareStereotypes(editPart);
+ final View diagramElement = getDiagramElement(editPart);
+ setDisplayPlaceValue(diagramElement, COMMENT);
+ //doCheck
+ waitForComplete();
+ Node commentNode = getAppliedStereotypeCommentNode(diagramElement);
+ assertNotNull("commentNode", commentNode);
+ }
+
+ protected Node getAppliedStereotypeCommentNode(View semanticView) {
+ if(semanticView == null) {
+ return null;
+ }
+ Edge appliedStereotypeLink = null;
+ //look for all links with the id AppliedStereotypesCommentLinkEditPart.ID
+ @SuppressWarnings("unchecked")
+ Iterator<Edge> edgeIterator = semanticView.getSourceEdges().iterator();
+ while(edgeIterator.hasNext()) {
+ Edge edge = (Edge)edgeIterator.next();
+ if(edge.getType().equals("AppliedStereotypesCommentLink")) {
+ appliedStereotypeLink = edge;
+ }
+
+ }
+ if(appliedStereotypeLink == null) {
+ return null;
+ }
+ return (Node)appliedStereotypeLink.getTarget();
+
+ }
+
+ protected Stereotype applyStereotype(EditPart editPart) {
+ assertNotNull("editPart", editPart);
+ final Element element = getElement(editPart);
+ assertNotNull("element", element);
+ Model model = getModel(element);
+ assertNotNull("model", model);
+ Profile profile = applyProfile(model);
+ assertNotNull("profile", profile);
+ final View diagramElement = getDiagramElement(editPart);
+ EList<PackageableElement> packagedElements = profile.getPackagedElements();
+ for(PackageableElement elt : packagedElements) {
+ if(elt instanceof Stereotype) {
+ final Stereotype stereotype = (Stereotype)elt;
+ if(!element.isStereotypeApplicable(stereotype)) {
+ continue;
+ }
+ Stereotype appliedStereotype = element.getAppliedStereotype(stereotype.getQualifiedName());
+ if(appliedStereotype == null) {
+ //Apply the stereotype if possible.
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ element.applyStereotype(stereotype);
+ }
+ });
+ appliedStereotype = element.getAppliedStereotype(stereotype.getQualifiedName());
+ //Display current stereotype
+ String presentationKind = AppliedStereotypeHelper.getAppliedStereotypePresentationKind(diagramElement);
+ getCommandStack().execute(AppliedStereotypeHelper.getAddAppliedStereotypeCommand(getEditingDomain(), diagramElement, appliedStereotype.getQualifiedName(), presentationKind));
+ if(appliedStereotype != null) {
+ //Display all properties of it.
+ Iterator<Property> propIt = appliedStereotype.getAllAttributes().iterator();
+ while(propIt.hasNext()) {
+ final Property currentProp = propIt.next();
+ boolean adding = false;
+ // Select authorized properties
+ if(currentProp.getAssociation() != null) {
+ if(!currentProp.getName().startsWith("base_")) {
+ adding = true;
+ }
+ } else {
+ adding = true;
+ }
+ if(adding) {
+ String appliedStereotypeListToAdd = stereotype.getQualifiedName() + "." + currentProp.getName();
+ RecordingCommand command = AppliedStereotypeHelper.getAddAppliedStereotypePropertiesCommand(getEditingDomain(), diagramElement, appliedStereotypeListToAdd);
+ getCommandStack().execute(command);
+ }
+ }
+ }
+ }
+ return appliedStereotype;
+ }
+ }
+ return null;
+ }
+
+ protected Profile applyProfile(final Model model) {
+ ResourceSet resourceSet = model.eResource().getResourceSet();
+ Resource resource = resourceSet.getResource(SYSML_PROFILE, true);
+ Profile profileToApply = null;
+ if(!resource.getContents().isEmpty()) {
+ EObject eObject = resource.getContents().get(0);
+ if(eObject instanceof Profile) {
+ profileToApply = (Profile)eObject;
+ }
+ }
+ assertNotNull("profileToApply", profileToApply);
+ final Profile allocationsProfile = (Profile)profileToApply.getPackagedElement("Allocations");
+ assertNotNull("allocationsProfile", allocationsProfile);
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ PackageUtil.applyProfile(model, allocationsProfile, true);
+ }
+ });
+ return allocationsProfile;
+ }
+
+ protected View getDiagramElement(EditPart editPart) {
+ if(editPart == null) {
+ return null;
+ }
+ Object model = editPart.getModel();
+ if(model instanceof View) {
+ return (View)model;
+ }
+ return null;
+ }
+
+ protected Element getElement(EditPart editPart) {
+ View diagramElement = getDiagramElement(editPart);
+ if(diagramElement == null) {
+ return null;
+ }
+ return (Element)ViewUtil.resolveSemanticElement(diagramElement);
+ }
+
+ protected Model getModel(EObject obj) {
+ if(obj instanceof Model) {
+ return (Model)obj;
+ }
+ EObject parent = obj.eContainer();
+ while(parent != null && !(parent instanceof Model)) {
+ parent = parent.eContainer();
+ }
+ return (Model)parent;
+ }
+
+ protected void setDisplayPlaceValue(EModelElement diagramElement, String stereotypePlacePresentation) {
+ assertNotNull("DiagramElement", diagramElement);
+ assertNotNull("Stereotype placement", stereotypePlacePresentation);
+ String oldDisplayPlace = AppliedStereotypeHelper.getAppliedStereotypesPropertiesLocalization(diagramElement);
+ TransactionalEditingDomain domain = getDiagramEditPart().getEditingDomain();
+ RecordingCommand command = AppliedStereotypeHelper.getSetAppliedStereotypePropertiesLocalizationCommand(domain, diagramElement, stereotypePlacePresentation);
+ domain.getCommandStack().execute(command);
+ assertEquals("Stereotype placement", stereotypePlacePresentation, AppliedStereotypeHelper.getAppliedStereotypesPropertiesLocalization(diagramElement));
+ domain.getCommandStack().undo();
+ assertEquals("Stereotype placement undo", oldDisplayPlace, AppliedStereotypeHelper.getAppliedStereotypesPropertiesLocalization(diagramElement));
+ domain.getCommandStack().redo();
+ assertEquals("Stereotype placement redo", stereotypePlacePresentation, AppliedStereotypeHelper.getAppliedStereotypesPropertiesLocalization(diagramElement));
+ }
+
+ /**
+ * test apply profile to model and apply stereotype to a EditPart.
+ */
+ protected void innerTestApplyProfile() {
+ DiagramEditPart diagram = getDiagramEditPart();
+ assertNotNull("diagram", diagram);
+ Stereotype stereotype = applyStereotype(diagram);
+ assertNotNull("appliedStereotype", stereotype);
+ }
+
+ public void checkConnectionHorizontally(ConnectionNodeEditPart conn, int tolerance) {
+ assertNotNull("connection", conn);
+ Point start = SequenceUtil.getAbsoluteEdgeExtremity(conn, true);
+ Point end = SequenceUtil.getAbsoluteEdgeExtremity(conn, false);
+ int distance = Math.abs(start.y - end.y);
+ assertTrue("connection horizontally (" + distance + ")", distance <= tolerance);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/CombinedFragmentStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/CombinedFragmentStereotypesTest.java
new file mode 100644
index 0000000..f732e48
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/CombinedFragmentStereotypesTest.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class CombinedFragmentStereotypesTest extends BaseStereotypesTest {
+
+ private CombinedFragmentEditPart combinedFragment;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ combinedFragment = (CombinedFragmentEditPart)createNode(UMLElementTypes.CombinedFragment_3004, getRootEditPart(), new Point(100, 100), new Dimension(200, 100));
+ assertNotNull(combinedFragment);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(combinedFragment);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(combinedFragment, combinedFragment);
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(combinedFragment, combinedFragment);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ContinuationStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ContinuationStereotypesTest.java
new file mode 100644
index 0000000..dbcdf69
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ContinuationStereotypesTest.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentCombinedFragmentCompartmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ContinuationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.uml2.uml.CombinedFragment;
+import org.eclipse.uml2.uml.InteractionOperatorKind;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class ContinuationStereotypesTest extends BaseStereotypesTest {
+
+ private ContinuationEditPart continuation;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ CombinedFragmentEditPart cf = (CombinedFragmentEditPart)createNode(UMLElementTypes.CombinedFragment_3004, getRootEditPart(), new Point(100, 100), new Dimension(200, 100));
+ CombinedFragmentCombinedFragmentCompartmentEditPart compartment = (CombinedFragmentCombinedFragmentCompartmentEditPart)cf.getChildBySemanticHint("" + CombinedFragmentCombinedFragmentCompartmentEditPart.VISUAL_ID);
+ InteractionOperandEditPart operand = (InteractionOperandEditPart)compartment.getChildBySemanticHint("" + InteractionOperandEditPart.VISUAL_ID);
+ final CombinedFragment element = (CombinedFragment)cf.resolveSemanticElement();
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ element.setInteractionOperator(InteractionOperatorKind.ALT_LITERAL);
+ }
+ });
+ continuation = (ContinuationEditPart)createNode(UMLElementTypes.Continuation_3016, operand, SequenceUtil.getAbsoluteBounds(operand).getCenter(), null);
+ assertNotNull(continuation);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(continuation);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationConstraintStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationConstraintStereotypesTest.java
new file mode 100644
index 0000000..6dfd99a
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationConstraintStereotypesTest.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationConstraintAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationConstraintEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class DurationConstraintStereotypesTest extends BaseStereotypesTest {
+
+ private DurationConstraintEditPart durationConstraint;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ durationConstraint = (DurationConstraintEditPart)createNode(UMLElementTypes.DurationConstraint_3021, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(durationConstraint);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(durationConstraint);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(durationConstraint, durationConstraint.getChildBySemanticHint("" + DurationConstraintAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(durationConstraint, durationConstraint.getChildBySemanticHint("" + DurationConstraintAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationObservationStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationObservationStereotypesTest.java
new file mode 100644
index 0000000..77b841c
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/DurationObservationStereotypesTest.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationObservationAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class DurationObservationStereotypesTest extends BaseStereotypesTest {
+
+ private DurationObservationEditPart durationObservation;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ durationObservation = (DurationObservationEditPart)createNode(UMLElementTypes.DurationObservation_3024, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(durationObservation);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(durationObservation);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(durationObservation, durationObservation.getChildBySemanticHint("" + DurationObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(durationObservation, durationObservation.getChildBySemanticHint("" + DurationObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ExecutionSpecificationStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ExecutionSpecificationStereotypesTest.java
new file mode 100644
index 0000000..ecca1d5
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/ExecutionSpecificationStereotypesTest.java
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class ExecutionSpecificationStereotypesTest extends BaseStereotypesTest {
+
+ private LifelineEditPart lifeline;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ lifeline = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 300), null);
+ assertNotNull(lifeline);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment_ActionExecutionSpecification() {
+ EditPart es = createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline, new Point(131, 150), null);
+ assertNotNull("actionExecutionSpecification", es);
+ doTestDisplayStereotypeComment(es);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment_BehaviorExecutionSpecification() {
+ EditPart es = createNode(UMLElementTypes.BehaviorExecutionSpecification_3003, lifeline, new Point(131, 220), null);
+ assertNotNull("behaviorExecutionSpecification", es);
+ doTestDisplayStereotypeComment(es);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment_DestructionExecutionSpecification() {
+ EditPart es = createNode(UMLElementTypes.DestructionOccurrenceSpecification_3022, lifeline, new Point(131, 250), null);
+ assertNotNull("destructionExecutionSpecification", es);
+ doTestDisplayStereotypeComment(es);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373.java
new file mode 100644
index 0000000..b5099c3
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.junit.Test;
+
+
+/**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417373
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class Fixbug_EditorCrashesWhenMovingGeneralOrdering_417373 extends AbstractNodeTest {
+
+ @Test
+ public void test() {
+ EditPart lifeline1 = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 400), new Dimension(100, 400));
+ EditPart lifeline2 = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(350, 400), new Dimension(100, 400));
+ Point startLocation = SequenceUtil.getAbsoluteBounds((IGraphicalEditPart)lifeline1).getCenter().getCopy();
+ Point endLocation = SequenceUtil.getAbsoluteBounds((IGraphicalEditPart)lifeline2).getCenter().getCopy();
+ AbstractMessageEditPart message1 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), startLocation, lifeline1, endLocation, lifeline2);
+ AbstractMessageEditPart message2 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), endLocation.getTranslated(0, 79), lifeline2, startLocation.getTranslated(0, 80), lifeline1);
+ //create General Ordering
+ startLocation = SequenceUtil.getAbsoluteEdgeExtremity(message1, false);
+ endLocation = SequenceUtil.getAbsoluteEdgeExtremity(message2, false);
+ EditPart generalOrdering = createLink(UMLElementTypes.GeneralOrdering_4012, lifeline1.getViewer(), startLocation, lifeline2, endLocation, lifeline1);
+ assertNotNull("generalOrdering", generalOrdering);
+
+ //Move down the end of message2 10 times.
+ Point pt = endLocation.getCopy();
+ for(int i = 1; i <= 10; i++) {
+ Point p = pt.getTranslated(0, i * 10);
+ reconnectTarget(message2, message2.getTarget(), p);
+ getDiagramCommandStack().undo();
+ waitForComplete();
+ }
+
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_LifelineManagement_417365.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_LifelineManagement_417365.java
new file mode 100644
index 0000000..3ff1d8e
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_LifelineManagement_417365.java
@@ -0,0 +1,316 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.core.commands.SetPropertyCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentCombinedFragmentCompartmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.figures.LifelineFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.uml2.uml.Message;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class Fixbug_LifelineManagement_417365 extends BaseStereotypesTest {
+
+ private LifelineEditPart lifeline1;
+
+ private LifelineEditPart lifeline2;
+
+ private LifelineEditPart lifeline3;
+
+ private LifelineEditPart lifeline4;
+
+ private AbstractMessageEditPart message1;
+
+ private AbstractMessageEditPart message2;
+
+ private AbstractMessageEditPart message3;
+
+ private AbstractMessageEditPart message4;
+
+ private AbstractMessageEditPart message5;
+
+ private AbstractMessageEditPart message6;
+
+ private AbstractMessageEditPart message7;
+
+ private AbstractMessageEditPart message8;
+
+ private AbstractMessageEditPart message9;
+
+ private AbstractMessageEditPart message10;
+
+ private AbstractMessageEditPart message11;
+
+ private AbstractMessageEditPart message12;
+
+ private AbstractMessageEditPart message13;
+
+ private static final int[] FONT_HEIGHTS = { 9, 10, 12, 14, 17, 21, 28, 36, 48, 72 };
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ prepareDiagram();
+ }
+
+ /**
+ * Create Test Diagram.
+ */
+ protected void prepareDiagram() {
+ //Create Lifelines
+ lifeline1 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), new Dimension(100, 800));
+ lifeline2 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), new Dimension(100, 800));
+ lifeline3 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(500, 100), null);
+
+ int y = 120;
+ //Create message from Interaction to Lifeline1.
+ InteractionEditPart interaction = (InteractionEditPart)getRootEditPart().getParent();
+ Rectangle interactionBounds = SequenceUtil.getAbsoluteBounds(interaction);
+ Rectangle lifeline1Bounds = SequenceUtil.getAbsoluteBounds(lifeline1);
+ Point pt = lifeline1Bounds.getCenter();
+ message1 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), new Point(0, y - 1), interaction, new Point(pt.x, y), lifeline1);
+
+ //Create ExecutionSpecification on lifeline1 and Lifeline2
+ y += 20;
+ AbstractExecutionSpecificationEditPart execution1 = (AbstractExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline1, new Point(pt.x, y), null);
+ AbstractExecutionSpecificationEditPart execution2 = (AbstractExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline2, SequenceUtil.getAbsoluteBounds(lifeline2).getCenter().setY(y), null);
+
+ //Create Message between execution1 and execution2.
+ message2 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4003, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(execution1).getTop(), execution1, SequenceUtil.getAbsoluteBounds(execution2).getTop(), execution2);
+ message3 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(execution2).getBottom(), execution2, SequenceUtil.getAbsoluteBounds(execution1).getBottom(), execution1);
+
+ //Create Message from execution2 to Lifeline3
+ y = SequenceUtil.getAbsoluteBounds(execution2).getCenter().y;
+ message4 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(execution2).getCenter(), execution2, SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().translate(0, 1), lifeline3);
+
+ lifeline4 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(650, 100), new Dimension(70, 100));
+ //Create Message Create from lifeline3 to lifeline4
+ y += 20;
+ message5 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4006, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().setY(y), lifeline3, SequenceUtil.getAbsoluteBounds(lifeline4).getTop(), lifeline4);
+
+ //Create message from interaction to lifeline4
+ y += 40;
+ message6 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), interactionBounds.getRight().setY(y).translate(0, -1), interaction, SequenceUtil.getAbsoluteBounds(lifeline4).getCenter().setY(y), lifeline4);
+
+ //Create message found and message lost
+ y += 20;
+ message7 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4009, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().setY(y).getTranslated(-80, 0), interaction, SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().setY(y), lifeline3);
+ y += 20;
+ message8 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4008, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().setY(y), lifeline3, SequenceUtil.getAbsoluteBounds(lifeline3).getCenter().setY(y).getTranslated(80, 1), interaction);
+
+ //Create CombinedFragment
+ CombinedFragmentEditPart combinedFragment = (CombinedFragmentEditPart)createNode(UMLElementTypes.CombinedFragment_3004, getRootEditPart(), new Point(50, 300), new Dimension(500, 200));
+ CombinedFragmentCombinedFragmentCompartmentEditPart compartment = (CombinedFragmentCombinedFragmentCompartmentEditPart)combinedFragment.getChildBySemanticHint(CombinedFragmentCombinedFragmentCompartmentEditPart.VISUAL_ID + "");
+ InteractionOperandEditPart firstOperand = (InteractionOperandEditPart)compartment.getPrimaryChildEditPart();
+ InteractionOperandEditPart secondOperand = (InteractionOperandEditPart)createNode(UMLElementTypes.InteractionOperand_3005, compartment, SequenceUtil.getAbsoluteBounds(combinedFragment).getCenter(), null);
+
+ //create message in firstOperand
+ y = SequenceUtil.getAbsoluteBounds(firstOperand).getCenter().y;
+ AbstractExecutionSpecificationEditPart execution3 = (AbstractExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline1, new Point(pt.x, y), null);
+ AbstractExecutionSpecificationEditPart execution4 = (AbstractExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline2, SequenceUtil.getAbsoluteBounds(lifeline2).getCenter().setY(y), null);
+ //Create Message between execution1 and execution2.
+ message9 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4003, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(execution3).getTop(), execution3, SequenceUtil.getAbsoluteBounds(execution4).getTop(), execution4);
+ message10 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(execution4).getBottom(), execution4, SequenceUtil.getAbsoluteBounds(execution3).getBottom(), execution3);
+
+ //create message in secondOperand
+ y = SequenceUtil.getAbsoluteBounds(secondOperand).getCenter().y;
+ message11 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), SequenceUtil.getAbsoluteBounds(lifeline1).getCenter().setY(y), lifeline1, SequenceUtil.getAbsoluteBounds(lifeline2).getCenter().setY(y + 1), lifeline2);
+
+ //Create message between Interaction and CombinedFragment
+ y = SequenceUtil.getAbsoluteBounds(combinedFragment).getLeft().y;
+ message12 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), new Point(0, y - 1), interaction, SequenceUtil.getAbsoluteBounds(combinedFragment).getLeft(), combinedFragment);
+
+ y = SequenceUtil.getAbsoluteBounds(combinedFragment).getRight().y;
+ message13 = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), new Point(interactionBounds.right(), y - 1), interaction, SequenceUtil.getAbsoluteBounds(combinedFragment).getRight(), combinedFragment);
+
+ waitForComplete();
+ validateMessageHorizontally();
+ }
+
+ /**
+ * Validate all messages has same position horizontally.
+ */
+ private void validateMessageHorizontally() {
+ validateMessageHorizontally(message1);
+ validateMessageHorizontally(message2);
+ validateMessageHorizontally(message3);
+ validateMessageHorizontally(message4);
+ validateMessageHorizontally(message5);
+ validateMessageHorizontally(message6);
+ validateMessageHorizontally(message7);
+ validateMessageHorizontally(message8);
+ validateMessageHorizontally(message9);
+ validateMessageHorizontally(message10);
+ validateMessageHorizontally(message11);
+ validateMessageHorizontally(message12);
+ validateMessageHorizontally(message13);
+ }
+
+ private void validateMessageHorizontally(AbstractMessageEditPart message) {
+ assertNotNull("message", message);
+ // waitForComplete();
+ // message.refresh();
+ // waitForComplete();
+ Connection conn = message.getConnectionFigure();
+ PointList points = conn.getPoints();
+ int start = points.getFirstPoint().y;
+ int end = points.getLastPoint().y;
+ EObject obj = message.resolveSemanticElement();
+ String name = "";
+ if(obj instanceof Message) {
+ name = ((Message)obj).getName();
+ }
+ assertEquals("message horizontal position<" + name + ">", end, start);
+ }
+
+ private void validateAll() {
+ validateLifelineHeadBottom();
+ validateMessageHorizontally();
+ }
+
+ /**
+ * Validate lifelife head's bottom.
+ */
+ private void validateLifelineHeadBottom() {
+ int b1 = getLifelineHeadBottom(lifeline1);
+ int b2 = getLifelineHeadBottom(lifeline2);
+ int b3 = getLifelineHeadBottom(lifeline3);
+ assertTrue("Lifeline head bottom", Math.abs(b1 - b2) <= 1);
+ assertTrue("Lifeline head bottom", Math.abs(b1 - b3) <= 1);
+ }
+
+ private int getLifelineHeadBottom(LifelineEditPart lifeline) {
+ LifelineFigure figure = lifeline.getPrimaryShape();
+ RectangleFigure figureLifelineNameContainerFigure = figure.getFigureLifelineNameContainerFigure();
+ return figureLifelineNameContainerFigure.getBounds().bottom();
+ }
+
+ @Test
+ public void testFontChanged() {
+ //Increase height of font for lifeline1
+ for(int i = 1; i < FONT_HEIGHTS.length; i++) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline1, height);
+ }
+ //Decrease height of font for lifeline1
+ for(int i = FONT_HEIGHTS.length - 2; i >= 0; i--) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline1, height);
+ }
+ //Increase height of font for lifeline2
+ for(int i = 1; i < FONT_HEIGHTS.length; i++) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline2, height);
+ }
+ //Decrease height of font for lifeline2
+ for(int i = FONT_HEIGHTS.length - 2; i >= 0; i--) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline2, height);
+ }
+ //Increase height of font for lifeline3
+ for(int i = 1; i < FONT_HEIGHTS.length; i++) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline3, height);
+ }
+ //Decrease height of font for lifeline3
+ for(int i = FONT_HEIGHTS.length - 2; i >= 0; i--) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline3, height);
+ }
+ //Increase height of font for lifeline4
+ for(int i = 1; i < FONT_HEIGHTS.length; i++) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline4, height);
+ }
+ //Decrease height of font for lifeline4
+ for(int i = FONT_HEIGHTS.length - 2; i >= 0; i--) {
+ int height = FONT_HEIGHTS[i];
+ testChangeFontHeight(lifeline4, height);
+ }
+ }
+
+ /**
+ * @param lifeline
+ * @param height
+ */
+ private void testChangeFontHeight(LifelineEditPart lifeline, int height) {
+ assertNotNull("lifeline", lifeline);
+ SetPropertyCommand command = new SetPropertyCommand(getEditingDomain(), lifeline, "notation.FontStyle.fontHeight", "Font Size", height);
+ executeOnUIThread(new ICommandProxy(command));
+ waitForComplete();
+ validateAll();
+ }
+
+ @Test
+ public void testStereotypeChanged() {
+ //Applied stereotype on lifeline1
+ doTestDisplayStereotypeInCompartment(lifeline1, lifeline1);
+ waitForComplete();
+ validateAll();
+
+ //Applied stereotype on lifeline2
+ doTestDisplayStereotypeInCompartment(lifeline2, lifeline2);
+ waitForComplete();
+ validateAll();
+
+ //Applied stereotype on lifeline3
+ doTestDisplayStereotypeInCompartment(lifeline3, lifeline3);
+ waitForComplete();
+ validateAll();
+
+ //Applied stereotype on lifeline4
+ doTestDisplayStereotypeInCompartment(lifeline4, lifeline4);
+ waitForComplete();
+ validateAll();
+ }
+
+ @Test
+ public void testResizeLifelineAfterStereotypeApplied() {
+ //Applied stereotype on lifeline1
+ doTestDisplayStereotypeInCompartment(lifeline4, lifeline4);
+ //resize down/up from bottom
+ resize(lifeline4, SequenceUtil.getAbsoluteBounds(lifeline4).getLocation(), PositionConstants.SOUTH, new Dimension(0, 30));
+ resize(lifeline4, SequenceUtil.getAbsoluteBounds(lifeline4).getLocation(), PositionConstants.NORTH, new Dimension(0, 30));
+
+ //resize west
+ resize(lifeline4, SequenceUtil.getAbsoluteBounds(lifeline4).getLocation(), PositionConstants.WEST, new Dimension(30, 0));
+ //resize east
+ resize(lifeline4, SequenceUtil.getAbsoluteBounds(lifeline4).getLocation(), PositionConstants.EAST, new Dimension(30, 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/pro20130916/Fixbug_OrderFragmentsAfterMessageReconnection_417375.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterMessageReconnection_417375.java
new file mode 100644
index 0000000..0def023
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterMessageReconnection_417375.java
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.ActionExecutionSpecification;
+import org.eclipse.uml2.uml.BehaviorExecutionSpecification;
+import org.eclipse.uml2.uml.Interaction;
+import org.eclipse.uml2.uml.InteractionFragment;
+import org.eclipse.uml2.uml.Message;
+import org.eclipse.uml2.uml.OccurrenceSpecification;
+import org.junit.Test;
+
+
+/**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417375
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class Fixbug_OrderFragmentsAfterMessageReconnection_417375 extends AbstractNodeTest {
+
+ @Test
+ public void test() {
+ EditPart lifeline1 = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), new Dimension(100, 500));
+ EditPart lifeline2 = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), new Dimension(100, 500));
+
+ final Interaction interaction = (Interaction)getRootEditPart().resolveSemanticElement();
+
+ ActionExecutionSpecificationEditPart execution1 = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline1, new Point(131, 200), new Dimension(16, 150));
+ ActionExecutionSpecification actionES = (ActionExecutionSpecification)execution1.resolveSemanticElement();
+ waitForComplete();
+ //validate after create action
+ List<InteractionFragment> actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ BehaviorExecutionSpecificationEditPart execution2 = (BehaviorExecutionSpecificationEditPart)createNode(UMLElementTypes.BehaviorExecutionSpecification_3003, lifeline1, new Point(148, 230), new Dimension(16, 80));
+ BehaviorExecutionSpecification behaviorES = (BehaviorExecutionSpecification)execution2.resolveSemanticElement();
+ waitForComplete();
+ //validate after create behavior
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add(behaviorES.getFinish());
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ Point endLocation = SequenceUtil.getAbsoluteBounds(execution2).getCenter().getCopy().getTranslated(0, 20);
+ Point startLocation = SequenceUtil.getAbsoluteBounds((IGraphicalEditPart)lifeline2).getCenter().setY(endLocation.y - 1);
+ AbstractMessageEditPart messageEditPart = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline1.getViewer(), startLocation, lifeline2, endLocation, execution2);
+ Message message = (Message)messageEditPart.resolveSemanticElement();
+ waitForComplete();
+ //validate after create message
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add((InteractionFragment)message.getSendEvent());
+ actualList.add((InteractionFragment)message.getReceiveEvent());
+ actualList.add(behaviorES.getFinish());
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ //reconnect message target to the end of the behavior execution.
+ OccurrenceSpecification finish = behaviorES.getFinish();
+ IGraphicalEditPart finishEditPart = null;
+ List children = execution2.getChildren();
+ for(Object object : children) {
+ if(object instanceof IGraphicalEditPart) {
+ EObject element = ((IGraphicalEditPart)object).resolveSemanticElement();
+ if(finish == element) {
+ finishEditPart = (IGraphicalEditPart)object;
+ break;
+ }
+ }
+ }
+ assertNotNull("finishEditPart", finishEditPart);
+ reconnectTarget(messageEditPart, finishEditPart, SequenceUtil.getAbsoluteBounds(finishEditPart).getCenter());
+ //validate
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add((InteractionFragment)message.getSendEvent());
+ actualList.add((InteractionFragment)message.getReceiveEvent());
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ //reconnect back
+ reconnectTarget(messageEditPart, execution2, SequenceUtil.getAbsoluteBounds(execution2).getCenter().setY(SequenceUtil.getAbsoluteEdgeExtremity(messageEditPart, true).y - 1));
+ //validate
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add((InteractionFragment)message.getSendEvent());
+ actualList.add((InteractionFragment)message.getReceiveEvent());
+ actualList.add(behaviorES.getFinish());
+ actualList.add(actionES.getFinish());
+ final List<InteractionFragment> fragments = new ArrayList<InteractionFragment>(actualList);
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ validateOrders(interaction.getFragments(), fragments);
+ }
+ });
+ }
+
+ protected void validateOrders(List<InteractionFragment> expectedList, List<InteractionFragment> actualList) {
+ assertNotNull("actualList", actualList);
+ assertNotNull("expectedList", expectedList);
+ for(int index = 0; index < actualList.size(); index++) {
+ InteractionFragment fragment = actualList.get(index);
+ int expectedIndex = expectedList.indexOf(fragment);
+ assertEquals("Index of " + fragment.getName(), expectedIndex, index);
+ }
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterResizeExecutions_417374.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterResizeExecutions_417374.java
new file mode 100644
index 0000000..7db412a
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/Fixbug_OrderFragmentsAfterResizeExecutions_417374.java
@@ -0,0 +1,93 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.uml2.uml.ActionExecutionSpecification;
+import org.eclipse.uml2.uml.BehaviorExecutionSpecification;
+import org.eclipse.uml2.uml.Interaction;
+import org.eclipse.uml2.uml.InteractionFragment;
+import org.junit.Test;
+
+
+/**
+ * Fixed bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417374
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class Fixbug_OrderFragmentsAfterResizeExecutions_417374 extends AbstractNodeTest {
+
+ @Test
+ public void test() {
+ EditPart lifeline = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), new Dimension(100, 500));
+
+ Interaction interaction = (Interaction)getRootEditPart().resolveSemanticElement();
+
+ ActionExecutionSpecificationEditPart execution1 = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline, new Point(131, 200), new Dimension(16, 150));
+ ActionExecutionSpecification actionES = (ActionExecutionSpecification)execution1.resolveSemanticElement();
+ waitForComplete();
+ //validate after create action
+ List<InteractionFragment> actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ BehaviorExecutionSpecificationEditPart execution2 = (BehaviorExecutionSpecificationEditPart)createNode(UMLElementTypes.BehaviorExecutionSpecification_3003, lifeline, new Point(148, 230), new Dimension(16, 80));
+ BehaviorExecutionSpecification behaviorES = (BehaviorExecutionSpecification)execution2.resolveSemanticElement();
+ waitForComplete();
+ //validate after create behavior
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add(behaviorES.getFinish());
+ actualList.add(actionES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+
+ //resize behavior
+ resize(execution2, SequenceUtil.getAbsoluteBounds(execution2).getLocation(), PositionConstants.SOUTH, new Dimension(0, 100));
+ //validate
+ actualList = new ArrayList<InteractionFragment>();
+ actualList.add(actionES.getStart());
+ actualList.add(actionES);
+ actualList.add(behaviorES.getStart());
+ actualList.add(behaviorES);
+ actualList.add(actionES.getFinish());
+ actualList.add(behaviorES.getFinish());
+ validateOrders(interaction.getFragments(), actualList);
+ }
+
+ protected void validateOrders(List<InteractionFragment> expectedList, List<InteractionFragment> actualList) {
+ assertNotNull("actualList", actualList);
+ assertNotNull("expectedList", expectedList);
+ for(int index = 0; index < actualList.size(); index++) {
+ InteractionFragment fragment = actualList.get(index);
+ int expectedIndex = expectedList.indexOf(fragment);
+ assertEquals("Index of " + fragment.getName(), expectedIndex, index);
+ }
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GateStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GateStereotypesTest.java
new file mode 100644
index 0000000..006f298
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GateStereotypesTest.java
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import java.util.List;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.RequestConstants;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gef.requests.CreationFactory;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GateEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.util.GateHelper;
+import org.eclipse.uml2.uml.Gate;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class GateStereotypesTest extends BaseStereotypesTest {
+
+ private GateEditPart gate;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ gate = createGate(getRootEditPart().getParent(), new Point(0, 100));
+ assertNotNull(gate);
+ }
+
+ private GateEditPart createGate(EditPart parent, Point location) {
+ CreateRequest request = new CreateRequest(RequestConstants.REQ_CREATE);
+ request.setFactory(new CreationFactory() {
+
+ public Object getObjectType() {
+ return GateEditPart.GATE_TYPE;
+ }
+
+ public Object getNewObject() {
+ return GateEditPart.GATE_TYPE;
+ }
+ });
+ request.setLocation(location);
+ Command command = parent.getCommand(request);
+ assertNotNull("create gate command", command);
+ assertTrue("executable of create gate command", command.canExecute());
+ getDiagramCommandStack().execute(command);
+ waitForComplete();
+ GateEditPart gateEditPart = getPrimaryGateEditPart(parent);
+ assertNotNull("created gate", gateEditPart);
+ return gateEditPart;
+ }
+
+ protected GateEditPart getPrimaryGateEditPart(EditPart parent) {
+ @SuppressWarnings("rawtypes")
+ List children = parent.getChildren();
+ for(int i = children.size() - 1; i >= 0; i--) {
+ Object child = children.get(i);
+ if(child instanceof GateEditPart) {
+ GateEditPart gateEp = (GateEditPart)child;
+ Gate gate = (Gate)gateEp.resolveSemanticElement();
+ if(!(GateHelper.isInnerCFGate(gate))) {
+ return gateEp;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(gate);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(gate, gate.getLabelEditPart());
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(gate, gate.getLabelEditPart());
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GeneralOrderingStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GeneralOrderingStereotypesTest.java
new file mode 100644
index 0000000..9897d92
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/GeneralOrderingStereotypesTest.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GeneralOrderingEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message2EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class GeneralOrderingStereotypesTest extends BaseStereotypesTest {
+
+ private GeneralOrderingEditPart generalOrdering;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ LifelineEditPart source = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(source);
+ LifelineEditPart target = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(target);
+ Point sourcePoint = getAbsoluteCenter(source);
+ Point targetPoint = getAbsoluteCenter(target);
+ Message2EditPart message1 = (Message2EditPart)createLink(UMLElementTypes.Message_4004, source.getViewer(), sourcePoint, targetPoint);
+ assertNotNull(message1);
+ Message2EditPart message2 = (Message2EditPart)createLink(UMLElementTypes.Message_4004, source.getViewer(), sourcePoint.getTranslated(0, 50), targetPoint.getTranslated(0, 50));
+ assertNotNull(message2);
+ sourcePoint = SequenceUtil.getAbsoluteEdgeExtremity(message1, true);
+ targetPoint = SequenceUtil.getAbsoluteEdgeExtremity(message2, false);
+ generalOrdering = (GeneralOrderingEditPart)createLink(UMLElementTypes.GeneralOrdering_4012, source.getViewer(), sourcePoint, targetPoint);
+ assertNotNull(generalOrdering);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(generalOrdering);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionOperandStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionOperandStereotypesTest.java
new file mode 100644
index 0000000..c2678d7
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionOperandStereotypesTest.java
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentCombinedFragmentCompartmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandGuardEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class InteractionOperandStereotypesTest extends BaseStereotypesTest {
+
+ private InteractionOperandEditPart operand;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ CombinedFragmentEditPart cf = (CombinedFragmentEditPart)createNode(UMLElementTypes.CombinedFragment_3004, getRootEditPart(), new Point(100, 100), new Dimension(200, 100));
+ CombinedFragmentCombinedFragmentCompartmentEditPart compartment = (CombinedFragmentCombinedFragmentCompartmentEditPart)cf.getChildBySemanticHint("" + CombinedFragmentCombinedFragmentCompartmentEditPart.VISUAL_ID);
+ operand = (InteractionOperandEditPart)compartment.getChildBySemanticHint("" + InteractionOperandEditPart.VISUAL_ID);
+ assertNotNull(operand);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(operand);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(operand, operand.getChildBySemanticHint(InteractionOperandGuardEditPart.GUARD_TYPE));
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(operand, operand.getChildBySemanticHint(InteractionOperandGuardEditPart.GUARD_TYPE));
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionStereotypesTest.java
new file mode 100644
index 0000000..df14268
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionStereotypesTest.java
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GateEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class InteractionStereotypesTest extends BaseStereotypesTest {
+
+ private InteractionEditPart interaction;
+
+ private ConnectionNodeEditPart messageWithGate;
+
+ private ConnectionNodeEditPart messageFound;
+
+ private ConnectionNodeEditPart messageLost;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ interaction = (InteractionEditPart)getRootEditPart().getParent();
+ assertNotNull(interaction);
+
+ LifelineEditPart lifeline = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(150, 100), null);
+ Rectangle lifelineBounds = getAbsoluteBounds(lifeline);
+ //1. messageWithGate
+ Point endLocation = lifelineBounds.getCenter();
+ Point startLocation = new Point(0, endLocation.y);
+ messageWithGate = (ConnectionNodeEditPart)createLink(UMLElementTypes.Message_4004, interaction.getViewer(), startLocation, interaction, endLocation, lifeline);
+ assertNotNull("messageWithGate", messageWithGate);
+
+ //2. messagefound
+ messageFound = (ConnectionNodeEditPart)createLink(UMLElementTypes.Message_4009, lifeline.getViewer(), endLocation.getTranslated(-100, 50), endLocation.getTranslated(0, 50));
+ assertNotNull("messageFound", messageFound);
+
+ //3. messageLost
+ messageLost = (ConnectionNodeEditPart)createLink(UMLElementTypes.Message_4008, lifeline.getViewer(), endLocation.getTranslated(0, -50), endLocation.getTranslated(100, -50));
+ assertNotNull("messageLost", messageLost);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(interaction);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ checkConnectionHorizontally(messageWithGate, GateEditPart.DEFAULT_SIZE.height / 2);
+ checkConnectionHorizontally(messageFound, 1);
+ checkConnectionHorizontally(messageLost, 1);
+ doTestDisplayStereotypeInCompartment(interaction, interaction);
+ checkConnectionHorizontally(messageWithGate, GateEditPart.DEFAULT_SIZE.height / 2);
+ checkConnectionHorizontally(messageFound, 1);
+ checkConnectionHorizontally(messageLost, 1);
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ checkConnectionHorizontally(messageWithGate, GateEditPart.DEFAULT_SIZE.height / 2);
+ checkConnectionHorizontally(messageFound, 1);
+ checkConnectionHorizontally(messageLost, 1);
+ doTestDisplayStereotypeWithBrace(interaction, interaction);
+ checkConnectionHorizontally(messageWithGate, GateEditPart.DEFAULT_SIZE.height / 2);
+ checkConnectionHorizontally(messageFound, 1);
+ checkConnectionHorizontally(messageLost, 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/pro20130916/InteractionUseStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionUseStereotypesTest.java
new file mode 100644
index 0000000..d5e2577
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/InteractionUseStereotypesTest.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class InteractionUseStereotypesTest extends BaseStereotypesTest {
+
+ private InteractionUseEditPart interactionUse;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ interactionUse = (InteractionUseEditPart)createNode(UMLElementTypes.InteractionUse_3002, getRootEditPart(), new Point(100, 100), new Dimension(200, 100));
+ assertNotNull(interactionUse);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(interactionUse);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(interactionUse, interactionUse);
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(interactionUse, interactionUse);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/LifelineStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/LifelineStereotypesTest.java
new file mode 100644
index 0000000..a4f0e15
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/LifelineStereotypesTest.java
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+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.util.SequenceUtil;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class LifelineStereotypesTest extends BaseStereotypesTest {
+
+ private LifelineEditPart lifeline;
+
+ private AbstractMessageEditPart link;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ lifeline = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(lifeline);
+
+ LifelineEditPart lifeline2 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(400, 100), null);
+ link = (AbstractMessageEditPart)createLink(UMLElementTypes.Message_4004, lifeline2.getViewer(), SequenceUtil.getAbsoluteBounds(lifeline).getCenter(), lifeline, SequenceUtil.getAbsoluteBounds(lifeline2).getCenter(), lifeline2);
+ assertNotNull("link", link);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(lifeline);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ checkConnectionHorizontally(link, 1);
+ doTestDisplayStereotypeInCompartment(lifeline, lifeline);
+ checkConnectionHorizontally(link, 2);
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ checkConnectionHorizontally(link, 1);
+ doTestDisplayStereotypeWithBrace(lifeline, lifeline);
+ checkConnectionHorizontally(link, 2);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/MessageStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/MessageStereotypesTest.java
new file mode 100644
index 0000000..35db86e
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/MessageStereotypesTest.java
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message2EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message3EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message4EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message5EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message6EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class MessageStereotypesTest extends BaseStereotypesTest {
+
+ protected void doTest(AbstractMessageEditPart message) {
+ doTestDisplayStereotypeComment(message);
+ }
+
+ @Test
+ public void testSynchronousMessage() {
+ LifelineEditPart lifeline1 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(lifeline1);
+ ActionExecutionSpecificationEditPart source = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline1, getAbsoluteCenter(lifeline1), null);
+ assertNotNull(source);
+ LifelineEditPart lifeline2 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(lifeline2);
+ ActionExecutionSpecificationEditPart target = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline2, getAbsoluteCenter(lifeline2), null);
+ assertNotNull(target);
+ MessageEditPart message = (MessageEditPart)createLink(UMLElementTypes.Message_4003, lifeline1.getViewer(), getAbsoluteCenter(source), getAbsoluteCenter(target));
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testAsynchronousMessage() {
+ LifelineEditPart source = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(source);
+ LifelineEditPart target = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(target);
+ Message2EditPart message = (Message2EditPart)createLink(UMLElementTypes.Message_4004, source.getViewer(), getAbsoluteCenter(source), getAbsoluteCenter(target));
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testCreateMessage() {
+ LifelineEditPart source = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(source);
+ LifelineEditPart target = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(target);
+ Message4EditPart message = (Message4EditPart)createLink(UMLElementTypes.Message_4006, source.getViewer(), getAbsoluteCenter(source), getAbsoluteCenter(target));
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testReplyMessage() {
+ LifelineEditPart lifeline1 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(lifeline1);
+ ActionExecutionSpecificationEditPart source = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline1, getAbsoluteCenter(lifeline1).getTranslated(0, -100), null);
+ assertNotNull(source);
+ LifelineEditPart lifeline2 = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(lifeline2);
+ ActionExecutionSpecificationEditPart target = (ActionExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline2, getAbsoluteCenter(lifeline2).getTranslated(0, 100), null);
+ assertNotNull(target);
+ Message3EditPart message = (Message3EditPart)createLink(UMLElementTypes.Message_4005, source.getViewer(), getAbsoluteCenter(source), getAbsoluteCenter(target));
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testFoundMessage() {
+ LifelineEditPart target = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(target);
+ Point targetLocation = getAbsoluteCenter(target);
+ Point sourceLocation = targetLocation.getTranslated(-100, 0);
+ Message7EditPart message = (Message7EditPart)createLink(UMLElementTypes.Message_4009, target.getViewer(), sourceLocation, targetLocation);
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testLostMessage() {
+ LifelineEditPart source = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(source);
+ Point sourceLocation = getAbsoluteCenter(source);
+ Point targetLocation = sourceLocation.getTranslated(100, 0);
+ Message6EditPart message = (Message6EditPart)createLink(UMLElementTypes.Message_4008, source.getViewer(), sourceLocation, targetLocation);
+ assertNotNull(message);
+ doTest(message);
+ }
+
+ @Test
+ public void testDeleteMessage() {
+ LifelineEditPart source = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(source);
+ LifelineEditPart target = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(300, 100), null);
+ assertNotNull(target);
+ Message5EditPart message = (Message5EditPart)createLink(UMLElementTypes.Message_4007, source.getViewer(), getAbsoluteCenter(source), getAbsoluteCenter(target));
+ assertNotNull(message);
+ doTest(message);
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayBehaviorForBehaviorExecutionSpecification_417376.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayBehaviorForBehaviorExecutionSpecification_417376.java
new file mode 100644
index 0000000..c4b31ab
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayBehaviorForBehaviorExecutionSpecification_417376.java
@@ -0,0 +1,158 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationBehaviorEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.BehaviorExecutionSpecification;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.OpaqueBehavior;
+import org.eclipse.uml2.uml.PackageableElement;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.junit.Test;
+
+
+/**
+ * Display behavior as a label: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417376
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class New_DisplayBehaviorForBehaviorExecutionSpecification_417376 extends AbstractNodeTest {
+
+ private BehaviorExecutionSpecificationEditPart behaviorExecutionSpecificationEditPart;
+
+ private BehaviorExecutionSpecification behaviorExecutionSpecification;
+
+ protected Behavior createBehavior(final String name, final EClass type) {
+ final Model behaviorContainer = getBehaviorContainer();
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ behaviorContainer.createPackagedElement(name, type);
+ }
+ });
+ waitForComplete();
+ PackageableElement behavior = behaviorContainer.getPackagedElement(name);
+ assertNotNull("create behavior", behavior);
+ assertEquals("created behavior type", type, behavior.eClass());
+ return (Behavior)behavior;
+ }
+
+ /**
+ * Check if there's a Label with given behaviorName.
+ */
+ private void doCheckBehaviorLabel(String behaviorName) {
+ IGraphicalEditPart child = behaviorExecutionSpecificationEditPart.getChildBySemanticHint(BehaviorExecutionSpecificationBehaviorEditPart.BEHAVIOR_TYPE);
+ if(behaviorName == null) {
+ assertNull("Behavior should NOT be displayed.", child);
+ } else {
+ assertNotNull("Behavior should be displayed.", child);
+ assertTrue("Behavior should be a BehaviorExecutionSpecificationBehaviorEditPart", child instanceof BehaviorExecutionSpecificationBehaviorEditPart);
+ BehaviorExecutionSpecificationBehaviorEditPart behaviorEditPart = (BehaviorExecutionSpecificationBehaviorEditPart)child;
+ IFigure figure = behaviorEditPart.getFigure();
+ String labelText = null;
+ if(figure instanceof WrappingLabel) {
+ labelText = ((WrappingLabel)figure).getText();
+ } else if(figure instanceof Label) {
+ labelText = ((Label)figure).getText();
+ } else if(figure instanceof ILabelFigure) {
+ labelText = ((ILabelFigure)figure).getText();
+ }
+ assertEquals("Displayed behavior", behaviorName, labelText);
+ }
+ }
+
+ protected Model getBehaviorContainer() {
+ EObject eContainer = behaviorExecutionSpecification.eContainer();
+ while(eContainer != null && !(eContainer instanceof Model)) {
+ eContainer = eContainer.eContainer();
+ }
+ return (Model)eContainer;
+ }
+
+ protected void setBehavior(final Behavior newBehavior) {
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ behaviorExecutionSpecification.setBehavior(newBehavior);
+ }
+ });
+ waitForComplete();
+ }
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ EditPart lifeline = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull("lifeline", lifeline);
+ behaviorExecutionSpecificationEditPart = (BehaviorExecutionSpecificationEditPart)createNode(UMLElementTypes.BehaviorExecutionSpecification_3003, lifeline, new Point(131, 150), null);
+ assertNotNull("execution", behaviorExecutionSpecificationEditPart);
+ EObject element = behaviorExecutionSpecificationEditPart.resolveSemanticElement();
+ assertNotNull("element", element);
+ assertTrue("behavior execution", element instanceof BehaviorExecutionSpecification);
+ behaviorExecutionSpecification = (BehaviorExecutionSpecification)element;
+ }
+
+ /**
+ * Test behavior, the name of the behavior should be displayed.
+ */
+ @Test
+ public void testDisplayBehavior() {
+ String behaviorName = "testDisplayBehavior_Activity";
+ setBehavior(createBehavior(behaviorName, UMLPackage.eINSTANCE.getActivity()));
+
+ doCheckBehaviorLabel(behaviorName);
+ }
+
+ /**
+ * Test OpaqueBehavior, the languages and bodies should be displayed, too
+ */
+ @Test
+ public void testDisplayOpaqueBehavior() {
+ final OpaqueBehavior opaqueBehavior = (OpaqueBehavior)createBehavior("testDisplayBehavior_Opaque", UMLPackage.eINSTANCE.getOpaqueBehavior());
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ opaqueBehavior.getLanguages().add("JAVA");
+ opaqueBehavior.getBodies().add("System.out.print()");
+ opaqueBehavior.getLanguages().add("OCL");
+ opaqueBehavior.getBodies().add("self.radius > 0");
+ }
+ });
+ setBehavior(opaqueBehavior);
+ doCheckBehaviorLabel("{{JAVA}System.out.print(), {OCL}self.radius > 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/pro20130916/New_DisplayInvariantForStateInvariant_417377.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayInvariantForStateInvariant_417377.java
new file mode 100644
index 0000000..491fb4d
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/New_DisplayInvariantForStateInvariant_417377.java
@@ -0,0 +1,179 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomStateInvariantLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.ElementInitializers;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest;
+import org.eclipse.uml2.uml.Constraint;
+import org.eclipse.uml2.uml.Duration;
+import org.eclipse.uml2.uml.DurationConstraint;
+import org.eclipse.uml2.uml.DurationInterval;
+import org.eclipse.uml2.uml.Interaction;
+import org.eclipse.uml2.uml.LiteralInteger;
+import org.eclipse.uml2.uml.LiteralString;
+import org.eclipse.uml2.uml.StateInvariant;
+import org.eclipse.uml2.uml.TimeConstraint;
+import org.eclipse.uml2.uml.TimeExpression;
+import org.eclipse.uml2.uml.TimeInterval;
+import org.eclipse.uml2.uml.UMLFactory;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.junit.Test;
+
+
+/**
+ * Display invariant for a StateInvariant: https://bugs.eclipse.org/bugs/show_bug.cgi?id=417377
+ *
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class New_DisplayInvariantForStateInvariant_417377 extends AbstractNodeTest {
+
+ private StateInvariantEditPart stateInvarintEditPart;
+
+ private StateInvariant stateInvariant;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ EditPart lifeline = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull("lifeline", lifeline);
+ stateInvarintEditPart = (StateInvariantEditPart)createNode(UMLElementTypes.StateInvariant_3017, lifeline, new Point(131, 150), null);
+ assertNotNull("stateInvariant", stateInvarintEditPart);
+ stateInvariant = (StateInvariant)stateInvarintEditPart.resolveSemanticElement();
+ assertNotNull("uml element", stateInvariant);
+ }
+
+ @Test
+ public void testDisplayInvariant_TimeConstraint() {
+ final Interaction interaction = (Interaction)getRootSemanticModel();
+ //create and add time constraint.
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ TimeConstraint timeConstraint = (TimeConstraint)interaction.createOwnedRule("timeRule", UMLPackage.eINSTANCE.getTimeConstraint());
+ TimeInterval timeInterval = UMLFactory.eINSTANCE.createTimeInterval();
+ timeConstraint.setSpecification(timeInterval);
+ org.eclipse.uml2.uml.Package package_ = timeInterval.getNearestPackage();
+ TimeExpression minTimeExp = UMLFactory.eINSTANCE.createTimeExpression();
+ TimeExpression maxTimeExp = UMLFactory.eINSTANCE.createTimeExpression();
+ package_.getPackagedElements().add(minTimeExp);
+ package_.getPackagedElements().add(maxTimeExp);
+ ElementInitializers.init_NamedElement(minTimeExp, "", timeInterval.eClass().getName(), "Min");
+ ElementInitializers.init_NamedElement(maxTimeExp, "", timeInterval.eClass().getName(), "Max");
+ timeInterval.setMin(minTimeExp);
+ timeInterval.setMax(maxTimeExp);
+ LiteralInteger minExprValue = UMLFactory.eINSTANCE.createLiteralInteger();
+ minExprValue.setValue(20);
+ minTimeExp.setExpr(minExprValue);
+ LiteralInteger maxTimeValue = UMLFactory.eINSTANCE.createLiteralInteger();
+ maxTimeValue.setValue(50);
+ maxTimeExp.setExpr(maxTimeValue);
+
+ stateInvariant.setInvariant(timeConstraint);
+ }
+ });
+ waitForComplete();
+ doCheckInvariantLabel("{20..50}");
+ }
+
+ @Test
+ public void testDisplayInvariant_DurationConstraint() {
+ final Interaction interaction = (Interaction)getRootSemanticModel();
+ //create and add duration constraint.
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ DurationConstraint durationConstraint = (DurationConstraint)interaction.createOwnedRule("durationRule", UMLPackage.eINSTANCE.getDurationConstraint());
+ DurationInterval durationInterval = UMLFactory.eINSTANCE.createDurationInterval();
+ durationConstraint.setSpecification(durationInterval);
+ org.eclipse.uml2.uml.Package package_ = durationConstraint.getNearestPackage();
+ Duration minDuration = UMLFactory.eINSTANCE.createDuration();
+ Duration maxDuration = UMLFactory.eINSTANCE.createDuration();
+ package_.getPackagedElements().add(minDuration);
+ package_.getPackagedElements().add(maxDuration);
+ ElementInitializers.init_NamedElement(minDuration, "", durationInterval.eClass().getName(), "Min");
+ ElementInitializers.init_NamedElement(maxDuration, "", durationInterval.eClass().getName(), "Max");
+ durationInterval.setMin(minDuration);
+ durationInterval.setMax(maxDuration);
+ LiteralInteger minDurationValue = UMLFactory.eINSTANCE.createLiteralInteger();
+ minDurationValue.setValue(20);
+ minDuration.setExpr(minDurationValue);
+ LiteralInteger maxDurationValue = UMLFactory.eINSTANCE.createLiteralInteger();
+ maxDurationValue.setValue(50);
+ maxDuration.setExpr(maxDurationValue);
+
+ stateInvariant.setInvariant(durationConstraint);
+ }
+ });
+ waitForComplete();
+ doCheckInvariantLabel("{20..50}");
+ }
+
+ @Test
+ public void testDisplayInvariant_Constraint() {
+ final Interaction interaction = (Interaction)getRootSemanticModel();
+ //create and add constraint.
+ getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+
+ @Override
+ protected void doExecute() {
+ Constraint constraint = (Constraint)interaction.createOwnedRule("constraintRule", UMLPackage.eINSTANCE.getConstraint());
+ LiteralString value = UMLFactory.eINSTANCE.createLiteralString();
+ value.setValue("testConstraint");
+ constraint.setSpecification(value);
+ stateInvariant.setInvariant(constraint);
+ }
+ });
+ waitForComplete();
+ doCheckInvariantLabel("{testConstraint}");
+ }
+
+ /**
+ * @param string
+ */
+ private void doCheckInvariantLabel(String expectedLabelValue) {
+ IGraphicalEditPart child = stateInvarintEditPart.getChildBySemanticHint(UMLVisualIDRegistry.getType(StateInvariantLabelEditPart.VISUAL_ID));
+ assertTrue("invariant edit part", child instanceof CustomStateInvariantLabelEditPart);
+ IFigure figure = ((CustomStateInvariantLabelEditPart)child).getFigure();
+ String actualLabelValue = null;
+ if(figure instanceof WrappingLabel) {
+ actualLabelValue = ((WrappingLabel)figure).getText();
+ } else if(figure instanceof Label) {
+ actualLabelValue = ((Label)figure).getText();
+ } else if(figure instanceof ILabelFigure) {
+ actualLabelValue = ((ILabelFigure)figure).getText();
+ }
+ assertEquals("displayed invariant value", expectedLabelValue, actualLabelValue);
+ }
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/StateInvariantStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/StateInvariantStereotypesTest.java
new file mode 100644
index 0000000..67a99bb
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/StateInvariantStereotypesTest.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class StateInvariantStereotypesTest extends BaseStereotypesTest {
+
+ private StateInvariantEditPart stateInvariant;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ LifelineEditPart lifeline = (LifelineEditPart)createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ stateInvariant = (StateInvariantEditPart)createNode(UMLElementTypes.StateInvariant_3017, lifeline, new Point(131, 150), null);
+ assertNotNull(stateInvariant);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ doTestDisplayStereotypeComment(stateInvariant);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ doTestDisplayStereotypeInCompartment(stateInvariant, stateInvariant);
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ doTestDisplayStereotypeWithBrace(stateInvariant, stateInvariant);
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeConstraintStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeConstraintStereotypesTest.java
new file mode 100644
index 0000000..b870dab
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeConstraintStereotypesTest.java
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractExecutionSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class TimeConstraintStereotypesTest extends BaseStereotypesTest {
+
+ private TimeObservationEditPart timeObservation;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ EditPart lifeline = createNode(UMLElementTypes.Lifeline_3001, getRootEditPart(), new Point(100, 100), null);
+ AbstractExecutionSpecificationEditPart es = (AbstractExecutionSpecificationEditPart)createNode(UMLElementTypes.ActionExecutionSpecification_3006, lifeline, new Point(131, 100), null);
+ Point location = SequenceUtil.getAbsoluteBounds(es).getTop().getCopy();
+ timeObservation = (TimeObservationEditPart)createNode(UMLElementTypes.TimeObservation_3020, getRootEditPart(), location, null);
+ assertNotNull(timeObservation);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeComment(label);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeInCompartment(label, timeObservation.getChildBySemanticHint("" + TimeObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeWithBrace(label, timeObservation.getChildBySemanticHint("" + TimeObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+}
diff --git a/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeObservationStereotypesTest.java b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeObservationStereotypesTest.java
new file mode 100644
index 0000000..bed8b26
--- /dev/null
+++ b/tests/junit/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.tests/src/org/eclipse/papyrus/uml/diagram/sequence/tests/bug/pro20130916/TimeObservationStereotypesTest.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA
+ *
+ *
+ * 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:
+ * Soyatec - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.tests.bug.pro20130916;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
+import org.junit.Test;
+
+
+/**
+ * @author Jin Liu (jin.liu@soyatec.com)
+ */
+public class TimeObservationStereotypesTest extends BaseStereotypesTest {
+
+ private TimeObservationEditPart timeObservation;
+
+ /**
+ * @see org.eclipse.papyrus.uml.diagram.sequence.tests.bug.m7.AbstractNodeTest#setUp()
+ *
+ * @throws Exception
+ */
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ timeObservation = (TimeObservationEditPart)createNode(UMLElementTypes.TimeObservation_3020, getRootEditPart(), new Point(100, 100), null);
+ assertNotNull(timeObservation);
+ }
+
+ @Test
+ public void testDisplayStereotypeComment() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeComment(label);
+ }
+
+ @Test
+ public void testDisplayStereotypeInCompartment() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeInCompartment(label, timeObservation.getChildBySemanticHint("" + TimeObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+ @Test
+ public void testDisplayStereotypeWithBrace() {
+ //It seems the TimeObservationEditPart can not be selected from diagram, we use the Label EditPart instead.
+ IGraphicalEditPart label = timeObservation.getChildBySemanticHint("" + TimeObservationLabelEditPart.VISUAL_ID);
+ doTestDisplayStereotypeWithBrace(label, timeObservation.getChildBySemanticHint("" + TimeObservationAppliedStereotypeEditPart.VISUAL_ID));
+ }
+
+}