Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcmraidha2012-04-23 10:58:15 +0000
committercmraidha2012-04-23 10:58:15 +0000
commit662ffe9b7bd9b0056283b9b2c5df547a468ffba9 (patch)
treedbd4e1a790a1102fc5f66dd52caf2e75f05f3eb0
parentea9a1ea141924102624d9ef3f115a6afff0ff2de (diff)
downloadorg.eclipse.papyrus-662ffe9b7bd9b0056283b9b2c5df547a468ffba9.tar.gz
org.eclipse.papyrus-662ffe9b7bd9b0056283b9b2c5df547a468ffba9.tar.xz
org.eclipse.papyrus-662ffe9b7bd9b0056283b9b2c5df547a468ffba9.zip
Bug 364826 - [Sequence Diagram] - Observations - Bug fixed.
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/ObservationLinkMetamodelType.java38
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomTimeObservationCreateCommand.java108
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomConnectionHandleEditPolicy.java44
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomExternalLabelPrimaryDragRoleEditPolicy.java67
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ObservationLinkPolicy.java734
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPolicyProvider.java19
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationMoveHelper.java85
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceDeleteHelper.java132
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceUtil.java198
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/plugin.xml16
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/commands/DurationObservationCreateCommand.java83
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java53
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ObservationLinkEditPart.java195
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java29
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationLabelEditPart.java205
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java18
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ActionExecutionSpecificationItemSemanticEditPolicy.java28
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/BehaviorExecutionSpecificationItemSemanticEditPolicy.java28
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionInteractionCompartmentItemSemanticEditPolicy.java10
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineItemSemanticEditPolicy.java14
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message2ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message3ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message4ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message5ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message6ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message7ItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MessageItemSemanticEditPolicy.java2
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLPaletteFactory.java73
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLVisualIDRegistry.java16
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLEditPartProvider.java6
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLModelingAssistantProvider.java26
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java24
33 files changed, 2120 insertions, 145 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/ObservationLinkMetamodelType.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/ObservationLinkMetamodelType.java
new file mode 100644
index 00000000000..b1b26cd645b
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/ObservationLinkMetamodelType.java
@@ -0,0 +1,38 @@
+package org.eclipse.papyrus.uml.diagram.sequence;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.gmf.runtime.emf.type.core.MetamodelType;
+import org.eclipse.gmf.runtime.emf.type.core.edithelper.AbstractEditHelper;
+import org.eclipse.gmf.runtime.emf.type.core.internal.descriptors.MetamodelTypeDescriptor;
+import org.eclipse.gmf.runtime.emf.type.core.internal.l10n.EMFTypeCoreMessages;
+
+public class ObservationLinkMetamodelType extends MetamodelType {
+
+ public static final String ID = "org.eclipse.papyrus.uml.diagram.sequence.emf.type.core.observationlink"; //$NON-NLS-1$
+
+ private static final ObservationLinkMetamodelType INSTANCE = new ObservationLinkMetamodelType();
+ private static final MetamodelTypeDescriptor DESCRIPTOR_INSTANCE = new MetamodelTypeDescriptor(
+ INSTANCE);
+
+ /**
+ * Initializes me.
+ */
+ private ObservationLinkMetamodelType() {
+ super(ID, null, EMFTypeCoreMessages.defaultEditHelper_name,
+ EcorePackage.Literals.EOBJECT, new DefaultEditHelper());
+ }
+
+ public static ObservationLinkMetamodelType getInstance() {
+ return INSTANCE;
+ }
+
+ public static MetamodelTypeDescriptor getDescriptorInstance() {
+ return DESCRIPTOR_INSTANCE;
+ }
+
+ private static class DefaultEditHelper extends AbstractEditHelper {
+ DefaultEditHelper() {
+ super();
+ }
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomTimeObservationCreateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomTimeObservationCreateCommand.java
new file mode 100644
index 00000000000..df47c81eb18
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/command/CustomTimeObservationCreateCommand.java
@@ -0,0 +1,108 @@
+/*****************************************************************************
+ * Copyright (c) 2009 CEA
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Atos Origin - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.command;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.uml.diagram.sequence.providers.ElementInitializers;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.TimeObservation;
+import org.eclipse.uml2.uml.UMLFactory;
+
+/**
+ * Command for creating time observation element
+ *
+ */
+public class CustomTimeObservationCreateCommand extends EditElementCommand {
+ private EClass eClass = null;
+
+ private EObject eObject = null;
+
+ public CustomTimeObservationCreateCommand(CreateElementRequest req, EObject eObject) {
+ super(req.getLabel(), null, req);
+ this.eObject = eObject;
+ this.eClass = eObject != null ? eObject.eClass() : null;
+ }
+
+ public static CustomTimeObservationCreateCommand create(CreateElementRequest req, EObject eObject) {
+ return new CustomTimeObservationCreateCommand(req, eObject);
+ }
+
+ public CustomTimeObservationCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ protected EObject getElementToEdit() {
+
+ EObject container = ((CreateElementRequest)getRequest()).getContainer();
+ if(container instanceof View) {
+ container = ((View)container).getElement();
+ }
+ if(container != null) {
+ return container;
+ }
+ return eObject;
+ }
+
+ public boolean canExecute() {
+
+ return true;
+
+ }
+
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+
+ TimeObservation newElement = UMLFactory.eINSTANCE.createTimeObservation();
+
+ // get the parent package as owner
+ EObject container = getElementToEdit();
+ while(container != null && !(container instanceof Package)) {
+ container = container.eContainer();
+ }
+ if(container == null) {
+ return CommandResult.newCancelledCommandResult();
+ }
+ Package owner = (Package)container;
+ owner.getPackagedElements().add(newElement);
+
+ ElementInitializers.getInstance().init_TimeObservation_3020(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest)getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ protected void doConfigure(TimeObservation newElement, IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest)getRequest()).getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType.getEditCommand(configureRequest);
+ if(configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomConnectionHandleEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomConnectionHandleEditPolicy.java
new file mode 100644
index 00000000000..ed9abf312f3
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomConnectionHandleEditPolicy.java
@@ -0,0 +1,44 @@
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConnectionHandleEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.handles.ConnectionHandle;
+import org.eclipse.gmf.runtime.diagram.ui.internal.tools.ConnectionHandleTool;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+
+public final class CustomConnectionHandleEditPolicy extends
+ ConnectionHandleEditPolicy {
+ protected List getHandleFigures() {
+ List list = new ArrayList(2);
+
+ String tooltip;
+ tooltip = buildTooltip(ConnectionHandle.HandleDirection.INCOMING);
+ if (tooltip != null) {
+ list.add(new ConnectionHandle((IGraphicalEditPart) getHost(),
+ ConnectionHandle.HandleDirection.INCOMING, tooltip));
+ }
+
+ tooltip = buildTooltip(ConnectionHandle.HandleDirection.OUTGOING);
+ if (tooltip != null) {
+ ConnectionHandle connectionHandle = new ConnectionHandle(
+ (IGraphicalEditPart) getHost(),
+ ConnectionHandle.HandleDirection.OUTGOING, tooltip);
+ connectionHandle.setDragTracker(new ConnectionHandleTool(
+ connectionHandle) {
+ protected String getCommandName() {
+ if (isInState(STATE_CONNECTION_STARTED
+ | STATE_ACCESSIBLE_DRAG_IN_PROGRESS))
+ return SequenceUtil.OBSERVATION_LINK_REQUEST_END;
+ else
+ return SequenceUtil.OBSERVATION_LINK_REQUEST_START;
+ }
+ });
+ list.add(connectionHandle);
+ }
+
+ return list;
+ }
+} \ 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/CustomExternalLabelPrimaryDragRoleEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomExternalLabelPrimaryDragRoleEditPolicy.java
new file mode 100644
index 00000000000..f79e0985b19
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/CustomExternalLabelPrimaryDragRoleEditPolicy.java
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * Copyright (c) 2010 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Yann Tanguy (CEA LIST) yann.tanguy@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.geometry.PrecisionRectangle;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.handles.MoveHandle;
+import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.LabelEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableEditPolicyEx;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * This policy provides the selection handles, feedback and move command for
+ * external node label.
+ */
+public class CustomExternalLabelPrimaryDragRoleEditPolicy extends ResizableEditPolicyEx {
+
+ @Override
+ protected List<?> createSelectionHandles() {
+ MoveHandle mh = new MoveHandle((GraphicalEditPart)getHost());
+ mh.setBorder(null);
+ return Collections.singletonList(mh);
+ }
+
+ @Override
+ protected Command getMoveCommand(ChangeBoundsRequest request) {
+ LabelEditPart editPart = (LabelEditPart)getHost();
+
+ // FeedBack - Port + Delta
+ Rectangle updatedRect = new Rectangle();
+ PrecisionRectangle initialRect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy());
+ updatedRect = initialRect.getTranslated(getHostFigure().getParent().getBounds().getLocation().getNegated());
+ updatedRect = updatedRect.getTranslated(request.getMoveDelta());
+
+ // translate the feedback figure
+ PrecisionRectangle rect = new PrecisionRectangle(getInitialFeedbackBounds().getCopy());
+ getHostFigure().translateToAbsolute(rect);
+ rect.translate(request.getMoveDelta());
+ rect.resize(request.getSizeDelta());
+ getHostFigure().translateToRelative(rect);
+
+ ICommand moveCommand = new SetBoundsCommand(editPart.getEditingDomain(), DiagramUIMessages.MoveLabelCommand_Label_Location, new EObjectAdapter((View)editPart.getModel()), updatedRect);
+ return new ICommandProxy(moveCommand);
+ }
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ObservationLinkPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ObservationLinkPolicy.java
new file mode 100644
index 00000000000..d78d19a65e0
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ObservationLinkPolicy.java
@@ -0,0 +1,734 @@
+package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.FeedbackHelper;
+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.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+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.editparts.INodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.GraphicalNodeEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewAndElementRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.internal.impl.DefaultMetamodelType;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
+import org.eclipse.gmf.runtime.notation.impl.ConnectorImpl;
+import org.eclipse.papyrus.uml.diagram.sequence.ObservationLinkMetamodelType;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.AbstractMessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ObservationLinkEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceRequestConstant;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.uml2.uml.DurationObservation;
+import org.eclipse.uml2.uml.ExecutionOccurrenceSpecification;
+import org.eclipse.uml2.uml.Message;
+import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
+import org.eclipse.uml2.uml.MessageSort;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.OccurrenceSpecification;
+import org.eclipse.uml2.uml.TimeObservation;
+
+/**
+ * This policy is to process observation link creating, reconnecting
+ *
+ */
+public class ObservationLinkPolicy extends GraphicalNodeEditPolicy {
+ private final EditPart editPart;
+
+ public ObservationLinkPolicy(EditPart editPart) {
+ this.editPart = editPart;
+ }
+
+ public Command getCommand(Request request) {
+ if(request instanceof CreateUnspecifiedTypeConnectionRequest){
+ if(((CreateUnspecifiedTypeConnectionRequest) request).getElementTypes().contains(ObservationLinkMetamodelType.getInstance())){
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_START.equals(request.getType()))
+ return getConnectionCreateCommand((CreateConnectionRequest) request);
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType()))
+ return getConnectionCompleteCommand((CreateConnectionRequest) request);
+ }
+ return null;
+ }
+ if(request instanceof CreateConnectionRequest){
+ CreateConnectionRequest cc = (CreateConnectionRequest) request;
+ if(cc.getNewObject()!=null){
+ if(cc.getNewObject() instanceof ObservationLink){
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_START.equals(request.getType()))
+ return getConnectionCreateCommand((CreateConnectionRequest) request);
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType()))
+ return getConnectionCompleteCommand((CreateConnectionRequest) request);
+ }
+ }
+ return null;
+ }
+ if(request instanceof ReconnectRequest){
+ ReconnectRequest rr = (ReconnectRequest) request;
+ if(rr.getConnectionEditPart() instanceof ObservationLinkEditPart){
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE.equals(request.getType()))
+ return getReconnectSourceCommand((ReconnectRequest) request);
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET.equals(request.getType()))
+ return getReconnectTargetCommand((ReconnectRequest) request);
+ }
+
+ }
+
+ return null;
+ }
+
+ public EditPart getTargetEditPart(Request request) {
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_START.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET.equals(request.getType())){
+ if (request instanceof CreateConnectionRequest) {
+ if (((CreateConnectionRequest) request).getSourceEditPart() instanceof TimeObservationLabelEditPart) {
+ if (getHost() instanceof AbstractMessageEditPart) {
+ return null;
+ }
+ }
+ }
+ if(SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET.equals(request.getType())){
+ if (request instanceof ReconnectRequest) {
+ if (((ReconnectRequest) request).getConnectionEditPart().getSource() instanceof TimeObservationLabelEditPart) {
+ if (getHost() instanceof AbstractMessageEditPart) {
+ return null;
+ }
+ }
+ }
+ }
+ return getHost();
+ }
+ return null;
+ }
+
+ @Override
+ protected Command getConnectionCreateCommand(
+ CreateConnectionRequest request) {
+ EditPart host = getHost();
+ if(host instanceof TimeObservationLabelEditPart){
+ TimeObservationLabelEditPart timeObservationLabelEditPart = (TimeObservationLabelEditPart)host;
+ if(timeObservationLabelEditPart.getSourceConnections().size()>0){
+ return null;
+ }
+ }else if(host instanceof DurationObservationEditPart){
+ DurationObservationEditPart durationObservationEditPart = (DurationObservationEditPart)host;
+ if(durationObservationEditPart.getSourceConnections().size()>0){
+ return null;
+ }
+ }else{
+ return null;
+ }
+
+ CompositeCommand cc = new CompositeCommand(
+ DiagramUIMessages.Commands_CreateCommand_Connection_Label);
+
+ CreateObservationLinkCommand cmd = new CreateObservationLinkCommand(((GraphicalEditPart) editPart).getEditingDomain(), "Create connection command", null);
+
+ cmd.setSourceEditPart(host);
+ cmd.setRequest(request);
+
+ cc.compose(cmd);
+ Command c = new ICommandProxy(cc);
+ request.setStartCommand(c);
+ return c;
+ }
+
+ @Override
+ protected Command getConnectionCompleteCommand(
+ final CreateConnectionRequest request) {
+ EditPart sourceEditPart = request.getSourceEditPart();
+
+ if((sourceEditPart instanceof TimeObservationLabelEditPart)&&!(getHost() instanceof LifelineEditPart)){
+ return null;
+ }else if(sourceEditPart instanceof DurationObservationEditPart&&!(getHost() instanceof AbstractMessageEditPart)){
+ return null;
+ }
+
+ ICommandProxy proxy = (ICommandProxy) request
+ .getStartCommand();
+ if (proxy == null) {
+ return null;
+ }
+
+ CompositeCommand result = new CompositeCommand("Add observation link command");
+
+ if(sourceEditPart instanceof TimeObservationLabelEditPart){
+ result.add(new UpdateTimeObservationLinkTargetElementCommand(((IGraphicalEditPart) getHost()).getEditingDomain(), "Update semantic model", null, request,getHost()));
+ }else if(sourceEditPart instanceof DurationObservationEditPart){
+ result.add(new UpdateDurationObservationLinkTargetElementCommand(((IGraphicalEditPart) getHost()).getEditingDomain(), "Update semantic model", null, request,getHost()));
+ }
+
+ //1:
+ CompositeCommand cc = (CompositeCommand) proxy.getICommand();
+ Iterator commandItr = cc.iterator();
+ CreateObservationLinkCommand createConnectorViewCommand = (CreateObservationLinkCommand) commandItr.next();
+ createConnectorViewCommand.setSourceEditPart(request.getSourceEditPart());
+ createConnectorViewCommand.setTargetEditPart(request.getTargetEditPart());
+
+ result.add(cc);
+ return new ICommandProxy(result);
+ }
+
+ @Override
+ protected Command getReconnectSourceCommand(final ReconnectRequest request) {
+ Command reconnectSourceCommand = super
+ .getReconnectSourceCommand(request);
+ ICommandProxy proxy = (ICommandProxy) reconnectSourceCommand;
+ CompositeCommand cc = (CompositeCommand) proxy.getICommand();
+
+ // update semantic model
+ if(request.getConnectionEditPart().getSource() instanceof TimeObservationLabelEditPart && getHost() instanceof TimeObservationLabelEditPart){
+ TimeObservationLabelEditPart timeObservationLabelEditPart = (TimeObservationLabelEditPart)getHost();
+ if(timeObservationLabelEditPart.getSourceConnections().size()>0){
+ return null;
+ }
+ cc.add(new UpdateTimeObservationLinkSourceElementCommand(
+ ((IGraphicalEditPart) getHost()).getEditingDomain(),
+ "Update semantic model", null, request, getHost()));
+ }else if(request.getConnectionEditPart().getSource() instanceof DurationObservationEditPart && getHost() instanceof DurationObservationEditPart){
+ DurationObservationEditPart durationObservationEditPart = (DurationObservationEditPart)getHost();
+ if(durationObservationEditPart.getSourceConnections().size()>0){
+ return null;
+ }
+ cc.add(new UpdateDurationObservationLinkSourceElementCommand(
+ ((IGraphicalEditPart) getHost()).getEditingDomain(),
+ "Update semantic model", null, request, getHost()));
+ }
+
+ return reconnectSourceCommand;
+ }
+
+ @Override
+ protected Command getReconnectTargetCommand(final ReconnectRequest request) {
+ Command reconnectTargetCommand = super
+ .getReconnectTargetCommand(request);
+ ICommandProxy proxy = (ICommandProxy) reconnectTargetCommand;
+ CompositeCommand cc = (CompositeCommand) proxy.getICommand();
+
+ // update semantic model
+ if(request.getConnectionEditPart().getSource() instanceof TimeObservationLabelEditPart){
+ cc.add(new UpdateTimeObservationLinkTargetElementCommand(((IGraphicalEditPart) getHost()).getEditingDomain(), "Update semantic model", null, request,getHost()));
+ }else if(request.getConnectionEditPart().getSource() instanceof DurationObservationEditPart){
+ cc.add(new UpdateDurationObservationLinkTargetElementCommand(((IGraphicalEditPart) getHost()).getEditingDomain(), "Update semantic model", null, request,getHost()));
+ }
+
+ return proxy;
+ }
+
+ @Override
+ public void showSourceFeedback(Request request) {
+ if ((SequenceUtil.OBSERVATION_LINK_REQUEST_END).equals(request.getType()))
+ showCreationFeedback((CreateConnectionRequest) request);
+ }
+
+ protected FeedbackHelper getFeedbackHelper(CreateConnectionRequest request) {
+ if (feedbackHelper == null) {
+ feedbackHelper = new FeedbackHelper();
+ Point p = request.getLocation();
+ connectionFeedback = createDummyConnection(request);
+ connectionFeedback
+ .setConnectionRouter(getDummyConnectionRouter(request));
+ connectionFeedback
+ .setSourceAnchor(getSourceConnectionAnchor(request));
+ connectionFeedback.setForegroundColor(ColorConstants.black);
+ feedbackHelper.setConnection(connectionFeedback);
+ addFeedback(connectionFeedback);
+ feedbackHelper.update(null, p);
+ }
+ return feedbackHelper;
+ }
+
+ @Override
+ public void showTargetFeedback(Request request) {
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_START.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET.equals(request.getType()))
+ showTargetConnectionFeedback((DropRequest) request);
+ }
+
+ @Override
+ public void eraseSourceFeedback(Request request) {
+ if ( SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType()))
+ eraseCreationFeedback((CreateConnectionRequest) request);
+ }
+
+ @Override
+ public void eraseTargetFeedback(Request request) {
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_START.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_END.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE.equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET.equals(request.getType()))
+ eraseTargetConnectionFeedback((DropRequest) request);
+ }
+
+ private class UpdateDurationObservationLinkSourceElementCommand extends
+ AbstractTransactionalCommand {
+ private final ReconnectRequest request;
+ private EditPart hostPart;
+ private DurationObservationEditPart sourceTolEP;
+
+ List<OccurrenceSpecification> occList = Collections.emptyList();
+
+ public UpdateDurationObservationLinkSourceElementCommand(
+ TransactionalEditingDomain domain, String label,
+ List affectedFiles, ReconnectRequest request, EditPart hostPart) {
+ super(domain, label, affectedFiles);
+ this.request = request;
+ sourceTolEP = (DurationObservationEditPart) request
+ .getConnectionEditPart().getSource();
+ this.hostPart = hostPart;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (sourceTolEP == hostPart) {
+ return CommandResult.newCancelledCommandResult();
+ }
+
+ View sourceView = (View) sourceTolEP.getModel();
+ DurationObservation sourceDurationObservation = (DurationObservation) sourceView
+ .getElement();
+
+ DurationObservationEditPart targetDoEP = (DurationObservationEditPart) hostPart;
+ View targetView = (View) targetDoEP.getModel();
+ DurationObservation targetDurationObservation = (DurationObservation) targetView
+ .getElement();
+ targetDurationObservation.getEvents().addAll(
+ sourceDurationObservation.getEvents());
+
+ sourceDurationObservation.getEvents().clear();
+ return CommandResult.newOKCommandResult();
+ }
+
+ @Override
+ public boolean canExecute() {
+ if (hostPart instanceof DurationObservationEditPart) {
+ return true;
+ }
+ return false;
+ }
+
+ }
+
+ public class UpdateDurationObservationLinkTargetElementCommand extends
+ AbstractTransactionalCommand {
+ private final Request request;
+ private EditPart hostPart;
+
+ public UpdateDurationObservationLinkTargetElementCommand(
+ TransactionalEditingDomain domain, String label,
+ List affectedFiles, Request request, EditPart hostPart) {
+ super(domain, label, affectedFiles);
+ this.request = request;
+ this.hostPart = hostPart;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ DurationObservationEditPart doEP = null;
+ if (request instanceof CreateConnectionRequest) {
+ doEP = (DurationObservationEditPart) (((CreateConnectionRequest) request).getSourceEditPart());
+ } else if (request instanceof ReconnectRequest) {
+ doEP = (DurationObservationEditPart) (((ReconnectRequest) request).getConnectionEditPart().getSource());
+ }
+ View view = (View) doEP.getModel();
+ DurationObservation durationObservation = (DurationObservation) view.getElement();
+ EList<NamedElement> events = durationObservation.getEvents();
+ // if is reconnect operation, first remove orginal message event of DurationObservation
+ if (request instanceof ReconnectRequest) {
+ events.clear();
+ }
+ Map<String, Object> extendedData = request.getExtendedData();
+ // assign the occurrence specification
+ Object paramOcc1 = extendedData
+ .get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION);
+ Object paramOcc2 = extendedData
+ .get(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
+ if (paramOcc1 != null && paramOcc2 != null) {
+ events.add((OccurrenceSpecification) paramOcc1);
+ events.add((OccurrenceSpecification) paramOcc2);
+ }
+ return CommandResult.newOKCommandResult();
+ }
+
+ @Override
+ public boolean canExecute() {
+ if (hostPart instanceof ConnectionNodeEditPart) {
+ Map<String, Object> extendedData = request.getExtendedData();
+
+ if (hostPart instanceof AbstractMessageEditPart) {
+ AbstractMessageEditPart messageEP = (AbstractMessageEditPart) hostPart;
+ View view = (View) messageEP.getModel();
+ Message message = (Message) view.getElement();
+
+ if (message.getSendEvent() != null)
+ extendedData
+ .put(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION,
+ message.getSendEvent());
+ if (message.getReceiveEvent() != null)
+ extendedData
+ .put(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2,
+ message.getReceiveEvent());
+ }
+
+ if (extendedData
+ .containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION)
+ && extendedData
+ .containsKey(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ }
+
+ private class UpdateTimeObservationLinkSourceElementCommand extends
+ AbstractTransactionalCommand {
+ private final ReconnectRequest request;
+ private EditPart hostPart;
+ private TimeObservationLabelEditPart sourceTolEP;
+
+ List<OccurrenceSpecification> occList = Collections.emptyList();
+
+ public UpdateTimeObservationLinkSourceElementCommand(
+ TransactionalEditingDomain domain, String label,
+ List affectedFiles, ReconnectRequest request, EditPart hostPart) {
+ super(domain, label, affectedFiles);
+ this.request = request;
+ sourceTolEP = (TimeObservationLabelEditPart) request
+ .getConnectionEditPart().getSource();
+ this.hostPart = hostPart;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (sourceTolEP == hostPart) {
+ return CommandResult.newCancelledCommandResult();
+ }
+
+ View sourceView = (View) sourceTolEP.getModel();
+ TimeObservation sourceTimeObservation = (TimeObservation) sourceView
+ .getElement();
+
+ TimeObservationLabelEditPart targetTolEP = (TimeObservationLabelEditPart) hostPart;
+ View targetView = (View) targetTolEP.getModel();
+ TimeObservation targetTimeObservation = (TimeObservation) targetView
+ .getElement();
+ targetTimeObservation.setEvent(sourceTimeObservation.getEvent());
+
+ sourceTimeObservation.setEvent(null);
+ return CommandResult.newOKCommandResult();
+ }
+
+ @Override
+ public boolean canExecute() {
+ if (hostPart instanceof TimeObservationLabelEditPart) {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ private class UpdateTimeObservationLinkTargetElementCommand extends
+ AbstractTransactionalCommand {
+ private final Request request;
+ private EditPart hostPart;
+
+ List<OccurrenceSpecification> occList = Collections.emptyList();
+
+ public UpdateTimeObservationLinkTargetElementCommand(
+ TransactionalEditingDomain domain, String label,
+ List affectedFiles, Request request, EditPart hostPart) {
+ super(domain, label, affectedFiles);
+ this.request = request;
+ this.hostPart = hostPart;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ TimeObservationLabelEditPart tolEP = null;
+ if (request instanceof CreateConnectionRequest) {
+ tolEP = (TimeObservationLabelEditPart) (((CreateConnectionRequest) request)
+ .getSourceEditPart());
+ } else if (request instanceof ReconnectRequest) {
+ tolEP = (TimeObservationLabelEditPart) (((ReconnectRequest) request)
+ .getConnectionEditPart().getSource());
+ }
+ View view = (View) tolEP.getModel();
+ TimeObservation timeObservation = (TimeObservation) view
+ .getElement();
+
+ // assign the occurrence specification
+ if (!occList.isEmpty()) {
+ for (OccurrenceSpecification occurrence : occList) {
+ if (occurrence instanceof MessageOccurrenceSpecification) {
+ Message mess = ((MessageOccurrenceSpecification) occurrence)
+ .getMessage();
+ if (mess.getReceiveEvent().equals(occurrence)
+ && MessageSort.SYNCH_CALL_LITERAL.equals(mess
+ .getMessageSort())) {
+ // filter receive event, we prefer the corresponding
+ // start event at the same location
+ continue;
+ }
+ }
+ // otherwise, first occ is just fine
+ timeObservation.setEvent(occurrence);
+ break;
+ }
+ }
+
+ // reset request vertical location
+ if (timeObservation.getEvent() instanceof MessageOccurrenceSpecification) {
+ Point messageOccurrenceLoc = SequenceUtil
+ .findLocationOfMessageOccurrence(
+ (GraphicalEditPart) hostPart,
+ (MessageOccurrenceSpecification) timeObservation
+ .getEvent());
+ if (request instanceof CreateConnectionRequest) {
+ CreateConnectionRequest req = (CreateConnectionRequest) request;
+ req.setLocation(new Point(req.getLocation().x,
+ messageOccurrenceLoc.y));
+ } else if (request instanceof ReconnectRequest) {
+ ReconnectRequest req = (ReconnectRequest) request;
+ req.setLocation(new Point(req.getLocation().x,
+ messageOccurrenceLoc.y));
+ }
+ } else if (timeObservation.getEvent() instanceof ExecutionOccurrenceSpecification) {
+ Point executionOccurrenceLoc = SequenceUtil
+ .findLocationOfExecutionOccurrence(
+ (GraphicalEditPart) hostPart,
+ (ExecutionOccurrenceSpecification) timeObservation
+ .getEvent());
+ if (request instanceof CreateConnectionRequest) {
+ CreateConnectionRequest req = (CreateConnectionRequest) request;
+ req.setLocation(new Point(req.getLocation().x,
+ executionOccurrenceLoc.y));
+ } else if (request instanceof ReconnectRequest) {
+ ReconnectRequest req = (ReconnectRequest) request;
+ req.setLocation(new Point(req.getLocation().x,
+ executionOccurrenceLoc.y));
+ }
+ }
+
+ return CommandResult.newOKCommandResult();
+ }
+
+ @Override
+ public boolean canExecute() {
+ if (hostPart instanceof LifelineEditPart) {
+ Point location = null;
+ if (request instanceof CreateConnectionRequest) {
+ location = ((CreateConnectionRequest) request)
+ .getLocation();
+ } else if (request instanceof ReconnectRequest) {
+ location = ((ReconnectRequest) request).getLocation();
+ }
+
+ Entry<Point, List<OccurrenceSpecification>> eventAndLocation = SequenceUtil
+ .findNearestEvent(location, (LifelineEditPart) hostPart);
+ // find an event near enough to create the
+ // constraint or observation
+ occList = Collections.emptyList();
+ if (eventAndLocation != null) {
+ occList = eventAndLocation.getValue();
+ }
+ if (!occList.isEmpty()) {
+ for (OccurrenceSpecification occurrence : occList) {
+ if (occurrence instanceof MessageOccurrenceSpecification) {
+ Message mess = ((MessageOccurrenceSpecification) occurrence)
+ .getMessage();
+ if (mess.getReceiveEvent().equals(occurrence)
+ && MessageSort.SYNCH_CALL_LITERAL
+ .equals(mess.getMessageSort())) {
+ // filter receive event, we prefer the
+ // corresponding
+ // start event at the same location
+ continue;
+ }
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ }
+
+ private class CreateObservationLinkCommand extends AbstractTransactionalCommand {
+
+ private EditPart sourceEditPart;
+ private EditPart targetEditPart;
+
+ private CreateConnectionRequest request;
+ private ObservationLink c;
+ private String newSourceTerminal;
+
+ public CreateObservationLinkCommand(TransactionalEditingDomain domain,
+ String label, List affectedFiles) {
+ super(domain, label, affectedFiles);
+ }
+
+ public void setSourceEditPart(EditPart sourceEditPart) {
+ this.sourceEditPart = sourceEditPart;
+ }
+
+ public void setTargetEditPart(EditPart targetEditPart) {
+ this.targetEditPart = targetEditPart;
+ }
+
+ public void setRequest(CreateConnectionRequest request) {
+ this.request = request;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ c = new ObservationLink();
+ c.setType(SequenceUtil.OBSERVATION_LINK_TYPE);
+ c.setElement(null);
+
+ View newSourceView = (View) sourceEditPart.getModel();
+ c.setSource(newSourceView);
+
+ ViewUtil.insertChildView(newSourceView.getDiagram(), c, -1, true);
+
+ INodeEditPart ce = (INodeEditPart) sourceEditPart;
+ ConnectionAnchor sourceAnchor = ce.getSourceConnectionAnchor(request);
+ newSourceTerminal = ce.mapConnectionAnchorToTerminal(sourceAnchor);
+ if (newSourceTerminal != null) {
+ if (newSourceTerminal.length() == 0)
+ c.setSourceAnchor(null);
+ else {
+ IdentityAnchor a = (IdentityAnchor) c.getSourceAnchor();
+ if (a == null)
+ a = NotationFactory.eINSTANCE.createIdentityAnchor();
+ a.setId(newSourceTerminal);
+ c.setSourceAnchor(a);
+ }
+ }
+
+ initCompleteCommand();
+
+ return CommandResult.newOKCommandResult();
+ }
+
+ private void initCompleteCommand() {
+ // reset the target edit-part for the request
+ if (targetEditPart != null) {
+ View newTargetView = ((IGraphicalEditPart) targetEditPart)
+ .getNotationView();
+ c.setTarget(newTargetView);
+ // 3:
+ INodeEditPart ce = (INodeEditPart) targetEditPart;
+
+ ConnectionAnchor targetAnchor = null;
+ if(ce instanceof LifelineEditPart){
+ LifelineEditPart lifelinePart = (LifelineEditPart)ce;
+ targetAnchor = lifelinePart.getNodeFigure().getTargetConnectionAnchorAt(request.getLocation());
+ }else{
+ targetAnchor = ce
+ .getTargetConnectionAnchor(request);
+ }
+
+ String newTargetTerminal = ce
+ .mapConnectionAnchorToTerminal(targetAnchor);
+ if (newTargetTerminal != null) {
+ if (newTargetTerminal.length() == 0)
+ c.setTargetAnchor(null);
+ else {
+ IdentityAnchor a = (IdentityAnchor) c.getTargetAnchor();
+ if (a == null)
+ a = NotationFactory.eINSTANCE.createIdentityAnchor();
+ a.setId(newTargetTerminal);
+ c.setTargetAnchor(a);
+ }
+ }
+ // 4:
+ INodeEditPart sourceEditPart = (INodeEditPart) request
+ .getSourceEditPart();
+ ConnectionAnchor sourceAnchor = sourceEditPart
+ .mapTerminalToConnectionAnchor(newSourceTerminal);
+ PointList pointList = new PointList();
+ if (request.getLocation() == null) {
+ pointList.addPoint(sourceAnchor.getLocation(targetAnchor
+ .getReferencePoint()));
+ pointList.addPoint(targetAnchor.getLocation(sourceAnchor
+ .getReferencePoint()));
+ } else {
+ pointList.addPoint(sourceAnchor.getLocation(request
+ .getLocation()));
+ pointList.addPoint(targetAnchor.getLocation(request
+ .getLocation()));
+ }
+ List newBendpoints = new ArrayList();
+ int numOfPoints = pointList.size();
+ for (short i = 0; i < numOfPoints; i++) {
+ Dimension s = pointList.getPoint(i).getDifference(
+ sourceAnchor.getReferencePoint());
+ Dimension t = pointList.getPoint(i).getDifference(
+ targetAnchor.getReferencePoint());
+ newBendpoints.add(new RelativeBendpoint(s.width, s.height,
+ t.width, t.height));
+ }
+
+ RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+ .createRelativeBendpoints();
+ bendpoints.setPoints(newBendpoints);
+ c.setBendpoints(bendpoints);
+
+ }
+
+ }
+
+ }
+
+ public static class ObservationLink extends ConnectorImpl {
+ public ObservationLink() {
+ super();
+ }
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPolicyProvider.java
index 19c94302428..a75cd0be3e0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPolicyProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/providers/CustomEditPolicyProvider.java
@@ -24,13 +24,15 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvide
import org.eclipse.papyrus.uml.diagram.common.editpolicies.HyperLinkPopupBarEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.NavigationEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
/**
* this is an editpolicy provider in charge to install a policy to navigate between diagrams and elements
*
*/
public class CustomEditPolicyProvider implements IEditPolicyProvider {
-
/**
*
* {@inheritDoc}
@@ -43,9 +45,20 @@ public class CustomEditPolicyProvider implements IEditPolicyProvider {
*
* {@inheritDoc}
*/
- public void createEditPolicies(EditPart editPart) {
+ public void createEditPolicies(final EditPart editPart) {
editPart.installEditPolicy(NavigationEditPolicy.NAVIGATION_POLICY, new NavigationEditPolicy());
- if(editPart instanceof IPrimaryEditPart) {
+
+ installPopupbarPolicy(editPart);
+
+ SequenceUtil.installObservationLinkPolicy(editPart);
+ }
+
+ private void installPopupbarPolicy(final EditPart editPart) {
+ if(editPart instanceof IPrimaryEditPart && !(editPart instanceof TimeObservationEditPart)) {
+ editPart.installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, new HyperLinkPopupBarEditPolicy());
+ }
+
+ if(editPart instanceof TimeObservationLabelEditPart ) {
editPart.installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, new HyperLinkPopupBarEditPolicy());
}
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationMoveHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationMoveHelper.java
index f8e2e276ce2..3f2f0dde460 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationMoveHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/OccurrenceSpecificationMoveHelper.java
@@ -19,6 +19,10 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.geometry.Point;
@@ -33,21 +37,29 @@ import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.ReconnectRequest;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.INodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.figures.BorderedNodeFigure;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.runtime.notation.impl.ConnectorImpl;
import org.eclipse.papyrus.uml.diagram.common.helper.InteractionFragmentHelper;
import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ObservationLinkEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
import org.eclipse.uml2.common.util.CacheAdapter;
import org.eclipse.uml2.uml.DestructionOccurrenceSpecification;
import org.eclipse.uml2.uml.DurationConstraint;
@@ -300,6 +312,17 @@ public class OccurrenceSpecificationMoveHelper {
}
}
}
+
+ // relocate each observation linked time element
+ for(Object targetConnection : lifelinePart.getTargetConnections()){
+ if(targetConnection instanceof ObservationLinkEditPart){
+ Command cmd = getMoveSingleTimeRelatedElementCommand((ObservationLinkEditPart)targetConnection, movedOccurrenceSpecification1, movedOccurrenceSpecification2, yLocation1, yLocation2, lifelinePart);
+ if(cmd != null) {
+ globalCmd.add(cmd);
+ }
+ }
+ }
+
// refresh layout commands :
// one before the commands for the undo and one after for classic execution
if(!globalCmd.isEmpty() && lifelineFigure instanceof BorderedNodeFigure) {
@@ -320,6 +343,68 @@ public class OccurrenceSpecificationMoveHelper {
return globalCmd;
}
+ private static Command getMoveSingleTimeRelatedElementCommand(
+ final ObservationLinkEditPart targetConnection,
+ final OccurrenceSpecification movedOccurrenceSpecification1,
+ final OccurrenceSpecification movedOccurrenceSpecification2,
+ final int yLocation1, final int yLocation2,final LifelineEditPart lifelinePart) {
+
+ AbstractTransactionalCommand updateTargetAnchorCommand = new AbstractTransactionalCommand(((IGraphicalEditPart) targetConnection).getEditingDomain(),"update target anchor",null) {
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+
+ // both bounds may have changed
+ Point referencePoint1 = getReferencePoint(lifelinePart, movedOccurrenceSpecification1, yLocation1);
+ Point referencePoint2 = getReferencePoint(lifelinePart, movedOccurrenceSpecification2, yLocation2);
+
+ int position1 = PositionConstants.NONE;
+ int position2 = PositionConstants.NONE;
+ TimeObservationLabelEditPart tolEP = (TimeObservationLabelEditPart)targetConnection.getSource();
+ if(tolEP == null){
+ return CommandResult.newCancelledCommandResult();
+ }
+
+ if(movedOccurrenceSpecification1 != null) {
+ position1 = SequenceUtil.positionWhereEventIsLinkedToPart(movedOccurrenceSpecification1, tolEP);
+ }
+ if(movedOccurrenceSpecification2 != null) {
+ position2 = SequenceUtil.positionWhereEventIsLinkedToPart(movedOccurrenceSpecification2, tolEP);
+ }
+ ConnectionAnchor targetAnchor = null;
+ if(position1 == PositionConstants.CENTER){
+ targetAnchor = lifelinePart.getNodeFigure().getSourceConnectionAnchorAt(referencePoint1);
+ }else if(position2 == PositionConstants.CENTER){
+ targetAnchor = lifelinePart.getNodeFigure().getSourceConnectionAnchorAt(referencePoint2);
+ }
+
+ if(targetAnchor!= null){
+ String newTargetTerminal = lifelinePart.mapConnectionAnchorToTerminal(targetAnchor);
+ ConnectorImpl c = (ConnectorImpl)targetConnection.getModel();
+ if (newTargetTerminal != null) {
+ if (newTargetTerminal.length() == 0)
+ c.setTargetAnchor(null);
+ else {
+ IdentityAnchor a = (IdentityAnchor) c.getTargetAnchor();
+ if (a == null)
+ a = NotationFactory.eINSTANCE.createIdentityAnchor();
+ a.setId(newTargetTerminal);
+ c.setTargetAnchor(a);
+ }
+ }
+
+ }
+
+ return CommandResult.newOKCommandResult();
+ }
+ };
+
+
+ // return the resize command
+ ICommandProxy resize = new ICommandProxy(updateTargetAnchorCommand);
+ return resize;
+ }
+
/**
* Get a command to move the time related element's edit part
*
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceDeleteHelper.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceDeleteHelper.java
index bf79d3a655a..c8d9257b1f8 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceDeleteHelper.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceDeleteHelper.java
@@ -13,15 +13,21 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.util;
+import java.util.ArrayList;
import java.util.List;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
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.DeleteCommand;
@@ -29,6 +35,7 @@ import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
@@ -37,14 +44,16 @@ import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
import org.eclipse.papyrus.infra.services.edit.service.IElementEditService;
import org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ObservationLinkEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
import org.eclipse.uml2.uml.DestructionOccurrenceSpecification;
import org.eclipse.uml2.uml.Element;
-import org.eclipse.uml2.uml.Event;
import org.eclipse.uml2.uml.ExecutionSpecification;
+import org.eclipse.uml2.uml.Lifeline;
import org.eclipse.uml2.uml.Message;
import org.eclipse.uml2.uml.MessageEnd;
-import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
import org.eclipse.uml2.uml.OccurrenceSpecification;
+import org.eclipse.uml2.uml.TimeObservation;
/**
* An Helper to get deleting command for the sequence diagram elements.
@@ -113,6 +122,14 @@ public class SequenceDeleteHelper {
LifelineEditPart tgtLifelinePart = SequenceUtil.getParentLifelinePart(((ConnectionNodeEditPart)messagePart).getTarget());
MessageEnd receive = message.getReceiveEvent();
addDeleteRelatedTimePartsToCommand(deleteViewsCmd, editingDomain, tgtLifelinePart, receive);
+
+ // also delete time observation links which are related to message end
+ if (send instanceof OccurrenceSpecification) {
+ addDeleteRelatedTimeObservationLinkCommand(deleteViewsCmd, editingDomain,(OccurrenceSpecification) send, srcLifelinePart,false);
+ }
+ if (receive instanceof OccurrenceSpecification) {
+ addDeleteRelatedTimeObservationLinkCommand(deleteViewsCmd, editingDomain,(OccurrenceSpecification) receive, tgtLifelinePart,false);
+ }
}
}
return deleteViewsCmd;
@@ -168,6 +185,29 @@ public class SequenceDeleteHelper {
}
}
}
+
+ // delete each observation linked time element
+ for(Object targetConnection : lifelinePart.getTargetConnections()){
+ if(targetConnection instanceof ObservationLinkEditPart){
+ ObservationLinkEditPart observationLinkEditPart = (ObservationLinkEditPart)targetConnection;
+ TimeObservationLabelEditPart source = (TimeObservationLabelEditPart)observationLinkEditPart.getSource();
+ OccurrenceSpecification start = execution.getStart();
+ OccurrenceSpecification finish = execution.getFinish();
+ int positionForStart = SequenceUtil.positionWhereEventIsLinkedToPart(start, source);
+ int positionForFinish = SequenceUtil.positionWhereEventIsLinkedToPart(finish, source);
+ if(positionForStart != PositionConstants.NONE) {
+ // time part is linked, delete the view
+ //Command deleteTimeViewCommand = new ICommandProxy(new DeleteCommand(editingDomain, (View)source.getModel()));
+ //deleteViewsCmd.add(deleteTimeViewCommand);
+ addDeleteRelatedTimeObservationLinkCommand(deleteViewsCmd,
+ editingDomain, start, lifelinePart,false);
+ }
+ if(positionForFinish != PositionConstants.NONE) {
+ addDeleteRelatedTimeObservationLinkCommand(deleteViewsCmd,
+ editingDomain, finish, lifelinePart,false);
+ }
+ }
+ }
}
}
}
@@ -211,7 +251,13 @@ public class SequenceDeleteHelper {
}
}
- public static Command completeDeleteMessageCommand(DestroyElementRequest req) {
+ /**
+ * Add complete delete message command
+ * @param req
+ * @param editPart
+ * @return Command
+ */
+ public static Command completeDeleteMessageCommand(DestroyElementRequest req,EditPart editPart) {
EObject selectedEObject = req.getElementToDestroy();
IElementEditService provider = ElementEditServiceUtils
.getCommandProvider(selectedEObject);
@@ -235,9 +281,89 @@ public class SequenceDeleteHelper {
req.getEditingDomain(), sendEvent, false);
command.add(new DestroyElementCommand(myReq));
}
+
+ addDeleteMessageRelatedTimeObservationLinkCommand(req.getEditingDomain(), editPart, command,
+ receiveEvent,true);
+ addDeleteMessageRelatedTimeObservationLinkCommand(req.getEditingDomain(), editPart, command,
+ sendEvent,true);
+
return new ICommandProxy(command);
}
}
+
return UnexecutableCommand.INSTANCE;
}
+
+ /**
+ * Add delete message related time observation link command
+ * @param editingDomain
+ * @param editPart
+ * @param command
+ * @param messageEnd
+ * @param deleteRelatedEvent
+ */
+ public static void addDeleteMessageRelatedTimeObservationLinkCommand(
+ TransactionalEditingDomain editingDomain, EditPart editPart,
+ CompositeCommand command, MessageEnd messageEnd,boolean deleteRelatedEvent) {
+ OccurrenceSpecification occurrenceSpecification = (OccurrenceSpecification) messageEnd;
+ EList<Lifeline> receiveCovereds = occurrenceSpecification.getCovereds();
+ CompoundCommand CompoundCommand = new CompoundCommand();
+ CompoundCommand.add(new ICommandProxy(command));
+ LifelineEditPart srcLifelinePart = (LifelineEditPart) SequenceUtil.getEditPart(editPart,receiveCovereds.get(0), LifelineEditPart.class);
+ addDeleteRelatedTimeObservationLinkCommand(CompoundCommand, editingDomain, occurrenceSpecification, srcLifelinePart,deleteRelatedEvent);
+
+ }
+
+ /**
+ * Add command for deleting time observation link which related to occurence specification
+ * @param deleteViewsCmd
+ * @param editingDomain
+ * @param os
+ * @param srcLifelinePart
+ * @param deleteRelatedEvent
+ */
+ private static void addDeleteRelatedTimeObservationLinkCommand(
+ CompoundCommand deleteViewsCmd,
+ TransactionalEditingDomain editingDomain, OccurrenceSpecification os,
+ LifelineEditPart srcLifelinePart,boolean deleteRelatedEvent) {
+ List<OccurrenceSpecification> oss = new ArrayList<OccurrenceSpecification>();
+ oss.add(os);
+ addDeleteRelatedTimeObservationLinkCommand(deleteViewsCmd, editingDomain,srcLifelinePart, oss,deleteRelatedEvent);
+ }
+
+ /**
+ * Add command for deleting time observation link which related to occurence specification
+ * @param deleteViewsCmd
+ * @param editingDomain
+ * @param srcLifelinePart
+ * @param oss
+ * @param deleteRelatedEvent
+ */
+ public static void addDeleteRelatedTimeObservationLinkCommand(
+ CompoundCommand deleteViewsCmd,
+ TransactionalEditingDomain editingDomain,LifelineEditPart srcLifelinePart,List<OccurrenceSpecification> oss,boolean deleteRelatedEvent) {
+ List<TimeObservationLabelEditPart> timeObservationEditParts = SequenceUtil.findOccurenceSpecificationRelatedTimeObservationPart(srcLifelinePart,oss);
+ for (final TimeObservationLabelEditPart timeObservationEditPart : timeObservationEditParts) {
+ View view = (View) timeObservationEditPart.getModel();
+ EList sourceEdges = view.getSourceEdges();
+ for (Object sourceEdge : sourceEdges) {
+ Command deleteTimeViewCommand = new ICommandProxy(
+ new DeleteCommand(editingDomain, (View) sourceEdge));
+ deleteViewsCmd.add(deleteTimeViewCommand);
+ }
+ if(deleteRelatedEvent){
+ deleteViewsCmd.add(new ICommandProxy(new AbstractTransactionalCommand(editingDomain,"Remove TimeObservation related event",null){
+ @Override
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ TimeObservation timeObservation = (TimeObservation)(timeObservationEditPart.resolveSemanticElement());
+ timeObservation.setEvent(null);
+ return CommandResult.newOKCommandResult();
+ }
+ }));
+ }
+ }
+ }
+
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceUtil.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceUtil.java
index 03e6389bfc9..bd2a87fd44b 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceUtil.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/util/SequenceUtil.java
@@ -82,12 +82,36 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragment2Edit
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragmentEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ContinuationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DestructionOccurrenceSpecificationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.DurationObservationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionOperandEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.InteractionUseEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message2EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message3EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message4EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message5EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message6EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageAsyncAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageCreateAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageDeleteAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageFoundAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageLostAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName2EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName3EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName4EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName5EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName6EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageName7EditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageNameEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageReplyAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageSyncAppliedStereotypeEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ObservationLinkEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ObservationLinkPolicy;
import org.eclipse.swt.widgets.Display;
import org.eclipse.uml2.common.util.CacheAdapter;
import org.eclipse.uml2.uml.CombinedFragment;
@@ -117,6 +141,19 @@ import org.eclipse.uml2.uml.UMLPackage;
public class SequenceUtil {
private static final double MAXIMAL_DISTANCE_FROM_EVENT = 10;
+
+ /**
+ * Request type of observation link
+ */
+ public static final String OBSERVATION_LINK_TYPE = "observation link"; //$NON-NLS-1$
+
+ public static final String OBSERVATION_LINK_REQUEST_START = "observation connection start"; //$NON-NLS-1$
+
+ public static final String OBSERVATION_LINK_REQUEST_END = "observation connection end"; //$NON-NLS-1$
+
+ public static final String OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE = "observation reconnect source"; //$NON-NLS-1$
+
+ public static final String OBSERVATION_LINK_REQUEST_RECONNECT_TARGET = "observation reconnect target"; //$NON-NLS-1$
/**
* Default vertical offset of lifeline
@@ -477,7 +514,7 @@ public class SequenceUtil {
* the message occurrence specification
* @return the absolute location or null
*/
- private static Point findLocationOfMessageOccurrence(GraphicalEditPart nodeEditPart, MessageOccurrenceSpecification event) {
+ public static Point findLocationOfMessageOccurrence(GraphicalEditPart nodeEditPart, MessageOccurrenceSpecification event) {
// messages to the node
List<?> targetConnections = nodeEditPart.getTargetConnections();
for(Object conn : targetConnections) {
@@ -508,6 +545,49 @@ public class SequenceUtil {
}
return null;
}
+
+ /**
+ * Find the location on a node of a execution occurrence specification
+ *
+ * @param nodeEditPart
+ * the node edit part which to check incoming and outgoing messages
+ * @param event
+ * the execution occurrence specification
+ * @return the absolute location or null
+ */
+ public static Point findLocationOfExecutionOccurrence(GraphicalEditPart nodeEditPart, ExecutionOccurrenceSpecification event) {
+ // child to the node
+ List<?> children = nodeEditPart.getChildren();
+ for(Object child : children) {
+ if(child instanceof ActionExecutionSpecificationEditPart) {
+ EObject element = ((ActionExecutionSpecificationEditPart)child).resolveSemanticElement();
+ if(element != null && element instanceof ExecutionSpecification) {
+ IFigure figure = ((ActionExecutionSpecificationEditPart)child).getFigure();
+ Rectangle copy = figure.getBounds().getCopy();
+ figure.translateToAbsolute(copy);
+ if(event.equals(((ExecutionSpecification)element).getStart())){
+ return copy.getTop();
+ }else if(event.equals(((ExecutionSpecification)element).getFinish())){
+ return copy.getBottom();
+ }
+ }
+ }else if(child instanceof BehaviorExecutionSpecificationEditPart) {
+ EObject element = ((BehaviorExecutionSpecificationEditPart)child).resolveSemanticElement();
+ if(element != null && element instanceof ExecutionSpecification) {
+ IFigure figure = ((BehaviorExecutionSpecificationEditPart)child).getFigure();
+ Rectangle copy = figure.getBounds().getCopy();
+ figure.translateToAbsolute(copy);
+ if(event.equals(((ExecutionSpecification)element).getStart())){
+ return copy.getTop();
+ }else if(event.equals(((ExecutionSpecification)element).getFinish())){
+ return copy.getBottom();
+ }
+ }
+ }
+ }
+
+ return null;
+ }
/**
* Find the occurrence specification covering the lifeline near the given location.
@@ -1543,5 +1623,121 @@ public class SequenceUtil {
}
}
}
+
+ /**
+ * Find Time Observations editpart which are related to specific OccurenceSpecification
+ * @param lifelinePart
+ * @param oss
+ * @return List<TimeObservationLabelEditPart>
+ */
+ public static List<TimeObservationLabelEditPart> findOccurenceSpecificationRelatedTimeObservationPart(LifelineEditPart lifelinePart,List<OccurrenceSpecification> oss){
+ List<TimeObservationLabelEditPart> list = new ArrayList<TimeObservationLabelEditPart>();
+ if(oss == null || oss.size() == 0){
+ return list;
+ }
+ if(lifelinePart!=null&&lifelinePart.getTargetConnections().size()>0){
+ for(Object targetConnection : lifelinePart.getTargetConnections()){
+ if(targetConnection instanceof ObservationLinkEditPart){
+ ObservationLinkEditPart observationLinkEditPart = (ObservationLinkEditPart)targetConnection;
+ if(observationLinkEditPart.getSource() instanceof TimeObservationLabelEditPart){
+ TimeObservationLabelEditPart source = (TimeObservationLabelEditPart)observationLinkEditPart.getSource();
+ EObject timeElement = source.resolveSemanticElement();
+ if(timeElement instanceof TimeObservation) {
+ if(oss.contains(((TimeObservation)timeElement).getEvent())) {
+ list.add(source);
+ }
+ }
+ }
+ }
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Find Time Observations editpart which are related to specific OccurenceSpecification
+ * @param lifelinePart
+ * @param os
+ * @return List<TimeObservationLabelEditPart>
+ */
+ public static List<TimeObservationLabelEditPart> findOccurenceSpecificationRelatedTimeObservationPart(LifelineEditPart lifelinePart,OccurrenceSpecification os){
+ List<OccurrenceSpecification> oss = new ArrayList<OccurrenceSpecification>();
+ oss.add(os);
+ return findOccurenceSpecificationRelatedTimeObservationPart(lifelinePart, oss);
+ }
+
+ /**
+ * Find specific editpart by semantic model
+ * @param editPart
+ * @param targetElement
+ * @param targetClass
+ * @return EditPart
+ */
+ public static EditPart getEditPart(EditPart editPart,
+ EObject targetElement, Class targetClass) {
+ if (editPart == null || targetElement == null || targetClass == null)
+ return null;
+ Map<?, ?> map = editPart.getViewer().getEditPartRegistry();
+ for (Entry<?, ?> entry : map.entrySet()) {
+ Object key = entry.getKey();
+ if (!(key instanceof View)) {
+ continue;
+ }
+ View view = (View) key;
+ EObject tempElement = view.getElement();
+ if (targetElement.equals(tempElement)) {
+ Object value = entry.getValue();
+ if (value.getClass() == targetClass) {
+ return (EditPart) value;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Intall observation link policy to specific editpart
+ * @param editPart
+ */
+ public static void installObservationLinkPolicy(EditPart editPart) {
+ String editPolicy = "observationlink";
+ if (editPart instanceof LifelineEditPart
+ || editPart instanceof TimeObservationLabelEditPart) {
+ editPart.installEditPolicy(editPolicy,
+ new ObservationLinkPolicy(editPart));
+ }
+ if (editPart instanceof DurationObservationEditPart) {
+ editPart.installEditPolicy(editPolicy,
+ new ObservationLinkPolicy(editPart));
+ }
+ if (editPart instanceof MessageEditPart
+ || editPart instanceof Message2EditPart
+ || editPart instanceof Message3EditPart
+ || editPart instanceof Message4EditPart
+ || editPart instanceof Message5EditPart
+ || editPart instanceof Message6EditPart
+ || editPart instanceof Message7EditPart) {
+ editPart.installEditPolicy(editPolicy,
+ new ObservationLinkPolicy(editPart));
+ } else if (editPart instanceof MessageNameEditPart
+ || editPart instanceof MessageName2EditPart
+ || editPart instanceof MessageName3EditPart
+ || editPart instanceof MessageName4EditPart
+ || editPart instanceof MessageName5EditPart
+ || editPart instanceof MessageName6EditPart
+ || editPart instanceof MessageName7EditPart) {
+ editPart.getParent().installEditPolicy(editPolicy,
+ new ObservationLinkPolicy(editPart));
+ } else if (editPart instanceof MessageSyncAppliedStereotypeEditPart
+ || editPart instanceof MessageAsyncAppliedStereotypeEditPart
+ || editPart instanceof MessageReplyAppliedStereotypeEditPart
+ || editPart instanceof MessageCreateAppliedStereotypeEditPart
+ || editPart instanceof MessageDeleteAppliedStereotypeEditPart
+ || editPart instanceof MessageLostAppliedStereotypeEditPart
+ || editPart instanceof MessageFoundAppliedStereotypeEditPart) {
+ editPart.getParent().installEditPolicy(editPolicy,
+ new ObservationLinkPolicy(editPart));
+ }
+ }
}
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 2ad857e66c9..748eed9d2d0 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
@@ -1207,6 +1207,17 @@
path=""
small_icon="platform:/plugin/org.eclipse.uml2.uml.edit/icons/full/obj16/Constraint.gif">
</entry>
+ <?gmfgen generated="false"?>
+ <entry
+ defineOnly="true"
+ description="Create an Observation Link"
+ id="createObservationLinkCreationTool"
+ kind="tool"
+ label="Observation Link"
+ large_icon="platform:/plugin/org.eclipse.uml2.uml.edit/icons/full/obj16/Message.gif"
+ path=""
+ small_icon="platform:/plugin/org.eclipse.uml2.uml.edit/icons/full/obj16/Message.gif">
+ </entry>
</contribution>
</paletteProvider>
@@ -1349,6 +1360,11 @@
id="createGeneralOrdering8CreationTool"
path="/createEdges2Group">
</predefinedEntry>
+ <?gmfgen generated="false"?>
+ <predefinedEntry
+ id="createObservationLinkCreationTool"
+ path="/createEdges2Group">
+ </predefinedEntry>
<predefinedEntry
id="createCommentlink9CreationTool"
path="/createEdges2Group">
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/commands/DurationObservationCreateCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/commands/DurationObservationCreateCommand.java
index 5fbeeb74f40..252dbf6da0c 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/commands/DurationObservationCreateCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/commands/DurationObservationCreateCommand.java
@@ -13,7 +13,6 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.commands;
-import java.util.Collections;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
@@ -28,13 +27,10 @@ import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.uml.diagram.common.helper.DurationObservationHelper;
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.DurationObservation;
-import org.eclipse.uml2.uml.Message;
-import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
import org.eclipse.uml2.uml.OccurrenceSpecification;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.UMLFactory;
@@ -98,44 +94,47 @@ public class DurationObservationCreateCommand extends EditElementCommand {
* @generated NOT enable only if there is occurrence specifications
*/
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)) {
- // duration creation is in progress; target is not defined yet
- // enable duration observation only on a message
- for(OccurrenceSpecification occurrence : occ1List) {
- if(occurrence instanceof MessageOccurrenceSpecification) {
- Message mess = ((MessageOccurrenceSpecification)occurrence).getMessage();
- if(mess != null) {
- return true;
- }
- }
- }
- return false;
- }
- Object paramOccurrence2 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
- List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOccurrence2);
- if(occ2List.isEmpty()) {
- return false;
- }
- // disable duration observation on a same event
- if(!Collections.disjoint(occ1List, occ2List)) {
- return false;
- }
- // enable duration observation only on a message
- OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
- if(pair != null && pair.length > 1) {
- return DurationObservationHelper.endsOfSameMessage(pair[0], pair[1]);
- }
- return false;
+ //Fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=364826
+ return true;
+
+// // 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)) {
+// // duration creation is in progress; target is not defined yet
+// // enable duration observation only on a message
+// for(OccurrenceSpecification occurrence : occ1List) {
+// if(occurrence instanceof MessageOccurrenceSpecification) {
+// Message mess = ((MessageOccurrenceSpecification)occurrence).getMessage();
+// if(mess != null) {
+// return true;
+// }
+// }
+// }
+// return false;
+// }
+// Object paramOccurrence2 = getRequest().getParameter(SequenceRequestConstant.NEAREST_OCCURRENCE_SPECIFICATION_2);
+// List<OccurrenceSpecification> occ2List = SequenceUtil.getAsOccSpecList(paramOccurrence2);
+// if(occ2List.isEmpty()) {
+// return false;
+// }
+// // disable duration observation on a same event
+// if(!Collections.disjoint(occ1List, occ2List)) {
+// return false;
+// }
+// // enable duration observation only on a message
+// OccurrenceSpecification[] pair = SequenceUtil.getPairOfCorrespondingOccSpec(occ1List, occ2List);
+// if(pair != null && pair.length > 1) {
+// return DurationObservationHelper.endsOfSameMessage(pair[0], pair[1]);
+// }
+// return false;
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
index e38bd734de1..d4f94c4055d 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/DurationObservationEditPart.java
@@ -18,19 +18,15 @@ import java.util.LinkedList;
import java.util.List;
import org.eclipse.draw2d.ColorConstants;
-import org.eclipse.draw2d.ConnectionLocator;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Shape;
import org.eclipse.draw2d.StackLayout;
-import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.editparts.AbstractConnectionEditPart;
-import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
import org.eclipse.gef.requests.CreateRequest;
@@ -40,7 +36,6 @@ import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ListItemComponentEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
-import org.eclipse.gmf.runtime.diagram.ui.figures.LabelLocator;
import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
@@ -54,10 +49,9 @@ import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
import org.eclipse.papyrus.uml.diagram.common.locator.ExternalLabelPositionLocator;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomConnectionHandleEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomExternalLabelPrimaryDragRoleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DurationObservationItemSemanticEditPolicy;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExternalLabelPrimaryDragRoleEditPolicy;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.MoveableNonResizableLabelEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.swt.SWT;
@@ -95,15 +89,18 @@ AbstractBorderedShapeEditPart {
}
/**
- * @generated
+ * @generated NOT
*/
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new DurationObservationItemSemanticEditPolicy());
installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE, new ListItemComponentEditPolicy());
- installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new MoveableNonResizableLabelEditPolicy());
- installEditPolicy(DeleteTimeElementWithoutEventPolicy.KEY, new DeleteTimeElementWithoutEventPolicy());
+
+ installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE,new CustomConnectionHandleEditPolicy());
+
+ //installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new MoveableNonResizableLabelEditPolicy());
+ //installEditPolicy(DeleteTimeElementWithoutEventPolicy.KEY, new DeleteTimeElementWithoutEventPolicy());
// XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
// removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
@@ -120,22 +117,22 @@ AbstractBorderedShapeEditPart {
refreshBounds();
}
- /**
- * Handles refresh bounds the same way as for a non resizable label
- *
- * @generated NOT
- */
- protected void refreshBounds() {
- int dx = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
- int dy = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
- Point offset = new Point(dx, dy);
- if(getParent() instanceof AbstractConnectionEditPart) {
- ((AbstractGraphicalEditPart)getParent()).setLayoutConstraint(this, getFigure(), new LabelLocator(((AbstractConnectionEditPart)getParent()).getConnectionFigure(), offset, ConnectionLocator.MIDDLE));
- } else {
- getFigure().getParent().setConstraint(getFigure(), new LabelLocator(getFigure().getParent(), offset, ConnectionLocator.MIDDLE));
- }
-
- }
+// /**
+// * Handles refresh bounds the same way as for a non resizable label
+// *
+// * @generated NOT
+// */
+// protected void refreshBounds() {
+// int dx = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_X())).intValue();
+// int dy = ((Integer)getStructuralFeatureValue(NotationPackage.eINSTANCE.getLocation_Y())).intValue();
+// Point offset = new Point(dx, dy);
+// if(getParent() instanceof AbstractConnectionEditPart) {
+// ((AbstractGraphicalEditPart)getParent()).setLayoutConstraint(this, getFigure(), new LabelLocator(((AbstractConnectionEditPart)getParent()).getConnectionFigure(), offset, ConnectionLocator.MIDDLE));
+// } else {
+// getFigure().getParent().setConstraint(getFigure(), new LabelLocator(getFigure().getParent(), offset, ConnectionLocator.MIDDLE));
+// }
+//
+// }
/**
* @generated NOT use ExternalLabelPrimaryDragRoleEditPolicy
@@ -148,7 +145,7 @@ AbstractBorderedShapeEditPart {
switch(UMLVisualIDRegistry.getVisualID(childView)) {
case DurationObservationAppliedStereotypeEditPart.VISUAL_ID:
// use ExternalLabelPrimaryDragRoleEditPolicy
- return new ExternalLabelPrimaryDragRoleEditPolicy();
+ return new CustomExternalLabelPrimaryDragRoleEditPolicy();
}
org.eclipse.gef.EditPolicy result = child.getEditPolicy(org.eclipse.gef.EditPolicy.PRIMARY_DRAG_ROLE);
if(result == null) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
index 18715526711..0f34f47c8a0 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/LifelineEditPart.java
@@ -1739,7 +1739,7 @@ public class LifelineEditPart extends NamedElementEditPart {
* @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getNodeFigure()
*/
@Override
- protected NodeFigure getNodeFigure() {
+ public NodeFigure getNodeFigure() {
return getDashLineFigure();
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ObservationLinkEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ObservationLinkEditPart.java
new file mode 100644
index 00000000000..a62411db5a8
--- /dev/null
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ObservationLinkEditPart.java
@@ -0,0 +1,195 @@
+package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.ConnectionLocator;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.gef.ConnectionEditPart;
+import org.eclipse.gef.DragTracker;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.NodeEditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.FeedbackHelper;
+import org.eclipse.gef.handles.ConnectionEndpointHandle;
+import org.eclipse.gef.requests.ReconnectRequest;
+import org.eclipse.gef.tools.ConnectionEndpointTracker;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.SemanticEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.uml2.uml.DurationObservation;
+import org.eclipse.uml2.uml.TimeObservation;
+
+/**
+ * Observation link editpart used by time observation and duration observation
+ *
+ */
+public class ObservationLinkEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart {
+
+ public ObservationLinkEditPart(View view) {
+ super(view);
+ }
+
+ protected Connection createConnectionFigure() {
+ return new ConstraintLinkDescriptor();
+ }
+
+ public ConstraintLinkDescriptor getPrimaryShape() {
+ return (ConstraintLinkDescriptor) getFigure();
+ }
+
+ public class ConstraintLinkDescriptor extends PolylineConnectionEx {
+
+ public ConstraintLinkDescriptor() {
+ this.setLineStyle(Graphics.LINE_DASH);
+ }
+
+ }
+
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new CustomComponentEditPolicy());
+ //installEditPolicy(EditPolicy.COMPONENT_ROLE, new CustomComponentEditPolicy());
+ //SequenceUtil.OBSERVATION_LINK_TYPE
+ installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE,new CustomConnectionEndpointEditPolicy());
+ }
+
+ private final class CustomComponentEditPolicy extends SemanticEditPolicy {
+ @Override
+ protected Command getSemanticCommand(IEditCommandRequest request) {
+ Command semanticCommand = super.getSemanticCommand(request);
+ if (semanticCommand != null) {
+ if (semanticCommand instanceof ICommandProxy) {
+ ICommandProxy proxy = (ICommandProxy) semanticCommand;
+ if (proxy.getICommand() instanceof CompositeTransactionalCommand) {
+ CompositeTransactionalCommand compositeCommand = (CompositeTransactionalCommand) proxy
+ .getICommand();
+ // update TimeObservation or DurationObservation model
+ final ObservationLinkEditPart link = (ObservationLinkEditPart) getHost();
+ AbstractTransactionalCommand updateLinkSourceModelCmd = new AbstractTransactionalCommand(
+ link.getEditingDomain(), "", null) {
+ @Override
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ EditPart source = link.getSource();
+ if (source instanceof TimeObservationLabelEditPart) {
+ TimeObservation timeObservation = (TimeObservation) ((TimeObservationLabelEditPart) source)
+ .resolveSemanticElement();
+ timeObservation.setEvent(null);
+ } else if (source instanceof DurationObservationEditPart) {
+ DurationObservation durationObservation = (DurationObservation) ((DurationObservationEditPart) source)
+ .resolveSemanticElement();
+ durationObservation.getEvents().clear();
+ }
+
+ return CommandResult.newOKCommandResult();
+ }
+ };
+ compositeCommand.add(updateLinkSourceModelCmd);
+ }
+ }
+ }
+ return semanticCommand;
+ }
+ }
+
+ private final class CustomConnectionEndpointEditPolicy extends
+ org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy {
+ protected List createSelectionHandles() {
+ List list = new ArrayList();
+ list.add(new CustomConnectionEndpointHandle(
+ (ConnectionEditPart) getHost(),
+ ConnectionLocator.SOURCE));
+ list.add(new CustomConnectionEndpointHandle(
+ (ConnectionEditPart) getHost(),
+ ConnectionLocator.TARGET));
+ return list;
+ }
+
+ protected void showConnectionMoveFeedback(ReconnectRequest request) {
+ if (request.getConnectionEditPart().getSource() instanceof TimeObservationLabelEditPart
+ && request.getTarget() instanceof AbstractMessageEditPart) {
+ return;
+ }
+ super.showConnectionMoveFeedback(request);
+ }
+
+ public void showSourceFeedback(Request request) {
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE
+ .equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET
+ .equals(request.getType()))
+ showConnectionMoveFeedback((ReconnectRequest) request);
+ }
+
+ public void eraseSourceFeedback(Request request) {
+ if (SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE
+ .equals(request.getType())
+ || SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET
+ .equals(request.getType()))
+ eraseConnectionMoveFeedback((ReconnectRequest) request);
+ }
+ }
+
+ private class CustomConnectionEndpointHandle extends ConnectionEndpointHandle{
+
+ public CustomConnectionEndpointHandle(ConnectionEditPart owner, int endPoint) {
+ super(owner, endPoint);
+ }
+
+ public CustomConnectionEndpointHandle(ConnectionEditPart owner,
+ boolean fixed, int endPoint) {
+ super(owner, fixed, endPoint);
+ }
+
+ public CustomConnectionEndpointHandle(int endPoint) {
+ super(endPoint);
+ }
+
+ protected DragTracker createDragTracker() {
+ if (isFixed())
+ return null;
+ ConnectionEndpointTracker tracker;
+ tracker = new ConnectionEndpointTracker((ConnectionEditPart) getOwner()){
+ protected Request createTargetRequest() {
+ ReconnectRequest request = new ReconnectRequest(
+ getCommandName()){
+ public boolean isMovingStartAnchor() {
+ return SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE.equals(getType());
+ }
+ };
+ request.setConnectionEditPart(getConnectionEditPart());
+ return request;
+ }
+ };
+ if (getEndPoint() == ConnectionLocator.SOURCE) {
+ tracker.setCommandName(SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_SOURCE);
+ } else {
+ tracker.setCommandName(SequenceUtil.OBSERVATION_LINK_REQUEST_RECONNECT_TARGET);
+ }
+ tracker.setDefaultCursor(getCursor());
+ return tracker;
+ }
+
+
+ }
+
+}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
index 5656db09822..5203b77bf39 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationEditPart.java
@@ -19,8 +19,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.PolylineShape;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Shape;
import org.eclipse.draw2d.StackLayout;
@@ -47,7 +47,6 @@ import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeRequest;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
-import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.LayoutConstraint;
import org.eclipse.gmf.runtime.notation.Location;
@@ -59,8 +58,7 @@ import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
import org.eclipse.papyrus.uml.diagram.common.locator.ExternalLabelPositionLocator;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.DeleteTimeElementWithoutEventPolicy;
-import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExternalLabelPrimaryDragRoleEditPolicy;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomExternalLabelPrimaryDragRoleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.TimeObservationItemSemanticEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.TimeRelatedSelectionEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
@@ -102,10 +100,10 @@ BorderedBorderItemEditPart {
*/
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
- installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, getPrimaryDragEditPolicy());
+ //installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, getPrimaryDragEditPolicy());
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new TimeObservationItemSemanticEditPolicy());
installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
- installEditPolicy(DeleteTimeElementWithoutEventPolicy.KEY, new DeleteTimeElementWithoutEventPolicy());
+ //installEditPolicy(DeleteTimeElementWithoutEventPolicy.KEY, new DeleteTimeElementWithoutEventPolicy());
// XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
// removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
@@ -135,7 +133,7 @@ BorderedBorderItemEditPart {
case TimeObservationLabelEditPart.VISUAL_ID:
case TimeObservationAppliedStereotypeEditPart.VISUAL_ID:
// use ExternalLabelPrimaryDragRoleEditPolicy
- return new ExternalLabelPrimaryDragRoleEditPolicy();
+ return new CustomExternalLabelPrimaryDragRoleEditPolicy();
}
EditPolicy result = child.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
if(result == null) {
@@ -191,7 +189,7 @@ BorderedBorderItemEditPart {
* Bypass the preference mechanism which finally returns an incoherent constant hard written in NodePreferencePage.xpt templates.
* Instead, we shall use the correct default size.
*/
- DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(TimeMarkElementFigure.TIME_MARK_LENGTH, 1);
+ //DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(TimeMarkElementFigure.TIME_MARK_LENGTH, 1);
//String prefElementId = "TimeObservation";
//IPreferenceStore store = UMLDiagramEditorPlugin.getInstance().getPreferenceStore();
//String preferenceConstantWitdh = PreferenceInitializerForElementHelper.getpreferenceKey(getNotationView(), prefElementId, PreferenceConstantHelper.WIDTH);
@@ -199,7 +197,10 @@ BorderedBorderItemEditPart {
//DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(store.getInt(preferenceConstantWitdh), store.getInt(preferenceConstantHeight));
//FIXME: workaround for #154536
- result.getBounds().setSize(result.getPreferredSize());
+ //result.getBounds().setSize(result.getPreferredSize());
+
+ NodeFigure result = new NodeFigure();
+
return result;
}
@@ -1021,9 +1022,9 @@ BorderedBorderItemEditPart {
}
/**
- * @generated
+ * @generated NOT
*/
- public class TimeMarkElementFigure extends PolylineShape {
+ public class TimeMarkElementFigure extends Figure {
/**
* the length of the time mark
@@ -1040,11 +1041,11 @@ BorderedBorderItemEditPart {
private int sideOfFigure = PositionConstants.NONE;
/**
- * @generated
+ * @generated NOT
*/
public TimeMarkElementFigure() {
- this.addPoint(new Point(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)));
- this.addPoint(new Point(getMapMode().DPtoLP(20), getMapMode().DPtoLP(0)));
+ //this.addPoint(new Point(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)));
+ //this.addPoint(new Point(getMapMode().DPtoLP(20), getMapMode().DPtoLP(0)));
this.setLocation(new Point(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)));
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationLabelEditPart.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationLabelEditPart.java
index 423911b8625..0c457a5d248 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationLabelEditPart.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/TimeObservationLabelEditPart.java
@@ -16,9 +16,11 @@ package org.eclipse.papyrus.uml.diagram.sequence.edit.parts;
import java.util.Collections;
import java.util.List;
+import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.StackLayout;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
@@ -27,27 +29,43 @@ import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.RunnableWithResult;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.requests.DropRequest;
+import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.core.util.Log;
+import org.eclipse.gmf.runtime.common.core.util.Trace;
import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.INodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.LabelEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConnectionHandleEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.figures.IBorderItemLocator;
+import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIDebugOptions;
+import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIPlugin;
+import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIStatusCodes;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.Anchor;
+import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.IdentityAnchor;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.dialogs.Dialog;
@@ -63,10 +81,11 @@ import org.eclipse.papyrus.extensionpoints.editors.ui.ILabelEditorDialog;
import org.eclipse.papyrus.extensionpoints.editors.ui.IPopupEditorHelper;
import org.eclipse.papyrus.extensionpoints.editors.utils.DirectEditorsUtil;
import org.eclipse.papyrus.extensionpoints.editors.utils.IDirectEditorsIds;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.directedit.MultilineLabelDirectEditManager;
import org.eclipse.papyrus.uml.diagram.common.editpolicies.IDirectEdition;
-import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IMaskManagedLabelEditPolicy;
import org.eclipse.papyrus.uml.diagram.common.figure.node.ILabelFigure;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.CustomConnectionHandleEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.UMLTextSelectionEditPolicy;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
@@ -79,9 +98,10 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.PlatformUI;
/**
- * @generated
+ * @generated NOT
*/
-public class TimeObservationLabelEditPart extends LabelEditPart implements ITextAwareEditPart, IBorderItemEditPart {
+//Fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=364826
+public class TimeObservationLabelEditPart extends LabelEditPart implements ITextAwareEditPart, IBorderItemEditPart,INodeEditPart {
/**
* @generated
@@ -129,12 +149,14 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
}
/**
- * @generated
+ * @generated NOT
*/
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy());
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new UMLTextSelectionEditPolicy());
+
+ installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE,new CustomConnectionHandleEditPolicy());
}
/**
@@ -161,52 +183,62 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
}
/**
- * @generated
+ * @generated NOT
*/
protected String getLabelTextHelper(IFigure figure) {
if(figure instanceof WrappingLabel) {
return ((WrappingLabel)figure).getText();
} else if(figure instanceof ILabelFigure) {
return ((ILabelFigure)figure).getText();
+ }
+ else if(figure instanceof NodeFigure && getWrappingLabel(figure)!=null) {
+ return getWrappingLabel(figure).getText();
} else {
return ((Label)figure).getText();
}
}
/**
- * @generated
+ * @generated NOT
*/
protected void setLabelTextHelper(IFigure figure, String text) {
if(figure instanceof WrappingLabel) {
((WrappingLabel)figure).setText(text);
} else if(figure instanceof ILabelFigure) {
((ILabelFigure)figure).setText(text);
- } else {
+ }else if(figure instanceof NodeFigure && getWrappingLabel(figure)!=null) {
+ getWrappingLabel(figure).setText(text);
+ }
+ else {
((Label)figure).setText(text);
}
}
/**
- * @generated
+ * @generated NOT
*/
protected Image getLabelIconHelper(IFigure figure) {
if(figure instanceof WrappingLabel) {
return ((WrappingLabel)figure).getIcon();
} else if(figure instanceof ILabelFigure) {
return ((ILabelFigure)figure).getIcon();
- } else {
+ } else if(figure instanceof NodeFigure && getWrappingLabel(figure)!=null) {
+ return getWrappingLabel(figure).getIcon();
+ }else {
return ((Label)figure).getIcon();
}
}
/**
- * @generated
+ * @generated NOT
*/
protected void setLabelIconHelper(IFigure figure, Image icon) {
if(figure instanceof WrappingLabel) {
((WrappingLabel)figure).setIcon(icon);
} else if(figure instanceof ILabelFigure) {
((ILabelFigure)figure).setIcon(icon);
+ }else if(figure instanceof NodeFigure && getWrappingLabel(figure)!=null) {
+ getWrappingLabel(figure).setIcon(icon);
} else {
((Label)figure).setIcon(icon);
}
@@ -695,7 +727,7 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
}
/**
- * @generated
+ * @generated NOT
*/
protected void handleNotificationEvent(Notification event) {
Object feature = event.getFeature();
@@ -708,6 +740,10 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
refreshStrikeThrough();
} else if(NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) {
refreshFont();
+ } else if (NotationPackage.eINSTANCE.getView_SourceEdges().equals(feature)){
+ refreshSourceConnections();
+ } else if (NotationPackage.eINSTANCE.getView_TargetEdges().equals(feature)){
+ refreshTargetConnections();
} else {
if(getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) {
refreshLabel();
@@ -726,14 +762,40 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
super.handleNotificationEvent(event);
}
- /**
- * @generated
- */
- protected IFigure createFigure() {
+// /**
+// * @generated
+// */
+// protected IFigure createFigure() {
+// IFigure label = createFigurePrim();
+// defaultText = getLabelTextHelper(label);
+// return label;
+// }
+
+ protected NodeFigure createFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ return figure;
+ }
+
+ protected NodeFigure createNodePlate() {
+ NodeFigure result = new NodeFigure();
+ return result;
+ }
+
+ protected IFigure createNodeShape() {
IFigure label = createFigurePrim();
defaultText = getLabelTextHelper(label);
return label;
}
+
+ protected WrappingLabel getWrappingLabel(IFigure nodeFigure){
+ if(nodeFigure instanceof NodeFigure) {
+ return ((WrappingLabel)(nodeFigure.getChildren().get(0)));
+ }
+ return null;
+ }
/**
* @generated
@@ -766,6 +828,117 @@ public class TimeObservationLabelEditPart extends LabelEditPart implements IText
}
- private static final String ADD_PARENT_MODEL = "AddParentModel";
+ //Fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=364826
+ protected List getModelSourceConnections() {
+ return ViewUtil
+ .getSourceConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ protected List getModelTargetConnections() {
+ List list = ViewUtil
+ .getTargetConnectionsConnectingVisibleViews((View) getModel());
+ return list;
+ }
+
+ public ConnectionAnchor getSourceConnectionAnchor(Request request) {
+ if (request instanceof ReconnectRequest) {
+ if (((DropRequest) request).getLocation() == null) {
+ return ((NodeFigure)getFigure()).getSourceConnectionAnchorAt(null);
+ }
+ Point pt = ((DropRequest) request).getLocation().getCopy();
+ return ((NodeFigure)getFigure()).getSourceConnectionAnchorAt(pt);
+ }
+ else if (request instanceof DropRequest){
+ return ((NodeFigure)getFigure()).getSourceConnectionAnchorAt(
+ ((DropRequest) request).getLocation());
+ }
+ return ((NodeFigure)getFigure()).getSourceConnectionAnchorAt(null);
+ }
+
+ public ConnectionAnchor getSourceConnectionAnchor(
+ ConnectionEditPart connEditPart) {
+ final org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart connection =
+ (org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart)connEditPart;
+ String t = ""; //$NON-NLS-1$
+ try {
+ t = (String) getEditingDomain().runExclusive(
+ new RunnableWithResult.Impl() {
+
+ public void run() {
+ Anchor a = ((Edge)connection.getModel()).getSourceAnchor();
+ if (a instanceof IdentityAnchor)
+ setResult(((IdentityAnchor) a).getId());
+ else
+ setResult(""); //$NON-NLS-1$
+ }
+ });
+ } catch (InterruptedException e) {
+ Trace.catching(DiagramUIPlugin.getInstance(),
+ DiagramUIDebugOptions.EXCEPTIONS_CATCHING, getClass(),
+ "getSourceConnectionAnchor", e); //$NON-NLS-1$
+ Log.error(DiagramUIPlugin.getInstance(),
+ DiagramUIStatusCodes.IGNORED_EXCEPTION_WARNING,
+ "getSourceConnectionAnchor", e); //$NON-NLS-1$
+ }
+ return ((NodeFigure)getFigure()).getConnectionAnchor(t);
+ }
+
+ public ConnectionAnchor getTargetConnectionAnchor(
+ ConnectionEditPart connEditPart) {
+ final org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart connection =
+ (org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart)connEditPart;
+
+ String t = ""; //$NON-NLS-1$
+ try {
+ t = (String) getEditingDomain().runExclusive(
+ new RunnableWithResult.Impl() {
+
+ public void run() {
+ Anchor a = ((Edge)connection.getModel()).getTargetAnchor();
+ if (a instanceof IdentityAnchor)
+ setResult(((IdentityAnchor) a).getId());
+ else
+ setResult(""); //$NON-NLS-1$
+ }
+ });
+ } catch (InterruptedException e) {
+ Trace.catching(DiagramUIPlugin.getInstance(),
+ DiagramUIDebugOptions.EXCEPTIONS_CATCHING, getClass(),
+ "getTargetConnectionAnchor", e); //$NON-NLS-1$
+ Log.error(DiagramUIPlugin.getInstance(),
+ DiagramUIStatusCodes.IGNORED_EXCEPTION_WARNING,
+ "getTargetConnectionAnchor", e); //$NON-NLS-1$
+ }
+
+ return ((NodeFigure)getFigure()).getConnectionAnchor(t);
+ }
+
+ public ConnectionAnchor getTargetConnectionAnchor(Request request) {
+ if (request instanceof ReconnectRequest) {
+ if (((DropRequest) request).getLocation() == null) {
+ return ((NodeFigure)getFigure()).getTargetConnectionAnchorAt(null);
+ }
+ Point pt = ((DropRequest) request).getLocation().getCopy();
+ return ((NodeFigure)getFigure()).getTargetConnectionAnchorAt(pt);
+ }
+ else if (request instanceof DropRequest){
+
+ return ((NodeFigure)getFigure()).getTargetConnectionAnchorAt(
+ ((DropRequest) request).getLocation());
+ }
+ return ((NodeFigure)getFigure()).getTargetConnectionAnchorAt(null);
+ }
+
+ final public String mapConnectionAnchorToTerminal(ConnectionAnchor c) {
+ return ((NodeFigure)getFigure()).getConnectionAnchorTerminal(c);
+ }
+
+ final public ConnectionAnchor mapTerminalToConnectionAnchor(String terminal) {
+ return ((NodeFigure)getFigure()).getConnectionAnchor(terminal);
+ }
+
+ public boolean canAttachNote() {
+ return true;
+ }
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
index 00b0fb15011..8f39d89eb05 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/UMLEditPartFactory.java
@@ -22,10 +22,13 @@ import org.eclipse.gef.EditPartFactory;
import org.eclipse.gef.tools.CellEditorLocator;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.Connector;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.papyrus.uml.diagram.common.figure.node.IMultilineEditableFigure;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
@@ -246,21 +249,32 @@ public class UMLEditPartFactory implements EditPartFactory {
}
/**
- * @generated
+ * @generated NOT
*/
private EditPart createUnrecognizedEditPart(EditPart context, Object model) {
// Handle creation of unrecognized child node EditParts here
+ if(model instanceof Connector){
+ if(((Connector) model).getType().equals(SequenceUtil.OBSERVATION_LINK_TYPE))
+ return new ObservationLinkEditPart((View)model);
+ }
return null;
}
/**
- * @generated
+ * @generated NOT
*/
public static CellEditorLocator getTextCellEditorLocator(ITextAwareEditPart source) {
if(source.getFigure() instanceof IMultilineEditableFigure)
return new MultilineCellEditorLocator((IMultilineEditableFigure)source.getFigure());
else if(source.getFigure() instanceof WrappingLabel)
return new TextCellEditorLocator((WrappingLabel)source.getFigure());
+ else if(source.getFigure() instanceof NodeFigure) {
+ WrappingLabel wrappingLabel = (WrappingLabel)source.getFigure().getChildren().get(0);
+ if(wrappingLabel!=null){
+ return new TextCellEditorLocator(wrappingLabel);
+ }
+ return new LabelCellEditorLocator((Label)source.getFigure());
+ }
else {
return new LabelCellEditorLocator((Label)source.getFigure());
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ActionExecutionSpecificationItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ActionExecutionSpecificationItemSemanticEditPolicy.java
index e06219ea35c..767f3fc53fd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ActionExecutionSpecificationItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/ActionExecutionSpecificationItemSemanticEditPolicy.java
@@ -13,6 +13,9 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
@@ -51,6 +54,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.MessageReorientCom
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CommentAnnotatedElementEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ConstraintConstrainedElementEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GeneralOrderingEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message2EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message3EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message4EditPart;
@@ -60,6 +64,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceDeleteHelper;
+import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.OccurrenceSpecification;
/**
@@ -75,9 +80,11 @@ public class ActionExecutionSpecificationItemSemanticEditPolicy extends UMLBaseI
}
/**
- * @generated
+ * @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ CompoundCommand deleteElementsCommand = new CompoundCommand();
+
EObject selectedEObject = req.getElementToDestroy();
IElementEditService provider = ElementEditServiceUtils.getCommandProvider(selectedEObject);
if(provider != null) {
@@ -85,9 +92,26 @@ public class ActionExecutionSpecificationItemSemanticEditPolicy extends UMLBaseI
ICommand deleteCommand = provider.getEditCommand(req);
if(deleteCommand != null) {
- return new ICommandProxy(deleteCommand);
+ deleteElementsCommand.add(new ICommandProxy(deleteCommand));
}
}
+
+ if (getHost().getParent() instanceof LifelineEditPart) {
+ if (selectedEObject instanceof ExecutionSpecification) {
+ List<OccurrenceSpecification> oss = new ArrayList<OccurrenceSpecification>();
+ oss.add(((ExecutionSpecification) selectedEObject).getStart());
+ oss.add(((ExecutionSpecification) selectedEObject).getFinish());
+ SequenceDeleteHelper
+ .addDeleteRelatedTimeObservationLinkCommand(
+ deleteElementsCommand, req.getEditingDomain(),
+ (LifelineEditPart) getHost().getParent(), oss,true);
+ }
+ }
+
+ if(deleteElementsCommand.size()>0){
+ return deleteElementsCommand;
+ }
+
return UnexecutableCommand.INSTANCE;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/BehaviorExecutionSpecificationItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/BehaviorExecutionSpecificationItemSemanticEditPolicy.java
index 8b7defc710f..37170dd9d6f 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/BehaviorExecutionSpecificationItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/BehaviorExecutionSpecificationItemSemanticEditPolicy.java
@@ -13,6 +13,9 @@
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
@@ -51,6 +54,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.MessageReorientCom
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CommentAnnotatedElementEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ConstraintConstrainedElementEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.GeneralOrderingEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.LifelineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message2EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message3EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message4EditPart;
@@ -60,6 +64,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.Message7EditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.MessageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceDeleteHelper;
+import org.eclipse.uml2.uml.ExecutionSpecification;
import org.eclipse.uml2.uml.OccurrenceSpecification;
/**
@@ -75,9 +80,11 @@ public class BehaviorExecutionSpecificationItemSemanticEditPolicy extends UMLBas
}
/**
- * @generated
+ * @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ CompoundCommand deleteElementsCommand = new CompoundCommand();
+
EObject selectedEObject = req.getElementToDestroy();
IElementEditService provider = ElementEditServiceUtils.getCommandProvider(selectedEObject);
if(provider != null) {
@@ -85,9 +92,26 @@ public class BehaviorExecutionSpecificationItemSemanticEditPolicy extends UMLBas
ICommand deleteCommand = provider.getEditCommand(req);
if(deleteCommand != null) {
- return new ICommandProxy(deleteCommand);
+ deleteElementsCommand.add(new ICommandProxy(deleteCommand));
}
}
+
+ if (getHost().getParent() instanceof LifelineEditPart) {
+ if (selectedEObject instanceof ExecutionSpecification) {
+ List<OccurrenceSpecification> oss = new ArrayList<OccurrenceSpecification>();
+ oss.add(((ExecutionSpecification) selectedEObject).getStart());
+ oss.add(((ExecutionSpecification) selectedEObject).getFinish());
+ SequenceDeleteHelper
+ .addDeleteRelatedTimeObservationLinkCommand(
+ deleteElementsCommand, req.getEditingDomain(),
+ (LifelineEditPart) getHost().getParent(), oss,true);
+ }
+ }
+
+ if(deleteElementsCommand.size()>0){
+ return deleteElementsCommand;
+ }
+
return UnexecutableCommand.INSTANCE;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionInteractionCompartmentItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionInteractionCompartmentItemSemanticEditPolicy.java
index 3af8ff471bb..2bb30e82b9c 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionInteractionCompartmentItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/InteractionInteractionCompartmentItemSemanticEditPolicy.java
@@ -15,10 +15,12 @@ package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.papyrus.uml.diagram.sequence.command.CustomTimeObservationCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.CombinedFragmentCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.CommentCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.ConsiderIgnoreFragmentCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.ConstraintCreateCommand;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.DurationObservationCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.InteractionUseCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.edit.commands.LifelineCreateCommand;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
@@ -36,7 +38,7 @@ public class InteractionInteractionCompartmentItemSemanticEditPolicy extends UML
}
/**
- * @generated
+ * @generated NOT
*/
protected Command getCreateCommand(CreateElementRequest req) {
if(UMLElementTypes.ConsiderIgnoreFragment_3007 == req.getElementType()) {
@@ -57,6 +59,12 @@ public class InteractionInteractionCompartmentItemSemanticEditPolicy extends UML
if(UMLElementTypes.Comment_3009 == req.getElementType()) {
return getGEFWrapper(new CommentCreateCommand(req));
}
+ if(UMLElementTypes.TimeObservation_3020 == req.getElementType()) {
+ return getGEFWrapper(new CustomTimeObservationCreateCommand(req));
+ }
+ if(UMLElementTypes.DurationObservation_3024 == req.getElementType()) {
+ return getGEFWrapper(new DurationObservationCreateCommand(req));
+ }
return super.getCreateCommand(req);
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineItemSemanticEditPolicy.java
index 43f78e9b7a3..ee10dea3af8 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/LifelineItemSemanticEditPolicy.java
@@ -103,9 +103,10 @@ public class LifelineItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
if(UMLElementTypes.TimeConstraint_3019 == req.getElementType()) {
return getGEFWrapper(new TimeConstraintCreateCommand(req));
}
- if(UMLElementTypes.TimeObservation_3020 == req.getElementType()) {
- return getGEFWrapper(new TimeObservationCreateCommand(req));
- }
+//Fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=364826
+// if(UMLElementTypes.TimeObservation_3020 == req.getElementType()) {
+// return getGEFWrapper(new TimeObservationCreateCommand(req));
+// }
if(UMLElementTypes.DurationConstraint_3021 == req.getElementType()) {
return getGEFWrapper(new DurationConstraintCreateCommand(req));
}
@@ -125,9 +126,10 @@ public class LifelineItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
if(UMLElementTypes.DurationConstraint_3023 == req.getElementType()) {
return getGEFWrapper(new DurationConstraintCreateCommand(req));
}
- if(UMLElementTypes.DurationObservation_3024 == req.getElementType()) {
- return getGEFWrapper(new DurationObservationCreateCommand(req));
- }
+// Fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=364826
+// if(UMLElementTypes.DurationObservation_3024 == req.getElementType()) {
+// return getGEFWrapper(new DurationObservationCreateCommand(req));
+// }
return super.getCreateCommand(req);
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message2ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message2ItemSemanticEditPolicy.java
index da37fb65131..2ada9c2064f 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message2ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message2ItemSemanticEditPolicy.java
@@ -89,7 +89,7 @@ public class Message2ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message3ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message3ItemSemanticEditPolicy.java
index e3c51c6f8ac..7cde3250265 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message3ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message3ItemSemanticEditPolicy.java
@@ -87,7 +87,7 @@ public class Message3ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message4ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message4ItemSemanticEditPolicy.java
index 9a5cdb4d794..6b5c3ef431e 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message4ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message4ItemSemanticEditPolicy.java
@@ -89,7 +89,7 @@ public class Message4ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
CompoundCommand destroyElementCommand = new CompoundCommand();
- Command deleteCommand = SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ Command deleteCommand = SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
destroyElementCommand.add(deleteCommand);
SequenceUtil.addRestoreConstraintOfLifelineCommand(destroyElementCommand, getHost());
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message5ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message5ItemSemanticEditPolicy.java
index 6af9fbdba64..13baa6fb438 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message5ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message5ItemSemanticEditPolicy.java
@@ -87,7 +87,7 @@ public class Message5ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message6ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message6ItemSemanticEditPolicy.java
index e4ede8a5831..cd094e72933 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message6ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message6ItemSemanticEditPolicy.java
@@ -87,7 +87,7 @@ public class Message6ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message7ItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message7ItemSemanticEditPolicy.java
index 145f040c921..23479a97b2a 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message7ItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/Message7ItemSemanticEditPolicy.java
@@ -87,7 +87,7 @@ public class Message7ItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolic
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MessageItemSemanticEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MessageItemSemanticEditPolicy.java
index 4dfdfde7986..68a5afe7189 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MessageItemSemanticEditPolicy.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/MessageItemSemanticEditPolicy.java
@@ -87,7 +87,7 @@ public class MessageItemSemanticEditPolicy extends UMLBaseItemSemanticEditPolicy
* @generated NOT
*/
protected Command getDestroyElementCommand(DestroyElementRequest req) {
- return SequenceDeleteHelper.completeDeleteMessageCommand(req);
+ return SequenceDeleteHelper.completeDeleteMessageCommand(req,getHost());
}
/**
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLPaletteFactory.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLPaletteFactory.java
index 70b66c482aa..3c061d86481 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLPaletteFactory.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLPaletteFactory.java
@@ -16,13 +16,22 @@ package org.eclipse.papyrus.uml.diagram.sequence.part;
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.SharedCursors;
import org.eclipse.gef.Tool;
+import org.eclipse.gef.requests.SimpleFactory;
+import org.eclipse.gef.tools.ConnectionCreationTool;
+import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
import org.eclipse.gmf.runtime.diagram.ui.services.palette.PaletteFactory;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeConnectionTool;
import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeCreationTool;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ObservationLinkPolicy.ObservationLink;
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
import org.eclipse.papyrus.uml.diagram.sequence.service.DurationCreationTool;
+import org.eclipse.papyrus.uml.diagram.sequence.util.SequenceUtil;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.widgets.Display;
/**
* @generated
@@ -159,6 +168,8 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
*/
private final static String CREATECONSTRAINTLINK10CREATIONTOOL = "createConstraintlink10CreationTool"; //$NON-NLS-1$
+ private final static String CREATEOBSERVATIONLINKCREATIONTOOL = "createObservationLinkCreationTool"; //$NON-NLS-1$
+
/**
* @generated
*/
@@ -167,7 +178,7 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
}
/**
- * @generated
+ * @generated NOT
*/
public Tool createTool(String toolId) {
if(toolId.equals(CREATELIFELINE1CREATIONTOOL)) {
@@ -248,6 +259,10 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
if(toolId.equals(CREATECONSTRAINTLINK10CREATIONTOOL)) {
return createConstraintlink10CreationTool();
}
+ if(toolId.equals(CREATEOBSERVATIONLINKCREATIONTOOL)) {
+ return createObservationLinkCreationTool();
+ }
+
// default return: null
return null;
@@ -389,7 +404,10 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
types.add(UMLElementTypes.DurationObservation_3024);
// use DurationCreationTool
- Tool tool = new DurationCreationTool(types);
+ //Tool tool = new DurationCreationTool(types);
+ AspectUnspecifiedTypeCreationTool tool = new AspectUnspecifiedTypeCreationTool(types);
+ tool.setDefaultCursor(SharedCursors.HAND);
+ tool.setDisabledCursor(SharedCursors.NO);
return tool;
}
@@ -405,13 +423,15 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
}
/**
- * @generated
+ * @generated NOT
*/
private Tool createTimeObservation14CreationTool() {
List<IElementType> types = new ArrayList<IElementType>(1);
types.add(UMLElementTypes.TimeObservation_3020);
- Tool tool = new AspectUnspecifiedTypeCreationTool(types);
+ AspectUnspecifiedTypeCreationTool tool = new AspectUnspecifiedTypeCreationTool(types);
+ tool.setDefaultCursor(SharedCursors.HAND);
+ tool.setDisabledCursor(SharedCursors.NO);
return tool;
}
@@ -548,4 +568,49 @@ public class UMLPaletteFactory extends PaletteFactory.Adapter {
Tool tool = new AspectUnspecifiedTypeConnectionTool(types);
return tool;
}
+
+ private Tool createObservationLinkCreationTool() {
+ ConnectionCreationTool tool = new ConnectionCreationTool(new SimpleFactory(ObservationLink.class)){
+ protected String getCommandName() {
+ if (isInState(STATE_CONNECTION_STARTED
+ | STATE_ACCESSIBLE_DRAG_IN_PROGRESS))
+ return SequenceUtil.OBSERVATION_LINK_REQUEST_END;
+ else
+ return SequenceUtil.OBSERVATION_LINK_REQUEST_START;
+ }
+
+ @Override
+ protected boolean handleButtonUp(int button) {
+ setUnloadWhenFinished(true);
+ return super.handleButtonUp(button);
+ }
+
+ protected boolean updateTargetUnderMouse() {
+ if (!isTargetLocked()) {
+ EditPart editPart = getCurrentViewer()
+ .findObjectAtExcluding(getLocation(), getExclusionSet(),
+ getTargetingConditional());
+ if (editPart != null)
+ editPart = editPart.getTargetEditPart(getTargetRequest());
+ boolean changed = getTargetEditPart() != editPart;
+ setTargetEditPart(editPart);
+ return changed;
+ } else
+ return false;
+ }
+
+
+ };
+
+ tool.setDefaultCursor(new Cursor(Display.getDefault(),
+ DiagramUIPluginImages.DESC_CONNECTION_CURSOR_SOURCE.getImageData(),
+ DiagramUIPluginImages.DESC_CONNECTION_CURSOR_MASK.getImageData(), 0, 0));
+ tool.setDisabledCursor(new Cursor(Display
+ .getDefault(), DiagramUIPluginImages.DESC_NO_CONNECTION_CURSOR_SOURCE
+ .getImageData(), DiagramUIPluginImages.DESC_NO_CONNECTION_CURSOR_MASK
+ .getImageData(), 0, 0));
+
+ return tool;
+ }
+
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLVisualIDRegistry.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLVisualIDRegistry.java
index 6652af0fd95..7be2a45bdbd 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLVisualIDRegistry.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/part/UMLVisualIDRegistry.java
@@ -337,6 +337,16 @@ public class UMLVisualIDRegistry {
) {
return CommentEditPart.VISUAL_ID;
}
+ if (UMLPackage.eINSTANCE.getTimeObservation().isSuperTypeOf(domainElement.eClass())
+
+ ) {
+ return TimeObservationEditPart.VISUAL_ID;
+ }
+ if (UMLPackage.eINSTANCE.getDurationObservation().isSuperTypeOf(domainElement.eClass())
+
+ ) {
+ return DurationObservationEditPart.VISUAL_ID;
+ }
break;
case CombinedFragmentCombinedFragmentCompartmentEditPart.VISUAL_ID:
if(UMLPackage.eINSTANCE.getInteractionOperand().isSuperTypeOf(domainElement.eClass())
@@ -543,6 +553,12 @@ public class UMLVisualIDRegistry {
if(CommentEditPart.VISUAL_ID == nodeVisualID) {
return true;
}
+ if(TimeObservationEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ if(DurationObservationEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
break;
case CombinedFragmentCombinedFragmentCompartmentEditPart.VISUAL_ID:
if(InteractionOperandEditPart.VISUAL_ID == nodeVisualID) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLEditPartProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLEditPartProvider.java
index 15e275de349..d15753a4607 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLEditPartProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLEditPartProvider.java
@@ -25,6 +25,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpart.IEditPartOperation;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.UMLEditPartFactory;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ObservationLinkPolicy.ObservationLink;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLVisualIDRegistry;
/**
@@ -129,11 +130,14 @@ public class UMLEditPartProvider extends AbstractEditPartProvider {
}
/**
- * @generated
+ * @generated NOT
*/
public synchronized boolean provides(IOperation operation) {
if(operation instanceof CreateGraphicEditPartOperation) {
View view = ((IEditPartOperation)operation).getView();
+ if(view instanceof ObservationLink){
+ return true;
+ }
if(!PackageEditPart.MODEL_ID.equals(UMLVisualIDRegistry.getModelID(view))) {
return false;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLModelingAssistantProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLModelingAssistantProvider.java
index c13e9b5254b..8d6fd70e454 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLModelingAssistantProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLModelingAssistantProvider.java
@@ -30,6 +30,7 @@ import org.eclipse.gmf.runtime.emf.ui.services.modelingassistant.ModelingAssista
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.uml.diagram.sequence.ObservationLinkMetamodelType;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.ActionExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.BehaviorExecutionSpecificationEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CombinedFragment2EditPart;
@@ -51,6 +52,7 @@ import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.StateInvariantEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeConstraintEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationEditPart;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.TimeObservationLabelEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.Messages;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
import org.eclipse.swt.widgets.Display;
@@ -117,7 +119,7 @@ public class UMLModelingAssistantProvider extends ModelingAssistantProvider {
}
/**
- * @generated
+ * @generated NOT
*/
public List getRelTypesOnSource(IAdaptable source) {
IGraphicalEditPart sourceEditPart = (IGraphicalEditPart)source.getAdapter(IGraphicalEditPart.class);
@@ -176,7 +178,15 @@ public class UMLModelingAssistantProvider extends ModelingAssistantProvider {
return ((DurationConstraintInMessageEditPart)sourceEditPart).getMARelTypesOnSource();
}
if(sourceEditPart instanceof DurationObservationEditPart) {
- return ((DurationObservationEditPart)sourceEditPart).getMARelTypesOnSource();
+ //return ((DurationObservationEditPart)sourceEditPart).getMARelTypesOnSource();
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(ObservationLinkMetamodelType.getInstance());
+ return types;
+ }
+ if(sourceEditPart instanceof TimeObservationLabelEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(ObservationLinkMetamodelType.getInstance());
+ return types;
}
return Collections.EMPTY_LIST;
}
@@ -247,7 +257,7 @@ public class UMLModelingAssistantProvider extends ModelingAssistantProvider {
}
/**
- * @generated
+ * @generated NOT
*/
public List getRelTypesOnSourceAndTarget(IAdaptable source, IAdaptable target) {
IGraphicalEditPart sourceEditPart = (IGraphicalEditPart)source.getAdapter(IGraphicalEditPart.class);
@@ -307,7 +317,15 @@ public class UMLModelingAssistantProvider extends ModelingAssistantProvider {
return ((DurationConstraintInMessageEditPart)sourceEditPart).getMARelTypesOnSourceAndTarget(targetEditPart);
}
if(sourceEditPart instanceof DurationObservationEditPart) {
- return ((DurationObservationEditPart)sourceEditPart).getMARelTypesOnSourceAndTarget(targetEditPart);
+ //return ((DurationObservationEditPart)sourceEditPart).getMARelTypesOnSourceAndTarget(targetEditPart);
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(ObservationLinkMetamodelType.getInstance());
+ return types;
+ }
+ if(sourceEditPart instanceof TimeObservationLabelEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(ObservationLinkMetamodelType.getInstance());
+ return types;
}
return Collections.EMPTY_LIST;
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
index 568bf093325..07469663653 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/src/org/eclipse/papyrus/uml/diagram/sequence/providers/UMLViewProvider.java
@@ -531,7 +531,7 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
}
/**
- * @generated
+ * @generated NOT
*/
public Node createTimeObservation_3020(EObject domainElement, View containerView, int index, boolean persisted, PreferencesHint preferencesHint) {
Shape node = NotationFactory.eINSTANCE.createShape();
@@ -548,18 +548,18 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
PreferenceInitializerForElementHelper.initBackgroundFromPrefs(node, prefStore, "TimeObservation");
- Node label5010 = createLabel(node, UMLVisualIDRegistry.getType(TimeObservationLabelEditPart.VISUAL_ID));
+ Node label5010 = createLabel(node, UMLVisualIDRegistry.getType(TimeObservationLabelEditPart.VISUAL_ID),true);
label5010.setLayoutConstraint(NotationFactory.eINSTANCE.createLocation());
Location location5010 = (Location)label5010.getLayoutConstraint();
- location5010.setX(22);
- location5010.setY(-7);
- Node label5014 = createLabel(node, UMLVisualIDRegistry.getType(TimeObservationAppliedStereotypeEditPart.VISUAL_ID));
+ location5010.setX(0);
+ location5010.setY(0);
+ Node label5014 = createLabel(node, UMLVisualIDRegistry.getType(TimeObservationAppliedStereotypeEditPart.VISUAL_ID),true);
label5014.setLayoutConstraint(NotationFactory.eINSTANCE.createLocation());
Location location5014 = (Location)label5014.getLayoutConstraint();
location5014.setX(0);
- location5014.setY(-22);
+ location5014.setY(0);
return node;
}
@@ -829,7 +829,7 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
// custom layout for location
Location location3024 = (Location)node.getLayoutConstraint();
location3024.setX(0);
- location3024.setY(20);
+ location3024.setY(0);
// initializeFromPreferences
final IPreferenceStore prefStore = (IPreferenceStore)preferencesHint.getPreferenceStore();
@@ -841,7 +841,7 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
Location location5017 = (Location)label5017.getLayoutConstraint();
location5017.setX(0);
- location5017.setY(-22);
+ location5017.setY(0);
return node;
}
@@ -1289,6 +1289,14 @@ public class UMLViewProvider extends AbstractProvider implements IViewProvider {
ViewUtil.insertChildView(owner, rv, ViewUtil.APPEND, true);
return rv;
}
+
+ protected Node createLabel(View owner, String hint, boolean isTimeObservationLable) {
+ Shape node = NotationFactory.eINSTANCE.createShape();
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(hint);
+ ViewUtil.insertChildView(owner, node, ViewUtil.APPEND, true);
+ return node;
+ }
/**
* @generated

Back to the top