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.chrono;
17  
18  import java.util.Locale;
19  
20  import org.joda.time.DateTimeConstants;
21  import org.joda.time.DateTimeFieldType;
22  import org.joda.time.DurationField;
23  import org.joda.time.field.PreciseDurationDateTimeField;
24  
25  /**
26   * GJDayOfWeekDateTimeField provides time calculations for the
27   * day of the week component of time.
28   *
29   * @since 1.0
30   * @author Guy Allard
31   * @author Stephen Colebourne
32   * @author Brian S O'Neill
33   */
34  final class GJDayOfWeekDateTimeField extends PreciseDurationDateTimeField {
35      
36      /** Serialization version */
37      private static final long serialVersionUID = -3857947176719041436L;
38  
39      private final BasicChronology iChronology;
40  
41      /**
42       * Restricted constructor.
43       */
44      GJDayOfWeekDateTimeField(BasicChronology chronology, DurationField days) {
45          super(DateTimeFieldType.dayOfWeek(), days);
46          iChronology = chronology;
47      }
48  
49      /**
50       * Get the value of the specified time instant.
51       * 
52       * @param instant  the time instant in millis to query
53       * @return the day of the week extracted from the input
54       */
55      public int get(long instant) {
56          return iChronology.getDayOfWeek(instant);
57      }
58  
59      /**
60       * Get the textual value of the specified time instant.
61       * 
62       * @param fieldValue  the field value to query
63       * @param locale  the locale to use
64       * @return the day of the week, such as 'Monday'
65       */
66      public String getAsText(int fieldValue, Locale locale) {
67          return GJLocaleSymbols.forLocale(locale).dayOfWeekValueToText(fieldValue);
68      }
69  
70      /**
71       * Get the abbreviated textual value of the specified time instant.
72       * 
73       * @param fieldValue  the field value to query
74       * @param locale  the locale to use
75       * @return the day of the week, such as 'Mon'
76       */
77      public String getAsShortText(int fieldValue, Locale locale) {
78          return GJLocaleSymbols.forLocale(locale).dayOfWeekValueToShortText(fieldValue);
79      }
80  
81      /**
82       * Convert the specified text and locale into a value.
83       * 
84       * @param text  the text to convert
85       * @param locale  the locale to convert using
86       * @return the value extracted from the text
87       * @throws IllegalArgumentException if the text is invalid
88       */
89      protected int convertText(String text, Locale locale) {
90          return GJLocaleSymbols.forLocale(locale).dayOfWeekTextToValue(text);
91      }
92  
93      public DurationField getRangeDurationField() {
94          return iChronology.weeks();
95      }
96  
97      /**
98       * Get the minimum value that this field can have.
99       * 
100      * @return the field's minimum value
101      */
102     public int getMinimumValue() {
103         return DateTimeConstants.MONDAY;
104     }
105 
106     /**
107      * Get the maximum value that this field can have.
108      * 
109      * @return the field's maximum value
110      */
111     public int getMaximumValue() {
112         return DateTimeConstants.SUNDAY;
113     }
114 
115     /**
116      * Get the maximum length of the text returned by this field.
117      * 
118      * @param locale  the locale to use
119      * @return the maximum textual length
120      */
121     public int getMaximumTextLength(Locale locale) {
122         return GJLocaleSymbols.forLocale(locale).getDayOfWeekMaxTextLength();
123     }
124 
125     /**
126      * Get the maximum length of the abbreviated text returned by this field.
127      * 
128      * @param locale  the locale to use
129      * @return the maximum abbreviated textual length
130      */
131     public int getMaximumShortTextLength(Locale locale) {
132         return GJLocaleSymbols.forLocale(locale).getDayOfWeekMaxShortTextLength();
133     }
134 
135     /**
136      * Serialization singleton
137      */
138     private Object readResolve() {
139         return iChronology.dayOfWeek();
140     }
141 }