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
.BIG_BANG
, TmfTimestamp
.BIG_CRUNCH
);
36 public static final TmfTimeRange NULL_RANGE
=
37 new TmfTimeRange(TmfTimestamp
.BIG_BANG
, TmfTimestamp
.BIG_BANG
);
39 // ------------------------------------------------------------------------
41 // ------------------------------------------------------------------------
43 private ITmfTimestamp fStartTime
;
44 private ITmfTimestamp fEndTime
;
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
53 @SuppressWarnings("unused")
54 private TmfTimeRange() {
60 * @param startTime start of the time range
61 * @param endTime end of the time range
63 public TmfTimeRange(ITmfTimestamp startTime
, ITmfTimestamp endTime
) {
64 if (startTime
== null || endTime
== null) {
65 throw new IllegalArgumentException();
67 fStartTime
= startTime
;
74 * @param range the other time range
76 public TmfTimeRange(TmfTimeRange range
) {
78 throw new IllegalArgumentException();
80 fStartTime
= range
.getStartTime();
81 fEndTime
= range
.getEndTime();
84 // ------------------------------------------------------------------------
86 // ------------------------------------------------------------------------
89 * @return the time range start time
91 public ITmfTimestamp
getStartTime() {
96 * @return the time range end time
98 public ITmfTimestamp
getEndTime() {
102 // ------------------------------------------------------------------------
104 // ------------------------------------------------------------------------
107 * Check if the timestamp is within the time range
109 * @param ts the timestamp to check
110 * @return true if [startTime] <= [ts] <= [endTime]
112 public boolean contains(ITmfTimestamp ts
) {
113 // Zero acts as a "universal donor" timestamp
114 if (ts
.equals(TmfTimestamp
.ZERO
))
116 return (fStartTime
.compareTo(ts
, true) <= 0) && (fEndTime
.compareTo(ts
, true) >= 0);
120 * Check if the time range is within the time range
122 * @param range the other time range
123 * @return true if [range] is fully contained
125 public boolean contains(TmfTimeRange range
) {
126 ITmfTimestamp startTime
= range
.getStartTime();
127 ITmfTimestamp endTime
= range
.getEndTime();
128 return (fStartTime
.compareTo(startTime
, true) <= 0) && (fEndTime
.compareTo(endTime
, true) >= 0);
131 // ------------------------------------------------------------------------
133 // ------------------------------------------------------------------------
136 * Get intersection of two time ranges
138 * @param range the other time range
139 * @return the intersection time range, or null if no intersection exists
141 public TmfTimeRange
getIntersection(TmfTimeRange range
) {
142 if (fStartTime
.compareTo(range
.fEndTime
, true) > 0 || fEndTime
.compareTo(range
.fStartTime
, true) < 0)
143 return null; // no intersection
145 return new TmfTimeRange(fStartTime
.compareTo(range
.fStartTime
, true) < 0 ? range
.fStartTime
146 : fStartTime
, fEndTime
.compareTo(range
.fEndTime
, true) > 0 ? range
.fEndTime
150 // ------------------------------------------------------------------------
152 // ------------------------------------------------------------------------
155 * @see java.lang.Object#clone()
158 public TmfTimeRange
clone() {
159 TmfTimeRange clone
= null;
161 clone
= (TmfTimeRange
) super.clone();
162 clone
.fStartTime
= fStartTime
.clone();
163 clone
.fEndTime
= fEndTime
.clone();
165 catch (CloneNotSupportedException e
) {
170 // ------------------------------------------------------------------------
172 // ------------------------------------------------------------------------
175 * @see java.lang.Object#hashCode()
178 public int hashCode() {
179 final int prime
= 31;
181 result
= prime
* result
+ fEndTime
.hashCode();
182 result
= prime
* result
+ fStartTime
.hashCode();
187 * @see java.lang.Object#equals(java.lang.Object)
190 public boolean equals(Object obj
) {
195 if (!(obj
instanceof TmfTimeRange
))
197 TmfTimeRange other
= (TmfTimeRange
) obj
;
198 if (!fEndTime
.equals(other
.fEndTime
))
200 if (!fStartTime
.equals(other
.fStartTime
))
206 * @see java.lang.Object#toString()
209 @SuppressWarnings("nls")
210 public String
toString() {
211 return "TmfTimeRange [fStartTime=" + fStartTime
+ ", fEndTime=" + fEndTime
+ "]";