(no commit message)
[utils] / crawler / kiss / src / org / wamblee / crawler / kiss / TimeInterval.java
1 /*
2  * Copyright 2005 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.wamblee.crawler.kiss;
18
19 /**
20  * Time interval. 
21  */
22 public class TimeInterval {
23
24     /**
25      * Begin time. 
26      */
27     private Time _begin;
28
29     /**
30      * End time. 
31      */
32     private Time _end;
33
34     /**
35      * Construts the interval. 
36      * @param aBegin Start time. 
37      * @param aEnd End time. 
38      */
39     public TimeInterval(Time aBegin, Time aEnd) {
40         _begin = aBegin;
41         _end = aEnd;
42     }
43
44     /**
45      * Gets the begin time. 
46      * @return Begin time.  
47      */
48     public Time getBegin() {
49         return _begin;
50     }
51
52     /**
53      * Gets the end time. 
54      * @return End time. 
55      */
56     public Time getEnd() {
57         return _end;
58     }
59
60     /*
61      * (non-Javadoc)
62      * 
63      * @see java.lang.Object#toString()
64      */
65     @Override
66     public String toString() {
67         return _begin + " - " + _end;
68     }
69
70     /**
71      * Determines if there is an overlap between the current interval and given
72      * one.
73      * 
74      * @param aInterval
75      *            Interval to compare with.
76      * @return True iff there is overlap
77      */
78     public boolean overlap(TimeInterval aInterval) {
79
80         if (isUncertain() || aInterval.isUncertain()) {
81             // Optimistic assume there is no overlap if one of the intervals is
82             // uncertain.
83             return false;
84         }
85
86         if (_end.asFloat() <= aInterval._begin.asFloat()
87                 || aInterval._end.asFloat() <= _begin.asFloat()) {
88             return false;
89         }
90
91         return true;
92     }
93
94     /**
95      * Determines if the actual time that the program corresponds to is
96      * uncertain due to the representation of a period of more than 24 hours
97      * using a 24 hour clock.
98      * 
99      * @return True iff the interval is uncertain.
100      */
101     boolean isUncertain() {
102         return _begin.asFloat() > _end.asFloat();
103     }
104     
105     /* (non-Javadoc)
106      * @see java.lang.Object#equals(java.lang.Object)j
107      */
108     @Override
109     public boolean equals(Object obj) {
110         if ( !(obj instanceof TimeInterval)) { 
111             return false; 
112         } 
113         return obj.toString().equals(obj.toString());
114     }
115     
116     /* (non-Javadoc)
117      * @see java.lang.Object#hashCode()
118      */
119     @Override
120     public int hashCode() {
121         return _begin.hashCode();
122     }
123 }