Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 377501 | Differences between
and this patch

Collapse All | Expand All

(-)custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceGraphicalNodeEditPolicy.java (+7 lines)
Lines 20-25 Link Here
20
import java.util.Map.Entry;
20
import java.util.Map.Entry;
21
21
22
import org.eclipse.draw2d.Connection;
22
import org.eclipse.draw2d.Connection;
23
import org.eclipse.draw2d.ConnectionRouter;
23
import org.eclipse.draw2d.IFigure;
24
import org.eclipse.draw2d.IFigure;
24
import org.eclipse.draw2d.Polyline;
25
import org.eclipse.draw2d.Polyline;
25
import org.eclipse.draw2d.geometry.Point;
26
import org.eclipse.draw2d.geometry.Point;
Lines 514-517 Link Here
514
		return false;
515
		return false;
515
	}
516
	}
516
517
518
	protected ConnectionRouter getDummyConnectionRouter(CreateConnectionRequest req) {
519
		if(req.getSourceEditPart() instanceof InteractionEditPart || req.getSourceEditPart() instanceof CombinedFragmentEditPart){
520
			return ConnectionRouter.NULL; 
521
		}
522
		return super.getDummyConnectionRouter(req);
523
	}
517
}
524
}
(-)custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ExecutionSpecificationEndEditPart.java (-1 lines)
Lines 188-194 Link Here
188
			return false;
188
			return false;
189
		
189
		
190
		if(model == this.resolveSemanticElement()) {
190
		if(model == this.resolveSemanticElement()) {
191
			System.out.println( ((OccurrenceSpecification) model).getName() );
192
			if(!this.getNotationView().equals( e.getTarget()))
191
			if(!this.getNotationView().equals( e.getTarget()))
193
				return true;
192
				return true;
194
		}
193
		}
(-)custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/AbstractExecutionSpecificationEditPart.java (-1 / +96 lines)
Lines 3-13 Link Here
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.List;
4
import java.util.List;
5
5
6
import org.eclipse.draw2d.ConnectionAnchor;
6
import org.eclipse.draw2d.IFigure;
7
import org.eclipse.draw2d.IFigure;
7
import org.eclipse.draw2d.Locator;
8
import org.eclipse.draw2d.Locator;
8
import org.eclipse.draw2d.PositionConstants;
9
import org.eclipse.draw2d.PositionConstants;
9
import org.eclipse.draw2d.RelativeLocator;
10
import org.eclipse.draw2d.RelativeLocator;
10
import org.eclipse.draw2d.Shape;
11
import org.eclipse.draw2d.TreeSearch;
11
import org.eclipse.draw2d.TreeSearch;
12
import org.eclipse.draw2d.geometry.Dimension;
12
import org.eclipse.draw2d.geometry.Dimension;
13
import org.eclipse.draw2d.geometry.Point;
13
import org.eclipse.draw2d.geometry.Point;
Lines 16-21 Link Here
16
import org.eclipse.draw2d.geometry.Rectangle;
16
import org.eclipse.draw2d.geometry.Rectangle;
17
import org.eclipse.emf.common.notify.Notification;
17
import org.eclipse.emf.common.notify.Notification;
18
import org.eclipse.emf.ecore.EObject;
18
import org.eclipse.emf.ecore.EObject;
19
import org.eclipse.gef.ConnectionEditPart;
19
import org.eclipse.gef.EditPart;
20
import org.eclipse.gef.EditPart;
20
import org.eclipse.gef.EditPolicy;
21
import org.eclipse.gef.EditPolicy;
21
import org.eclipse.gef.Request;
22
import org.eclipse.gef.Request;
Lines 23-30 Link Here
23
import org.eclipse.gef.commands.UnexecutableCommand;
24
import org.eclipse.gef.commands.UnexecutableCommand;
24
import org.eclipse.gef.handles.HandleBounds;
25
import org.eclipse.gef.handles.HandleBounds;
25
import org.eclipse.gef.requests.ChangeBoundsRequest;
26
import org.eclipse.gef.requests.ChangeBoundsRequest;
27
import org.eclipse.gef.requests.ReconnectRequest;
26
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
28
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
27
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy;
29
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy;
30
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
28
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeRequest;
31
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeRequest;
29
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
32
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
30
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
33
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
Lines 38-44 Link Here
38
import org.eclipse.papyrus.infra.emf.appearance.helper.ShadowFigureHelper;
41
import org.eclipse.papyrus.infra.emf.appearance.helper.ShadowFigureHelper;
39
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
42
import org.eclipse.papyrus.infra.gmfdiag.common.figure.node.IPapyrusNodeFigure;
40
import org.eclipse.papyrus.uml.diagram.common.figure.node.PapyrusNodeFigure;
43
import org.eclipse.papyrus.uml.diagram.common.figure.node.PapyrusNodeFigure;
44
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
41
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineXYLayoutEditPolicy;
45
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.LifelineXYLayoutEditPolicy;
46
import org.eclipse.papyrus.uml.diagram.sequence.providers.UMLElementTypes;
42
import org.eclipse.swt.graphics.Color;
47
import org.eclipse.swt.graphics.Color;
43
import org.eclipse.uml2.uml.ExecutionSpecification;
48
import org.eclipse.uml2.uml.ExecutionSpecification;
44
49
Lines 375-378 Link Here
375
		}
