2010-06-05 fchouinard@gmail.com Contributions for bugs 292965, 292963, 293102,...
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / request / TmfCoalescedEventRequest.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2010 Ericsson
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 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.request;
14
15 import org.eclipse.linuxtools.tmf.event.TmfEvent;
16 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
17 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
18
19 /**
20 * <b><u>TmfCoalescedEventRequest</u></b>
21 * <p>
22 * TODO: Implement me. Please.
23 */
24 public class TmfCoalescedEventRequest<T extends TmfEvent> extends TmfCoalescedDataRequest<T> implements ITmfEventRequest<T> {
25
26 // ------------------------------------------------------------------------
27 // Attributes
28 // ------------------------------------------------------------------------
29
30 private TmfTimeRange fRange; // The requested events time range
31
32 // ------------------------------------------------------------------------
33 // Constructor
34 // ------------------------------------------------------------------------
35
36 /**
37 * @param range
38 */
39 public TmfCoalescedEventRequest(Class<T> dataType) {
40 this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
41 }
42
43 public TmfCoalescedEventRequest(Class<T> dataType, ExecutionType execType) {
44 this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
45 }
46
47 /**
48 * @param range
49 */
50 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range) {
51 this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
52 }
53
54 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, ExecutionType execType) {
55 this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
56 }
57
58 /**
59 * @param range
60 * @param nbRequested
61 */
62 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested) {
63 this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, ExecutionType.SHORT);
64 }
65
66 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, ExecutionType execType) {
67 this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, execType);
68 }
69
70 /**
71 * @param range
72 * @param nbRequested
73 * @param blockSize Size of the largest blocks expected
74 */
75 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize) {
76 super(dataType, 0, nbRequested, blockSize, ExecutionType.SHORT);
77 fRange = range;
78 }
79
80 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize, ExecutionType execType) {
81 super(dataType, 0, nbRequested, blockSize, execType);
82 fRange = range;
83 }
84
85 // ------------------------------------------------------------------------
86 // Management
87 // ------------------------------------------------------------------------
88
89 @Override
90 public boolean isCompatible(ITmfDataRequest<T> request) {
91 if (request instanceof ITmfEventRequest<?>) {
92 boolean ok = getNbRequested() == request.getNbRequested();
93 ok &= getBlockize() == request.getBlockize();
94 if (ok) {
95 TmfTimestamp startTime = ((ITmfEventRequest<T>) request).getRange().getStartTime();
96 TmfTimestamp endTime = ((ITmfEventRequest<T>) request).getRange().getEndTime();
97 if (!fRange.contains(startTime))
98 fRange = new TmfTimeRange(startTime, fRange.getEndTime());
99 if (!fRange.contains(endTime))
100 fRange = new TmfTimeRange(fRange.getStartTime(), endTime);
101 }
102 return ok;
103 }
104 return false;
105 }
106
107 // ------------------------------------------------------------------------
108 // ITmfDataRequest
109 // ------------------------------------------------------------------------
110
111 @Override
112 public void handleData() {
113 for (ITmfDataRequest<T> request : fRequests) {
114 if (request instanceof TmfEventRequest<?>) {
115 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
116 T[] data = getData();
117 if (data.length > 0 && req.getRange().contains(data[0].getTimestamp())) {
118 req.setData(data);
119 req.handleData();
120 }
121 }
122 else {
123 super.handleData();
124 }
125 }
126 }
127
128 // ------------------------------------------------------------------------
129 // ITmfEventRequest
130 // ------------------------------------------------------------------------
131
132 public TmfTimeRange getRange() {
133 return fRange;
134 }
135
136 // ------------------------------------------------------------------------
137 // Object
138 // ------------------------------------------------------------------------
139
140 @Override
141 // All requests have a unique id
142 public int hashCode() {
143 return super.hashCode();
144 }
145
146 @Override
147 public boolean equals(Object other) {
148 if (other instanceof TmfCoalescedEventRequest<?>) {
149 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
150 return (request.getDataType() == getDataType()) &&
151 (request.getIndex() == getIndex()) &&
152 (request.getNbRequested() == getNbRequested()) &&
153 (request.getRange().equals(getRange()));
154 }
155 if (other instanceof TmfCoalescedDataRequest<?>) {
156 return super.equals(other);
157 }
158 return false;
159 }
160
161 @Override
162 public String toString() {
163 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
164 + "," + getRange() + "," + getNbRequested() + "," + getBlockize() + ")]";
165 }
166
167 }
This page took 0.034821 seconds and 5 git commands to generate.