1 /*******************************************************************************
2 * Copyright (c) 2009, 2012 Ericsson
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
10 * Francois Chouinard - Initial API and implementation
11 * Francois Chouinard - Updated as per TMF Event Model 1.0
12 *******************************************************************************/
14 package org
.eclipse
.linuxtools
.tmf
.core
.event
;
17 * <b><u>TmfTimeRange</u></b>
19 * A utility class to define and manage time ranges.
21 public final class TmfTimeRange
implements Cloneable
{
23 // ------------------------------------------------------------------------
25 // ------------------------------------------------------------------------
28 * The full possible time range
30 public static final TmfTimeRange Eternity
=
31 new TmfTimeRange(TmfTimestamp
.BigBang
, TmfTimestamp
.BigCrunch
);
36 public static final TmfTimeRange Null
=
37 new TmfTimeRange(TmfTimestamp
.BigBang
, TmfTimestamp
.BigBang
);
39 // ------------------------------------------------------------------------
41 // ------------------------------------------------------------------------
43 private ITmfTimestamp fStartTime
;
44 private ITmfTimestamp fEndTime
;
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
53 @SuppressWarnings("unused")
54 private TmfTimeRange() {
55 throw new AssertionError();
61 * @param startTime start of the time range
62 * @param endTime end of the time range
64 public TmfTimeRange(ITmfTimestamp startTime
, ITmfTimestamp endTime
) {
65 if (startTime
== null || endTime
== null) {
66 throw new IllegalArgumentException();
68 fStartTime
= startTime
;
75 * @param range the other time range
77 public TmfTimeRange(TmfTimeRange range
) {
79 throw new IllegalArgumentException();
81 fStartTime
= range
.getStartTime();
82 fEndTime
= range
.getEndTime();
85 // ------------------------------------------------------------------------
87 // ------------------------------------------------------------------------
90 * @return the time range start time
92 public ITmfTimestamp
getStartTime() {
97 * @return the time range end time
99 public ITmfTimestamp
getEndTime() {
103 // ------------------------------------------------------------------------
105 // ------------------------------------------------------------------------
108 * Check if the timestamp is within the time range
110 * @param ts the timestamp to check
111 * @return true if [startTime] <= [ts] <= [endTime]
113 public boolean contains(ITmfTimestamp ts
) {
114 // Zero acts as a "universal donor" timestamp
115 if (ts
.equals(TmfTimestamp
.Zero
))
117 return (fStartTime
.compareTo(ts
, true) <= 0) && (fEndTime
.compareTo(ts
, true) >= 0);
121 * Check if the time range is within the time range
123 * @param range the other time range
124 * @return true if [range] is fully contained
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);
132 // ------------------------------------------------------------------------
134 // ------------------------------------------------------------------------
137 * Get intersection of two time ranges
139 * @param range the other time range
140 * @return the intersection time range, or null if no intersection exists
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
146 return new TmfTimeRange(fStartTime
.compareTo(range
.fStartTime
, true) < 0 ? range
.fStartTime
147 : fStartTime
, fEndTime
.compareTo(range
.fEndTime
, true) > 0 ? range
.fEndTime
151 // ------------------------------------------------------------------------
153 // ------------------------------------------------------------------------
156 * @see java.lang.Object#clone()
159 public TmfTimeRange
clone() {
160 TmfTimeRange clone
= null;
162 clone
= (TmfTimeRange
) super.clone();
163 clone
.fStartTime
= fStartTime
.clone();
164 clone
.fEndTime
= fEndTime
.clone();
166 catch (CloneNotSupportedException e
) {
171 // ------------------------------------------------------------------------
173 // ------------------------------------------------------------------------
176 * @see java.lang.Object#hashCode()
179 public int hashCode() {
180 final int prime
= 31;
182 result
= prime
* result
+ fEndTime
.hashCode();
183 result
= prime
* result
+ fStartTime
.hashCode();
188 * @see java.lang.Object#equals(java.lang.Object)
191 public boolean equals(Object obj
) {
196 if (getClass() != obj
.getClass())
198 TmfTimeRange other
= (TmfTimeRange
) obj
;
199 if (!fEndTime
.equals(other
.fEndTime
))
201 if (!fStartTime
.equals(other
.fStartTime
))
207 * @see java.lang.Object#toString()
210 @SuppressWarnings("nls")
211 public String
toString() {
212 return "TmfTimeRange [fStartTime=" + fStartTime
+ ", fEndTime=" + fEndTime
+ "]";