Monster merge from the integration branch. Still some problems left and JUnits failing.
[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);
41 }
42
43 /**
44 * @param range
45 */
46 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range) {
47 this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE);
48 }
49
50 /**
51 * @param range
52 * @param nbRequested
53 */
54 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested) {
55 this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE);
56 }
57
58 /**
59 * @param range
60 * @param nbRequested
61 * @param blockSize Size of the largest blocks expected
62 */
63 public TmfCoalescedEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize) {
64 super(dataType, 0, nbRequested, blockSize);
65 fRange = range;
66 }
67
68 // ------------------------------------------------------------------------
69 // Management
70 // ------------------------------------------------------------------------
71
72 @Override
73 public boolean isCompatible(ITmfDataRequest<T> request) {
74 if (request instanceof ITmfEventRequest<?>) {
75 boolean ok = getNbRequested() == request.getNbRequested();
76 ok &= getBlockize() == request.getBlockize();
77 if (ok) {
78 TmfTimestamp startTime = ((ITmfEventRequest<T>) request).getRange().getStartTime();
79 TmfTimestamp endTime = ((ITmfEventRequest<T>) request).getRange().getEndTime();
80 if (!fRange.contains(startTime))
81 fRange = new TmfTimeRange(startTime, fRange.getEndTime());
82 if (!fRange.contains(endTime))
83 fRange = new TmfTimeRange(fRange.getStartTime(), endTime);
84 }
85 return ok;
86 }
87 return false;
88 }
89
90 // ------------------------------------------------------------------------
91 // ITmfDataRequest
92 // ------------------------------------------------------------------------
93
94 @Override
95 public void handleData() {
96 for (ITmfDataRequest<T> request : fRequests) {
97 if (request instanceof TmfEventRequest<?>) {
98 TmfEventRequest<T> req = (TmfEventRequest<T>) request;
99 T[] data = getData();
100 if (data.length > 0 && req.getRange().contains(data[0].getTimestamp())) {
101 req.setData(data);
102 req.handleData();
103 }
104 }
105 else {
106 super.handleData();
107 }
108 }
109 }
110
111 // ------------------------------------------------------------------------
112 // ITmfEventRequest
113 // ------------------------------------------------------------------------
114
115 public TmfTimeRange getRange() {
116 return fRange;
117 }
118
119 // ------------------------------------------------------------------------
120 // Object
121 // ------------------------------------------------------------------------
122
123 @Override
124 // All requests have a unique id
125 public int hashCode() {
126 return super.hashCode();
127 }
128
129 @Override
130 public boolean equals(Object other) {
131 if (other instanceof TmfCoalescedEventRequest<?>) {
132 TmfCoalescedEventRequest<?> request = (TmfCoalescedEventRequest<?>) other;
133 return (request.getDataType() == getDataType()) &&
134 (request.getIndex() == getIndex()) &&
135 (request.getNbRequested() == getNbRequested()) &&
136 (request.getRange().equals(getRange()));
137 }
138 if (other instanceof TmfCoalescedDataRequest<?>) {
139 return super.equals(other);
140 }
141 return false;
142 }
143
144 @Override
145 public String toString() {
146 return "[TmfCoalescedEventRequest(" + getRequestId() + "," + getDataType().getSimpleName()
147 + "," + getRange() + "," + getNbRequested() + "," + getBlockize() + ")]";
148 }
149
150 }
This page took 0.035997 seconds and 5 git commands to generate.