001: /*
002: * Copyright 2001-2005 Stephen Colebourne
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.joda.time.field;
017:
018: import org.joda.time.DateTimeField;
019: import org.joda.time.DateTimeFieldType;
020: import org.joda.time.DurationField;
021:
022: /**
023: * <code>DecoratedDateTimeField</code> extends {@link BaseDateTimeField},
024: * implementing only the minimum required set of methods. These implemented
025: * methods delegate to a wrapped field.
026: * <p>
027: * This design allows new DateTimeField types to be defined that piggyback on
028: * top of another, inheriting all the safe method implementations from
029: * BaseDateTimeField. Should any method require pure delegation to the
030: * wrapped field, simply override and use the provided getWrappedField method.
031: * <p>
032: * DecoratedDateTimeField is thread-safe and immutable, and its subclasses must
033: * be as well.
034: *
035: * @author Brian S O'Neill
036: * @since 1.0
037: * @see DelegatedDateTimeField
038: */
039: public abstract class DecoratedDateTimeField extends BaseDateTimeField {
040:
041: /** Serialization version */
042: private static final long serialVersionUID = 203115783733757597L;
043:
044: /** The DateTimeField being wrapped */
045: private final DateTimeField iField;
046:
047: /**
048: * Constructor.
049: *
050: * @param field the field being decorated
051: * @param type allow type to be overridden
052: */
053: protected DecoratedDateTimeField(DateTimeField field,
054: DateTimeFieldType type) {
055: super (type);
056: if (field == null) {
057: throw new IllegalArgumentException(
058: "The field must not be null");
059: }
060: if (!field.isSupported()) {
061: throw new IllegalArgumentException(
062: "The field must be supported");
063: }
064: iField = field;
065: }
066:
067: /**
068: * Gets the wrapped date time field.
069: *
070: * @return the wrapped DateTimeField
071: */
072: public final DateTimeField getWrappedField() {
073: return iField;
074: }
075:
076: public boolean isLenient() {
077: return iField.isLenient();
078: }
079:
080: public int get(long instant) {
081: return iField.get(instant);
082: }
083:
084: public long set(long instant, int value) {
085: return iField.set(instant, value);
086: }
087:
088: public DurationField getDurationField() {
089: return iField.getDurationField();
090: }
091:
092: public DurationField getRangeDurationField() {
093: return iField.getRangeDurationField();
094: }
095:
096: public int getMinimumValue() {
097: return iField.getMinimumValue();
098: }
099:
100: public int getMaximumValue() {
101: return iField.getMaximumValue();
102: }
103:
104: public long roundFloor(long instant) {
105: return iField.roundFloor(instant);
106: }
107:
108: }
|