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