Fix performance tests by changing derby dependency to derby.core
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / viewers / TmfTimeViewer.java
CommitLineData
843c272b
GB
1/*******************************************************************************
2 * Copyright (c) 2014 École Polytechnique de Montréal
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation in TmfXYChartViewer
11 * Geneviève Bastien - Moved methods from TmfXYChartViewer to this interface
12 *******************************************************************************/
13
2bdf0193 14package org.eclipse.tracecompass.tmf.ui.viewers;
843c272b 15
843c272b 16import org.eclipse.swt.widgets.Composite;
2bdf0193
AM
17import org.eclipse.tracecompass.tmf.core.signal.TmfRangeSynchSignal;
18import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
19import org.eclipse.tracecompass.tmf.core.signal.TmfSignalThrottler;
20import org.eclipse.tracecompass.tmf.core.signal.TmfTimeSynchSignal;
21import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
22import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
23import org.eclipse.tracecompass.tmf.core.signal.TmfTraceRangeUpdatedSignal;
24import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
25import org.eclipse.tracecompass.tmf.core.signal.TmfTraceUpdatedSignal;
26import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
27import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
28import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
29import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
30import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
843c272b
GB
31
32/**
33 * Abstract class that extends {@link TmfViewer} that adds methods to
34 * synchronize with a trace's time information.
35 *
36 * This class will be extended by viewers who require time information to update
37 * their content.
38 *
39 * <pre>
40 * It provides three times of data:
41 * - start and end time of the trace (available)
42 * - start, end and duration of the current time window, ie the visible time range
43 * - start and end of the time range selected
44 * </pre>
45 *
46 * @author Bernd Hufmann
47 * @author Geneviève Bastien
843c272b
GB
48 */
49public abstract class TmfTimeViewer extends TmfViewer implements ITmfTimeProvider {
50
51 /** Start time of trace */
52 private long fStartTime;
53 /** End time of trace */
54 private long fEndTime;
55 /** Start time of current time range */
56 private long fWindowStartTime;
57 /** End time of current time range */
58 private long fWindowEndTime;
59 /** Duration of current time range */
60 private long fWindowDuration;
61 /** Current begin time of selection range */
62 private long fSelectionBeginTime;
63 /** Current end of selection range */
64 private long fSelectionEndTime;
65 /** The trace that is displayed by this viewer */
66 private ITmfTrace fTrace;
67 /** A signal throttler for range updates */
68 private final TmfSignalThrottler fTimeRangeSyncThrottle = new TmfSignalThrottler(this, 200);
69
70 /**
71 * Default constructor.
72 */
73 public TmfTimeViewer() {
74 super();
75 }
76
77 /**
78 * Constructor that initializes the parent of the viewer
79 *
80 * @param parent
81 * The parent composite that holds this viewer
82 */
83 public TmfTimeViewer(Composite parent) {
84 this(parent, ""); //$NON-NLS-1$
85 }
86
87 /**
88 * Constructor that initializes the parent of the viewer and that sets the
89 * name of the viewer
90 *
91 * @param parent
92 * The parent composite that holds this viewer
93 * @param name
94 * The name of the viewer
95 */
96 public TmfTimeViewer(Composite parent, String name) {
97 init(parent, name);
98 }
99
100 // ------------------------------------------------------------------------
101 // Getter/Setters
102 // ------------------------------------------------------------------------
103
104 /**
105 * Sets the start time of the trace
106 *
107 * @param startTime
108 * The start time to set
109 */
110 protected void setStartTime(long startTime) {
111 fStartTime = startTime;
112 }
113
114 /**
115 * Sets the end time of the trace
116 *
117 * @param endTime
118 * The start time to set
119 */
120 protected void setEndTime(long endTime) {
121 fEndTime = endTime;
122 }
123
124 /**
125 * Sets the start time of the current time range window (visible range)
126 *
127 * @param windowStartTime
128 * The start time to set
129 */
130 protected void setWindowStartTime(long windowStartTime) {
131 fWindowStartTime = windowStartTime;
132 }
133
134 /**
135 * Sets the end time of the current time range window (visible range)
136 *
137 * @param windowEndTime
138 * The start time to set
139 */
140 protected void setWindowEndTime(long windowEndTime) {
141 fWindowEndTime = windowEndTime;
142 }
143
144 /**
145 * Sets the duration of the current time range window (visible range)
146 *
147 * @param windowDuration
148 * The window duration
149 */
150 protected void setWindowDuration(long windowDuration) {
151 fWindowDuration = windowDuration;
152 }
153
154 /**
155 * Sets the begin time of the selected range.
156 *
157 * @param selectionBeginTime
158 * The begin time to set
159 */
160 protected void setSelectionBeginTime(long selectionBeginTime) {
161 fSelectionBeginTime = selectionBeginTime;
162 }
163
164 /**
165 * Sets the end time of the selected range.
166 *
167 * @param selectionEndTime
168 * The end time to set
169 */
170 protected void setSelectionEndTime(long selectionEndTime) {
171 fSelectionEndTime = selectionEndTime;
172 }
173
174 /**
175 * Sets the trace that is displayed by this viewer.
176 *
177 * @param trace
178 * The trace to set
179 */
180 protected void setTrace(ITmfTrace trace) {
181 fTrace = trace;
182 }
183
184 /**
185 * Gets the trace that is displayed by this viewer.
186 *
187 * @return the trace
188 */
189 protected ITmfTrace getTrace() {
190 return fTrace;
191 }
192
193 // ------------------------------------------------------------------------
194 // ITmfTimeProvider
195 // ------------------------------------------------------------------------
196
197 @Override
198 public long getStartTime() {
199 return fStartTime;
200 }
201
202 @Override
203 public long getEndTime() {
204 return fEndTime;
205 }
206
207 @Override
208 public long getWindowStartTime() {
209 return fWindowStartTime;
210 }
211
212 @Override
213 public long getWindowEndTime() {
214 return fWindowEndTime;
215 }
216
217 @Override
218 public long getWindowDuration() {
219 return fWindowDuration;
220 }
221
222 @Override
223 public long getSelectionBeginTime() {
224 return fSelectionBeginTime;
225 }
226
227 @Override
228 public long getSelectionEndTime() {
229 return fSelectionEndTime;
230 }
231
232 @Override
233 public void updateSelectionRange(final long currentBeginTime, final long currentEndTime) {
234 if (fTrace != null) {
235 setSelectionBeginTime(currentBeginTime);
236 setSelectionEndTime(currentEndTime);
237
238 final ITmfTimestamp startTimestamp = new TmfTimestamp(getSelectionBeginTime(), ITmfTimestamp.NANOSECOND_SCALE);
239 final ITmfTimestamp endTimestamp = new TmfTimestamp(getSelectionEndTime(), ITmfTimestamp.NANOSECOND_SCALE);
240
241 TmfTimeSynchSignal signal = new TmfTimeSynchSignal(this, startTimestamp, endTimestamp);
242 broadcast(signal);
243 }
244 }
245
246 @Override
247 public void updateWindow(long windowStartTime, long windowEndTime) {
248
249 setWindowStartTime(windowStartTime);
250 setWindowEndTime(windowEndTime);
251 setWindowDuration(windowEndTime - windowStartTime);
252
253 // Build the new time range; keep the current time
254 TmfTimeRange timeRange = new TmfTimeRange(
255 new TmfTimestamp(getWindowStartTime(), ITmfTimestamp.NANOSECOND_SCALE),
256 new TmfTimestamp(getWindowEndTime(), ITmfTimestamp.NANOSECOND_SCALE));
257
258 // Send the signal
259 TmfRangeSynchSignal signal = new TmfRangeSynchSignal(this, timeRange);
260 fTimeRangeSyncThrottle.queue(signal);
261 }
262
263 // ------------------------------------------------------------------------
264 // Operations
265 // ------------------------------------------------------------------------
266 /**
267 * A Method to load a trace into the viewer.
268 *
269 * @param trace
270 * A trace to apply in the viewer
271 */
272 public void loadTrace(ITmfTrace trace) {
273 fTrace = trace;
274
275 long timestamp = TmfTraceManager.getInstance().getSelectionBeginTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
0a36669c
GB
276 TmfTimeRange currentRange = TmfTraceManager.getInstance().getCurrentRange();
277 long windowStartTime = currentRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
278 long windowEndTime = currentRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
279 long windowDuration = windowEndTime - windowStartTime;
843c272b
GB
280 long startTime = fTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
281 long endTime = fTrace.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
282
283 setSelectionBeginTime(timestamp);
284 setSelectionEndTime(timestamp);
285 setStartTime(startTime);
286 setWindowStartTime(windowStartTime);
0a36669c
GB
287 setWindowEndTime(windowEndTime);
288 setWindowDuration(windowDuration);
843c272b 289 setEndTime(endTime);
843c272b
GB
290 }
291
292 /**
293 * Resets the content of the viewer
294 */
295 public void reset() {
296 // Reset the internal data
297 setSelectionBeginTime(0);
298 setSelectionEndTime(0);
299 setStartTime(0);
300 setWindowStartTime(0);
301 setWindowDuration(0);
302 setEndTime(0);
303 setWindowEndTime(0);
304 setTrace(null);
305 }
306
307 // ------------------------------------------------------------------------
308 // Signal Handler
309 // ------------------------------------------------------------------------
310
311 /**
312 * Signal handler for handling of the trace opened signal.
313 *
314 * @param signal
315 * The trace opened signal {@link TmfTraceOpenedSignal}
316 */
317 @TmfSignalHandler
318 public void traceOpened(TmfTraceOpenedSignal signal) {
319 fTrace = signal.getTrace();
320 loadTrace(getTrace());
321 }
322
323 /**
324 * Signal handler for handling of the trace selected signal.
325 *
326 * @param signal
327 * The trace selected signal {@link TmfTraceSelectedSignal}
328 */
329 @TmfSignalHandler
330 public void traceSelected(TmfTraceSelectedSignal signal) {
331 if (fTrace != signal.getTrace()) {
332 fTrace = signal.getTrace();
333 loadTrace(getTrace());
334 }
335 }
336
337 /**
338 * Signal handler for handling of the trace closed signal.
339 *
340 * @param signal
341 * The trace closed signal {@link TmfTraceClosedSignal}
342 */
343 @TmfSignalHandler
344 public void traceClosed(TmfTraceClosedSignal signal) {
345
346 if (signal.getTrace() != fTrace) {
347 return;
348 }
349
350 // Reset the internal data
351 fTrace = null;
352 reset();
353 }
354
355 /**
356 * Signal handler for handling of the time synch signal, ie the selected range.
357 *
358 * @param signal
359 * The time synch signal {@link TmfTimeSynchSignal}
360 */
361 @TmfSignalHandler
362 public void selectionRangeUpdated(TmfTimeSynchSignal signal) {
363 if ((signal.getSource() != this) && (fTrace != null)) {
364 ITmfTimestamp selectedTime = signal.getBeginTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE);
365 ITmfTimestamp selectedEndTime = signal.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE);
366 setSelectionBeginTime(selectedTime.getValue());
367 setSelectionEndTime(selectedEndTime.getValue());
368 }
369 }
370
371 /**
372 * Signal handler for handling of the time range synch signal, ie the visible range.
373 *
374 * @param signal
375 * The time range synch signal {@link TmfRangeSynchSignal}
376 */
377 @TmfSignalHandler
378 public void timeRangeUpdated(TmfRangeSynchSignal signal) {
379
380 if (fTrace != null) {
381 // Validate the time range
382 TmfTimeRange range = signal.getCurrentRange().getIntersection(fTrace.getTimeRange());
383 if (range == null) {
384 return;
385 }
386
387 if (signal.getSource() != this) {
388 // Update the time range
389 long windowStartTime = range.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
390 long windowEndTime = range.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
391 long windowDuration = windowEndTime - windowStartTime;
392
393 setWindowStartTime(windowStartTime);
394 setWindowEndTime(windowEndTime);
395 setWindowDuration(windowDuration);
396 }
397 }
398 }
399
400 /**
401 * Signal handler for handling of the trace range updated signal.
402 *
403 * @param signal
404 * The trace range signal {@link TmfTraceRangeUpdatedSignal}
405 */
406 @TmfSignalHandler
407 public void traceRangeUpdated(TmfTraceRangeUpdatedSignal signal) {
408
409 if (signal.getTrace() != fTrace) {
410 return;
411 }
412
413 TmfTimeRange fullRange = signal.getRange();
414
415 long traceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
416 long traceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
417
418 setStartTime(traceStartTime);
419 setEndTime(traceEndTime);
420 }
421
422 /**
423 * Signal handler for handling of the trace updated signal.
424 *
425 * @param signal
426 * The trace updated signal {@link TmfTraceUpdatedSignal}
427 */
428 @TmfSignalHandler
429 public void traceUpdated(TmfTraceUpdatedSignal signal) {
430 if (signal.getTrace() != fTrace) {
431 return;
432 }
433 TmfTimeRange fullRange = signal.getTrace().getTimeRange();
434 long traceStartTime = fullRange.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
435 long traceEndTime = fullRange.getEndTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
436
437 setStartTime(traceStartTime);
438 setEndTime(traceEndTime);
439 }
440
441}
This page took 0.069298 seconds and 5 git commands to generate.