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