380
		}
376
		super.eraseTargetFeedback(request);
381
		super.eraseTargetFeedback(request);
377
	}
382
	}
383
	
384
	/**
385
	 * Add connection on top off the figure during the feedback.
386
	 */
387
	public ConnectionAnchor getTargetConnectionAnchor(Request request) {
388
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
389
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
390
			List<?> relationshipTypes = createRequest.getElementTypes();
391
			for(Object obj : relationshipTypes) {
392
				if(UMLElementTypes.Message_4003.equals(obj)) {
393
					// Sync Message
394
					if(!createRequest.getTargetEditPart().equals(createRequest.getSourceEditPart())) {
395
						return new AnchorHelper.FixedAnchorEx(getFigure(),  PositionConstants.TOP);
396
					}
397
					// otherwise, this is a recursive call, let destination free
398
				}
399
			}
400
		} else if(request instanceof ReconnectRequest) {
401
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
402
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
403
			if(connectionEditPart instanceof MessageEditPart) {
404
				// Sync Message
405
				return new AnchorHelper.FixedAnchorEx(getFigure(), PositionConstants.TOP);
406
			}
407
		}
408
409
		return super.getTargetConnectionAnchor(request);
410
	}
411
412
	/**
413
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
414
	 * 
415
	 * @param connEditPart
416
	 *        The connection edit part.
417
	 * @return The anchor.
418
	 */
419
	@Override
420
	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connEditPart) {
421
		if(connEditPart instanceof MessageEditPart) {
422
			// Sync Message
423
			return new AnchorHelper.FixedAnchorEx(getFigure(),  PositionConstants.TOP);
424
		}
425
		return super.getTargetConnectionAnchor(connEditPart);
426
	}
427
	
428
	
429
	/**
430
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
431
	 * 
432
	 * @param request
433
	 *        The request
434
	 * @return The anchor
435
	 */
436
	@Override
437
	public ConnectionAnchor getSourceConnectionAnchor(Request request) {
438
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
439
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
440
			List<?> relationshipTypes = createRequest.getElementTypes();
441
			for(Object obj : relationshipTypes) {
442
				if(UMLElementTypes.Message_4005.equals(obj)) {
443
					// Reply Message
444
					return new AnchorHelper.FixedAnchorEx(getFigure(),PositionConstants.BOTTOM);
445
				}
446
			}
447
		} else if(request instanceof ReconnectRequest) {
448
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
449
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
450
			if(connectionEditPart instanceof Message3EditPart) {
451
				// Reply Message
452
				return new AnchorHelper.FixedAnchorEx(getFigure(),PositionConstants.BOTTOM);
453
			}
454
		}
455
		return super.getSourceConnectionAnchor(request);
456
	}
457
458
	/**
459
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
460
	 * 
461
	 * @param connEditPart
462
	 *        The connection edit part.
463
	 * @return The anchor.
464
	 */
465
	@Override
466
	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connEditPart) {
467
		if(connEditPart instanceof Message3EditPart) {
468
			// Reply Message
469
			return new AnchorHelper.FixedAnchorEx(getFigure(), PositionConstants.BOTTOM);
470
		}
471
		return super.getSourceConnectionAnchor(connEditPart);
472
	}
