tmf: Update copyright headers in tmf.ui
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / uml2sd / core / BasicFrame.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
a55887ca
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.ArrayList;
16import java.util.Iterator;
17import java.util.List;
18
3bd46eef
AM
19import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
20import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
73005152 21import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC;
df0b8ff4 22import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.ISDPreferences;
73005152
BH
23import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.SDViewPref;
24
25/**
26 * The Frame class is the base sequence diagram graph nodes container.<br>
27 * For instance, only one frame can be drawn in the View.<br>
28 * Lifelines, Messages and Stop which are supposed to represent a Sequence diagram are drawn in a Frame.<br>
29 * Only the graph node added to their representing list will be drawn.
a55887ca 30 *
73005152
BH
31 * The lifelines are appended along the X axsis when added in a frame.<br>
32 * The syncMessages are ordered along the Y axsis depending on the event occurrence they are attached to.<br>
a55887ca 33 *
73005152
BH
34 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.Lifeline Lifeline for more event occurence details
35 * @author sveyrier
36 * @version 1.0
37 */
38public class BasicFrame extends GraphNode {
39
df0b8ff4
BH
40 // ------------------------------------------------------------------------
41 // Attributes
42 // ------------------------------------------------------------------------
3145ec83 43
73005152
BH
44 /**
45 * Contains the max elapsed time between two consecutive messages in the whole frame
46 */
eb63f5ff 47 protected ITmfTimestamp fMaxTime = new TmfTimestamp(0);
73005152
BH
48 /**
49 * Contains the min elapsed time between two consecutive messages in the whole frame
50 */
eb63f5ff 51 protected ITmfTimestamp fMinTime = new TmfTimestamp(0);
73005152
BH
52 /**
53 * Indicate if the min and max elapsed time between two consecutive messages in the whole frame need to be computed
54 */
eb63f5ff 55 protected boolean fComputeMinMax = true;
73005152
BH
56 /**
57 * Store the preference set by the user regarding the external time. This flag is used determine if the min and max
58 * need to be recomputed in case this preference is changed.
59 */
eb63f5ff 60 protected boolean fLastExternalTimePref = SDViewPref.getInstance().excludeExternalTime();
73005152
BH
61 /**
62 * The greater event occurrence created on graph nodes drawn in this Frame This directly impact the Frame height
63 */
eb63f5ff 64 protected int fVerticalIndex = 0;
73005152
BH
65 /**
66 * The index along the x axis where the next lifeline will is drawn This directly impact the Frame width
67 */
eb63f5ff 68 protected int fHorizontalIndex = 0;
df0b8ff4 69 /**
eb63f5ff 70 * The time information flag.
df0b8ff4 71 */
eb63f5ff 72 protected boolean fHasTimeInfo = false;
73005152 73 /**
df0b8ff4 74 * The current Frame visible area - x coordinates
73005152 75 */
eb63f5ff 76 protected int fVisibleAreaX;
df0b8ff4
BH
77 /**
78 * The current Frame visible area - y coordinates
79 */
eb63f5ff 80 protected int fVisibleAreaY;
df0b8ff4
BH
81 /**
82 * The current Frame visible area - width
83 */
eb63f5ff 84 protected int fVisibleAreaWidth;
df0b8ff4
BH
85 /**
86 * The current Frame visible area - height
87 */
eb63f5ff 88 protected int fVisibleAreaHeight;
df0b8ff4
BH
89 /**
90 * The event occurrence spacing (-1 for none)
91 */
eb63f5ff 92 protected int fForceEventOccurrenceSpacing = -1;
df0b8ff4
BH
93 /**
94 * Flag to indicate customized minumum and maximum.
95 */
eb63f5ff 96 protected boolean fCustomMinMax = false;
df0b8ff4
BH
97 /**
98 * The minimum time between messages of the sequence diagram frame.
99 */
eb63f5ff 100 protected ITmfTimestamp fMinSDTime = new TmfTimestamp();
df0b8ff4
BH
101 /**
102 * The maximum time between messages of the sequence diagram frame.
103 */
eb63f5ff 104 protected ITmfTimestamp fMaxSDTime = new TmfTimestamp();
df0b8ff4
BH
105 /**
106 * Flag to indicate that initial minimum has to be computed.
107 */
eb63f5ff 108 protected boolean fInitSDMin = true;
73005152 109
df0b8ff4
BH
110 // ------------------------------------------------------------------------
111 // Constructors
112 // ------------------------------------------------------------------------
a55887ca 113
73005152
BH
114 /**
115 * Creates an empty frame.
116 */
117 public BasicFrame() {
eb63f5ff 118 Metrics.setForcedEventSpacing(fForceEventOccurrenceSpacing);
73005152
BH
119 }
120
df0b8ff4
BH
121 // ------------------------------------------------------------------------
122 // Methods
123 // ------------------------------------------------------------------------
124
73005152 125 /**
a55887ca 126 *
73005152 127 * Returns the greater event occurence known by the Frame
a55887ca 128 *
73005152
BH
129 * @return the greater event occurrence
130 */
131 protected int getMaxEventOccurrence() {
eb63f5ff 132 return fVerticalIndex;
73005152
BH
133 }
134
135 /**
136 * Set the greater event occurrence created in GraphNodes included in the frame
a55887ca 137 *
73005152
BH
138 * @param eventOccurrence the new greater event occurrence
139 */
140 protected void setMaxEventOccurrence(int eventOccurrence) {
eb63f5ff 141 fVerticalIndex = eventOccurrence;
73005152
BH
142 }
143
144 /**
145 * This method increase the lifeline place holder The return value is usually assign to a lifeline. This can be used
146 * to set the lifelines drawing order. Also, calling this method two times and assigning only the last given index
147 * to a lifeline will increase this lifeline draw spacing (2 times the default spacing) from the last added
148 * lifeline.
a55887ca 149 *
73005152
BH
150 * @return a new lifeline index
151 */
152 protected int getNewHorizontalIndex() {
eb63f5ff 153 return ++fHorizontalIndex;
73005152
BH
154 }
155
156 /**
157 * Returns the current horizontal index
a55887ca 158 *
73005152
BH
159 * @return the current horizontal index
160 * @see Frame#getNewHorizontalIndex() for horizontal index description
161 */
162 protected int getHorizontalIndex() {
eb63f5ff 163 return fHorizontalIndex;
73005152
BH
164 }
165
df0b8ff4
BH
166 /*
167 * (non-Javadoc)
168 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#addNode(org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode)
73005152
BH
169 */
170 @Override
171 public void addNode(GraphNode nodeToAdd) {
eb63f5ff 172 fComputeMinMax = true;
73005152
BH
173 super.addNode(nodeToAdd);
174 }
175
df0b8ff4
BH
176 /*
177 * (non-Javadoc)
73005152
BH
178 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getX()
179 */
180 @Override
181 public int getX() {
182 return Metrics.FRAME_H_MARGIN;
183 }
184
df0b8ff4
BH
185
186 /*
187 * (non-Javadoc)
188 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getY()
73005152
BH
189 */
190 @Override
191 public int getY() {
192 return Metrics.FRAME_V_MARGIN;
193 }
194
df0b8ff4
BH
195 /*
196 * (non-Javadoc)
73005152
BH
197 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getWidth()
198 */
199 @Override
200 public int getWidth() {
eb63f5ff 201 if (fHorizontalIndex == 0) {
73005152 202 return 3 * Metrics.swimmingLaneWidth() + Metrics.LIFELINE_H_MAGIN * 2 - Metrics.FRAME_H_MARGIN - Metrics.LIFELINE_SPACING / 2;
df0b8ff4 203 }
abbdd66a 204 return fHorizontalIndex * Metrics.swimmingLaneWidth() + Metrics.LIFELINE_H_MAGIN * 2 + 1 - Metrics.LIFELINE_SPACING;
73005152
BH
205 }
206
df0b8ff4
BH
207 /*
208 * (non-Javadoc)
73005152
BH
209 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getHeight()
210 */
211 @Override
212 public int getHeight() {
df0b8ff4 213 // The Frame height depends on the maximum number of messages added to a lifeline
eb63f5ff 214 if (fVerticalIndex == 0) {
73005152
BH
215 return 5 * (Metrics.getMessagesSpacing() + Metrics.getMessageFontHeigth()) + Metrics.LIFELINE_NAME_H_MARGIN + Metrics.FRAME_NAME_H_MARGIN + Metrics.getFrameFontHeigth() + Metrics.LIFELINE_VT_MAGIN + Metrics.LIFELINE_VB_MAGIN
216 + Metrics.LIFELINE_NAME_H_MARGIN + Metrics.FRAME_NAME_H_MARGIN + Metrics.getLifelineFontHeigth() * 2;
df0b8ff4 217 }
eb63f5ff
BH
218 if (fForceEventOccurrenceSpacing >= 0) {
219 Metrics.setForcedEventSpacing(fForceEventOccurrenceSpacing);
df0b8ff4 220 }
eb63f5ff 221 return fVerticalIndex * (Metrics.getMessagesSpacing() + Metrics.getMessageFontHeigth()) + Metrics.LIFELINE_NAME_H_MARGIN + Metrics.FRAME_NAME_H_MARGIN + Metrics.getFrameFontHeigth() + Metrics.LIFELINE_VT_MAGIN + Metrics.LIFELINE_VB_MAGIN
73005152
BH
222 + Metrics.LIFELINE_NAME_H_MARGIN + Metrics.FRAME_NAME_H_MARGIN + Metrics.getLifelineFontHeigth() * 2;
223 }
224
225 /**
226 * Returns the graph node which contains the point given in parameter for the given graph node list and starting the
227 * iteration at the given index<br>
228 * WARNING: Only graph nodes with smaller coordinates than the current visible area can be returned.<br>
a55887ca 229 *
73005152
BH
230 * @param x the x coordinate of the point to test
231 * @param y the y coordinate of the point to test
232 * @param list the list to search in
233 * @param fromIndex list browsing starting point
234 * @return the graph node containing the point given in parameter, null otherwise
df0b8ff4
BH
235 *
236 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getNodeFromListAt(int, int, java.util.List, int)
73005152
BH
237 */
238 @Override
239 protected GraphNode getNodeFromListAt(int x, int y, List<GraphNode> list, int fromIndex) {
df0b8ff4 240 if (list == null) {
73005152 241 return null;
df0b8ff4 242 }
73005152 243 for (int i = fromIndex; i < list.size(); i++) {
abbdd66a 244 GraphNode node = list.get(i);
73005152
BH
245 // only lifeline list is x ordered
246 // Stop browsing the list if the node is outside the visible area
247 // all others nodes will be not visible
eb63f5ff 248 if ((node instanceof Lifeline) && (node.getX() > fVisibleAreaX + fVisibleAreaWidth)) {
73005152 249 break;
df0b8ff4 250 }
73005152 251 if (node.getHeight() < 0) {
eb63f5ff 252 if (node.getY() + node.getHeight() > fVisibleAreaY + fVisibleAreaHeight) {
73005152 253 break;
df0b8ff4 254 }
73005152 255 } else {
eb63f5ff 256 if (node.getY() > fVisibleAreaY + fVisibleAreaHeight) {
73005152 257 break;
df0b8ff4 258 }
73005152 259 }
df0b8ff4 260 if (node.contains(x, y)) {
73005152 261 return node;
df0b8ff4 262 }
73005152
BH
263 }
264 return null;
265 }
266
267 /**
268 * Draw the Frame rectangle
a55887ca 269 *
73005152
BH
270 * @param context the context to draw to
271 */
272 protected void drawFrame(IGC context) {
a55887ca 273
3145ec83 274 ISDPreferences pref = SDViewPref.getInstance();
a55887ca 275
3145ec83
BH
276 context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_FRAME));
277 context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_FRAME));
73005152
BH
278
279 int x = getX();
280 int y = getY();
281 int w = getWidth();
282 int h = getHeight();
283
284 // Draw the frame main rectangle
285 context.fillRectangle(x, y, w, h);
286 context.drawRectangle(x, y, w, h);
287
3145ec83
BH
288 context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_FRAME_NAME));
289 context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_FRAME_NAME));
290 context.setFont(pref.getFont(ISDPreferences.PREF_FRAME_NAME));
73005152
BH
291
292 int nameWidth = context.textExtent(getName()) + 2 * Metrics.FRAME_NAME_V_MARGIN;
293 int nameHeight = Metrics.getFrameFontHeigth() + +Metrics.FRAME_NAME_H_MARGIN * 2;
294
295 // Draw the frame name area
df0b8ff4 296 if (nameWidth > w) {
73005152 297 nameWidth = w;
df0b8ff4 298 }
73005152
BH
299
300 int[] points = { x, y, x + nameWidth, y, x + nameWidth, y - 11 + nameHeight, x - 11 + nameWidth, y + nameHeight, x, y + nameHeight, x, y + nameHeight };
301 context.fillPolygon(points);
302 context.drawPolygon(points);
303 context.drawLine(x, y, x, y + nameHeight);
304
3145ec83 305 context.setForeground(pref.getFontColor(ISDPreferences.PREF_FRAME_NAME));
73005152
BH
306 context.drawTextTruncatedCentred(getName(), x, y, nameWidth - 11, nameHeight, false);
307
3145ec83
BH
308 context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_FRAME));
309 context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_FRAME));
73005152
BH
310 }
311
df0b8ff4
BH
312 /*
313 * (non-Javadoc)
314 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#draw(org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC)
73005152
BH
315 */
316 @Override
317 public void draw(IGC context) {
318 draw(context, true);
319 }
320
321 /**
322 * Draws the Frame on the given context.<br>
323 * This method start width GraphNodes ordering if needed.<br>
324 * After, depending on the visible area, only visible GraphNodes are drawn.<br>
a55887ca 325 *
73005152
BH
326 * @param context the context to draw to
327 * @param drawFrame indicate if the frame rectangle need to be redrawn
328 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#draw(IGC)
329 */
330 protected void draw(IGC context, boolean drawFrame) {
eb63f5ff
BH
331 fVisibleAreaHeight = context.getVisibleHeight();
332 fVisibleAreaWidth = context.getVisibleWidth();
333 fVisibleAreaX = context.getContentsX();
334 fVisibleAreaY = context.getContentsY();
73005152 335
eb63f5ff
BH
336 if (fForceEventOccurrenceSpacing >= 0) {
337 Metrics.setForcedEventSpacing(fForceEventOccurrenceSpacing);
df0b8ff4 338 } else {
73005152 339 Metrics.setForcedEventSpacing(-1);
df0b8ff4 340 }
73005152 341
3145ec83 342 super.drawChildenNodes(context);
73005152
BH
343 }
344
df0b8ff4
BH
345 /**
346 * Sets the event occurrence spacing (-1 for none)
a55887ca 347 *
df0b8ff4
BH
348 * @param space A spacing to set.
349 */
73005152 350 public void forceEventOccurrenceSpacing(int space) {
eb63f5ff 351 fForceEventOccurrenceSpacing = space;
73005152
BH
352 }
353
354 /**
355 * Return the X coordinates of the frame visible area
a55887ca 356 *
73005152
BH
357 * @return the X coordinates of the frame visible area
358 */
359 public int getVisibleAreaX() {
eb63f5ff 360 return fVisibleAreaX;
73005152
BH
361 }
362
363 /**
364 * Return the frame visible area width
a55887ca 365 *
73005152
BH
366 * @return the frame visible area width
367 */
368 public int getVisibleAreaWidth() {
eb63f5ff 369 return fVisibleAreaWidth;
73005152
BH
370 }
371
372 /**
373 * Return the frame visible area height
a55887ca 374 *
73005152
BH
375 * @return the frame visible area height
376 */
377 public int getVisibleAreaHeight() {
eb63f5ff 378 return fVisibleAreaHeight;
73005152
BH
379 }
380
381 /**
382 * Return the X coordinates of the frame visible area
a55887ca 383 *
73005152
BH
384 * @return the X coordinates of the frame visible area
385 */
386 public int getVisibleAreaY() {
eb63f5ff 387 return fVisibleAreaY;
73005152
BH
388 }
389
390 /**
391 * Return the minimum time stored in the frame taking all GraphNodes into account
a55887ca 392 *
73005152 393 * @return the minimum GraphNode time
3bd46eef 394 * @since 2.0
73005152 395 */
4df4581d 396 public ITmfTimestamp getMinTime() {
eb63f5ff
BH
397 if (fLastExternalTimePref != SDViewPref.getInstance().excludeExternalTime()) {
398 fLastExternalTimePref = SDViewPref.getInstance().excludeExternalTime();
399 fComputeMinMax = true;
73005152 400 }
eb63f5ff 401 if ((fComputeMinMax) && (!fCustomMinMax)) {
73005152 402 computeMinMax();
eb63f5ff 403 fComputeMinMax = false;
73005152 404 }
eb63f5ff 405 return fMinTime;
73005152
BH
406 }
407
a55887ca
AM
408 /**
409 * Set the minimum timestamp of the frame.
410 *
411 * @param min
412 * The minimum timestamp
3bd46eef 413 * @since 2.0
a55887ca 414 */
d7dbf09a 415 public void setMin(ITmfTimestamp min) {
eb63f5ff
BH
416 fMinTime = min;
417 fCustomMinMax = true;
73005152
BH
418 }
419
a55887ca
AM
420 /**
421 * Set the maximum timestamp of the frame.
422 *
423 * @param max
424 * The maximum timestamp
3bd46eef 425 * @since 2.0
a55887ca 426 */
d7dbf09a 427 public void setMax(ITmfTimestamp max) {
eb63f5ff
BH
428 fMaxTime = max;
429 fCustomMinMax = true;
73005152
BH
430 }
431
a55887ca
AM
432 /**
433 * Reset min/max timestamp values to the default ones.
434 */
73005152 435 public void resetCustomMinMax() {
eb63f5ff
BH
436 fCustomMinMax = false;
437 fComputeMinMax = true;
73005152
BH
438 }
439
440 /**
441 * Return the maximum time stored in the frame taking all GraphNodes into account
a55887ca 442 *
73005152 443 * @return the maximum GraphNode time
3bd46eef 444 * @since 2.0
73005152 445 */
4df4581d 446 public ITmfTimestamp getMaxTime() {
eb63f5ff
BH
447 if (fLastExternalTimePref != SDViewPref.getInstance().excludeExternalTime()) {
448 fLastExternalTimePref = SDViewPref.getInstance().excludeExternalTime();
449 fComputeMinMax = true;
73005152 450 }
eb63f5ff 451 if (fComputeMinMax) {
73005152 452 computeMinMax();
eb63f5ff 453 fComputeMinMax = false;
73005152 454 }
eb63f5ff 455 return fMaxTime;
73005152
BH
456 }
457
df0b8ff4 458 /**
a55887ca 459 * Computes the minimum and maximum time between consecutive messages within the frame.
df0b8ff4 460 */
73005152 461 protected void computeMaxMinTime() {
eb63f5ff 462 if (!fInitSDMin) {
73005152 463 return;
df0b8ff4 464 }
73005152
BH
465
466 List<SDTimeEvent> timeArray = buildTimeArray();
3145ec83
BH
467
468 if ((timeArray == null) || timeArray.isEmpty()) {
73005152 469 return;
df0b8ff4 470 }
73005152 471 for (int i = 0; i < timeArray.size(); i++) {
abbdd66a 472 SDTimeEvent m = timeArray.get(i);
73005152 473
eb63f5ff
BH
474 if (m.getTime().compareTo(fMaxSDTime, true) > 0) {
475 fMaxSDTime = m.getTime();
73005152
BH
476 }
477
eb63f5ff
BH
478 if ((m.getTime().compareTo(fMinSDTime, true) < 0) || fInitSDMin) {
479 fMinSDTime = m.getTime();
480 fInitSDMin = false;
73005152
BH
481 }
482 }
483 }
484
df0b8ff4
BH
485 /**
486 * Returns the minimum time between consecutive messages.
a55887ca 487 *
df0b8ff4 488 * @return the minimum time between consecutive messages
3bd46eef 489 * @since 2.0
df0b8ff4 490 */
4df4581d 491 public ITmfTimestamp getSDMinTime() {
73005152 492 computeMaxMinTime();
eb63f5ff 493 return fMinSDTime;
73005152
BH
494 }
495
df0b8ff4
BH
496 /**
497 * Returns the maximum time between consecutive messages.
a55887ca 498 *
df0b8ff4 499 * @return the maximum time between consecutive messages
3bd46eef 500 * @since 2.0
df0b8ff4 501 */
4df4581d 502 public ITmfTimestamp getSDMaxTime() {
73005152 503 computeMaxMinTime();
eb63f5ff 504 return fMaxSDTime;
73005152
BH
505 }
506
507 /**
508 * Browse all the GraphNode to compute the min and max times store in the Frame
509 */
510 protected void computeMinMax() {
511 List<SDTimeEvent> timeArray = buildTimeArray();
3145ec83
BH
512
513 if ((timeArray == null) || timeArray.isEmpty()) {
73005152 514 return;
df0b8ff4 515 }
73005152 516 for (int i = 0; i < timeArray.size() - 1; i++) {
abbdd66a
AM
517 SDTimeEvent m1 = timeArray.get(i);
518 SDTimeEvent m2 = timeArray.get(i + 1);
a55887ca 519
73005152 520 updateMinMax(m1, m2);
73005152
BH
521 }
522 }
523
df0b8ff4
BH
524 /**
525 * Updates the minimum and maximum time between consecutive message within the frame based on the given values.
a55887ca 526 *
df0b8ff4
BH
527 * @param m1 A first SD time event.
528 * @param m2 A second SD time event.
529 */
73005152 530 protected void updateMinMax(SDTimeEvent m1, SDTimeEvent m2) {
4df4581d 531 ITmfTimestamp delta = m2.getTime().getDelta(m1.getTime());
eb63f5ff 532 if (fComputeMinMax) {
4593bd5b 533 fMinTime = delta;
eb63f5ff
BH
534 if (fMinTime.compareTo(TmfTimestamp.ZERO, false) < 0) {
535 fMinTime = new TmfTimestamp(0, m1.getTime().getScale(), m1.getTime().getPrecision());
73005152 536 }
4593bd5b 537 fMaxTime = fMinTime;
eb63f5ff 538 fComputeMinMax = false;
73005152
BH
539 }
540
eb63f5ff 541 if ((delta.compareTo(fMinTime, true) < 0) && (delta.compareTo(TmfTimestamp.ZERO, false) > 0)) {
4593bd5b 542 fMinTime = delta;
73005152
BH
543 }
544
eb63f5ff 545 if ((delta.compareTo(fMaxTime, true) > 0) && (delta.compareTo(TmfTimestamp.ZERO, false) > 0)) {
4593bd5b 546 fMaxTime = delta;
73005152
BH
547 }
548 }
549
df0b8ff4
BH
550 /**
551 * Builds the time array based on the list of graph nodes.
a55887ca 552 *
3145ec83 553 * @return the time array else empty list.
df0b8ff4 554 */
73005152 555 protected List<SDTimeEvent> buildTimeArray() {
eb63f5ff 556 if (!fHasChilden) {
3145ec83 557 return new ArrayList<SDTimeEvent>();
df0b8ff4 558 }
73005152 559
eb63f5ff 560 Iterator<String> it = fForwardSort.keySet().iterator();
73005152
BH
561 List<SDTimeEvent> timeArray = new ArrayList<SDTimeEvent>();
562 while (it.hasNext()) {
563 String nodeType = it.next();
abbdd66a 564 List<GraphNode> list = fNodes.get(nodeType);
73005152
BH
565 for (int i = 0; i < list.size(); i++) {
566 Object timedNode = list.get(i);
567 if ((timedNode instanceof ITimeRange) && ((ITimeRange) timedNode).hasTimeInfo()) {
abbdd66a 568 int event = list.get(i).getStartOccurrence();
4df4581d 569 ITmfTimestamp time = ((ITimeRange) list.get(i)).getStartTime();
73005152
BH
570 SDTimeEvent f = new SDTimeEvent(time, event, (ITimeRange) list.get(i));
571 timeArray.add(f);
abbdd66a 572 if (event != list.get(i).getEndOccurrence()) {
73005152
BH
573 event = ((AsyncMessage) list.get(i)).getEndOccurrence();
574 time = ((ITimeRange) list.get(i)).getEndTime();
575 f = new SDTimeEvent(time, event, (ITimeRange) list.get(i));
576 timeArray.add(f);
577 }
578 }
579 }
580 }
581 return timeArray;
582 }
583
584 /*
585 * (non-Javadoc)
586 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#getArrayId()
587 */
588 @Override
589 public String getArrayId() {
590 return null;
591 }
592
593 /*
594 * (non-Javadoc)
595 * @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.core.GraphNode#contains(int, int)
596 */
597 @Override
598 public boolean contains(int x, int y) {
599 return false;
600 }
601}
This page took 0.065774 seconds and 5 git commands to generate.