tmf: Update copyright headers in tmf.ui
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / uml2sd / core / SyncMessage.java
CommitLineData
73005152 1/**********************************************************************
c8422608 2 * Copyright (c) 2005, 2013 IBM Corporation, Ericsson
73005152
BH
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
4593bd5b
AM
7 *
8 * Contributors:
c8422608
AM
9 * IBM - Initial API and implementation
10 * Bernd Hufmann - Updated for TMF
73005152 11 **********************************************************************/
c8422608 12
73005152
BH
13package org.eclipse.linuxtools.tmf.ui.views.uml2sd.core;
14
15import java.util.Comparator;
16
3bd46eef
AM
17import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
18import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
73005152 19import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC;
df0b8ff4 20import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.ISDPreferences;
3145ec83 21import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.SDViewPref;
73005152
BH
22import org.eclipse.linuxtools.tmf.ui.views.uml2sd.util.SortSyncMessageComparator;
23
24/**
25 * A SyncMessage is a synchronous message which appear at the same event occurrence on both lifeline ends (sender and
26 * receiver).<br>
27 * A Sync message is usually drawn horizontally.<br>
28 * <br>
29 * <br>
30 * Usage example:
4593bd5b 31 *
73005152
BH
32 * <pre>
33 * Frame frame;
34 * Lifeline lifeLine1;
35 * Lifeline lifeLine2;
4593bd5b 36 *
73005152
BH
37 * SyncMessage message = new SyncMessage();
38 * // Create a new event occurrence on each lifeline
39 * lifeline1.getNewOccurrenceIndex();
40 * lifeline2.getNewOccurrenceIndex();
41 * // Set the message sender and receiver
42 * message.setStartLifeline(lifeLine1);
43 * message.setEndLifline(lifeline2);
44 * message.setName(&quot;Message label&quot;);
45 * // add the message to the frame
46 * frame.addMessage(message);
47 * </pre>
4593bd5b 48 *
73005152 49 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.Lifeline Lifeline for more event occurence details
df0b8ff4 50 * @version 1.0
73005152 51 * @author sveyrier
4593bd5b 52 *
73005152
BH
53 */
54public class SyncMessage extends BaseMessage implements ITimeRange {
55
df0b8ff4
BH
56 // ------------------------------------------------------------------------
57 // Constants
58 // ------------------------------------------------------------------------
59 /**
60 * The graphNode ID
61 */
62 public static final String SYNC_MESS_TAG = "SyncMessage"; //$NON-NLS-1$
63
64 // ------------------------------------------------------------------------
65 // Attributes
66 // ------------------------------------------------------------------------
67
73005152
BH
68 /**
69 * The associated message return
70 */
eb63f5ff 71 protected SyncMessageReturn fMessageReturn;
73005152
BH
72 /**
73 * The time when the message occurs
74 */
eb63f5ff 75 protected ITmfTimestamp fEventTime = new TmfTimestamp();
df0b8ff4
BH
76 /**
77 * Flag whether the message has time information available or not
78 */
eb63f5ff 79 protected boolean fHasTimeInfo = false;
73005152 80
df0b8ff4
BH
81 // ------------------------------------------------------------------------
82 // Constructors
83 // ------------------------------------------------------------------------
84
85 /**
86 * Default constructor
87 */
73005152 88 public SyncMessage() {
eb63f5ff 89 fPrefId = ISDPreferences.PREF_SYNC_MESS;
73005152
BH
90 }
91
df0b8ff4
BH
92 // ------------------------------------------------------------------------
93 // Methods
94 // ------------------------------------------------------------------------
95
73005152
BH
96 /**
97 * Ensure both lifelines have the same event occurrence (the greater found on each lifeline)
98 */
99 protected void syncLifelinesEventOccurrence() {
100 if ((getStartLifeline() != null) && (getEndLifeline() != null)) {
101 int newIndex = 0;
df0b8ff4 102 if (getStartLifeline().getEventOccurrence() > getEndLifeline().getEventOccurrence()) {
73005152 103 newIndex = getStartLifeline().getEventOccurrence();
df0b8ff4 104 } else {
73005152 105 newIndex = getEndLifeline().getEventOccurrence();
df0b8ff4 106 }
73005152
BH
107 getStartLifeline().setCurrentEventOccurrence(newIndex);
108 getEndLifeline().setCurrentEventOccurrence(newIndex);
109 setEventOccurrence(getStartLifeline().getEventOccurrence());
110 }
111 }
112
113 /**
114 * Set the lifeLine from which the message has been sent.<br>
115 * A new event occurrence will be created on this lifeLine.<br>
116 * SyncMessage must occur at the same event occurrence on both lifeline, this method is responsible to synchronize the
117 * event occurrence on each lifeline (the greater value will be used).<br>
118 * This synchronization is only done if the end lifeline has already been set.
4593bd5b 119 *
73005152
BH
120 * @param lifeline the message sender
121 */
122 public void autoSetStartLifeline(Lifeline lifeline) {
123 lifeline.getNewEventOccurrence();
124 setStartLifeline(lifeline);
125 }
126
127 /**
128 * Set the lifeLine which has receiver the message.<br>
129 * A new EventOccurence will be create on this lifeLine.<br>
130 * SyncMessage must occur at the same event occurrence on both lifeline, this method is responsible to synchronize the
131 * event occurrence on each lifeline (the greater value will be used).<br>
132 * This synchronization is only done if the start lifeline has already been set.
4593bd5b 133 *
73005152
BH
134 * @param lifeline the message receiver
135 */
136 public void autoSetEndLifeline(Lifeline lifeline) {
137 lifeline.getNewEventOccurrence();
138 setEndLifeline(lifeline);
139 }
140
141 /**
142 * Set the lifeLine which has receiver the message.<br>
143 * SyncMessage must occur at the same event occurrence on both lifeline, this method is responsible to synchronize the
144 * event occurrence on each lifeline (the greater value will be used).<br>
145 * This synchronization is only done if the start lifeline has already been set.
4593bd5b 146 *
73005152
BH
147 * @param lifeline the message receiver
148 */
149 @Override
150 public void setStartLifeline(Lifeline lifeline) {
151 super.setStartLifeline(lifeline);
152 if ((getEndLifeline() == null)) {
153 setEventOccurrence(getStartLifeline().getEventOccurrence());
df0b8ff4 154 } else {
73005152 155 syncLifelinesEventOccurrence();
df0b8ff4 156 }
73005152
BH
157 }
158
159 /**
160 * Set the lifeLine which has receiver the message.<br>
161 * SyncMessage must occur at the same event occurrence on both lifelines, this method is responsible to synchronize the
162 * event occurrence on each lifeline (the greater value will be used).<br>
163 * This synchronization is only done if the start lifeline has already been set.
4593bd5b 164 *
73005152
BH
165 * @param lifeline the message receiver
166 */
167 @Override
168 public void setEndLifeline(Lifeline lifeline) {
169 super.setEndLifeline(lifeline);
170 if ((getStartLifeline() == null)) {
171 setEventOccurrence(getEndLifeline().getEventOccurrence());
df0b8ff4 172 } else {
73005152 173 syncLifelinesEventOccurrence();
df0b8ff4 174 }
73005152
BH
175 }
176
177 /**
178 * Set the event occurrence when this message occurs.<br>
4593bd5b 179 *
73005152
BH
180 * @param occurrence the event occurrence to assign to this message.<br>
181 * @see Lifeline Lifeline for more event occurence details
182 */
183 @Override
184 protected void setEventOccurrence(int occurrence) {
eb63f5ff
BH
185 fStartEventOccurrence = occurrence;
186 fEndEventOccurrence = occurrence;
73005152
BH
187 }
188
189 /**
190 * Set the message return associated with this message.
4593bd5b 191 *
73005152
BH
192 * @param message the message return to associate
193 */
194 protected void setMessageReturn(SyncMessageReturn message) {
eb63f5ff 195 fMessageReturn = message;
73005152
BH
196 }
197
198 /**
199 * Returns the syncMessageReturn associated to this syncMessage
4593bd5b 200 *
73005152
BH
201 * @return the message return
202 */
203 public SyncMessageReturn getMessageReturn() {
eb63f5ff 204 return fMessageReturn;
73005152
BH
205 }
206
207 /**
208 * Set the time when the message occurs
4593bd5b 209 *
73005152 210 * @param time the time when the message occurs
3bd46eef 211 * @since 2.0
73005152 212 */
4df4581d 213 public void setTime(ITmfTimestamp time) {
4593bd5b 214 fEventTime = time;
eb63f5ff 215 fHasTimeInfo = true;
df0b8ff4 216 if (getStartLifeline() != null && getStartLifeline().getFrame() != null) {
73005152 217 getStartLifeline().getFrame().setHasTimeInfo(true);
df0b8ff4 218 } else if (getEndLifeline() != null && getEndLifeline().getFrame() != null) {
73005152 219 getEndLifeline().getFrame().setHasTimeInfo(true);
df0b8ff4 220 }
73005152
BH
221 }
222
3bd46eef
AM
223 /**
224 * @since 2.0
73005152
BH
225 */
226 @Override
4df4581d 227 public ITmfTimestamp getEndTime() {
eb63f5ff 228 return fEventTime;
73005152
BH
229 }
230
3bd46eef
AM
231 /**
232 * @since 2.0
4593bd5b 233 */
73005152 234 @Override
4df4581d 235 public ITmfTimestamp getStartTime() {
eb63f5ff 236 return fEventTime;
73005152
BH
237 }
238
df0b8ff4
BH
239 /*
240 * (non-Javadoc)
241 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.ITimeRange#hasTimeInfo()
4593bd5b 242 */
73005152
BH
243 @Override
244 public boolean hasTimeInfo() {
eb63f5ff 245 return fHasTimeInfo;
73005152
BH
246 }
247
df0b8ff4
BH
248 /*
249 * (non-Javadoc)
250 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.BaseMessage#draw(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC)
251 */
73005152
BH
252 @Override
253 public void draw(IGC context) {
3145ec83 254 if (!isVisible()) {
73005152 255 return;
3145ec83
BH
256 }
257
258 ISDPreferences pref = SDViewPref.getInstance();
259
df0b8ff4 260 // Draw it selected?
73005152 261 if (!isSelected()) {
3145ec83
BH
262 context.setBackground(pref.getBackGroundColor(fPrefId));
263 context.setForeground(pref.getForeGroundColor(fPrefId));
73005152
BH
264 }
265 super.draw(context);
266 }
267
df0b8ff4
BH
268 /*
269 * (non-Javadoc)
270 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.BaseMessage#isVisible(int, int, int, int)
271 */
73005152
BH
272 @Override
273 public boolean isVisible(int x, int y, int width, int height) {
274 if (getY() > y + height +
df0b8ff4
BH
275 // take into account the message name drawn above the arrow
276 Metrics.MESSAGES_NAME_SPACING + Metrics.getMessageFontHeigth()) {
73005152 277 return false;
df0b8ff4 278 }
73005152
BH
279
280 // UML2 lost/found message visibility special case
281 // Others visibility cases are perform in the ***common*** case
eb63f5ff 282 if ((fEndLifeline == null && fStartLifeline != null) || (fEndLifeline != null && fStartLifeline == null)) {
df0b8ff4 283 if (x + width > getX() + getWidth() && x < getX() + getWidth()) {
73005152 284 return true;
df0b8ff4 285 }
73005152
BH
286 }
287 // ***Common*** syncMessages visibility
288 return super.isVisible(x, y, width, height);
289 }
290
df0b8ff4
BH
291 /*
292 * (non-Javadoc)
293 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getComparator()
294 */
73005152
BH
295 @Override
296 public Comparator<GraphNode> getComparator() {
297 return new SortSyncMessageComparator();
298 }
299
df0b8ff4
BH
300 /*
301 * (non-Javadoc)
302 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getArrayId()
303 */
73005152
BH
304 @Override
305 public String getArrayId() {
306 return SYNC_MESS_TAG;
307 }
308
df0b8ff4
BH
309 /*
310 * (non-Javadoc)
311 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#positiveDistanceToPoint(int, int)
312 */
73005152
BH
313 @Override
314 public boolean positiveDistanceToPoint(int x, int y) {
df0b8ff4 315 if (getY() > y) {
73005152 316 return true;
df0b8ff4 317 }
73005152
BH
318 return false;
319 }
320}
This page took 0.069027 seconds and 5 git commands to generate.