2010-10-26 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug309042
[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.FOREGROUND);
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.FOREGROUND);
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.FOREGROUND);
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.FOREGROUND);
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 &= getExecType() == request.getExecType();
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(T data) {
113 super.handleData(data);
114 for (ITmfDataRequest<T> request : fRequests) {
115 if (data == null) {
116 request.handleData(null);
117 } else {
118 if (request instanceof TmfEventRequest<?>) {
119 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
120 TmfTimestamp ts = data.getTimestamp();
121 if (req.getRange().contains(ts)) {
122 req.handleData(data);
123 }
124 }
125 else {
126 TmfDataRequest<T> req = (TmfDataRequest<T>) request;
127 req.handleData(data);
128 }
129 }
130 }
131 }
132
133 // ------------------------------------------------------------------------
134 // ITmfEventRequest
135 // ------------------------------------------------------------------------
136
137 @Override
138 public TmfTimeRange getRange() {
139 return fRange;
140 }
141
142 // ------------------------------------------------------------------------
143 // Object
144 // ------------------------------------------------------------------------
145
146 @Override
147 // All requests have a unique id
148 public int hashCode() {
149 return super.hashCode();
150 }
151
152 @Override
153 public boolean equals(Object other) {
154 if (other instanceof TmfCoalescedEventRequest<?>) {
155 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
156 return (request.getDataType() == getDataType()) &&
157 (request.getIndex() == getIndex()) &&
158 (request.getNbRequested() == getNbRequested()) &&
159 (request.getRange().equals(getRange()));
160 }
161 if (other instanceof TmfCoalescedDataRequest<?>) {
162 return super.equals(other);
163 }
164 return false;
165 }
166
167 @Override
168 public String toString() {
169 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
170 + "," + getRange() + "," + getNbRequested() + ")]";
171 }
172
173 }
This page took 0.037019 seconds and 5 git commands to generate.