jdk/src/share/classes/java/time/chrono/HijrahEra.java
changeset 16852 60207b2b4b42
parent 15658 55b829ca2334
child 17474 8c100beabcc0
--- a/jdk/src/share/classes/java/time/chrono/HijrahEra.java	Thu Apr 11 19:15:24 2013 -0700
+++ b/jdk/src/share/classes/java/time/chrono/HijrahEra.java	Fri Apr 12 07:57:35 2013 -0700
@@ -24,6 +24,11 @@
  */
 
 /*
+ * This file is available under and governed by the GNU General Public
+ * License version 2 only, as published by the Free Software Foundation.
+ * However, the following notice accompanied the original version of this
+ * file:
+ *
  * Copyright (c) 2012, Stephen Colebourne & Michael Nascimento Santos
  *
  * All rights reserved.
@@ -56,16 +61,22 @@
  */
 package java.time.chrono;
 
+import static java.time.temporal.ChronoField.ERA;
+
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.time.DateTimeException;
+import java.time.temporal.ChronoField;
+import java.time.temporal.TemporalField;
+import java.time.temporal.UnsupportedTemporalTypeException;
+import java.time.temporal.ValueRange;
 
 /**
  * An era in the Hijrah calendar system.
  * <p>
- * The Hijrah calendar system has two eras.
- * The date {@code 0001-01-01 (Hijrah)} is {@code 622-06-19 (ISO)}.
+ * The Hijrah calendar system has only one era covering the
+ * proleptic years greater than zero.
  * <p>
  * <b>Do not use {@code ordinal()} to obtain the numeric representation of {@code HijrahEra}.
  * Use {@code getValue()} instead.</b>
@@ -75,80 +86,76 @@
  *
  * @since 1.8
  */
-enum HijrahEra implements Era {
+public enum HijrahEra implements Era {
 
     /**
-     * The singleton instance for the era before the current one, 'Before Anno Hegirae',
-     * which has the value 0.
-     */
-    BEFORE_AH,
-    /**
-     * The singleton instance for the current era, 'Anno Hegirae', which has the value 1.
+     * The singleton instance for the current era, 'Anno Hegirae',
+     * which has the numeric value 1.
      */
     AH;
 
     //-----------------------------------------------------------------------
     /**
-     * Obtains an instance of {@code HijrahEra} from a value.
+     * Obtains an instance of {@code HijrahEra} from an {@code int} value.
      * <p>
-     * The current era (from ISO date 622-06-19 onwards) has the value 1
-     * The previous era has the value 0.
+     * The current era, which is the only accepted value, has the value 1
      *
-     * @param hijrahEra  the era to represent, from 0 to 1
-     * @return the HijrahEra singleton, never null
-     * @throws DateTimeException if the era is invalid
+     * @param hijrahEra  the era to represent, only 1 supported
+     * @return the HijrahEra.AH singleton, not null
+     * @throws DateTimeException if the value is invalid
      */
     public static HijrahEra of(int hijrahEra) {
-        switch (hijrahEra) {
-            case 0:
-                return BEFORE_AH;
-            case 1:
-                return AH;
-            default:
-                throw new DateTimeException("HijrahEra not valid");
+        if (hijrahEra == 1 ) {
+            return AH;
+        } else {
+            throw new DateTimeException("Invalid era: " + hijrahEra);
         }
     }
 
     //-----------------------------------------------------------------------
     /**
-     * Gets the era numeric value.
+     * Gets the numeric era {@code int} value.
      * <p>
-     * The current era (from ISO date 622-06-19 onwards) has the value 1.
-     * The previous era has the value 0.
+     * The era AH has the value 1.
      *
-     * @return the era value, from 0 (BEFORE_AH) to 1 (AH)
+     * @return the era value, 1 (AH)
      */
     @Override
     public int getValue() {
-        return ordinal();
-    }
-
-    @Override
-    public HijrahChronology getChronology() {
-        return HijrahChronology.INSTANCE;
-    }
-
-    // JDK8 default methods:
-    //-----------------------------------------------------------------------
-    @Override
-    public HijrahDate date(int year, int month, int day) {
-        return (HijrahDate)(getChronology().date(this, year, month, day));
+        return 1;
     }
 
-    @Override
-    public HijrahDate dateYearDay(int year, int dayOfYear) {
-        return (HijrahDate)(getChronology().dateYearDay(this, year, dayOfYear));
-    }
-
-    //-------------------------------------------------------------------------
+    //-----------------------------------------------------------------------
     /**
-     * Returns the proleptic year from this era and year of era.
+     * Gets the range of valid values for the specified field.
+     * <p>
+     * The range object expresses the minimum and maximum valid values for a field.
+     * This era is used to enhance the accuracy of the returned range.
+     * If it is not possible to return the range, because the field is not supported
+     * or for some other reason, an exception is thrown.
+     * <p>
+     * If the field is a {@link ChronoField} then the query is implemented here.
+     * The {@code ERA} field returns the range.
+     * All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}.
+     * <p>
+     * If the field is not a {@code ChronoField}, then the result of this method
+     * is obtained by invoking {@code TemporalField.rangeRefinedBy(TemporalAccessor)}
+     * passing {@code this} as the argument.
+     * Whether the range can be obtained is determined by the field.
+     * <p>
+     * The {@code ERA} field returns a range for the one valid Hijrah era.
      *
-     * @param yearOfEra the year of Era
-     * @return the computed prolepticYear
+     * @param field  the field to query the range for, not null
+     * @return the range of valid values for the field, not null
+     * @throws DateTimeException if the range for the field cannot be obtained
+     * @throws UnsupportedTemporalTypeException if the unit is not supported
      */
-    int prolepticYear(int yearOfEra) {
-        return (this == HijrahEra.AH ? yearOfEra : 1 - yearOfEra);
+    @Override  // override as super would return range from 0 to 1
+    public ValueRange range(TemporalField field) {
+        if (field == ERA) {
+            return ValueRange.of(1, 1);
+        }
+        return Era.super.range(field);
     }
 
     //-----------------------------------------------------------------------