svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.timesupport / org.gvsig.timesupport.lib / org.gvsig.timesupport.lib.impl / src / main / java / org / gvsig / timesupport / impl / DefaultAbsoluteInterval.java @ 44136
History | View | Annotate | Download (19.3 KB)
1 | 42003 | jjdelcerro | /* gvSIG. Geographic Information System of the Valencian Government
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007-2008 Infrastructures and Transports Department
|
||
4 | * of the Valencian Government (CIT)
|
||
5 | *
|
||
6 | * This program is free software; you can redistribute it and/or
|
||
7 | * modify it under the terms of the GNU General Public License
|
||
8 | * as published by the Free Software Foundation; either version 2
|
||
9 | * of the License, or (at your option) any later version.
|
||
10 | *
|
||
11 | * This program is distributed in the hope that it will be useful,
|
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | *
|
||
16 | * You should have received a copy of the GNU General Public License
|
||
17 | * along with this program; if not, write to the Free Software
|
||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
19 | * MA 02110-1301, USA.
|
||
20 | *
|
||
21 | */
|
||
22 | package org.gvsig.timesupport.impl; |
||
23 | |||
24 | import java.util.ArrayList; |
||
25 | import java.util.List; |
||
26 | |||
27 | import org.slf4j.Logger; |
||
28 | import org.slf4j.LoggerFactory; |
||
29 | |||
30 | import org.gvsig.timesupport.AbsoluteInstant; |
||
31 | import org.gvsig.timesupport.AbsoluteInstantType; |
||
32 | import org.gvsig.timesupport.AbsoluteInstantTypeNotRegisteredException; |
||
33 | import org.gvsig.timesupport.AbsoluteInterval; |
||
34 | import org.gvsig.timesupport.AbsoluteIntervalType; |
||
35 | import org.gvsig.timesupport.AbsoluteIntervalTypeNotRegisteredException; |
||
36 | import org.gvsig.timesupport.Chronology; |
||
37 | import org.gvsig.timesupport.Duration; |
||
38 | import org.gvsig.timesupport.Instant; |
||
39 | import org.gvsig.timesupport.RelativeInstant; |
||
40 | import org.gvsig.timesupport.Time; |
||
41 | import org.gvsig.timesupport.TimeSupportLocator; |
||
42 | import org.gvsig.timesupport.TimeSupportManager; |
||
43 | |||
44 | /**
|
||
45 | * @author gvSIG team
|
||
46 | * @version $Id$
|
||
47 | */
|
||
48 | public class DefaultAbsoluteInterval implements AbsoluteInterval{ |
||
49 | static final long MILLIS_BY_SECOND = 1000; |
||
50 | static final long MILLIS_BY_MINUTE = MILLIS_BY_SECOND * 60; |
||
51 | static final long MILLIS_BY_HOUR = MILLIS_BY_MINUTE * 60; |
||
52 | static final long MILLIS_BY_DAY = MILLIS_BY_HOUR * 24; |
||
53 | static final long MILLIS_BY_MONTH = MILLIS_BY_DAY * 30; |
||
54 | static final long MILLIS_BY_YEAR = MILLIS_BY_MONTH * 365; |
||
55 | |||
56 | private static Logger LOG = LoggerFactory.getLogger(DefaultAbsoluteInterval.class); |
||
57 | |||
58 | private org.joda.time.Period jodaPeriod = null; |
||
59 | private AbsoluteInstant startAbsoluteInstant = null; |
||
60 | private AbsoluteInstant endAbsoluteInstant = null; |
||
61 | private AbsoluteIntervalType[] absoluteIntervalTypes = null; |
||
62 | private Chronology chronology = null; |
||
63 | |||
64 | private static final TimeSupportManager timeSupportManager = TimeSupportLocator.getManager(); |
||
65 | |||
66 | DefaultAbsoluteInterval(AbsoluteInstant startPartial, int years, int months, int weeks, int days, |
||
67 | int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException{ |
||
68 | this(years, months, weeks, days, hours, minutes, seconds, millis, chronology);
|
||
69 | initilizePartials(((DefaultAbsoluteInstant)startPartial).getJodaType()); |
||
70 | } |
||
71 | |||
72 | DefaultAbsoluteInterval(int years, int months, int weeks, int days, |
||
73 | int hours, int minutes, int seconds, int millis, Chronology chronology) throws AbsoluteIntervalTypeNotRegisteredException{ |
||
74 | super();
|
||
75 | this.jodaPeriod = new org.joda.time.Period(years, months, weeks, days, hours, minutes, seconds, millis); |
||
76 | this.absoluteIntervalTypes = new AbsoluteIntervalType[8]; |
||
77 | this.absoluteIntervalTypes[0] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.YEARS); |
||
78 | this.absoluteIntervalTypes[1] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MONTHS); |
||
79 | this.absoluteIntervalTypes[2] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.WEEKS); |
||
80 | this.absoluteIntervalTypes[3] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.DAYS); |
||
81 | this.absoluteIntervalTypes[4] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.HOURS); |
||
82 | this.absoluteIntervalTypes[5] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MINUTES); |
||
83 | this.absoluteIntervalTypes[6] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.SECONDS); |
||
84 | this.absoluteIntervalTypes[7] = timeSupportManager.getAbsoluteIntervalType(AbsoluteIntervalType.MILLIS); |
||
85 | this.chronology = chronology;
|
||
86 | initilizePartials(); |
||
87 | } |
||
88 | |||
89 | DefaultAbsoluteInterval(AbsoluteInstant startAbsoluteInstant, AbsoluteInstant endAbsoluteInstant, Chronology chronology) { |
||
90 | super();
|
||
91 | this.jodaPeriod = new org.joda.time.Period(startAbsoluteInstant.toStandardDuration().getMillis(), |
||
92 | endAbsoluteInstant.toStandardDuration().getMillis()); |
||
93 | this.chronology = chronology;
|
||
94 | this.startAbsoluteInstant = startAbsoluteInstant;
|
||
95 | this.endAbsoluteInstant = endAbsoluteInstant;
|
||
96 | |||
97 | // int[] mergedTypes = mergeTypes(startAbsoluteInstant, endAbsoluteInstant);
|
||
98 | // try {
|
||
99 | // AbsoluteInstant startAbsoluteInstantAux = mergeTypes(mergedTypes, startAbsoluteInstant);
|
||
100 | // AbsoluteInstant endAbsoluteInstantAux = mergeTypes(mergedTypes, endAbsoluteInstant);
|
||
101 | // this.jodaPeriod = new org.joda.time.Period(((DefaultAbsoluteInstant)startAbsoluteInstantAux).getJodaType(),
|
||
102 | // ((DefaultAbsoluteInstant)endAbsoluteInstantAux).getJodaType());
|
||
103 | // this.chronology = chronology;
|
||
104 | // this.startAbsoluteInstant = startAbsoluteInstantAux;
|
||
105 | // this.endAbsoluteInstant = endAbsoluteInstantAux;
|
||
106 | // } catch (AbsoluteInstantTypeNotRegisteredException e) {
|
||
107 | // LOG.error("Error creating the interval");
|
||
108 | // }
|
||
109 | } |
||
110 | |||
111 | // private AbsoluteInstant mergeTypes(int[] mergedTypes,
|
||
112 | // AbsoluteInstant absoluteInstant) throws AbsoluteInstantTypeNotRegisteredException{
|
||
113 | // int[] values = new int[mergedTypes.length];
|
||
114 | // for (int i=0 ; i<mergedTypes.length ; i++){
|
||
115 | // if (mergedTypes[i] == AbsoluteInstantType.YEAR){
|
||
116 | // values[i] = absoluteInstant.getYears();
|
||
117 | // }else if (mergedTypes[i] == AbsoluteInstantType.MONTH_OF_YEAR){
|
||
118 | // values[i] = absoluteInstant.getMonths();
|
||
119 | // if (values[i] == 0){
|
||
120 | // values[i] = 1;
|
||
121 | // }
|
||
122 | // }else if (mergedTypes[i] == AbsoluteInstantType.DAY_OF_MONTH){
|
||
123 | // values[i] = absoluteInstant.getDays();
|
||
124 | // if (values[i] == 0){
|
||
125 | // values[i] = 1;
|
||
126 | // }
|
||
127 | // }else if (mergedTypes[i] == AbsoluteInstantType.HOUR_OF_DAY){
|
||
128 | // values[i] = absoluteInstant.getHours();
|
||
129 | // }else if (mergedTypes[i] == AbsoluteInstantType.MINUTE_OF_HOUR){
|
||
130 | // values[i] = absoluteInstant.getMinutes();
|
||
131 | // }else if (mergedTypes[i] == AbsoluteInstantType.SECOND_OF_MINUTE){
|
||
132 | // values[i] = absoluteInstant.getSeconds();
|
||
133 | // }else if (mergedTypes[i] == AbsoluteInstantType.MILLIS_OF_SECOND){
|
||
134 | // values[i] = absoluteInstant.getMillis();
|
||
135 | // }else{
|
||
136 | // values[i] = 0;
|
||
137 | // }
|
||
138 | // }
|
||
139 | // return timeSupportManager.createAbsoluteInstant(mergedTypes, values, absoluteInstant.getChronology());
|
||
140 | // }
|
||
141 | //
|
||
142 | // private int[] mergeTypes(AbsoluteInstant startAbsoluteInstant,
|
||
143 | // AbsoluteInstant endAbsoluteInstant) {
|
||
144 | // ArrayList types = new ArrayList();
|
||
145 | // for (int i=0 ; i<startAbsoluteInstant.size() ; i++){
|
||
146 | // types.add(startAbsoluteInstant.getFieldType(i).getType());
|
||
147 | // }
|
||
148 | //
|
||
149 | // for (int i=0 ; i<endAbsoluteInstant.size() ; i++){
|
||
150 | // int type = endAbsoluteInstant.getFieldType(i).getType();
|
||
151 | // int position = -1;
|
||
152 | // for (int j=0 ; j<types.size() ; j++){
|
||
153 | // int addedType = (Integer)types.get(j);
|
||
154 | // if (type < addedType){
|
||
155 | // position = j;
|
||
156 | // break;
|
||
157 | // }else if (type == addedType){
|
||
158 | // position = -2;
|
||
159 | // }
|
||
160 | // }
|
||
161 | // if (position > -1){
|
||
162 | // types.add(position, type);
|
||
163 | // }else if (position == -1){
|
||
164 | // types.add(type);
|
||
165 | // }
|
||
166 | // }
|
||
167 | //
|
||
168 | // int[] mergedTypes = new int[types.size()];
|
||
169 | // for (int i=0 ; i<types.size() ; i++){
|
||
170 | // mergedTypes[i] = (Integer)types.get(i);
|
||
171 | // }
|
||
172 | // return mergedTypes;
|
||
173 | // }
|
||
174 | |||
175 | DefaultAbsoluteInterval(RelativeInstant startPeriod, RelativeInstant endPeriod, Chronology chronology) { |
||
176 | super();
|
||
177 | this.jodaPeriod = new org.joda.time.Period(((DefaultRelativeInstant)startPeriod).getJodaType(), |
||
178 | ((DefaultRelativeInstant)endPeriod).getJodaType()); |
||
179 | this.chronology = chronology;
|
||
180 | initilizePartials(); |
||
181 | } |
||
182 | |||
183 | DefaultAbsoluteInterval(Chronology chronology, org.joda.time.Period period) { |
||
184 | super();
|
||
185 | this.jodaPeriod = period;
|
||
186 | this.chronology = chronology;
|
||
187 | initilizePartials(); |
||
188 | } |
||
189 | |||
190 | DefaultAbsoluteInterval(AbsoluteInstant startPartial, AbsoluteInstant endPartial) { |
||
191 | super();
|
||
192 | this.startAbsoluteInstant = startPartial;
|
||
193 | this.endAbsoluteInstant = endPartial;
|
||
194 | this.jodaPeriod = new org.joda.time.Period(endPartial.getYears() - startPartial.getYears(), |
||
195 | 0,
|
||
196 | endPartial.getMonths() - startPartial.getMonths(), |
||
197 | endPartial.getDays() - startPartial.getDays(), |
||
198 | endPartial.getHours() - startPartial.getHours(), |
||
199 | endPartial.getMinutes() - startPartial.getMinutes(), |
||
200 | endPartial.getSeconds() - startPartial.getSeconds(), |
||
201 | endPartial.getMillis() - startPartial.getMillis()); |
||
202 | } |
||
203 | |||
204 | @SuppressWarnings({"unchecked" }) |
||
205 | private void initilizePartials(){ |
||
206 | this.startAbsoluteInstant = new DefaultAbsoluteInstant(chronology); |
||
207 | ArrayList types = new ArrayList(); |
||
208 | ArrayList values = new ArrayList(); |
||
209 | if (jodaPeriod.getYears() > 0){ |
||
210 | types.add(AbsoluteInstantType.YEAR); |
||
211 | values.add(jodaPeriod.getYears()); |
||
212 | } |
||
213 | if (jodaPeriod.getMonths() > 0){ |
||
214 | types.add(AbsoluteInstantType.MONTH_OF_YEAR); |
||
215 | values.add(jodaPeriod.getMonths()); |
||
216 | } |
||
217 | if (jodaPeriod.getWeeks() > 0){ |
||
218 | types.add(AbsoluteInstantType.WEEK_OF_WEEKYEAR); |
||
219 | values.add(jodaPeriod.getWeeks()); |
||
220 | } |
||
221 | if (jodaPeriod.getDays() > 0){ |
||
222 | types.add(AbsoluteInstantType.DAY_OF_MONTH); |
||
223 | values.add(jodaPeriod.getDays()); |
||
224 | } |
||
225 | if (jodaPeriod.getHours() > 0){ |
||
226 | types.add(AbsoluteInstantType.HOUR_OF_DAY); |
||
227 | values.add(jodaPeriod.getHours()); |
||
228 | } |
||
229 | if (jodaPeriod.getMinutes() > 0){ |
||
230 | types.add(AbsoluteInstantType.MINUTE_OF_HOUR); |
||
231 | values.add(jodaPeriod.getMinutes()); |
||
232 | } |
||
233 | if (jodaPeriod.getSeconds() > 0){ |
||
234 | types.add(AbsoluteInstantType.SECOND_OF_MINUTE); |
||
235 | values.add(jodaPeriod.getSeconds()); |
||
236 | } |
||
237 | if (jodaPeriod.getMillis() > 0){ |
||
238 | types.add(AbsoluteInstantType.MILLIS_OF_SECOND); |
||
239 | values.add(jodaPeriod.getMillis()); |
||
240 | } |
||
241 | int[] nativeTypes = new int[types.size()]; |
||
242 | int[] nativeValues = new int[values.size()]; |
||
243 | for (int i=0 ; i<types.size() ; i++){ |
||
244 | nativeTypes[i] = (Integer)types.get(i);
|
||
245 | nativeValues[i] = (Integer)values.get(i);
|
||
246 | } |
||
247 | try {
|
||
248 | this.endAbsoluteInstant = timeSupportManager.createAbsoluteInstant(nativeTypes, nativeValues, chronology);
|
||
249 | } catch (AbsoluteInstantTypeNotRegisteredException e) {
|
||
250 | LOG.error("Impossible to create the endPartial for a period", e);
|
||
251 | } |
||
252 | } |
||
253 | |||
254 | @SuppressWarnings({ "unchecked" }) |
||
255 | private void initilizePartials(org.joda.time.Partial jodaPartial){ |
||
256 | this.startAbsoluteInstant = new DefaultAbsoluteInstant(chronology, jodaPartial); |
||
257 | org.joda.time.DateTimeFieldType[] dateTimeFieldTypes = jodaPartial.getFieldTypes();
|
||
258 | int[] jodaValues = jodaPartial.getValues(); |
||
259 | ArrayList types = new ArrayList(); |
||
260 | ArrayList values = new ArrayList(); |
||
261 | if (jodaPeriod.getYears() > 0){ |
||
262 | types.add(AbsoluteInstantType.YEAR); |
||
263 | values.add(jodaPeriod.getYears()); |
||
264 | } |
||
265 | if (jodaPeriod.getMonths() > 0){ |
||
266 | types.add(AbsoluteInstantType.MONTH_OF_YEAR); |
||
267 | values.add(jodaPeriod.getMonths()); |
||
268 | } |
||
269 | if (jodaPeriod.getDays() > 0){ |
||
270 | types.add(AbsoluteInstantType.DAY_OF_MONTH); |
||
271 | values.add(jodaPeriod.getDays()); |
||
272 | } |
||
273 | if (jodaPeriod.getHours() > 0){ |
||
274 | types.add(AbsoluteInstantType.HOUR_OF_DAY); |
||
275 | values.add(jodaPeriod.getHours()); |
||
276 | } |
||
277 | if (jodaPeriod.getMinutes() > 0){ |
||
278 | types.add(AbsoluteInstantType.MINUTE_OF_HOUR); |
||
279 | values.add(jodaPeriod.getMinutes()); |
||
280 | } |
||
281 | if (jodaPeriod.getSeconds() > 0){ |
||
282 | types.add(AbsoluteInstantType.SECOND_OF_MINUTE); |
||
283 | values.add(jodaPeriod.getSeconds()); |
||
284 | } |
||
285 | if (jodaPeriod.getMillis() > 0){ |
||
286 | types.add(AbsoluteInstantType.MILLIS_OF_SECOND); |
||
287 | values.add(jodaPeriod.getMillis()); |
||
288 | } |
||
289 | for (int i=0 ; i<dateTimeFieldTypes.length ; i++){ |
||
290 | if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.year())){
|
||
291 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.YEAR); |
||
292 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.monthOfYear())){ |
||
293 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MONTH_OF_YEAR); |
||
294 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.dayOfMonth())){ |
||
295 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.DAY_OF_MONTH); |
||
296 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.hourOfDay())){ |
||
297 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.HOUR_OF_DAY); |
||
298 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.minuteOfHour())){ |
||
299 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MINUTE_OF_HOUR); |
||
300 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.secondOfMinute())){ |
||
301 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.SECOND_OF_MINUTE); |
||
302 | } else if (dateTimeFieldTypes[i].equals(org.joda.time.DateTimeFieldType.millisOfSecond())){ |
||
303 | initializePartialsIteration(types, values, jodaValues[i], AbsoluteInstantType.MILLIS_OF_SECOND); |
||
304 | } |
||
305 | } |
||
306 | int[] nativeTypes = new int[types.size()]; |
||
307 | int[] nativeValues = new int[values.size()]; |
||
308 | for (int i=0 ; i<types.size() ; i++){ |
||
309 | nativeTypes[i] = (Integer)types.get(i);
|
||
310 | nativeValues[i] = (Integer)values.get(i);
|
||
311 | } |
||
312 | try {
|
||
313 | this.endAbsoluteInstant = timeSupportManager.createAbsoluteInstant(nativeTypes, nativeValues, chronology);
|
||
314 | } catch (AbsoluteInstantTypeNotRegisteredException e) {
|
||
315 | LOG.error("Impossible to create the endPartial for a period", e);
|
||
316 | } |
||
317 | } |
||
318 | |||
319 | @SuppressWarnings({ "unchecked" }) |
||
320 | private void initializePartialsIteration(List types, List values, int jodaValue, int dateTimefieldtype){ |
||
321 | boolean found = false; |
||
322 | for (int j=0 ; j<types.size() ; j++){ |
||
323 | if (types.get(j).equals(dateTimefieldtype)){
|
||
324 | int value = (Integer)values.get(j); |
||
325 | values.remove(j); |
||
326 | values.add(j, value + jodaValue); |
||
327 | found = true;
|
||
328 | break;
|
||
329 | } |
||
330 | } |
||
331 | if (!found){
|
||
332 | types.add(dateTimefieldtype); |
||
333 | values.add(jodaValue); |
||
334 | } |
||
335 | } |
||
336 | |||
337 | public int size() { |
||
338 | return jodaPeriod.size();
|
||
339 | } |
||
340 | |||
341 | public AbsoluteIntervalType getFieldType(int index) { |
||
342 | return absoluteIntervalTypes[index];
|
||
343 | } |
||
344 | |||
345 | public int getValue(int index) { |
||
346 | return jodaPeriod.getValue(index);
|
||
347 | } |
||
348 | |||
349 | public String toString() { |
||
350 | return jodaPeriod.toString();
|
||
351 | } |
||
352 | |||
353 | public boolean equals(Object obj) { |
||
354 | if (((Time)obj).isRelative() || ((Time)obj).isInstant()){ |
||
355 | return false; |
||
356 | } |
||
357 | return ((DefaultAbsoluteInterval)obj).getJodaType().equals(jodaPeriod);
|
||
358 | } |
||
359 | |||
360 | org.joda.time.Period getJodaType() { |
||
361 | return jodaPeriod;
|
||
362 | } |
||
363 | |||
364 | public Chronology getChronology() {
|
||
365 | return chronology;
|
||
366 | } |
||
367 | |||
368 | public int getYears() { |
||
369 | return jodaPeriod.getYears();
|
||
370 | } |
||
371 | |||
372 | public int getMonths() { |
||
373 | return jodaPeriod.getMonths();
|
||
374 | } |
||
375 | |||
376 | public int getWeeks() { |
||
377 | return jodaPeriod.getWeeks();
|
||
378 | } |
||
379 | |||
380 | public int getDays() { |
||
381 | return jodaPeriod.getDays();
|
||
382 | } |
||
383 | |||
384 | public int getHours() { |
||
385 | return jodaPeriod.getHours();
|
||
386 | } |
||
387 | |||
388 | public int getMinutes() { |
||
389 | return jodaPeriod.getMinutes();
|
||
390 | } |
||
391 | |||
392 | public int getSeconds() { |
||
393 | return jodaPeriod.getSeconds();
|
||
394 | } |
||
395 | |||
396 | public int getMillis() { |
||
397 | return jodaPeriod.getMillis();
|
||
398 | } |
||
399 | |||
400 | public boolean isAfter(AbsoluteInterval period) { |
||
401 | return jodaPeriod.getMillis() > period.getMillis();
|
||
402 | } |
||
403 | |||
404 | public boolean isBefore(AbsoluteInterval period) { |
||
405 | return jodaPeriod.getMillis() < period.getMillis();
|
||
406 | } |
||
407 | |||
408 | public Object clone() throws CloneNotSupportedException { |
||
409 | return new DefaultAbsoluteInterval(chronology, new org.joda.time.Period(jodaPeriod)); |
||
410 | } |
||
411 | |||
412 | public AbsoluteInstant getStart(){
|
||
413 | return startAbsoluteInstant;
|
||
414 | } |
||
415 | |||
416 | public AbsoluteInstant getEnd(){
|
||
417 | return endAbsoluteInstant;
|
||
418 | } |
||
419 | |||
420 | public boolean isRelative() { |
||
421 | return false; |
||
422 | } |
||
423 | |||
424 | public boolean isAbsolute() { |
||
425 | return true; |
||
426 | } |
||
427 | |||
428 | public boolean isInterval() { |
||
429 | return true; |
||
430 | } |
||
431 | |||
432 | public boolean isInstant() { |
||
433 | return false; |
||
434 | } |
||
435 | |||
436 | public boolean intersects(Time time) { |
||
437 | if (time.isAbsolute()){
|
||
438 | if (time.isInterval()){
|
||
439 | return intersects((AbsoluteInterval)time);
|
||
440 | }else{
|
||
441 | return contains((AbsoluteInstant)time);
|
||
442 | } |
||
443 | } |
||
444 | return true; |
||
445 | } |
||
446 | |||
447 | public boolean intersects(AbsoluteInterval absoluteInsterInterval){ |
||
448 | return (this.getStart().isAfter(absoluteInsterInterval.getStart()) && this.getEnd().isBefore(absoluteInsterInterval.getStart())) || |
||
449 | (this.getEnd().isBefore(absoluteInsterInterval.getEnd()) && this.getEnd().isAfter(absoluteInsterInterval.getEnd())); |
||
450 | } |
||
451 | |||
452 | public boolean contains(Instant instant) { |
||
453 | if (instant.isAbsolute()){
|
||
454 | return this.getMillis() >= ((AbsoluteInstant)instant).getMillis(); |
||
455 | } |
||
456 | return false; |
||
457 | } |
||
458 | |||
459 | public Duration toStandardDuration() { |
||
460 | long millis = 0; |
||
461 | millis += getYears() * MILLIS_BY_YEAR; |
||
462 | millis += getMonths() * MILLIS_BY_MONTH; |
||
463 | millis += getDays() * MILLIS_BY_YEAR; |
||
464 | millis += getHours() * MILLIS_BY_HOUR; |
||
465 | millis += getMinutes() * MILLIS_BY_MINUTE; |
||
466 | millis += getSeconds() * MILLIS_BY_SECOND; |
||
467 | millis += getMillis(); |
||
468 | return new DefaultDuration(millis); |
||
469 | } |
||
470 | 43623 | jjdelcerro | |
471 | 42003 | jjdelcerro | } |