Contribution for Bug353020
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / request / TmfCoalescedEventRequest.java
CommitLineData
8c8bf09f
ASL
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
13package org.eclipse.linuxtools.tmf.request;
14
15import org.eclipse.linuxtools.tmf.event.TmfEvent;
16import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
550d787e 17import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
8c8bf09f
ASL
18
19/**
20 * <b><u>TmfCoalescedEventRequest</u></b>
21 * <p>
22 * TODO: Implement me. Please.
23 */
24public class TmfCoalescedEventRequest<T extends TmfEvent> extends TmfCoalescedDataRequest<T> implements ITmfEventRequest<T> {
25
26 // ------------------------------------------------------------------------
27 // Attributes
28 // ------------------------------------------------------------------------
29
550d787e 30 private TmfTimeRange fRange; // The requested events time range
8c8bf09f
ASL
31
32 // ------------------------------------------------------------------------
33 // Constructor
34 // ------------------------------------------------------------------------
35
36 /**
37 * @param range
38 */
39 public TmfCoalescedEventRequest(Class<T> dataType) {
f6b14ce2 40 this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.FOREGROUND);
cb866e08
FC
41 }
42
43 public TmfCoalescedEventRequest(Class<T> dataType, ExecutionType execType) {
44 this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
8c8bf09f
ASL
45 }
46
47 /**
48 * @param range
49 */
50 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range) {
f6b14ce2 51 this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, ExecutionType.FOREGROUND);
cb866e08
FC
52 }
53
54 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, ExecutionType execType) {
55 this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE, execType);
8c8bf09f
ASL
56 }
57
58 /**
59 * @param range
60 * @param nbRequested
61 */
62 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested) {
f6b14ce2 63 this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, ExecutionType.FOREGROUND);
cb866e08
FC
64 }
65
66 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, ExecutionType execType) {
67 this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE, execType);
8c8bf09f
ASL
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) {
f6b14ce2 76 super(dataType, 0, nbRequested, blockSize, ExecutionType.FOREGROUND);
cb866e08
FC
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);
8c8bf09f
ASL
82 fRange = range;
83 }
84
a79913eb
FC
85 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int index, int nbRequested, int blockSize, ExecutionType execType) {
86 super(dataType, index, nbRequested, blockSize, execType);
87 fRange = range;
88 }
89
8c8bf09f
ASL
90 // ------------------------------------------------------------------------
91 // Management
92 // ------------------------------------------------------------------------
93
94 @Override
2fb2eb37
FC
95 public boolean isCompatible(ITmfDataRequest<T> request) {
96 if (request instanceof ITmfEventRequest<?>) {
8c8bf09f 97 boolean ok = getNbRequested() == request.getNbRequested();
a79913eb 98 ok &= getIndex() == request.getIndex();
9b635e61 99 ok &= getExecType() == request.getExecType();
550d787e
FC
100 if (ok) {
101 TmfTimestamp startTime = ((ITmfEventRequest<T>) request).getRange().getStartTime();
102 TmfTimestamp endTime = ((ITmfEventRequest<T>) request).getRange().getEndTime();
103 if (!fRange.contains(startTime))
104 fRange = new TmfTimeRange(startTime, fRange.getEndTime());
105 if (!fRange.contains(endTime))
106 fRange = new TmfTimeRange(fRange.getStartTime(), endTime);
107 }
8c8bf09f
ASL
108 return ok;
109 }
110 return false;
111 }
112
550d787e
FC
113 // ------------------------------------------------------------------------
114 // ITmfDataRequest
115 // ------------------------------------------------------------------------
116
117 @Override
f9673903
FC
118 public void handleData(T data) {
119 super.handleData(data);
550d787e 120 for (ITmfDataRequest<T> request : fRequests) {
f9673903
FC
121 if (data == null) {
122 request.handleData(null);
123 } else {
124 if (request instanceof TmfEventRequest<?>) {
125 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
c1c69938
FC
126 if (!req.isCompleted()) {
127 TmfTimestamp ts = data.getTimestamp();
128 if (req.getRange().contains(ts)) {
129 req.handleData(data);
130 }
f9673903
FC
131 }
132 }
133 else {
134 TmfDataRequest<T> req = (TmfDataRequest<T>) request;
c1c69938
FC
135 if (!req.isCompleted()) {
136 req.handleData(data);
137 }
f9673903 138 }
550d787e
FC
139 }
140 }
141 }
142
8c8bf09f
ASL
143 // ------------------------------------------------------------------------
144 // ITmfEventRequest
145 // ------------------------------------------------------------------------
146
d4011df2 147 @Override
8c8bf09f
ASL
148 public TmfTimeRange getRange() {
149 return fRange;
150 }
151
a79913eb
FC
152 @Override
153 public void setStartIndex(int index) {
154 setIndex(index);
155 }
156
2fb2eb37
FC
157 // ------------------------------------------------------------------------
158 // Object
159 // ------------------------------------------------------------------------
160
161 @Override
162 // All requests have a unique id
163 public int hashCode() {
164 return super.hashCode();
165 }
166
167 @Override
168 public boolean equals(Object other) {
169 if (other instanceof TmfCoalescedEventRequest<?>) {
170 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
171 return (request.getDataType() == getDataType()) &&
172 (request.getIndex() == getIndex()) &&
173 (request.getNbRequested() == getNbRequested()) &&
174 (request.getRange().equals(getRange()));
175 }
176 if (other instanceof TmfCoalescedDataRequest<?>) {
177 return super.equals(other);
178 }
179 return false;
180 }
181
182 @Override
3b38ea61 183 @SuppressWarnings("nls")
2fb2eb37
FC
184 public String toString() {
185 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
a79913eb 186 + "," + getRange() + "," + getIndex() + "," + getNbRequested() + "," + getBlockSize() + ")]";
2fb2eb37
FC
187 }
188
8c8bf09f 189}
This page took 0.039138 seconds and 5 git commands to generate.