Merge branch 'master' into LTTng-TmfEventModel
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / 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
6c13869b 13package org.eclipse.linuxtools.tmf.core.request;
8c8bf09f 14
4df4581d 15import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp;
6c13869b
FC
16import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
17import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
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();
1b70b6dc 100 //ok &= getDataType() == request.getDataType();
550d787e 101 if (ok) {
4df4581d 102 ITmfTimestamp startTime = ((ITmfEventRequest<T>) request).getRange().getStartTime();
103 ITmfTimestamp endTime = ((ITmfEventRequest<T>) request).getRange().getEndTime();
550d787e
FC
104 if (!fRange.contains(startTime))
105 fRange = new TmfTimeRange(startTime, fRange.getEndTime());
106 if (!fRange.contains(endTime))
107 fRange = new TmfTimeRange(fRange.getStartTime(), endTime);
108 }
8c8bf09f
ASL
109 return ok;
110 }
111 return false;
112 }
113
550d787e
FC
114 // ------------------------------------------------------------------------
115 // ITmfDataRequest
116 // ------------------------------------------------------------------------
117
118 @Override
1b70b6dc
PT
119 public void handleData(T data) {
120 super.handleData(data);
121 for (ITmfDataRequest<T> request : fRequests) {
122 if (data == null) {
123 request.handleData(null);
124 } else {
125 if (request instanceof TmfEventRequest<?>) {
126 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
127 if (!req.isCompleted()) {
dfee01ae 128 ITmfTimestamp ts = data.getTimestamp();
1b70b6dc
PT
129 if (req.getRange().contains(ts)) {
130 if (req.getDataType().isInstance(data)) {
131 req.handleData(data);
132 }
133 }
134 }
135 }
136 else {
137 TmfDataRequest<T> req = (TmfDataRequest<T>) request;
138 if (!req.isCompleted()) {
139 if (req.getDataType().isInstance(data)) {
140 req.handleData(data);
141 }
142 }
143 }
144 }
145 }
550d787e
FC
146 }
147
8c8bf09f
ASL
148 // ------------------------------------------------------------------------
149 // ITmfEventRequest
150 // ------------------------------------------------------------------------
151
d4011df2 152 @Override
8c8bf09f
ASL
153 public TmfTimeRange getRange() {
154 return fRange;
155 }
156
a79913eb
FC
157 @Override
158 public void setStartIndex(int index) {
159 setIndex(index);
160 }
161
2fb2eb37
FC
162 // ------------------------------------------------------------------------
163 // Object
164 // ------------------------------------------------------------------------
165
166 @Override
167 // All requests have a unique id
168 public int hashCode() {
169 return super.hashCode();
170 }
171
172 @Override
173 public boolean equals(Object other) {
174 if (other instanceof TmfCoalescedEventRequest<?>) {
175 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
176 return (request.getDataType() == getDataType()) &&
177 (request.getIndex() == getIndex()) &&
178 (request.getNbRequested() == getNbRequested()) &&
179 (request.getRange().equals(getRange()));
180 }
181 if (other instanceof TmfCoalescedDataRequest<?>) {
182 return super.equals(other);
183 }
184 return false;
185 }
186
187 @Override
3b38ea61 188 @SuppressWarnings("nls")
2fb2eb37
FC
189 public String toString() {
190 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
a79913eb 191 + "," + getRange() + "," + getIndex() + "," + getNbRequested() + "," + getBlockSize() + ")]";
2fb2eb37
FC
192 }
193
8c8bf09f 194}
This page took 0.046327 seconds and 5 git commands to generate.