378
}
473
}
(-)src/org/eclipse/papyrus/uml/diagram/sequence/edit/helpers/AnchorHelper.java (-29 / +40 lines)
Lines 2-7 Link Here
2
2
3
import org.eclipse.draw2d.ConnectionAnchor;
3
import org.eclipse.draw2d.ConnectionAnchor;
4
import org.eclipse.draw2d.IFigure;
4
import org.eclipse.draw2d.IFigure;
5
import org.eclipse.draw2d.PositionConstants;
5
import org.eclipse.draw2d.geometry.Dimension;
6
import org.eclipse.draw2d.geometry.Dimension;
6
import org.eclipse.draw2d.geometry.Point;
7
import org.eclipse.draw2d.geometry.Point;
7
import org.eclipse.draw2d.geometry.PointList;
8
import org.eclipse.draw2d.geometry.PointList;
Lines 23-29 Link Here
23
import org.eclipse.gmf.runtime.notation.Anchor;
24
import org.eclipse.gmf.runtime.notation.Anchor;
24
import org.eclipse.gmf.runtime.notation.Edge;
25
import org.eclipse.gmf.runtime.notation.Edge;
25
import org.eclipse.gmf.runtime.notation.IdentityAnchor;
26
import org.eclipse.gmf.runtime.notation.IdentityAnchor;
26
import org.eclipse.papyrus.uml.diagram.common.draw2d.anchors.FixedAnchor;
27
27
28
28
29
public class AnchorHelper {
29
public class AnchorHelper {
Lines 95-149 Link Here
95
		public IntersectionPointAnchor(IFigure fig) {
95
		public IntersectionPointAnchor(IFigure fig) {
96
			super(fig);
96
			super(fig);
97
		}
97
		}
98
		
98
					
99
		protected Point getLocation(Point ownReference, Point foreignReference) {
99
		protected Point getLocation(Point ownReference, Point foreignReference) {
100
			PointList intersections = getIntersectionPoints(ownReference, foreignReference);
100
			PointList intersections = getIntersectionPoints(ownReference, foreignReference);
101
			if (intersections!=null && intersections.size()!=0) {
101
			if (intersections != null && intersections.size() > 0) {
102
				int size = intersections.size();
102
				int size = intersections.size();
103
				double dist = foreignReference.getDistance(ownReference);
103
				Point near = intersections.getPoint(0);
104
				for(int i = 0; i < size; i ++){
104
				double dist = ownReference.getDistance(near);
105
				for(int i = 1; i < size; i ++){
105
					Point loc = intersections.getPoint(i);
106
					Point loc = intersections.getPoint(i);
106
					if(isInOrder(foreignReference,ownReference,dist, loc)){
107
					double d = ownReference.getDistance(loc);
107
						return loc;
108
					if(d < dist){
109
						dist = d;
110
						near = loc;
108
					}
111
					}
109
				}
112
				}
110
				return intersections.getFirstPoint();
113
				return near;
111
			}
114
			}
112
			return null;
115
			return null;
113
		}	
116
		}	
114
		
117
		
115
		private boolean isInOrder(Point start, Point end, double dist, Point loc) {
118
//		private boolean isInOrder(Point start, Point end, double dist, Point loc) {
116
			double total = loc.getDistance(start);
119
//			double total = loc.getDistance(start);
117
			double dist2 = loc.getDistance(end);
120
//			double dist2 = loc.getDistance(end);
118
			if(total < dist || total < dist2)
121
//			if(total < dist || total < dist2)
119
				return false;
122
//				return false;
120
			
123
//			
121
			if(Math.abs(total - dist - dist2) < 0.01)
124
//			if(Math.abs(total - dist - dist2) < 0.01)
122
				return true;
125
//				return true;
123
			
126
//			
124
			return false;
127
//			return false;
125
		}	
128
//		}	
126
	}
129
	}
