EMMA Coverage Report (generated Tue Oct 28 00:01:11 GMT 2008)
[all classes][org.joda.time.chrono]

COVERAGE SUMMARY FOR SOURCE FILE [LenientChronology.java]

nameclass, %method, %block, %line, %
LenientChronology.java100% (1/1)89%  (8/9)87%  (212/243)80%  (40/50)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class LenientChronology100% (1/1)89%  (8/9)87%  (212/243)80%  (40/50)
withZone (DateTimeZone): Chronology 0%   (0/1)0%   (0/22)0%   (0/7)
getInstance (Chronology): LenientChronology 100% (1/1)58%  (7/12)67%  (2/3)
equals (Object): boolean 100% (1/1)79%  (15/19)67%  (4/6)
LenientChronology (Chronology): void 100% (1/1)100% (5/5)100% (2/2)
assemble (AssembledChronology$Fields): void 100% (1/1)100% (139/139)100% (24/24)
convertField (DateTimeField): DateTimeField 100% (1/1)100% (5/5)100% (1/1)
hashCode (): int 100% (1/1)100% (8/8)100% (1/1)
toString (): String 100% (1/1)100% (13/13)100% (1/1)
withUTC (): Chronology 100% (1/1)100% (20/20)100% (5/5)

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 */
16package org.joda.time.chrono;
17 
18import org.joda.time.Chronology;
19import org.joda.time.DateTimeField;
20import org.joda.time.DateTimeZone;
21import org.joda.time.field.LenientDateTimeField;
22 
23/**
24 * Wraps another Chronology, ensuring all the fields are lenient.
25 * <p>
26 * LenientChronology is thread-safe and immutable.
27 *
28 * @author Brian S O'Neill
29 * @since 1.0
30 * @see LenientDateTimeField
31 * @see StrictChronology
32 */
33public final class LenientChronology extends AssembledChronology {
34 
35    /** Serialization lock */
36    private static final long serialVersionUID = -3148237568046877177L;
37 
38    /**
39     * Create a LenientChronology for any chronology.
40     *
41     * @param base the chronology to wrap
42     * @throws IllegalArgumentException if chronology is null
43     */
44    public static LenientChronology getInstance(Chronology base) {
45        if (base == null) {
46            throw new IllegalArgumentException("Must supply a chronology");
47        }
48        return new LenientChronology(base);
49    }
50 
51    private transient Chronology iWithUTC;
52 
53    /**
54     * Create a LenientChronology for any chronology.
55     *
56     * @param base the chronology to wrap
57     */
58    private LenientChronology(Chronology base) {
59        super(base, null);
60    }
61 
62    public Chronology withUTC() {
63        if (iWithUTC == null) {
64            if (getZone() == DateTimeZone.UTC) {
65                iWithUTC = this;
66            } else {
67                iWithUTC = LenientChronology.getInstance(getBase().withUTC());
68            }
69        }
70        return iWithUTC;
71    }
72 
73    public Chronology withZone(DateTimeZone zone) {
74        if (zone == null) {
75            zone = DateTimeZone.getDefault();
76        }
77        if (zone == DateTimeZone.UTC) {
78            return withUTC();
79        }
80        if (zone == getZone()) {
81            return this;
82        }
83        return LenientChronology.getInstance(getBase().withZone(zone));
84    }
85 
86    protected void assemble(Fields fields) {
87        fields.year = convertField(fields.year);
88        fields.yearOfEra = convertField(fields.yearOfEra);
89        fields.yearOfCentury = convertField(fields.yearOfCentury);
90        fields.centuryOfEra = convertField(fields.centuryOfEra);
91        fields.era = convertField(fields.era);
92        fields.dayOfWeek = convertField(fields.dayOfWeek);
93        fields.dayOfMonth = convertField(fields.dayOfMonth);
94        fields.dayOfYear = convertField(fields.dayOfYear);
95        fields.monthOfYear = convertField(fields.monthOfYear);
96        fields.weekOfWeekyear = convertField(fields.weekOfWeekyear);
97        fields.weekyear = convertField(fields.weekyear);
98        fields.weekyearOfCentury = convertField(fields.weekyearOfCentury);
99 
100        fields.millisOfSecond = convertField(fields.millisOfSecond);
101        fields.millisOfDay = convertField(fields.millisOfDay);
102        fields.secondOfMinute = convertField(fields.secondOfMinute);
103        fields.secondOfDay = convertField(fields.secondOfDay);
104        fields.minuteOfHour = convertField(fields.minuteOfHour);
105        fields.minuteOfDay = convertField(fields.minuteOfDay);
106        fields.hourOfDay = convertField(fields.hourOfDay);
107        fields.hourOfHalfday = convertField(fields.hourOfHalfday);
108        fields.clockhourOfDay = convertField(fields.clockhourOfDay);
109        fields.clockhourOfHalfday = convertField(fields.clockhourOfHalfday);
110        fields.halfdayOfDay = convertField(fields.halfdayOfDay);
111    }
112 
113    private final DateTimeField convertField(DateTimeField field) {
114        return LenientDateTimeField.getInstance(field, getBase());
115    }
116 
117    //-----------------------------------------------------------------------
118    /**
119     * A lenient chronology is only equal to a lenient chronology with the
120     * same base chronology.
121     * 
122     * @param obj  the object to compare to
123     * @return true if equal
124     * @since 1.4
125     */
126    public boolean equals(Object obj) {
127        if (this == obj) {
128            return true;
129        }
130        if (obj instanceof LenientChronology == false) {
131            return false;
132        }
133        LenientChronology chrono = (LenientChronology) obj;
134        return getBase().equals(chrono.getBase());
135    }
136 
137    /**
138     * A suitable hashcode for the chronology.
139     * 
140     * @return the hashcode
141     * @since 1.4
142     */
143    public int hashCode() {
144        return 236548278 + getBase().hashCode() * 7;
145    }
146 
147    /**
148     * A debugging string for the chronology.
149     * 
150     * @return the debugging string
151     */
152    public String toString() {
153        return "LenientChronology[" + getBase().toString() + ']';
154    }
155 
156}

[all classes][org.joda.time.chrono]
EMMA 2.0.5312 (C) Vladimir Roubtsov