View Javadoc

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;
17  
18  /**
19   * Defines a duration of time that can be queried and modified using datetime fields.
20   * <p>
21   * The implementation of this interface will be mutable.
22   * It may provide more advanced methods than those in the interface.
23   *
24   * @author Brian S O'Neill
25   * @author Stephen Colebourne
26   * @since 1.0
27   */
28  public interface ReadWritablePeriod extends ReadablePeriod {
29  
30      /**
31       * Clears the period, setting all values back to zero.
32       */
33      void clear();
34  
35      /**
36       * Sets the value of one of the fields by index.
37       *
38       * @param index  the field index
39       * @param value  the new value for the field
40       * @throws IndexOutOfBoundsException if the index is invalid
41       */
42      void setValue(int index, int value);
43  
44      /**
45       * Sets the value of one of the fields.
46       * <p>
47       * The field type specified must be one of those that is supported by the period.
48       *
49       * @param field  a DurationFieldType instance that is supported by this period
50       * @param value  the new value for the field
51       * @throws IllegalArgumentException if the field is null or not supported
52       */
53      void set(DurationFieldType field, int value);
54  
55      /**
56       * Sets all the fields in one go from another ReadablePeriod.
57       * 
58       * @param period  the period to set, null means zero length period
59       * @throws IllegalArgumentException if an unsupported field's value is non-zero
60       */
61      void setPeriod(ReadablePeriod period);
62  
63      /**
64       * Sets all the fields in one go.
65       * 
66       * @param years  amount of years in this period, which must be zero if unsupported
67       * @param months  amount of months in this period, which must be zero if unsupported
68       * @param weeks  amount of weeks in this period, which must be zero if unsupported
69       * @param days  amount of days in this period, which must be zero if unsupported
70       * @param hours  amount of hours in this period, which must be zero if unsupported
71       * @param minutes  amount of minutes in this period, which must be zero if unsupported
72       * @param seconds  amount of seconds in this period, which must be zero if unsupported
73       * @param millis  amount of milliseconds in this period, which must be zero if unsupported
74       * @throws IllegalArgumentException if an unsupported field's value is non-zero
75       */
76      void setPeriod(int years, int months, int weeks, int days,
77                         int hours, int minutes, int seconds, int millis);
78  
79      /**
80       * Sets all the fields in one go from an interval dividing the
81       * fields using the period type.
82       * 
83       * @param interval  the interval to set, null means zero length
84       */
85      void setPeriod(ReadableInterval interval);
86  
87      //-----------------------------------------------------------------------
88      /**
89       * Adds to the value of one of the fields.
90       * <p>
91       * The field type specified must be one of those that is supported by the period.
92       *
93       * @param field  a DurationFieldType instance that is supported by this period
94       * @param value  the value to add to the field
95       * @throws IllegalArgumentException if the field is null or not supported
96       */
97      void add(DurationFieldType field, int value);
98  
99      /**
100      * Adds a period to this one by adding each field in turn.
101      * 
102      * @param period  the period to add, null means add nothing
103      * @throws IllegalArgumentException if the period being added contains a field
104      * not supported by this period
105      * @throws ArithmeticException if the addition exceeds the capacity of the period
106      */
107     void add(ReadablePeriod period);
108 
109     /**
110      * Adds to each field of this period.
111      * 
112      * @param years  amount of years to add to this period, which must be zero if unsupported
113      * @param months  amount of months to add to this period, which must be zero if unsupported
114      * @param weeks  amount of weeks to add to this period, which must be zero if unsupported
115      * @param days  amount of days to add to this period, which must be zero if unsupported
116      * @param hours  amount of hours to add to this period, which must be zero if unsupported
117      * @param minutes  amount of minutes to add to this period, which must be zero if unsupported
118      * @param seconds  amount of seconds to add to this period, which must be zero if unsupported
119      * @param millis  amount of milliseconds to add to this period, which must be zero if unsupported
120      * @throws IllegalArgumentException if the period being added contains a field
121      * not supported by this period
122      * @throws ArithmeticException if the addition exceeds the capacity of the period
123      */
124     void add(int years, int months, int weeks, int days,
125                     int hours, int minutes, int seconds, int millis);
126 
127     /**
128      * Adds an interval to this one by dividing the interval into
129      * fields and then adding each field in turn.
130      * 
131      * @param interval  the interval to add, null means add nothing
132      * @throws ArithmeticException if the addition exceeds the capacity of the period
133      */
134     void add(ReadableInterval interval);
135 
136     //-----------------------------------------------------------------------
137     /**
138      * Sets the number of years of the period.
139      * 
140      * @param years  the number of years
141      * @throws IllegalArgumentException if field is not supported and the value is non-zero
142      */
143     void setYears(int years);
144 
145     /**
146      * Adds the specified years to the number of years in the period.
147      * 
148      * @param years  the number of years
149      * @throws IllegalArgumentException if field is not supported and the value is non-zero
150      * @throws ArithmeticException if the addition exceeds the capacity of the period
151      */
152     void addYears(int years);
153 
154     //-----------------------------------------------------------------------
155     /**
156      * Sets the number of months of the period.
157      * 
158      * @param months  the number of months
159      * @throws IllegalArgumentException if field is not supported and the value is non-zero
160      */
161     void setMonths(int months);
162 
163     /**
164      * Adds the specified months to the number of months in the period.
165      * 
166      * @param months  the number of months
167      * @throws IllegalArgumentException if field is not supported and the value is non-zero
168      * @throws ArithmeticException if the addition exceeds the capacity of the period
169      */
170     void addMonths(int months);
171 
172     //-----------------------------------------------------------------------
173     /**
174      * Sets the number of weeks of the period.
175      * 
176      * @param weeks  the number of weeks
177      * @throws IllegalArgumentException if field is not supported and the value is non-zero
178      */
179     void setWeeks(int weeks);
180 
181     /**
182      * Adds the specified weeks to the number of weeks in the period.
183      * 
184      * @param weeks  the number of weeks
185      * @throws IllegalArgumentException if field is not supported and the value is non-zero
186      * @throws ArithmeticException if the addition exceeds the capacity of the period
187      */
188     void addWeeks(int weeks);
189 
190     //-----------------------------------------------------------------------
191     /**
192      * Sets the number of days of the period.
193      * 
194      * @param days  the number of days
195      * @throws IllegalArgumentException if field is not supported and the value is non-zero
196      */
197     void setDays(int days);
198 
199     /**
200      * Adds the specified days to the number of days in the period.
201      * 
202      * @param days  the number of days
203      * @throws IllegalArgumentException if field is not supported and the value is non-zero
204      * @throws ArithmeticException if the addition exceeds the capacity of the period
205      */
206     void addDays(int days);
207 
208     //-----------------------------------------------------------------------
209     /**
210      * Sets the number of hours of the period.
211      * 
212      * @param hours  the number of hours
213      * @throws IllegalArgumentException if field is not supported and the value is non-zero
214      */
215     void setHours(int hours);
216 
217     /**
218      * Adds the specified hours to the number of hours in the period.
219      * 
220      * @param hours  the number of hours
221      * @throws IllegalArgumentException if field is not supported and the value is non-zero
222      * @throws ArithmeticException if the addition exceeds the capacity of the period
223      */
224     void addHours(int hours);
225 
226     //-----------------------------------------------------------------------
227     /**
228      * Sets the number of minutes of the period.
229      * 
230      * @param minutes  the number of minutes
231      * @throws IllegalArgumentException if field is not supported and the value is non-zero
232      */
233     void setMinutes(int minutes);
234 
235     /**
236      * Adds the specified minutes to the number of minutes in the period.
237      * 
238      * @param minutes  the number of minutes
239      * @throws IllegalArgumentException if field is not supported and the value is non-zero
240      * @throws ArithmeticException if the addition exceeds the capacity of the period
241      */
242     void addMinutes(int minutes);
243 
244     //-----------------------------------------------------------------------
245     /**
246      * Sets the number of seconds of the period.
247      * 
248      * @param seconds  the number of seconds
249      * @throws IllegalArgumentException if field is not supported and the value is non-zero
250      */
251     void setSeconds(int seconds);
252 
253     /**
254      * Adds the specified seconds to the number of seconds in the period.
255      * 
256      * @param seconds  the number of seconds
257      * @throws IllegalArgumentException if field is not supported and the value is non-zero
258      * @throws ArithmeticException if the addition exceeds the capacity of the period
259      */
260     void addSeconds(int seconds);
261 
262     //-----------------------------------------------------------------------
263     /**
264      * Sets the number of millis of the period.
265      * 
266      * @param millis  the number of millis
267      * @throws IllegalArgumentException if field is not supported and the value is non-zero
268      */
269     void setMillis(int millis);
270 
271     /**
272      * Adds the specified millis to the number of millis in the period.
273      * 
274      * @param millis  the number of millis
275      * @throws IllegalArgumentException if field is not supported and the value is non-zero
276      * @throws ArithmeticException if the addition exceeds the capacity of the period
277      */
278     void addMillis(int millis);
279 
280 }