127
130
128
	public static class FixedAnchorEx extends FixedAnchor {
131
	public static class FixedAnchorEx extends SlidableAnchor {
129
132
		
130
		private int location;
133
		private int location;
131
134
132
		public FixedAnchorEx(IFigure f, int location) {
135
		public FixedAnchorEx(IFigure f, int location) {
133
			super(f, location);
136
			super(f, location ==  PositionConstants.TOP ? new PrecisionPoint(0.0, 0.0) : new PrecisionPoint(0.0, 1.0));
134
			this.location = location;
137
			this.location = location;
135
		}
138
		}
136
139
137
		public Point getLocation(Point reference) {
140
		public Point getLocation(Point reference) {
138
			if(location == TOP)
141
			if(location ==  PositionConstants.TOP){
139
				return getBox().getTop();
142
				Point topLeft = getBox().getTopLeft();
140
			else if(location == BOTTOM)
143
				if(reference.x < topLeft.x)
141
				return getBox().getBottom();
144
					return topLeft;
142
145
				else
146
					return getBox().getTopRight();
147
			}else if(location ==  PositionConstants.BOTTOM){
148
				Point bottomLeft = getBox().getBottomLeft();
149
				if(reference.x < bottomLeft.x)
150
					return bottomLeft;
151
				else
152
					return getBox().getBottomRight();
153
			}
143
			return super.getLocation(reference);
154
			return super.getLocation(reference);
144
		}
155
		}
145
	}
156
	}
146
	
157
147
	public static class SideAnchor extends SlidableAnchor{
158
	public static class SideAnchor extends SlidableAnchor{
148
159
149
		private boolean isRight;
160
		private boolean isRight;
Lines 161-167 Link Here
161
		public String getTerminal() {
172
		public String getTerminal() {
162
			String side = isRight? "R": "L";
173
			String side = isRight? "R": "L";
163
			return super.getTerminal() + "{" + side + "}";
174
			return super.getTerminal() + "{" + side + "}";
164
		}
175
		}		
165
	}
176
	}
166
	
177
	
167
	public static class InnerPointAnchor extends SlidableAnchor{
178
	public static class InnerPointAnchor extends SlidableAnchor{
(-)src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/BehaviorExecutionSpecificationEditPart.java (-101 / +1 lines)
Lines 17-29 Link Here
17
import java.util.LinkedList;
17
import java.util.LinkedList;
18
import java.util.List;
18
import java.util.List;
19
19
20
import org.eclipse.draw2d.ConnectionAnchor;
21
import org.eclipse.draw2d.DelegatingLayout;
20
import org.eclipse.draw2d.DelegatingLayout;
22
import org.eclipse.draw2d.IFigure;
21
import org.eclipse.draw2d.IFigure;
23
import org.eclipse.draw2d.PositionConstants;
22
import org.eclipse.draw2d.PositionConstants;
24
import org.eclipse.draw2d.Shape;
23
import org.eclipse.draw2d.Shape;
25
import org.eclipse.emf.ecore.EStructuralFeature;
24
import org.eclipse.emf.ecore.EStructuralFeature;
26
import org.eclipse.gef.ConnectionEditPart;
27
import org.eclipse.gef.EditPart;
25
import org.eclipse.gef.EditPart;
28
import org.eclipse.gef.EditPolicy;
26
import org.eclipse.gef.EditPolicy;
29
import org.eclipse.gef.Request;
27
import org.eclipse.gef.Request;
Lines 32-41 Link Here
32
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
30
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
33
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
31
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
34
import org.eclipse.gef.requests.CreateRequest;
32
import org.eclipse.gef.requests.CreateRequest;
35
import org.eclipse.gef.requests.ReconnectRequest;
36
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
33
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
37
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
34
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
38
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
39
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
35
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
40
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
36
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
41
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
37
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
Lines 45-52 Link Here
45
import org.eclipse.jface.preference.PreferenceConverter;
41
import org.eclipse.jface.preference.PreferenceConverter;
46
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
42
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
47
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
43
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
48
import org.eclipse.papyrus.uml.diagram.common.draw2d.anchors.FixedAnchor;
49
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
50
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.BehaviorExecutionSpecificationItemSemanticEditPolicy;
44
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.BehaviorExecutionSpecificationItemSemanticEditPolicy;
51
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
45
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
52
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExecutionSpecificationComponentEditPolicy;
46
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExecutionSpecificationComponentEditPolicy;
Lines 1019-1117 Link Here
1019
			result = getStructuralFeatureValue(feature);
1013
			result = getStructuralFeatureValue(feature);
1020
		}
1014
		}
1021
		return result;
1015
		return result;
1022
	}
1016
	}	
1023
1024
	/**
1025
	 * Add connection on top off the figure
1026
	 */
1027
	@Override
