KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > joda > time > field > PreciseDurationField


1 /*
2  * Copyright 2001-2005 Stephen Colebourne
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 package org.joda.time.field;
17
18 import org.joda.time.DurationFieldType;
19
20 /**
21  * Duration field class representing a field with a fixed unit length.
22  * <p>
23  * PreciseDurationField is thread-safe and immutable.
24  *
25  * @author Stephen Colebourne
26  * @author Brian S O'Neill
27  * @since 1.0
28  */

29 public class PreciseDurationField extends BaseDurationField {
30     
31     private static final long serialVersionUID = -8346152187724495365L;
32
33     /** The size of the unit */
34     private final long iUnitMillis;
35
36     /**
37      * Constructor.
38      *
39      * @param type the field type
40      * @param unitMillis the unit milliseconds
41      */

42     public PreciseDurationField(DurationFieldType type, long unitMillis) {
43         super(type);
44         iUnitMillis = unitMillis;
45     }
46     
47     //------------------------------------------------------------------------
48
/**
49      * This field is precise.
50      *
51      * @return true always
52      */

53     public final boolean isPrecise() {
54         return true;
55     }
56     
57     /**
58      * Returns the amount of milliseconds per unit value of this field.
59      *
60      * @return the unit size of this field, in milliseconds
61      */

62     public final long getUnitMillis() {
63         return iUnitMillis;
64     }
65
66     //------------------------------------------------------------------------
67
/**
68      * Get the value of this field from the milliseconds.
69      *
70      * @param duration the milliseconds to query, which may be negative
71      * @param instant ignored
72      * @return the value of the field, in the units of the field, which may be
73      * negative
74      */

75     public long getValueAsLong(long duration, long instant) {
76         return duration / iUnitMillis; // safe
77
}
78
79     /**
80      * Get the millisecond duration of this field from its value.
81      *
82      * @param value the value of the field, which may be negative
83      * @param instant ignored
84      * @return the milliseconds that the field represents, which may be
85      * negative
86      */

87     public long getMillis(int value, long instant) {
88         return value * iUnitMillis; // safe
89
}
90
91     /**
92      * Get the millisecond duration of this field from its value.
93      *
94      * @param value the value of the field, which may be negative
95      * @param instant ignored
96      * @return the milliseconds that the field represents, which may be
97      * negative
98      */

99     public long getMillis(long value, long instant) {
100         return FieldUtils.safeMultiply(value, iUnitMillis);
101     }
102
103     public long add(long instant, int value) {
104         long addition = value * iUnitMillis; // safe
105
return FieldUtils.safeAdd(instant, addition);
106     }
107
108     public long add(long instant, long value) {
109         long addition = FieldUtils.safeMultiply(value, iUnitMillis);
110         return FieldUtils.safeAdd(instant, addition);
111     }
112
113     public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
114         long difference = FieldUtils.safeSubtract(minuendInstant, subtrahendInstant);
115         return difference / iUnitMillis;
116     }
117
118     //-----------------------------------------------------------------------
119
/**
120      * Compares this duration field to another.
121      * Two fields are equal if of the same type and duration.
122      *
123      * @param obj the object to compare to
124      * @return if equal
125      */

126     public boolean equals(Object JavaDoc obj) {
127         if (this == obj) {
128             return true;
129         } else if (obj instanceof PreciseDurationField) {
130             PreciseDurationField other = (PreciseDurationField) obj;
131             return (getType() == other.getType()) && (iUnitMillis == other.iUnitMillis);
132         }
133         return false;
134     }
135
136     /**
137      * Gets a hash code for this instance.
138      *
139      * @return a suitable hashcode
140      */

141     public int hashCode() {
142         long millis = iUnitMillis;
143         int hash = (int) (millis ^ (millis >>> 32));
144         hash += getType().hashCode();
145         return hash;
146     }
147
148 }
149
Popular Tags