Merge branch 'FixJUnits'
[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
85 // ------------------------------------------------------------------------
86 // Management
87 // ------------------------------------------------------------------------
88
89 @Override
2fb2eb37
FC
90 public boolean isCompatible(ITmfDataRequest<T> request) {
91 if (request instanceof ITmfEventRequest<?>) {
8c8bf09f 92 boolean ok = getNbRequested() == request.getNbRequested();
9b635e61 93 ok &= getExecType() == request.getExecType();
550d787e
FC
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 }
8c8bf09f
ASL
102 return ok;
103 }
104 return false;
105 }
106
550d787e
FC
107 // ------------------------------------------------------------------------
108 // ITmfDataRequest
109 // ------------------------------------------------------------------------
110
111 @Override
f9673903
FC
112 public void handleData(T data) {
113 super.handleData(data);
550d787e 114 for (ITmfDataRequest<T> request : fRequests) {
f9673903
FC
115 if (data == null) {
116 request.handleData(null);
117 } else {
118 if (request instanceof TmfEventRequest<?>) {
119 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
c1c69938
FC
120 if (!req.isCompleted()) {
121 TmfTimestamp ts = data.getTimestamp();
122 if (req.getRange().contains(ts)) {
123 req.handleData(data);
124 }
f9673903
FC
125 }
126 }
127 else {
128 TmfDataRequest<T> req = (TmfDataRequest<T>) request;
c1c69938
FC
129 if (!req.isCompleted()) {
130 req.handleData(data);
131 }
f9673903 132 }
550d787e
FC
133 }
134 }
135 }
136
8c8bf09f
ASL
137 // ------------------------------------------------------------------------
138 // ITmfEventRequest
139 // ------------------------------------------------------------------------
140
d4011df2 141 @Override
8c8bf09f
ASL
142 public TmfTimeRange getRange() {
143 return fRange;
144 }
145
2fb2eb37
FC
146 // ------------------------------------------------------------------------
147 // Object
148 // ------------------------------------------------------------------------
149
150 @Override
151 // All requests have a unique id
152 public int hashCode() {
153 return super.hashCode();
154 }
155
156 @Override
157 public boolean equals(Object other) {
158 if (other instanceof TmfCoalescedEventRequest<?>) {
159 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
160 return (request.getDataType() == getDataType()) &&
161 (request.getIndex() == getIndex()) &&
162 (request.getNbRequested() == getNbRequested()) &&
163 (request.getRange().equals(getRange()));
164 }
165 if (other instanceof TmfCoalescedDataRequest<?>) {
166 return super.equals(other);
167 }
168 return false;
169 }
170
171 @Override
3b38ea61 172 @SuppressWarnings("nls")
2fb2eb37
FC
173 public String toString() {
174 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
8016d660 175 + "," + getRange() + "," + getNbRequested() + "," + getBlockSize() + ")]";
2fb2eb37
FC
176 }
177
8c8bf09f 178}
This page took 0.043781 seconds and 5 git commands to generate.