1028
	public ConnectionAnchor getTargetConnectionAnchor(Request request) {
1029
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
1030
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
1031
			List<?> relationshipTypes = createRequest.getElementTypes();
1032
			for(Object obj : relationshipTypes) {
1033
				if(UMLElementTypes.Message_4003.equals(obj)) {
1034
					// Sync Message
1035
					if(!createRequest.getTargetEditPart().equals(createRequest.getSourceEditPart())) {
1036
						return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1037
					}
1038
					// otherwise, this is a recursive call, let destination free
1039
				}
1040
			}
1041
		} else if(request instanceof ReconnectRequest) {
1042
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
1043
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
1044
			if(connectionEditPart instanceof MessageEditPart) {
1045
				// Sync Message
1046
				return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1047
			}
1048
		}
1049
1050
		return super.getTargetConnectionAnchor(request);
1051
	}
1052
1053
	/**
1054
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
1055
	 * 
1056
	 * @param connEditPart
1057
	 *        The connection edit part.
1058
	 * @return The anchor.
1059
	 */
1060
1061
	@Override
1062
	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connEditPart) {
1063
		if(connEditPart instanceof MessageEditPart) {
1064
			// Sync Message
1065
			return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1066
		}
1067
		return super.getTargetConnectionAnchor(connEditPart);
1068
	}
1069
1070
	/**
1071
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
1072
	 * 
1073
	 * @param request
1074
	 *        The request
1075
	 * @return The anchor
1076
	 */
1077
1078
	@Override
1079
	public ConnectionAnchor getSourceConnectionAnchor(Request request) {
1080
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
1081
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
1082
			List<?> relationshipTypes = createRequest.getElementTypes();
1083
			for(Object obj : relationshipTypes) {
1084
				if(UMLElementTypes.Message_4005.equals(obj)) {
1085
					// Reply Message
1086
					return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1087
				}
1088
			}
1089
		} else if(request instanceof ReconnectRequest) {
1090
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
1091
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
1092
			if(connectionEditPart instanceof Message3EditPart) {
1093
				// Reply Message
1094
				return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1095
			}
1096
		}
1097
		return super.getSourceConnectionAnchor(request);
1098
	}
1099
1100
	/**
1101
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
1102
	 * 
1103
	 * @param connEditPart
1104
	 *        The connection edit part.
1105
	 * @return The anchor.
1106
	 */
1107
1108
	@Override
1109
	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connEditPart) {
1110
		if(connEditPart instanceof Message3EditPart) {
1111
			// Reply Message
1112
			return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1113
		}
1114
		return super.getSourceConnectionAnchor(connEditPart);
1115
	}
1116
1117
}
1017
}
(-)src/org/eclipse/papyrus/uml/diagram/sequence/edit/parts/ActionExecutionSpecificationEditPart.java (-100 lines)
Lines 17-29 Link Here
17
import java.util.LinkedList;
17
import java.util.LinkedList;
18
import java.util.List;
18
import java.util.List;
19
19
20
import org.eclipse.draw2d.ConnectionAnchor;
21
import org.eclipse.draw2d.DelegatingLayout;
20
import org.eclipse.draw2d.DelegatingLayout;
22
import org.eclipse.draw2d.IFigure;
21
import org.eclipse.draw2d.IFigure;
23
import org.eclipse.draw2d.PositionConstants;
22
import org.eclipse.draw2d.PositionConstants;
24
import org.eclipse.draw2d.Shape;
23
import org.eclipse.draw2d.Shape;
25
import org.eclipse.emf.ecore.EStructuralFeature;
24
import org.eclipse.emf.ecore.EStructuralFeature;
26
import org.eclipse.gef.ConnectionEditPart;
27
import org.eclipse.gef.EditPart;
25
import org.eclipse.gef.EditPart;
28
import org.eclipse.gef.EditPolicy;
26
import org.eclipse.gef.EditPolicy;
29
import org.eclipse.gef.Request;
27
import org.eclipse.gef.Request;
Lines 32-41 Link Here
32
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
30
import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
33
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
31
import org.eclipse.gef.editpolicies.ResizableEditPolicy;
34
import org.eclipse.gef.requests.CreateRequest;
32
import org.eclipse.gef.requests.CreateRequest;
35
import org.eclipse.gef.requests.ReconnectRequest;
36
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
33
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
37
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
34
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
38
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
39
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
35
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
40
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
36
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
41
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
37
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
Lines 45-52 Link Here
45
import org.eclipse.jface.preference.PreferenceConverter;
41
import org.eclipse.jface.preference.PreferenceConverter;
46
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
42
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.GradientPreferenceConverter;
47
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
43
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.PreferenceConstantHelper;
48
import org.eclipse.papyrus.uml.diagram.common.draw2d.anchors.FixedAnchor;
49
import org.eclipse.papyrus.uml.diagram.sequence.edit.helpers.AnchorHelper;
50
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ActionExecutionSpecificationItemSemanticEditPolicy;
44
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ActionExecutionSpecificationItemSemanticEditPolicy;
51
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
45
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ElementCreationWithMessageEditPolicy;
52
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExecutionSpecificationComponentEditPolicy;
46
import org.eclipse.papyrus.uml.diagram.sequence.edit.policies.ExecutionSpecificationComponentEditPolicy;
Lines 1023-1120 Link Here
1023
		}
