Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcletavernie2013-05-13 15:08:11 +0000
committercletavernie2013-05-13 15:08:11 +0000
commit3f99dc591c49648aadeed50399e052b637270822 (patch)
tree786d1fcc6b8bf44685b2f996ad54860a3fd6690a
parentd7e2a2c174ea5c8f95e5282157ee528b25f06e2a (diff)
downloadorg.eclipse.papyrus-3f99dc591c49648aadeed50399e052b637270822.tar.gz
org.eclipse.papyrus-3f99dc591c49648aadeed50399e052b637270822.tar.xz
org.eclipse.papyrus-3f99dc591c49648aadeed50399e052b637270822.zip
402967: [sequence diagram] Change the way to create a Duration Constraints and provide more flexible connection capability
https://bugs.eclipse.org/bugs/show_bug.cgi?id=402967
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CreateGateElementAndViewCommand.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintCreateCommand.java69
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintInMessageCreateCommand.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/ReconnectToGateCommand.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java14
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractMessageEditPart.java14
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomDurationConstraintEditPart.java484
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/CustomLifelineEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java18
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/GateNameEditPart.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndEditPart.java15
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndHelper.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndEditPolicy.java65
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndpointEditPolicy.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkStartEditPolicy.java9
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CreationOnMessageEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/DeleteTimeElementWithoutEventPolicy.java35
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/GatesHolderGraphicalNodeEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MoveableNonResizableLabelEditPolicy.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/semantic/CustomInteractionInteractionCompartmentItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/GateLocator.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomMessagePreferencePage.java1
-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/CustomViewProvider.java11
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/DurationConstraintContributionItem.java312
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/service/DurationCreationTool.java124
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/GateHelper.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceLinkMappingHelper.java1
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml12
30 files changed, 905 insertions, 305 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CreateGateElementAndViewCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CreateGateElementAndViewCommand.java
index 0210f399c64..310b603b683 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CreateGateElementAndViewCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CreateGateElementAndViewCommand.java
@@ -19,7 +19,6 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.gef.EditPart;
import org.eclipse.gmf.runtime.common.core.util.ObjectAdapter;
import org.eclipse.papyrus.uml.diagram.sequence.util.GateHelper;
import org.eclipse.uml2.uml.Element;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintCreateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintCreateCommand.java
index 17850c9221d..b35aaf952e0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintCreateCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintCreateCommand.java
@@ -13,7 +13,6 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.command;
-import java.util.Collections;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
@@ -22,14 +21,12 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.common.core.command.CommandResult;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
-import org.eclipse.papyrus.uml.diagram.common.helper.DurationConstraintHelper;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.DurationConstraintCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.providers.ElementInitializers;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
import org.eclipse.uml2.uml.CombinedFragment;
import org.eclipse.uml2.uml.DurationConstraint;
-import org.eclipse.uml2.uml.Lifeline;
import org.eclipse.uml2.uml.Namespace;
import org.eclipse.uml2.uml.OccurrenceSpecification;
import org.eclipse.uml2.uml.UMLFactory;
@@ -64,38 +61,38 @@ public class CustomDurationConstraintCreateCommand extends DurationConstraintCre
@Override
public boolean canExecute() {
/*
- // check first occurrence specification
- if(!getRequest().getParameters().containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION)) {
- return true; // duration creation is in progress; source is not defined yet
- }
- Object paramOccurrence1 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION);
- List<OccurrenceSpecification> occ1List = SequenceUtil.getAsOccSpecList(paramOccurrence1);
- if(occ1List.isEmpty()) {
- return false;
- }
- // check second occurrence specification
- if(!getRequest().getParameters().containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2)) {
- return true; // duration creation is in progress; target is not defined yet
- }
- Object paramOccurrence2 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
- List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOccurrence2);
- if(occ2List.isEmpty()) {
- return false;
- }
- // disable duration constraint on a same event
- if(!Collections.disjoint(occ1List, occ2List)) {
- return false;
- }
- // enable duration constraint only on a same lifeline or on message
- OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
- if(pair != null && pair.length > 1) {
- boolean enabled = DurationConstraintHelper.coversSameLifeline(pair[0], pair[1]);
- // handle creation on message
- enabled |= DurationConstraintHelper.endsOfSameMessage(pair[0], pair[1]);
- return enabled;
- }
- return false;
- */
+ * // check first occurrence specification
+ * if(!getRequest().getParameters().containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION)) {
+ * return true; // duration creation is in progress; source is not defined yet
+ * }
+ * Object paramOccurrence1 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION);
+ * List<OccurrenceSpecification> occ1List = SequenceUtil.getAsOccSpecList(paramOccurrence1);
+ * if(occ1List.isEmpty()) {
+ * return false;
+ * }
+ * // check second occurrence specification
+ * if(!getRequest().getParameters().containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2)) {
+ * return true; // duration creation is in progress; target is not defined yet
+ * }
+ * Object paramOccurrence2 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
+ * List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOccurrence2);
+ * if(occ2List.isEmpty()) {
+ * return false;
+ * }
+ * // disable duration constraint on a same event
+ * if(!Collections.disjoint(occ1List, occ2List)) {
+ * return false;
+ * }
+ * // enable duration constraint only on a same lifeline or on message
+ * OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
+ * if(pair != null && pair.length > 1) {
+ * boolean enabled = DurationConstraintHelper.coversSameLifeline(pair[0], pair[1]);
+ * // handle creation on message
+ * enabled |= DurationConstraintHelper.endsOfSameMessage(pair[0], pair[1]);
+ * return enabled;
+ * }
+ * return false;
+ */
return true;
}
@@ -123,7 +120,7 @@ public class CustomDurationConstraintCreateCommand extends DurationConstraintCre
((CreateElementRequest)getRequest()).setNewElement(newElement);
return CommandResult.newOKCommandResult(newElement);
}
-
+
protected Namespace getNamespace(EObject element) {
if(element instanceof Namespace) {
return (Namespace)element;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintInMessageCreateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintInMessageCreateCommand.java
index 5f7a2f08877..988bc22ea0a 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintInMessageCreateCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomDurationConstraintInMessageCreateCommand.java
@@ -15,7 +15,6 @@ package org.eclipse.papyrus.uml.diagram.sequence.command;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.DurationConstraintCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.DurationConstraintInMessageCreateCommand;
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/ReconnectToGateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/ReconnectToGateCommand.java
index 056d481f658..cf9f1c289f8 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/ReconnectToGateCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/ReconnectToGateCommand.java
@@ -20,11 +20,9 @@ import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
-import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.commands.Command;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java
index 104a9ff0485..d465e71b0d8 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java
@@ -158,7 +158,7 @@ public class AnchorHelper {
public static class FixedAnchorEx extends SlidableAnchor {
- private int position;
+ protected int position;
public FixedAnchorEx(IFigure f, int location) {
super(f, location == PositionConstants.TOP ? new PrecisionPoint(0.0, 0.0) : new PrecisionPoint(0.0, 1.0));
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 e1ec07a1e21..b14f587fabb 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
@@ -69,16 +69,16 @@ public abstract class AbstractExecutionSpecificationEditPart extends ShapeNodeEd
protected void initExecutionSpecificationEndEditPart() {
executionSpecificationEndParts = new ArrayList();
-
- String id = String.valueOf( ExecutionSpecificationEndEditPart.VISUAL_ID);
+
+ String id = String.valueOf(ExecutionSpecificationEndEditPart.VISUAL_ID);
List list = this.getModelChildren();
for(Object o : list)
- if(o instanceof Shape ){
- Shape s = (Shape) o;
- if(s.getType().equals(id ))
- return; // if the model already persist, do not create it again
+ if(o instanceof Shape) {
+ Shape s = (Shape)o;
+ if(s.getType().equals(id))
+ return; // if the model already persist, do not create it again
}
-
+
EObject element = this.resolveSemanticElement();
if(!(element instanceof ExecutionSpecification)) {
return;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractMessageEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractMessageEditPart.java
index 35f2f5b6036..b1bdfa10e83 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractMessageEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractMessageEditPart.java
@@ -184,16 +184,16 @@ public abstract class AbstractMessageEditPart extends UMLConnectionNodeEditPart
protected void initMessageEventPart() {
messageEventParts = new ArrayList();
-
- String id = String.valueOf( MessageEndEditPart.VISUAL_ID);
+
+ String id = String.valueOf(MessageEndEditPart.VISUAL_ID);
List list = this.getModelChildren();
for(Object o : list)
- if(o instanceof Shape ){
- Shape s = (Shape) o;
- if(s.getType().equals(id ))
- return; // if the model already persist, do not create it again
+ if(o instanceof Shape) {
+ Shape s = (Shape)o;
+ if(s.getType().equals(id))
+ return; // if the model already persist, do not create it again
}
-
+
EObject element = this.resolveSemanticElement();
if(!(element instanceof Message)) {
return;
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 4cf96acbdb9..c1ba9e82334 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
@@ -16,7 +16,6 @@ package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import java.util.List;
import org.eclipse.draw2d.ConnectionAnchor;
-import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolylineShape;
@@ -24,10 +23,13 @@ import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
-import org.eclipse.draw2d.geometry.PrecisionPoint;
import org.eclipse.draw2d.geometry.PrecisionRectangle;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
@@ -39,31 +41,34 @@ import org.eclipse.gef.handles.HandleBounds;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.gef.requests.ReconnectRequest;
+import org.eclipse.gmf.runtime.common.core.util.StringStatics;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
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.editpolicies.ResizableShapeEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest;
-import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeRequest;
-import org.eclipse.gmf.runtime.draw2d.ui.figures.BaseSlidableAnchor;
import org.eclipse.gmf.runtime.draw2d.ui.geometry.PointListUtilities;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
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.preferences.utils.PreferenceConstantHelper;
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.ExternalLabelPrimaryDragRoleEditPolicy;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.TimeRelatedSelectionEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.semantic.CustomDurationConstraintItemSemanticEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
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.swt.widgets.Display;
import org.eclipse.uml2.uml.DurationConstraint;
import org.eclipse.uml2.uml.InteractionFragment;
import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
@@ -73,6 +78,14 @@ import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
*/
public class CustomDurationConstraintEditPart extends DurationConstraintEditPart {
+ private static final String ARROW = "Arrow";
+
+ private static final String DIRECTION = "Direction";
+
+ private static final String VERTICAL = "vertical";
+
+ private static final String HORIZONTAL = "horizontal";
+
/**
* Constructor.
*
@@ -90,7 +103,7 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomDurationConstraintItemSemanticEditPolicy());
}
-
+
/**
* @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
*
@@ -101,88 +114,97 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
@Override
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
IHintedType type = (IHintedType)UMLElementTypes.CommentAnnotatedElement_4010;
- if(request instanceof CreateConnectionViewRequest){
- String hint = ((CreateConnectionViewRequest) request).getConnectionViewDescriptor().getSemanticHint();
- if(hint.equals( type.getSemanticHint() )){
- return new AnchorHelper.FixedAnchorEx(getFigure(), computeAnchorLocation( ((CreateConnectionViewRequest) request).getLocation()) );
+ if(request instanceof CreateConnectionViewRequest) {
+ String hint = ((CreateConnectionViewRequest)request).getConnectionViewDescriptor().getSemanticHint();
+ if(hint.equals(type.getSemanticHint())) {
+ return new RotateAnchor(getFigure(), computeAnchorLocation(((CreateConnectionViewRequest)request).getLocation()));
+ }
+ } else if(request instanceof ReconnectRequest) {
+ ConnectionEditPart linkPart = ((ReconnectRequest)request).getConnectionEditPart();
+ if(linkPart instanceof CommentAnnotatedElementEditPart) {
+ return new RotateAnchor(getFigure(), computeAnchorLocation(((ReconnectRequest)request).getLocation()));
}
}
return super.getSourceConnectionAnchor(request);
}
-
+
protected int computeAnchorLocation(Point location) {
Rectangle box = getBox();
- if(location.getDistance2( box.getTop()) > location.getDistance2(box.getBottom()))
- return PositionConstants.BOTTOM;
- return PositionConstants.TOP;
+ if(isArrowVertical()) {
+ if(location.getDistance2(box.getTop()) > location.getDistance2(box.getBottom()))
+ return PositionConstants.BOTTOM;
+ return PositionConstants.TOP;
+ } else {
+ if(location.getDistance2(box.getLeft()) > location.getDistance2(box.getRight()))
+ return PositionConstants.RIGHT;
+ return PositionConstants.LEFT;
+ }
}
protected Rectangle getBox() {
- Rectangle rBox = getFigure() instanceof HandleBounds ? new PrecisionRectangle(
- ((HandleBounds) getFigure()).getHandleBounds())
- : new PrecisionRectangle(getFigure().getBounds());
- getFigure().translateToAbsolute(rBox);
+ Rectangle rBox = getFigure() instanceof HandleBounds ? new PrecisionRectangle(((HandleBounds)getFigure()).getHandleBounds()) : new PrecisionRectangle(getFigure().getBounds());
+ getFigure().translateToAbsolute(rBox);
return rBox;
}
-
- public boolean canCreateLink(Point point){
- DurationConstraint dc = (DurationConstraint) this.resolveSemanticElement();
-
- int count = 0; // link counts
+
+ public boolean canCreateLink(Point point) {
+ DurationConstraint dc = (DurationConstraint)this.resolveSemanticElement();
+
+ int count = 0; // link counts
List list = this.getSourceConnections();
- for(Object o :list)
- if(o instanceof CustomCommentAnnotatedElementEditPart){
- count ++;
+ for(Object o : list)
+ if(o instanceof CustomCommentAnnotatedElementEditPart) {
+ count++;
}
if(count >= 2)
return false;
-
+
if(count < 1)
return true;
-
- int targetPosition = computeAnchorLocation( point );
+
+ int targetPosition = computeAnchorLocation(point);
if(findLinkAtPosition(targetPosition))
return false;
return true;
}
-
-// protected void refreshSourceConnections() {
-// super.refreshSourceConnections();
-// Display.getDefault().asyncExec(new Runnable(){
-// public void run() {
-// refreshBorder();
-// }
-// });
-// }
-//
-// public void refresh(){
-// super.refresh();
-// refreshBorder();
-// }
-//
-// private void refreshBorder() {
-// if(getPrimaryShape() instanceof CustomDurationConstraintFigure){
-// CustomDurationConstraintFigure fig = (CustomDurationConstraintFigure)getPrimaryShape();
-// fig.setBorderVisible(hasTopLink(), hasBottomLink());
-// }
-// }
-
- public boolean hasTopLink(){
- return findLinkAtPosition(PositionConstants.TOP);
- }
-
- public boolean hasBottomLink(){
+
+ // protected void refreshSourceConnections() {
+ // super.refreshSourceConnections();
+ // Display.getDefault().asyncExec(new Runnable(){
+ // public void run() {
+ // refreshBorder();
+ // }
+ // });
+ // }
+ //
+ // public void refresh(){
+ // super.refresh();
+ // refreshBorder();
+ // }
+ //
+ // private void refreshBorder() {
+ // if(getPrimaryShape() instanceof CustomDurationConstraintFigure){
+ // CustomDurationConstraintFigure fig = (CustomDurationConstraintFigure)getPrimaryShape();
+ // fig.setBorderVisible(hasTopLink(), hasBottomLink());
+ // }
+ // }
+
+ public boolean hasTopLink() {
+ return findLinkAtPosition(PositionConstants.TOP);
+ }
+
+ public boolean hasBottomLink() {
return findLinkAtPosition(PositionConstants.BOTTOM);
}
-
- protected boolean findLinkAtPosition(int targetPos){
+
+ protected boolean findLinkAtPosition(int targetPos) {
List list = this.getSourceConnections();
- for(Object o :list)
- if(o instanceof CustomCommentAnnotatedElementEditPart){
- CustomCommentAnnotatedElementEditPart connPart = (CustomCommentAnnotatedElementEditPart) o;
+ for(Object o : list)
+ if(o instanceof CustomCommentAnnotatedElementEditPart) {
+ CustomCommentAnnotatedElementEditPart connPart = (CustomCommentAnnotatedElementEditPart)o;
if((targetPos & getSourceAnchorPosition(connPart)) > 0)
- return true;
-
+ return true;
+
}
return false;
}
@@ -196,41 +218,42 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
*/
@Override
public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connEditPart) {
+ ConnectionAnchor anchor = null;
if(connEditPart instanceof CommentAnnotatedElementEditPart) {
- return new AnchorHelper.FixedAnchorEx(getFigure(),getSourceAnchorPosition(connEditPart));
+ anchor = new RotateAnchor(getFigure(), getSourceAnchorPosition((CommentAnnotatedElementEditPart)connEditPart));
+ } else {
+ anchor = super.getSourceConnectionAnchor(connEditPart);
}
- return super.getSourceConnectionAnchor(connEditPart);
+
+ return anchor;
}
- private int getSourceAnchorPosition(ConnectionEditPart connEditPart) {
+ private int getSourceAnchorPosition(CommentAnnotatedElementEditPart connEditPart) {
String terminal = AnchorHelper.getAnchorId(getEditingDomain(), connEditPart, true);
if(terminal.length() > 0) {
- PrecisionPoint pt = BaseSlidableAnchor.parseTerminalString(terminal);
- if(pt.y < 0.5)
- return PositionConstants.TOP ;
- else
- return PositionConstants.BOTTOM ;
+ return RotateAnchor.parseLocation(terminal);
}
- return PositionConstants.NONE ;
+ return PositionConstants.TOP;
}
@Override
protected void refreshBounds() {
int width = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width())).intValue();
int height = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height())).intValue();
- if(width == -1 && height == -1) { // restore to default size
- Dimension size = getFigure().getPreferredSize();
- width = size.width;
- height = size.height;
- }
- if(width != -1 && height != -1) {
+ // restore to default size
+ if(width == -1)
+ width = getFigure().getPreferredSize().width;
+ if(height == -1)
+ height = getFigure().getPreferredSize().height;
+
+ if(width != -1 && height != -1) {
Dimension size = primaryShape.getBounds().getSize();
- if(size.width != width || size.height != height){ // if resize bounds
+ if(size.width != width || size.height != height) { // if resize bounds
primaryShape.setBounds(new Rectangle(primaryShape.getBounds().getLocation(), new Dimension(width, height)));
}
}
super.refreshBounds();
-
+
//fix combined fragment move
this.getFigure().getParent().getLayoutManager().layout(this.getFigure().getParent());
relocateLabelEditPart();
@@ -252,7 +275,8 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
@Override
public EditPolicy getPrimaryDragEditPolicy() {
EditPolicy policy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
- return policy != null ? policy : new ResizableShapeEditPolicy(){
+ return policy != null ? policy : new ResizableShapeEditPolicy() {
+
protected Command getResizeCommand(ChangeBoundsRequest request) {
ChangeBoundsRequest req = new ChangeBoundsRequest(REQ_RESIZE_CHILDREN);
req.setEditParts(getHost());
@@ -264,31 +288,31 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
req.setResizeDirection(request.getResizeDirection());
return getHost().getParent().getCommand(req);
}
-
- protected void showChangeBoundsFeedback(ChangeBoundsRequest request) {
- IFigure feedback = getDragSourceFeedbackFigure();
-
- PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy());
- getHostFigure().translateToAbsolute(rect);
- rect.translate(request.getMoveDelta());
- rect.resize(request.getSizeDelta());
-
- IFigure f = getHostFigure();
- Dimension max = f.getMaximumSize().getCopy();
- IMapMode mmode = MapModeUtil.getMapMode(f);
- max.height = mmode.LPtoDP(max.height);
- max.width = mmode.LPtoDP(max.width);
-
- // no minimal size
- if (max.width < rect.width)
- rect.width = max.width;
-
- if (max.height < rect.height)
- rect.height = max.height;
-
- feedback.translateToRelative(rect);
- feedback.setBounds(rect);
- }
+
+ protected void showChangeBoundsFeedback(ChangeBoundsRequest request) {
+ IFigure feedback = getDragSourceFeedbackFigure();
+
+ PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy());
+ getHostFigure().translateToAbsolute(rect);
+ rect.translate(request.getMoveDelta());
+ rect.resize(request.getSizeDelta());
+
+ IFigure f = getHostFigure();
+ Dimension max = f.getMaximumSize().getCopy();
+ IMapMode mmode = MapModeUtil.getMapMode(f);
+ max.height = mmode.LPtoDP(max.height);
+ max.width = mmode.LPtoDP(max.width);
+
+ // no minimal size
+ if(max.width < rect.width)
+ rect.width = max.width;
+
+ if(max.height < rect.height)
+ rect.height = max.height;
+
+ feedback.translateToRelative(rect);
+ feedback.setBounds(rect);
+ }
};
}
@@ -388,11 +412,18 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
refreshLineWidth();
}
}
+
+ if(notification.getNewValue() instanceof EAnnotation && ARROW.equals(((EAnnotation)notification.getNewValue()).getSource())) {
+ refreshArrowDirection((EAnnotation)notification.getNewValue());
+ } else if(notification.getNotifier() instanceof EAnnotation && ARROW.equals(((EAnnotation)notification.getNotifier()).getSource())) {
+ refreshArrowDirection((EAnnotation)notification.getNotifier()); //notification.getEventType() ==
+ }
}
@Override
protected void refreshVisuals() {
super.refreshVisuals();
+ refreshArrowDirection(null);
refreshLineWidth();
}
@@ -438,32 +469,46 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
*
*/
private static final int ARROW_SEMI_WIDTH = 7;
-
- public CustomDurationConstraintFigure(){
+
+ boolean vertical = true;
+
+ public CustomDurationConstraintFigure() {
setDashBorder();
}
-
+
protected void setDashBorder() {
- if(this.getBorder() instanceof LinesBorder){
- LinesBorder lb = (LinesBorder) this.getBorder();
+ if(this.getBorder() instanceof LinesBorder) {
+ LinesBorder lb = (LinesBorder)this.getBorder();
lb.setStyle(Graphics.LINE_DASH);
+ if(vertical)
+ lb.setSides(PositionConstants.TOP | PositionConstants.BOTTOM);
+ else
+ lb.setSides(PositionConstants.LEFT | PositionConstants.RIGHT);
}
}
-
- public void setBorderVisible(boolean top, boolean bottom){
- if(this.getBorder() instanceof LinesBorder){
- LinesBorder lb = (LinesBorder) this.getBorder();
- if(top){
- int value = bottom ? PositionConstants.TOP | PositionConstants.BOTTOM : PositionConstants.TOP;
- lb.setSides(value);
- }else{
- int value = bottom ? PositionConstants.BOTTOM : PositionConstants.NONE;
- lb.setSides(value);
- }
- this.repaint();
+
+ public void setVertical(boolean val) {
+ if(val != vertical) {
+ vertical = val;
+ setDashBorder();
+ revalidate();
}
}
+ // public void setBorderVisible(boolean top, boolean bottom){
+ // if(this.getBorder() instanceof LinesBorder){
+ // LinesBorder lb = (LinesBorder) this.getBorder();
+ // if(top){
+ // int value = bottom ? PositionConstants.TOP | PositionConstants.BOTTOM : PositionConstants.TOP;
+ // lb.setSides(value);
+ // }else{
+ // int value = bottom ? PositionConstants.BOTTOM : PositionConstants.NONE;
+ // lb.setSides(value);
+ // }
+ // this.repaint();
+ // }
+ // }
+
/**
* Sets the bounds of this Figure to the Rectangle <i>rect</i>.
* This also updates sub-figures.
@@ -491,18 +536,38 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
figureWidth -= getInsets().left + getInsets().right;
figureHeight -= getInsets().top + getInsets().bottom;
if(getDurationArrow() != null) {
- PointList points = new PointList(8);
- points.addPoint(figureWidth / 2 - ARROW_SEMI_WIDTH, getLineWidth() / 2 + ARROW_HEIGHT);
- points.addPoint(figureWidth / 2, getLineWidth() / 2);
- points.addPoint(figureWidth / 2 + ARROW_SEMI_WIDTH, getLineWidth() / 2 + ARROW_HEIGHT);
- points.addPoint(figureWidth / 2, getLineWidth() / 2);
- points.addPoint(figureWidth / 2, figureHeight - getLineWidth() / 2);
- points.addPoint(figureWidth / 2 - ARROW_SEMI_WIDTH, figureHeight - getLineWidth() / 2 - ARROW_HEIGHT);
- points.addPoint(figureWidth / 2, figureHeight - getLineWidth() / 2);
- points.addPoint(figureWidth / 2 + ARROW_SEMI_WIDTH, figureHeight - getLineWidth() / 2 - ARROW_HEIGHT);
- getDurationArrow().setPoints(points);
- Point topLeft = getLocation().getTranslated(getInsets().left, getInsets().top);
- getDurationArrow().setBounds(new Rectangle(topLeft, new Dimension(figureWidth, figureHeight)));
+ int halfLineWidth = getLineWidth() / 2;
+ if(vertical) {
+ PointList points = new PointList(8);
+ int centerX = figureWidth / 2;
+ points.addPoint(centerX - ARROW_SEMI_WIDTH, halfLineWidth + ARROW_HEIGHT);
+ points.addPoint(centerX, halfLineWidth);
+ points.addPoint(centerX + ARROW_SEMI_WIDTH, halfLineWidth + ARROW_HEIGHT);
+ points.addPoint(centerX, halfLineWidth);
+ points.addPoint(centerX, figureHeight - halfLineWidth);
+ points.addPoint(centerX - ARROW_SEMI_WIDTH, figureHeight - halfLineWidth - ARROW_HEIGHT);
+ points.addPoint(centerX, figureHeight - halfLineWidth);
+ points.addPoint(centerX + ARROW_SEMI_WIDTH, figureHeight - halfLineWidth - ARROW_HEIGHT);
+ getDurationArrow().setPoints(points);
+ Point topLeft = getLocation().getTranslated(getInsets().left, getInsets().top);
+ getDurationArrow().setBounds(new Rectangle(topLeft, new Dimension(figureWidth, figureHeight)));
+ } else {
+ PointList points = new PointList(8);
+ int centerY = figureHeight / 2;
+ points.addPoint(halfLineWidth + ARROW_HEIGHT, centerY - ARROW_SEMI_WIDTH);
+ points.addPoint(halfLineWidth, centerY);
+ points.addPoint(halfLineWidth + ARROW_HEIGHT, centerY + ARROW_SEMI_WIDTH);
+ points.addPoint(halfLineWidth, centerY);
+ points.addPoint(figureWidth - halfLineWidth, centerY);
+
+ points.addPoint(figureWidth - halfLineWidth - ARROW_HEIGHT, centerY - ARROW_SEMI_WIDTH);
+ points.addPoint(figureWidth - halfLineWidth, centerY);
+ points.addPoint(figureWidth - halfLineWidth - ARROW_HEIGHT, centerY + ARROW_SEMI_WIDTH);
+
+ getDurationArrow().setPoints(points);
+ Point topLeft = getLocation().getTranslated(getInsets().left, getInsets().top);
+ getDurationArrow().setBounds(new Rectangle(topLeft, new Dimension(figureWidth, figureHeight)));
+ }
}
}
@@ -599,4 +664,151 @@ public class CustomDurationConstraintEditPart extends DurationConstraintEditPart
}
return null;
}
+
+
+ protected void refreshArrowDirection(EAnnotation newValue) {
+ CustomDurationConstraintFigure dc = (CustomDurationConstraintFigure)getPrimaryShape();
+ dc.setVertical(isArrowVertical());
+ }
+
+ public void setArrowDirection(String dir) {
+ View view = this.getNotationView();
+ if(view == null)
+ return;
+
+ EAnnotation ea = view.getEAnnotation(ARROW);
+ if(ea == null) {
+ ea = EcoreFactory.eINSTANCE.createEAnnotation();
+ ea.setSource(ARROW);
+ ea.getDetails().put(DIRECTION, dir);
+ view.getEAnnotations().add(ea);
+ } else {
+ ea.getDetails().clear();
+ ea.getDetails().put(DIRECTION, dir);
+ }
+ }
+
+ public String getArrowDirection() {
+ View view = this.getNotationView();
+ if(view == null)
+ return "";
+ EAnnotation ea = view.getEAnnotation(ARROW);
+ if(ea != null) {
+ String pos = ea.getDetails().get(DIRECTION);
+ if(pos != null) {
+ return pos;
+ }
+ }
+ return VERTICAL;
+ }
+
+ public boolean isArrowVertical() {
+ return VERTICAL.equals(getArrowDirection());
+ }
+
+ public void rotateArrow() {
+ if(isArrowVertical()) {
+ setArrowDirection(HORIZONTAL);
+ } else {
+ setArrowDirection(VERTICAL);
+ }
+ }
+
+ private Object getStructuralFeatureValue(View view, EStructuralFeature feature) {
+ return ViewUtil.getPropertyValue(view, feature, feature.getEContainingClass());
+ }
+
+ public Rectangle getBounds() {
+ View view = this.getNotationView();
+ int width = ((Integer)getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Width())).intValue();
+ int height = ((Integer)getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Height())).intValue();
+ int x = ((Integer)getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_X())).intValue();
+ int y = ((Integer)getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_Y())).intValue();
+ String prefElementId = ViewUtil.resolveSemanticElement(view).eClass().getName();
+ IPreferenceStore store = UMLDiagramEditorPlugin.getInstance().getPreferenceStore();
+ String preferenceConstantWitdh = PreferenceInitializerForElementHelper.getpreferenceKey(view, prefElementId, PreferenceConstantHelper.WIDTH);
+ String preferenceConstantHeight = PreferenceInitializerForElementHelper.getpreferenceKey(view, prefElementId, PreferenceConstantHelper.HEIGHT);
+ if(width <= 0) {
+ width = store.getInt(preferenceConstantWitdh);
+ }
+ if(height <= 0) {
+ height = store.getInt(preferenceConstantHeight);
+ }
+ return new Rectangle(x, y, width, height);
+ }
+
+ public static class RotateArrowCommand extends org.eclipse.emf.transaction.RecordingCommand {
+
+ private CustomDurationConstraintEditPart part;
+
+ public RotateArrowCommand(TransactionalEditingDomain domain, CustomDurationConstraintEditPart part) {
+ super(domain);
+ this.part = part;
+ }
+
+ @Override
+ protected void doExecute() {
+ List list = part.getSourceConnections();
+ if(part.isArrowVertical()) {
+ part.setArrowDirection(HORIZONTAL);
+ } else {
+ part.setArrowDirection(VERTICAL);
+ }
+ }
+ }
+
+ static class RotateAnchor extends FixedAnchorEx {
+
+ public RotateAnchor(IFigure f, int location) {
+ super(f, location);
+ }
+
+ public Point getLocation(Point reference) {
+ if(position == PositionConstants.TOP) {
+ return getBox().getTop();
+ } else if(position == PositionConstants.BOTTOM) {
+ return getBox().getBottom();
+ } else if(position == PositionConstants.LEFT) {
+ return getBox().getLeft();
+ } else if(position == PositionConstants.RIGHT) {
+ return getBox().getRight();
+ }
+ return super.getLocation(reference);
+ }
+
+ public String getTerminal() {
+ if(isDefaultAnchor())
+ return StringStatics.BLANK;
+ if(position == PositionConstants.TOP) {
+ return "(0.5,0){T}";
+ } else if(position == PositionConstants.BOTTOM) {
+ return "(0.5,1){D}";
+ } else if(position == PositionConstants.LEFT) {
+ return "(0,0.5){L}";
+ } else if(position == PositionConstants.RIGHT) {
+ return "(1,0.5){R}";
+ }
+ return "(0.5,0){T}";
+ }
+
+ public static int parseLocation(String terminal) {
+ if(terminal.length() > 0) {
+ int start = terminal.indexOf("{") + 1;
+ if(start > 0) {
+ char ch = Character.toUpperCase(terminal.charAt(start));
+ switch(ch) {
+ case 'L':
+ return PositionConstants.LEFT;
+ case 'R':
+ return PositionConstants.RIGHT;
+ case 'D':
+ return PositionConstants.BOTTOM;
+ default:
+ return PositionConstants.TOP;
+ }
+ }
+ }
+ return PositionConstants.TOP;
+ }
+ }
}
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 85e0b52a543..552a47dc318 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
@@ -500,7 +500,7 @@ public class CustomLifelineEditPart extends LifelineEditPart {
CompoundCommand resizeChildrenCommand = new CompoundCommand();
InteractionCompartmentXYLayoutEditPolicy.addLifelineResizeChildrenCommand(resizeChildrenCommand, request, child, 1);
//If no child, just ignore it. Fixed bug about Resizing child lifeline:
- Command cmd = resizeChildrenCommand.isEmpty() ? null: resizeChildrenCommand.unwrap();
+ Command cmd = resizeChildrenCommand.isEmpty() ? null : resizeChildrenCommand.unwrap();
if(cmd != null) {
composite.add(new CommandProxy(cmd));
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java
index 0f0ac85de48..c7305f1ba64 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java
@@ -82,6 +82,7 @@ import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.OccurrenceSpecification;
public class ExecutionSpecificationEndEditPart extends GraphicalEditPart implements INodeEditPart {
+
public static final int VISUAL_ID = 999998;
private static final int DEFAULT_SIZE = 16;
@@ -101,8 +102,8 @@ public class ExecutionSpecificationEndEditPart extends GraphicalEditPart impleme
public ExecutionSpecificationEndEditPart(View view) {
super(view);
if(view.getElement() instanceof OccurrenceSpecification)
- this.executionSpecificationEnd = (OccurrenceSpecification) view.getElement();
-
+ this.executionSpecificationEnd = (OccurrenceSpecification)view.getElement();
+
}
public void setParent(EditPart parent) {
@@ -590,19 +591,18 @@ public class ExecutionSpecificationEndEditPart extends GraphicalEditPart impleme
super.validate();
}
}
-
+
private void initLocator() {
- if(locator == null && executionSpecificationEnd instanceof ExecutionOccurrenceSpecification){
- ExecutionSpecification es = ((ExecutionOccurrenceSpecification) executionSpecificationEnd ).getExecution();
+ if(locator == null && executionSpecificationEnd instanceof ExecutionOccurrenceSpecification) {
+ ExecutionSpecification es = ((ExecutionOccurrenceSpecification)executionSpecificationEnd).getExecution();
if(es.getStart() == executionSpecificationEnd)
- locator = new RelativeLocator(((org.eclipse.gef.GraphicalEditPart) getParent()).getFigure(), PositionConstants.NORTH);
+ locator = new RelativeLocator(((org.eclipse.gef.GraphicalEditPart)getParent()).getFigure(), PositionConstants.NORTH);
else
- locator = new RelativeLocator(((org.eclipse.gef.GraphicalEditPart) getParent()).getFigure(), PositionConstants.SOUTH);
+ locator = new RelativeLocator(((org.eclipse.gef.GraphicalEditPart)getParent()).getFigure(), PositionConstants.SOUTH);
}
}
- public void relocateFigure(
- ExecutionSpecificationEndFigure fig) {
+ public void relocateFigure(ExecutionSpecificationEndFigure fig) {
if(locator == null)
initLocator();
if(locator != null)
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 c2cd4bc11d3..645a3902a9d 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
@@ -61,7 +61,6 @@ 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.parsers.MessageFormatParser;
import org.eclipse.papyrus.uml.diagram.sequence.util.GateHelper;
-import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.graphics.Color;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndEditPart.java
index c7d2db28e40..5a71d592b63 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndEditPart.java
@@ -71,7 +71,6 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.Shape;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.gmf.runtime.notation.impl.ShapeImpl;
-import org.eclipse.papyrus.uml.diagram.common.editparts.UMLConnectionNodeEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.CommentAnnotatedElementCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.ConstraintConstrainedElementCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.GeneralOrderingCreateCommand;
@@ -108,11 +107,11 @@ public class MessageEndEditPart extends GraphicalEditPart implements INodeEditPa
this.messageEnd = end;
addToResource(parent.getNotationView(), this.getNotationView());
}
-
- public MessageEndEditPart(View view){
+
+ public MessageEndEditPart(View view) {
super(view);
if(view.getElement() instanceof MessageEnd)
- this.messageEnd = (MessageEnd) view.getElement();
+ this.messageEnd = (MessageEnd)view.getElement();
}
public void setParent(EditPart parent) {
@@ -121,15 +120,15 @@ public class MessageEndEditPart extends GraphicalEditPart implements INodeEditPa
}
private void initLocator() {
- if(locator == null && messageEnd != null){
+ if(locator == null && messageEnd != null) {
Message message = messageEnd.getMessage();
if(message.getSendEvent() == messageEnd)
- locator = new ConnectionLocator( ((AbstractConnectionEditPart) getParent()).getConnectionFigure(), ConnectionLocator.SOURCE);
+ locator = new ConnectionLocator(((AbstractConnectionEditPart)getParent()).getConnectionFigure(), ConnectionLocator.SOURCE);
else
- locator = new ConnectionLocator( ((AbstractConnectionEditPart) getParent()).getConnectionFigure(), ConnectionLocator.TARGET);
+ locator = new ConnectionLocator(((AbstractConnectionEditPart)getParent()).getConnectionFigure(), ConnectionLocator.TARGET);
}
}
-
+
@Override
protected void addNotationalListeners() {
if(hasNotationView()) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndHelper.java
index c77d19a84e0..ff4eb985ffd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/MessageEndHelper.java
@@ -24,4 +24,4 @@ public class MessageEndHelper {
if(!annotation.getReferences().contains(connectionSource))
annotation.getReferences().add(connectionSource);
}
-} \ No newline at end of file
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndEditPolicy.java
index 05f0cfb1123..aefea3bafda 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndEditPolicy.java
@@ -17,9 +17,12 @@ import java.lang.reflect.Field;
import java.util.Iterator;
import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.PrecisionPoint;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.EditPart;
@@ -32,17 +35,21 @@ import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.DropRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.SetConnectionAnchorsCommand;
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.editparts.INodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.GraphicalNodeEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.internal.commands.SetConnectionBendpointsCommand;
import org.eclipse.papyrus.uml.diagram.sequence.command.AnnotatedLinkEditCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AnnotatedLinkEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDurationConstraintEditPart;
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.figures.EllipseDecoration;
import org.eclipse.swt.SWT;
-import org.eclipse.uml2.uml.NamedElement;
/**
* An editpolicy for handling connections end from Comment, Constraint and Observations.
@@ -139,9 +146,65 @@ public class AnnotatedLinkEndEditPolicy extends GraphicalNodeEditPolicy {
return UnexecutableCommand.INSTANCE;
}
command.setTarget(getHost());
+
+ //update bendpoints
+ if((request.getSourceEditPart() instanceof CustomDurationConstraintEditPart) && !(request.getTargetEditPart() instanceof CustomDurationConstraintEditPart)) {
+ updateConnectionBendpoints(request, proxy);
+ }
return proxy;
}
+ private void updateConnectionBendpoints(CreateConnectionRequest request, ICommandProxy proxy) {
+ ICommand iCommand = proxy.getICommand();
+ if(!(iCommand instanceof CompositeCommand)) {
+ return;
+ }
+ INodeEditPart targetEP = getConnectionCompleteEditPart(request);
+ if(targetEP == null) {
+ return;
+ }
+ CompositeCommand cc = (CompositeCommand)iCommand;
+ SetConnectionAnchorsCommand scaCommand = null;
+ SetConnectionBendpointsCommand sbbCommand = null;
+ Iterator it = cc.iterator();
+ while(it.hasNext()) {
+ Object next = it.next();
+ if(next instanceof SetConnectionBendpointsCommand) {
+ sbbCommand = (SetConnectionBendpointsCommand)next;
+ } else if(next instanceof SetConnectionAnchorsCommand) {
+ scaCommand = (SetConnectionAnchorsCommand)next;
+ }
+ if(sbbCommand != null && scaCommand != null) {
+ break;
+ }
+ }
+ if(sbbCommand == null || scaCommand == null) {
+ return;
+ }
+ ConnectionAnchor targetAnchor = targetEP.getTargetConnectionAnchor(request);
+ INodeEditPart sourceEditPart = (INodeEditPart)request.getSourceEditPart();
+ ConnectionAnchor sourceAnchor = sourceEditPart.getSourceConnectionAnchor(request);// sourceEditPart.mapTerminalToConnectionAnchor(scaCommand.getNewSourceTerminal());
+ Point sourcePoint = sourceAnchor.getLocation(sourceAnchor.getReferencePoint());
+ Point targetPoint = targetAnchor.getLocation(targetAnchor.getReferencePoint());
+
+ if(sourcePoint.y != targetPoint.y) {
+ PointList newList = new PointList(3);
+ newList.addPoint(sourcePoint);
+ Point p = addBendpoint(sourcePoint.x, targetPoint.x, sourcePoint.y);
+ newList.addPoint(p);
+ newList.addPoint(targetPoint);
+ sbbCommand.setNewPointList(newList, sourceAnchor.getReferencePoint(), targetAnchor.getReferencePoint());
+ }
+ }
+
+ private Point addBendpoint(int x, int x2, int y) {
+ if(Math.abs(x - x2) > 20) {
+ return new PrecisionPoint(x2 + 20 * Math.signum(x - x2), y);
+ } else {
+ return new PrecisionPoint(x2 + (x - x2) * 0.5, y);
+ }
+ }
+
@Override
public void eraseTargetFeedback(Request request) {
if(REQ_ANNOTATED_LINK_END.equals(request.getType())) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndpointEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndpointEditPolicy.java
index 68047006f95..62e200fca7f 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndpointEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkEndpointEditPolicy.java
@@ -32,7 +32,6 @@ import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy;
import org.eclipse.gef.handles.ConnectionEndpointHandle;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gef.tools.ConnectionEndpointTracker;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AnnotatedLinkEditPart;
import org.eclipse.swt.SWT;
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkStartEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkStartEditPolicy.java
index 9d45d641878..2faee3f2ff6 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkStartEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/AnnotatedLinkStartEditPolicy.java
@@ -33,7 +33,6 @@ import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.uml.diagram.sequence.command.AnnotatedLinkEditCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AnnotatedLinkEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDurationConstraintEditPart;
-import org.eclipse.uml2.uml.DurationConstraint;
import org.eclipse.uml2.uml.TimeObservation;
/**
@@ -106,6 +105,10 @@ public class AnnotatedLinkStartEditPolicy extends GraphicalNodeEditPolicy {
return null;
}
if(request.getConnectionEditPart() instanceof AnnotatedLinkEditPart) {
+ if(getHost() instanceof CustomDurationConstraintEditPart && !((CustomDurationConstraintEditPart)getHost()).canCreateLink(request.getLocation())) {
+ return UnexecutableCommand.INSTANCE; // only 2 links are allowed, one for each side
+ }
+
CompositeCommand cc = (CompositeCommand)c.getICommand();
AnnotatedLinkEditCommand ac = new AnnotatedLinkEditCommand(getEditingDomain());
ac.setAnnotatedLink((AnnotatedLinkEditPart)request.getConnectionEditPart());
@@ -126,8 +129,8 @@ public class AnnotatedLinkStartEditPolicy extends GraphicalNodeEditPolicy {
if(element instanceof TimeObservation && ((TimeObservation)element).getEvent() != null) {
return UnexecutableCommand.INSTANCE;
}
- if(host instanceof CustomDurationConstraintEditPart){
- boolean can = ((CustomDurationConstraintEditPart) host).canCreateLink(request.getLocation());
+ if(host instanceof CustomDurationConstraintEditPart) {
+ boolean can = ((CustomDurationConstraintEditPart)host).canCreateLink(request.getLocation());
if(!can)
return UnexecutableCommand.INSTANCE;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CreationOnMessageEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CreationOnMessageEditPolicy.java
index 31fe0abf100..2ffb43c5ac2 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CreationOnMessageEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CreationOnMessageEditPolicy.java
@@ -128,7 +128,7 @@ public class CreationOnMessageEditPolicy extends CreationEditPolicy {
String durCstOnLifelineHint = ((IHintedType)UMLElementTypes.DurationConstraint_3021).getSemanticHint();
String durCstOnMessage = ((IHintedType)UMLElementTypes.DurationConstraint_3023).getSemanticHint();
String durObsOnMessage = ((IHintedType)UMLElementTypes.DurationObservation_3024).getSemanticHint();
- return durCstOnLifelineHint.equals(requestHint) /* || durCstOnMessage.equals(requestHint) */ || durObsOnMessage.equals(requestHint);
+ return durCstOnLifelineHint.equals(requestHint) /* || durCstOnMessage.equals(requestHint) */|| durObsOnMessage.equals(requestHint);
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/DeleteTimeElementWithoutEventPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/DeleteTimeElementWithoutEventPolicy.java
index 2f84f6905a5..80ed2846679 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/DeleteTimeElementWithoutEventPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/DeleteTimeElementWithoutEventPolicy.java
@@ -56,7 +56,6 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
-import org.eclipse.uml2.uml.DurationConstraint;
import org.eclipse.uml2.uml.DurationObservation;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.NamedElement;
@@ -217,14 +216,14 @@ public class DeleteTimeElementWithoutEventPolicy extends AbstractEditPolicy impl
return ((DurationObservation)hostSemanticElement).getEvents().size() >= 2;
} else if(hostSemanticElement instanceof TimeConstraint) {
return ((TimeConstraint)hostSemanticElement).getConstrainedElements().size() > 0;
- }
-// else if(hostSemanticElement instanceof DurationConstraint) {
-// /*
-// * Note that DurationConstraint may have only one ConstrainedElement.
-// * But in such a case, we suppose it has not been created as one of the concerned edit parts.
-// */
-// return ((DurationConstraint)hostSemanticElement).getConstrainedElements().size() >= 2;
-// }
+ }
+ // else if(hostSemanticElement instanceof DurationConstraint) {
+ // /*
+ // * Note that DurationConstraint may have only one ConstrainedElement.
+ // * But in such a case, we suppose it has not been created as one of the concerned edit parts.
+ // */
+ // return ((DurationConstraint)hostSemanticElement).getConstrainedElements().size() >= 2;
+ // }
return true;
}
@@ -295,15 +294,15 @@ public class DeleteTimeElementWithoutEventPolicy extends AbstractEditPolicy impl
return SequenceUtil.getLinkedEditPart(lifeline, (OccurrenceSpecification)occs.get(0)) == null;
}
return true;
- }
-// else if(getHost() instanceof DurationConstraintEditPart && hostSemanticElement instanceof DurationConstraint) {
-// LifelineEditPart lifeline = SequenceUtil.getParentLifelinePart(getHost());
-// List<Element> occs = ((DurationConstraint)hostSemanticElement).getConstrainedElements();
-// if(occs.size() >= 2 && occs.get(0) instanceof OccurrenceSpecification && occs.get(1) instanceof OccurrenceSpecification) {
-// return SequenceUtil.getLinkedEditPart(lifeline, (OccurrenceSpecification)occs.get(0)) == null || SequenceUtil.getLinkedEditPart(lifeline, (OccurrenceSpecification)occs.get(1)) == null;
-// }
-// return true;
-// }
+ }
+ // else if(getHost() instanceof DurationConstraintEditPart && hostSemanticElement instanceof DurationConstraint) {
+ // LifelineEditPart lifeline = SequenceUtil.getParentLifelinePart(getHost());
+ // List<Element> occs = ((DurationConstraint)hostSemanticElement).getConstrainedElements();
+ // if(occs.size() >= 2 && occs.get(0) instanceof OccurrenceSpecification && occs.get(1) instanceof OccurrenceSpecification) {
+ // return SequenceUtil.getLinkedEditPart(lifeline, (OccurrenceSpecification)occs.get(0)) == null || SequenceUtil.getLinkedEditPart(lifeline, (OccurrenceSpecification)occs.get(1)) == null;
+ // }
+ // return true;
+ // }
// a label on a message always has its parent message
return false;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/GatesHolderGraphicalNodeEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/GatesHolderGraphicalNodeEditPolicy.java
index 3834d1dda75..3bd9c9465dd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/GatesHolderGraphicalNodeEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/GatesHolderGraphicalNodeEditPolicy.java
@@ -378,7 +378,7 @@ public class GatesHolderGraphicalNodeEditPolicy extends SequenceGraphicalNodeEdi
if(null == view) {
return CommandResult.newCancelledCommandResult();
}
- if (request instanceof CreateConnectionViewRequest){
+ if(request instanceof CreateConnectionViewRequest) {
((CreateConnectionViewRequest)request).getConnectionViewDescriptor().setView(view);
}
return CommandResult.newOKCommandResult(req.getNewObject());
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MoveableNonResizableLabelEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MoveableNonResizableLabelEditPolicy.java
index 26207644461..3b2877d2a8e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MoveableNonResizableLabelEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MoveableNonResizableLabelEditPolicy.java
@@ -37,7 +37,6 @@ 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.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableEditPolicyEx;
-import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableLabelEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.internal.figures.LabelHelper;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/semantic/CustomInteractionInteractionCompartmentItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/semantic/CustomInteractionInteractionCompartmentItemSemanticEditPolicy.java
index 25a1b9d5145..a628bc7e83e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/semantic/CustomInteractionInteractionCompartmentItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/semantic/CustomInteractionInteractionCompartmentItemSemanticEditPolicy.java
@@ -61,7 +61,7 @@ public class CustomInteractionInteractionCompartmentItemSemanticEditPolicy exten
if(UMLElementTypes.DurationObservation_3024 == req.getElementType()) {
return getGEFWrapper(new CustomDurationObservationCreateCommand(req));
}
- if(UMLElementTypes.DurationConstraint_3021 == req.getElementType()) {
+ if(UMLElementTypes.DurationConstraint_3021 == req.getElementType()) {
return getGEFWrapper(new CustomDurationConstraintCreateCommand(req));
}
return super.getCreateCommand(req);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/GateLocator.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/GateLocator.java
index 62b3da4660c..e79e394b3cd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/GateLocator.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/GateLocator.java
@@ -14,8 +14,6 @@
package org.eclipse.papyrus.uml.diagram.sequence.locator;
import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.PositionConstants;
-import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.papyrus.uml.diagram.common.locator.AdvancedBorderItemLocator;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomMessagePreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomMessagePreferencePage.java
index 6ae49b900be..c3d63b91cc8 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomMessagePreferencePage.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomMessagePreferencePage.java
@@ -28,6 +28,7 @@ import org.eclipse.swt.widgets.Group;
* @author Jin Liu (jin.liu@soyatec.com)
*/
public class CustomMessagePreferencePage extends MessagePreferencePage {
+
public static final String LABEL_DISPLAY_PREFERENCE = PackageEditPart.MODEL_ID + "_Message.label.display";
public static final int DEFAULT_LABEL_DISPLAY = ICustomAppearence.DISP_NAME | ICustomAppearence.DISP_PARAMETER_NAME | ICustomAppearence.DISP_PARAMETER_TYPE | ICustomAppearence.DISP_RT_TYPE;
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 ea1ec4b8fea..1840aef0099 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
@@ -152,8 +152,8 @@ public class CustomEditPartProvider extends UMLEditPartProvider {
case MessageEndEditPart.VISUAL_ID:
return new MessageEndEditPart(view);
}
-
-
+
+
return null;
}
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomViewProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomViewProvider.java
index e7f5132db22..0ecdf14c200 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomViewProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomViewProvider.java
@@ -19,7 +19,6 @@ import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateNodeViewOperation;
import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewForKindOperation;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
-import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.Location;
import org.eclipse.gmf.runtime.notation.Node;
@@ -59,26 +58,26 @@ public class CustomViewProvider extends UMLViewProvider {
return false;
}
int visualID = UMLVisualIDRegistry.getVisualID(op.getSemanticHint());
- if(visualID == DurationConstraintEditPart.VISUAL_ID){ // avoid to modify UMLVisualIDRegistry.getNodeVisualID(View, EObject)
+ if(visualID == DurationConstraintEditPart.VISUAL_ID) { // avoid to modify UMLVisualIDRegistry.getNodeVisualID(View, EObject)
if(InteractionInteractionCompartmentEditPart.VISUAL_ID == UMLVisualIDRegistry.getVisualID(op.getContainerView()))
return true;
}
return super.provides(op);
}
-
+
protected boolean provides(CreateViewForKindOperation op) {
if(op.getContainerView() == null) {
return false;
}
int visualID = UMLVisualIDRegistry.getVisualID(op.getSemanticHint());
- if(visualID == DurationConstraintEditPart.VISUAL_ID){ // avoid to modify UMLVisualIDRegistry.getNodeVisualID(View, EObject)
+ if(visualID == DurationConstraintEditPart.VISUAL_ID) { // avoid to modify UMLVisualIDRegistry.getNodeVisualID(View, EObject)
if(InteractionInteractionCompartmentEditPart.VISUAL_ID == UMLVisualIDRegistry.getVisualID(op.getContainerView()))
return true;
}
return super.provides(op);
}
-
-
+
+
@Override
public Edge createEdge(IAdaptable semanticAdapter, View containerView, String semanticHint, int index, boolean persisted, PreferencesHint preferencesHint) {
Edge edge = super.createEdge(semanticAdapter, containerView, semanticHint, index, persisted, preferencesHint);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/DurationConstraintContributionItem.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/DurationConstraintContributionItem.java
new file mode 100644
index 00000000000..286f8938424
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/DurationConstraintContributionItem.java
@@ -0,0 +1,312 @@
+package org.eclipse.papyrus.uml.diagram.sequence.providers;
+
+import java.util.List;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PrecisionPoint;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.SetConnectionAnchorsCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.BaseSlidableAnchor;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.commands.wrappers.EMFtoGMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomCommentAnnotatedElementEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CustomDurationConstraintEditPart;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.menus.IWorkbenchContribution;
+import org.eclipse.ui.services.IServiceLocator;
+import org.eclipse.uml2.uml.DurationConstraint;
+
+//org.eclipse.papyrus.extensionpoints.editors.ui.DirectEditorsContributionItem
+public class DurationConstraintContributionItem extends ContributionItem implements IWorkbenchContribution {
+
+ /**
+ * Service locator given to this contribution item using the {@link IWorkbenchContribution} interface.
+ */
+ private IServiceLocator serviceLocator;
+
+ private MenuItem subMenuItem;
+
+ /**
+ *
+ */
+ public DurationConstraintContributionItem() {
+ setId("org.eclipse.papyrus.sequence.duraitonconstraint.menuitem");
+ }
+
+ /**
+ * @param id
+ */
+ public DurationConstraintContributionItem(String id) {
+ super(id);
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ */
+ @Override
+ public void dispose() {
+ if(subMenuItem != null && !subMenuItem.isDisposed()) {
+ subMenuItem.dispose();
+ }
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ */
+ @Override
+ public void fill(Composite parent) {
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ */
+ @Override
+ public void fill(Menu menu, int index) {
+ // retrieves current selection
+ final Object selectedElement = getSelectedElement();
+
+ // first case: this class was not able to retrieve the selection service
+ // or does not understand the current selection.
+ // does not build any sub-menu and returns.
+ if(selectedElement == null) {
+ return;
+ }
+
+ // get the uml object type of this element, using the business resolver
+ final Object businessObject = EMFHelper.getEObject(selectedElement);
+ // no object found: exit
+ if(businessObject == null || !(businessObject instanceof DurationConstraint)) {
+ return;
+ }
+
+ createSubMenu(menu, index, (DurationConstraint)businessObject);
+ }
+
+ protected void createSubMenu(Menu menu, int index, DurationConstraint businessObject) {
+ subMenuItem = new MenuItem(menu, SWT.PUSH);// SWT.CASCADE);
+ subMenuItem.setText("Rotate Duration Constraint");
+
+ subMenuItem.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ doRotate();
+ }
+ });
+ }
+
+ /**
+ * Retrieves and return the current selected element
+ *
+ * @return the current selected element
+ */
+ protected Object getSelectedElement() {
+ ISelection selection = getSelection();
+ // this checks if it is the good instance AND if it is not null
+ if(selection instanceof IStructuredSelection) {
+ return ((IStructuredSelection)selection).getFirstElement();
+ }
+ return null;
+ }
+
+ /**
+ * Retrieves and return the current selection
+ *
+ * @return the current selection
+ */
+ protected ISelection getSelection() {
+ ISelectionService selectionService = getSelectionService();
+ if(selectionService != null) {
+ return selectionService.getSelection();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the selection service for the current workbench
+ *
+ * @return the selection service for the current workbench or <code>null</code> if no selection
+ * service was found.
+ */
+ protected ISelectionService getSelectionService() {
+ ISelectionService selectionService = (ISelectionService)serviceLocator.getService(ISelectionService.class);
+ return selectionService;
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ */
+ @Override
+ public void fill(ToolBar parent, int index) {
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ *
+ * @since 3.0
+ */
+ @Override
+ public void fill(CoolBar parent, int index) {
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ *
+ * @since 3.0
+ */
+ @Override
+ public void saveWidgetState() {
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method returns <code>false</code>. Subclasses may override.
+ */
+ @Override
+ public boolean isDirty() {
+ // @issue should this be false instead of calling isDynamic()?
+ return true;
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method returns <code>true</code>. Subclasses may override.
+ */
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method returns <code>false</code>. Subclasses may override.
+ */
+ @Override
+ public boolean isDynamic() {
+ return true;
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method returns <code>false</code>. Subclasses may override.
+ */
+ @Override
+ public boolean isGroupMarker() {
+ return false;
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method returns <code>false</code>. Subclasses may override.
+ */
+ @Override
+ public boolean isSeparator() {
+ return false;
+ }
+
+ /**
+ * Returns a string representation of this contribution item suitable only for debugging.
+ */
+ @Override
+ public String toString() {
+ return getClass().getName() + "(id=" + getId() + ")";//$NON-NLS-2$//$NON-NLS-1$
+ }
+
+ /**
+ * The default implementation of this <code>IContributionItem</code> method does nothing.
+ * Subclasses may override.
+ */
+ @Override
+ public void update() {
+ }
+
+ /**
+ * The <code>ContributionItem</code> implementation of this method declared on <code>IContributionItem</code> does nothing. Subclasses should
+ * override to update their
+ * state.
+ */
+ @Override
+ public void update(String id) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void initialize(IServiceLocator serviceLocator) {
+ assert (serviceLocator != null);
+ this.serviceLocator = serviceLocator;
+ }
+
+ private void doRotate() {
+ Object element = getSelectedElement();
+ if(!(element instanceof CustomDurationConstraintEditPart))
+ return;
+
+ CustomDurationConstraintEditPart durationPart = (CustomDurationConstraintEditPart)element;
+ boolean isVertical = durationPart.isArrowVertical();
+
+ CompositeCommand compositeCmd = new CompositeCommand("rotate");
+ Command rotateCmd = new CustomDurationConstraintEditPart.RotateArrowCommand(durationPart.getEditingDomain(), durationPart);
+ compositeCmd.add(new EMFtoGMFCommandWrapper(rotateCmd));
+
+ // set bounds command
+ ICommand boundsCommand = new SetBoundsCommand(durationPart.getEditingDomain(), DiagramUIMessages.SetLocationCommand_Label_Resize, new EObjectAdapter(durationPart.getNotationView()), getNewBounds(durationPart.getBounds()));
+ compositeCmd.add(boundsCommand);
+
+ // update anchor
+ List list = durationPart.getSourceConnections();
+ for(Object o : list)
+ if(o instanceof CustomCommentAnnotatedElementEditPart) {
+ CustomCommentAnnotatedElementEditPart connectionPart = (CustomCommentAnnotatedElementEditPart)o;
+ String terminal = AnchorHelper.getAnchorId(connectionPart.getEditingDomain(), connectionPart, true);
+ if(terminal.length() > 0) {
+ PrecisionPoint pt = BaseSlidableAnchor.parseTerminalString(terminal);
+ SetConnectionAnchorsCommand rotateAnchorsCommand = new SetConnectionAnchorsCommand(connectionPart.getEditingDomain(), "Rotate Duration Anchors");
+ rotateAnchorsCommand.setEdgeAdaptor(new EObjectAdapter(connectionPart.getNotationView()));
+ if(isVertical) {
+ if(pt.y < 0.3)
+ rotateAnchorsCommand.setNewSourceTerminal("(0,0.5){L}");
+ else if(pt.y > 0.7)
+ rotateAnchorsCommand.setNewSourceTerminal("(1,0.5){R}");
+ } else {
+ if(pt.x < 0.3)
+ rotateAnchorsCommand.setNewSourceTerminal("(0.5,0){T}");
+ else if(pt.x > 0.7)
+ rotateAnchorsCommand.setNewSourceTerminal("(0.5,1){D}");
+ }
+ compositeCmd.add(rotateAnchorsCommand);
+ }
+ }
+ // execute command
+ durationPart.getEditingDomain().getCommandStack().execute(new GMFtoEMFCommandWrapper(compositeCmd));
+ }
+
+ private Rectangle getNewBounds(Rectangle bounds) {
+ Point p = bounds.getCenter();
+ return new Rectangle(p.x - bounds.height / 2, p.y - bounds.width / 2, bounds.height, bounds.width);
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/service/DurationCreationTool.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/service/DurationCreationTool.java
index ee65122ae1a..a684a59367d 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/service/DurationCreationTool.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/service/DurationCreationTool.java
@@ -13,41 +13,31 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.service;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
-import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartListener;
import org.eclipse.gef.EditPartViewer;
-import org.eclipse.gef.NodeEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.SharedCursors;
import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.requests.CreateRequest;
-import org.eclipse.gef.tools.AbstractConnectionCreationTool;
-import org.eclipse.gef.tools.AbstractTool;
import org.eclipse.gef.tools.TargetingTool;
import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
-import org.eclipse.papyrus.uml.diagram.common.helper.DurationConstraintHelper;
import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeCreationTool;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionInteractionCompartmentEditPart;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
-import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
-import org.eclipse.uml2.uml.OccurrenceSpecification;
public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
@@ -127,6 +117,15 @@ public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
if(isInState(STATE_ACCESSIBLE_DRAG_IN_PROGRESS)) {
return handleMove();
}
+
+ { // ----------- add for drag creation size -----
+ if(isInState(STATE_DRAG_IN_PROGRESS)) {
+ updateTargetRequest();
+ setCurrentCommand(getCommand());
+ showTargetFeedback();
+ return true;
+ }
+ }
return false;
}
@@ -148,8 +147,9 @@ public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
*/
@Override
protected void updateTargetRequest() {
- CreateRequest req = getCreateRequest();
- req.setLocation(getLocation());
+ // CreateRequest req = getCreateRequest();
+ // req.setLocation(getLocation());
+ super.updateTargetRequest(); // ----------- add for drag creation size
}
/**
@@ -224,6 +224,12 @@ public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
updateTargetRequest();
updateTargetUnderMouse();
setConnectionSource(getTargetEditPart());
+
+ { // ----------- add for drag creation size
+ if(getTargetEditPart() instanceof InteractionInteractionCompartmentEditPart)
+ return super.handleButtonDown(button);
+ }
+
Command command = getCommand();
Request request = getTargetRequest();
//target elements of request have been set
@@ -353,6 +359,14 @@ public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
if(isInState(STATE_CONNECTION_STARTED)) {
handleCreateConnection();
}
+
+ { // ----------- add for drag creation size ------
+ if(stateTransition(STATE_DRAG | STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {
+ eraseTargetFeedback();
+ unlockTargetEditPart();
+ performCreation(button);
+ }
+ }
setState(STATE_TERMINAL);
if(isInState(STATE_TERMINAL | STATE_INVALID)) {
handleFinished();
@@ -444,55 +458,57 @@ public class DurationCreationTool extends AspectUnspecifiedTypeCreationTool {
return null;
}
Request req = getTargetRequest();
- /*if(targetPart instanceof ConnectionNodeEditPart) {
- // a message part is targeted. Instead, we must take the nearby lifeline part.
- // redirect to the message part will be performed later in case we really want to draw a duration on a message
- ConnectionNodeEditPart conn = (ConnectionNodeEditPart)targetPart;
- EditPart source = ((ConnectionNodeEditPart)targetPart).getSource();
- EditPart target = ((ConnectionNodeEditPart)targetPart).getTarget();
- if(source instanceof NodeEditPart && target instanceof NodeEditPart) {
- ConnectionAnchor sourceAnch = ((NodeEditPart)source).getSourceConnectionAnchor(conn);
- ConnectionAnchor targetAnch = ((NodeEditPart)target).getSourceConnectionAnchor(conn);
- double sourceDist = getLocation().getDistance(sourceAnch.getReferencePoint());
- double targetDist = getLocation().getDistance(targetAnch.getReferencePoint());
- if(sourceDist > targetDist) {
- targetPart = target;
- } else {
- targetPart = source;
- }
- }
- }
- LifelineEditPart lifelinePart = SequenceUtil.getParentLifelinePart(targetPart);
- if(lifelinePart instanceof LifelineEditPart) {
- Object paramOcc1 = req.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION);
- List<OccurrenceSpecification> occ1List = SequenceUtil.getAsOccSpecList(paramOcc1);
- Object paramOcc2 = req.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
- List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOcc2);
- if(!occ1List.isEmpty() && !occ2List.isEmpty() && Collections.disjoint(occ1List, occ2List)) {
- OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
- if(pair != null && pair.length > 1) {
- OccurrenceSpecification occ1 = pair[0];
- OccurrenceSpecification occ2 = pair[1];
- if(DurationConstraintHelper.endsOfSameMessage(occ1, occ2)) {
- // call request on the link
- EditPart part = SequenceUtil.getLinkedEditPart(lifelinePart, occ2);
- if(part != null) {
- return part.getCommand(req);
- }
- }
- }
- }
- }*/
- if(targetPart instanceof InteractionInteractionCompartmentEditPart || targetPart instanceof ConnectionNodeEditPart)
+ /*
+ * if(targetPart instanceof ConnectionNodeEditPart) {
+ * // a message part is targeted. Instead, we must take the nearby lifeline part.
+ * // redirect to the message part will be performed later in case we really want to draw a duration on a message
+ * ConnectionNodeEditPart conn = (ConnectionNodeEditPart)targetPart;
+ * EditPart source = ((ConnectionNodeEditPart)targetPart).getSource();
+ * EditPart target = ((ConnectionNodeEditPart)targetPart).getTarget();
+ * if(source instanceof NodeEditPart && target instanceof NodeEditPart) {
+ * ConnectionAnchor sourceAnch = ((NodeEditPart)source).getSourceConnectionAnchor(conn);
+ * ConnectionAnchor targetAnch = ((NodeEditPart)target).getSourceConnectionAnchor(conn);
+ * double sourceDist = getLocation().getDistance(sourceAnch.getReferencePoint());
+ * double targetDist = getLocation().getDistance(targetAnch.getReferencePoint());
+ * if(sourceDist > targetDist) {
+ * targetPart = target;
+ * } else {
+ * targetPart = source;
+ * }
+ * }
+ * }
+ * LifelineEditPart lifelinePart = SequenceUtil.getParentLifelinePart(targetPart);
+ * if(lifelinePart instanceof LifelineEditPart) {
+ * Object paramOcc1 = req.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION);
+ * List<OccurrenceSpecification> occ1List = SequenceUtil.getAsOccSpecList(paramOcc1);
+ * Object paramOcc2 = req.getExtendedData().get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
+ * List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOcc2);
+ * if(!occ1List.isEmpty() && !occ2List.isEmpty() && Collections.disjoint(occ1List, occ2List)) {
+ * OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
+ * if(pair != null && pair.length > 1) {
+ * OccurrenceSpecification occ1 = pair[0];
+ * OccurrenceSpecification occ2 = pair[1];
+ * if(DurationConstraintHelper.endsOfSameMessage(occ1, occ2)) {
+ * // call request on the link
+ * EditPart part = SequenceUtil.getLinkedEditPart(lifelinePart, occ2);
+ * if(part != null) {
+ * return part.getCommand(req);
+ * }
+ * }
+ * }
+ * }
+ * }
+ */
+ if(targetPart instanceof InteractionInteractionCompartmentEditPart || targetPart instanceof ConnectionNodeEditPart)
return targetPart.getCommand(req);
targetPart = getInteractionEditPart(targetPart);
- if(targetPart != null){
+ if(targetPart != null) {
return targetPart.getCommand(req);
}
}
return null;
}
-
+
private EditPart getInteractionEditPart(EditPart editPart) {
if(editPart == null) {
return null;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/GateHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/GateHelper.java
index a71a77a48ca..3bcc9dcdf26 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/GateHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/GateHelper.java
@@ -26,7 +26,6 @@ import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.notation.DecorationNode;
import org.eclipse.gmf.runtime.notation.NotationFactory;
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceLinkMappingHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceLinkMappingHelper.java
index 3b4920821bc..a31f8b67d67 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceLinkMappingHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceLinkMappingHelper.java
@@ -21,7 +21,6 @@ import org.eclipse.papyrus.uml.diagram.common.helper.ILinkMappingHelper;
import org.eclipse.papyrus.uml.diagram.common.helper.LinkMappingHelper;
import org.eclipse.papyrus.uml.diagram.common.helper.LinkMappingHelper.CommonSourceUMLSwitch;
import org.eclipse.papyrus.uml.diagram.common.helper.LinkMappingHelper.CommonTargetUMLSwitch;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomDiagramDragDropEditPolicy;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Gate;
import org.eclipse.uml2.uml.GeneralOrdering;
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 e7d53bbd581..4d84b2ea10a 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
@@ -1996,7 +1996,17 @@
</extension>
-
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="popup:org.eclipse.gmf.runtime.diagram.ui.DiagramEditorContextMenu">
+ <dynamic
+ class="org.eclipse.papyrus.uml.diagram.sequence.providers.DurationConstraintContributionItem"
+ id="org.eclipse.papyrus.sequence.duraitonconstraint.DynamicMenu">
+ </dynamic>
+ </menuContribution>
+ </extension>
+

Back to the top