Improve code coverage for TmfTimeRange
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / event / TmfTimeRange.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2012 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are made
5 * 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 * Francois Chouinard - Updated as per TMF Event Model 1.0
12 *******************************************************************************/
13
14 package org.eclipse.linuxtools.tmf.core.event;
15
16 /**
17 * <b><u>TmfTimeRange</u></b>
18 * <p>
19 * A utility class to define and manage time ranges.
20 */
21 public final class TmfTimeRange implements Cloneable {
22
23 // ------------------------------------------------------------------------
24 // Constants
25 // ------------------------------------------------------------------------
26
27 /**
28 * The full possible time range
29 */
30 public static final TmfTimeRange Eternity =
31 new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
32
33 /**
34 * The null time range
35 */
36 public static final TmfTimeRange Null =
37 new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigBang);
38
39 // ------------------------------------------------------------------------
40 // Attributes
41 // ------------------------------------------------------------------------
42
43 private ITmfTimestamp fStartTime;
44 private ITmfTimestamp fEndTime;
45
46 // ------------------------------------------------------------------------
47 // Constructors
48 // ------------------------------------------------------------------------
49
50 /**
51 * Default constructor
52 */
53 @SuppressWarnings("unused")
54 private TmfTimeRange() {
55 throw new AssertionError();
56 }
57
58 /**
59 * Full constructor
60 *
61 * @param startTime start of the time range
62 * @param endTime end of the time range
63 */
64 public TmfTimeRange(ITmfTimestamp startTime, ITmfTimestamp endTime) {
65 if (startTime == null || endTime == null) {
66 throw new IllegalArgumentException();
67 }
68 fStartTime = startTime;
69 fEndTime = endTime;
70 }
71
72 /**
73 * Copy constructor
74 *
75 * @param range the other time range
76 */
77 public TmfTimeRange(TmfTimeRange range) {
78 if (range == null) {
79 throw new IllegalArgumentException();
80 }
81 fStartTime = range.getStartTime();
82 fEndTime = range.getEndTime();
83 }
84
85 // ------------------------------------------------------------------------
86 // Getters
87 // ------------------------------------------------------------------------
88
89 /**
90 * @return the time range start time
91 */
92 public ITmfTimestamp getStartTime() {
93 return fStartTime;
94 }
95
96 /**
97 * @return the time range end time
98 */
99 public ITmfTimestamp getEndTime() {
100 return fEndTime;
101 }
102
103 // ------------------------------------------------------------------------
104 // Predicates
105 // ------------------------------------------------------------------------
106
107 /**
108 * Check if the timestamp is within the time range
109 *
110 * @param ts the timestamp to check
111 * @return true if [startTime] <= [ts] <= [endTime]
112 */
113 public boolean contains(ITmfTimestamp ts) {
114 // Zero acts as a "universal donor" timestamp
115 if (ts.equals(TmfTimestamp.Zero))
116 return true;
117 return (fStartTime.compareTo(ts, true) <= 0) && (fEndTime.compareTo(ts, true) >= 0);
118 }
119
120 /**
121 * Check if the time range is within the time range
122 *
123 * @param range the other time range
124 * @return true if [range] is fully contained
125 */
126 public boolean contains(TmfTimeRange range) {
127 ITmfTimestamp startTime = range.getStartTime();
128 ITmfTimestamp endTime = range.getEndTime();
129 return (fStartTime.compareTo(startTime, true) <= 0) && (fEndTime.compareTo(endTime, true) >= 0);
130 }
131
132 // ------------------------------------------------------------------------
133 // Operations
134 // ------------------------------------------------------------------------
135
136 /**
137 * Get intersection of two time ranges
138 *
139 * @param range the other time range
140 * @return the intersection time range, or null if no intersection exists
141 */
142 public TmfTimeRange getIntersection(TmfTimeRange range) {
143 if (fStartTime.compareTo(range.fEndTime, true) > 0 || fEndTime.compareTo(range.fStartTime, true) < 0)
144 return null; // no intersection
145
146 return new TmfTimeRange(fStartTime.compareTo(range.fStartTime, true) < 0 ? range.fStartTime
147 : fStartTime, fEndTime.compareTo(range.fEndTime, true) > 0 ? range.fEndTime
148 : fEndTime);
149 }
150
151 // ------------------------------------------------------------------------
152 // Cloneable
153 // ------------------------------------------------------------------------
154
155 /* (non-Javadoc)
156 * @see java.lang.Object#clone()
157 */
158 @Override
159 public TmfTimeRange clone() {
160 TmfTimeRange clone = null;
161 try {
162 clone = (TmfTimeRange) super.clone();
163 clone.fStartTime = fStartTime.clone();
164 clone.fEndTime = fEndTime.clone();
165 }
166 catch (CloneNotSupportedException e) {
167 }
168 return clone;
169 }
170
171 // ------------------------------------------------------------------------
172 // Object
173 // ------------------------------------------------------------------------
174
175 /* (non-Javadoc)
176 * @see java.lang.Object#hashCode()
177 */
178 @Override
179 public int hashCode() {
180 final int prime = 31;
181 int result = 1;
182 result = prime * result + fEndTime.hashCode();
183 result = prime * result + fStartTime.hashCode();
184 return result;
185 }
186
187 /* (non-Javadoc)
188 * @see java.lang.Object#equals(java.lang.Object)
189 */
190 @Override
191 public boolean equals(Object obj) {
192 if (this == obj)
193 return true;
194 if (obj == null)
195 return false;
196 if (getClass() != obj.getClass())
197 return false;
198 TmfTimeRange other = (TmfTimeRange) obj;
199 if (!fEndTime.equals(other.fEndTime))
200 return false;
201 if (!fStartTime.equals(other.fStartTime))
202 return false;
203 return true;
204 }
205
206 /* (non-Javadoc)
207 * @see java.lang.Object#toString()
208 */
209 @Override
210 @SuppressWarnings("nls")
211 public String toString() {
212 return "TmfTimeRange [fStartTime=" + fStartTime + ", fEndTime=" + fEndTime + "]";
213 }
214
215 }
This page took 0.036178 seconds and 6 git commands to generate.