1017
		}
1024
		return result;
1018
		return result;
1025
	}
1019
	}
1026
1027
	/**
1028
	 * Add connection on top off the figure during the feedback.
1029
	 */
1030
1031
	public ConnectionAnchor getTargetConnectionAnchor(Request request) {
1032
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
1033
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
1034
			List<?> relationshipTypes = createRequest.getElementTypes();
1035
			for(Object obj : relationshipTypes) {
1036
				if(UMLElementTypes.Message_4003.equals(obj)) {
1037
					// Sync Message
1038
					if(!createRequest.getTargetEditPart().equals(createRequest.getSourceEditPart())) {
1039
						return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1040
					}
1041
					// otherwise, this is a recursive call, let destination free
1042
				}
1043
			}
1044
		} else if(request instanceof ReconnectRequest) {
1045
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
1046
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
1047
			if(connectionEditPart instanceof MessageEditPart) {
1048
				// Sync Message
1049
				return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1050
			}
1051
		}
1052
1053
		return super.getTargetConnectionAnchor(request);
1054
	}
1055
1056
	/**
1057
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
1058
	 * 
1059
	 * @param connEditPart
1060
	 *        The connection edit part.
1061
	 * @return The anchor.
1062
	 */
1063
1064
	@Override
1065
	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connEditPart) {
1066
		if(connEditPart instanceof MessageEditPart) {
1067
			// Sync Message
1068
			return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.TOP);
1069
		}
1070
		return super.getTargetConnectionAnchor(connEditPart);
1071
	}
1072
1073
	/**
1074
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request)
1075
	 * 
1076
	 * @param request
1077
	 *        The request
1078
	 * @return The anchor
1079
	 */
1080
1081
	@Override
1082
	public ConnectionAnchor getSourceConnectionAnchor(Request request) {
1083
		if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
1084
			CreateUnspecifiedTypeConnectionRequest createRequest = (CreateUnspecifiedTypeConnectionRequest)request;
1085
			List<?> relationshipTypes = createRequest.getElementTypes();
1086
			for(Object obj : relationshipTypes) {
1087
				if(UMLElementTypes.Message_4005.equals(obj)) {
1088
					// Reply Message
1089
					return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1090
				}
1091
			}
1092
		} else if(request instanceof ReconnectRequest) {
1093
			ReconnectRequest reconnectRequest = (ReconnectRequest)request;
1094
			ConnectionEditPart connectionEditPart = reconnectRequest.getConnectionEditPart();
1095
			if(connectionEditPart instanceof Message3EditPart) {
1096
				// Reply Message
1097
				return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1098
			}
1099
		}
1100
		return super.getSourceConnectionAnchor(request);
1101
	}
1102
1103
	/**
1104
	 * @see org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart)
1105
	 * 
1106
	 * @param connEditPart
1107
	 *        The connection edit part.
1108
	 * @return The anchor.
1109
	 */
1110
1111
	@Override
1112
	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connEditPart) {
1113
		if(connEditPart instanceof Message3EditPart) {
1114
			// Reply Message
1115
			return new AnchorHelper.FixedAnchorEx(getFigure(), FixedAnchor.BOTTOM);
1116
		}
1117
		return super.getSourceConnectionAnchor(connEditPart);
1118
	}
1119
1120
}
1020
}

Return to bug 377501