1 /* 2 * Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * * Redistributions of source code must retain the above copyright notice, 10 * this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * * Neither the name of JSR-310 nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 package org.threeten.bp.jdk8; 33 34 import static org.threeten.bp.temporal.ChronoField.ERA; 35 36 import java.util.Locale; 37 38 import org.threeten.bp.chrono.Era; 39 import org.threeten.bp.format.DateTimeFormatterBuilder; 40 import org.threeten.bp.format.TextStyle; 41 import org.threeten.bp.temporal.ChronoField; 42 import org.threeten.bp.temporal.ChronoUnit; 43 import org.threeten.bp.temporal.Temporal; 44 import org.threeten.bp.temporal.TemporalField; 45 import org.threeten.bp.temporal.TemporalQueries; 46 import org.threeten.bp.temporal.TemporalQuery; 47 import org.threeten.bp.temporal.UnsupportedTemporalTypeException; 48 49 /** 50 * A temporary class providing implementations that will become default interface 51 * methods once integrated into JDK 8. 52 * 53 * @param the chronology of this era 54 */ 55 public abstract class DefaultInterfaceEra 56 extends DefaultInterfaceTemporalAccessor 57 implements Era { 58 59 //----------------------------------------------------------------------- 60 @Override isSupported(TemporalField field)61 public boolean isSupported(TemporalField field) { 62 if (field instanceof ChronoField) { 63 return field == ERA; 64 } 65 return field != null && field.isSupportedBy(this); 66 } 67 68 @Override get(TemporalField field)69 public int get(TemporalField field) { 70 if (field == ERA) { 71 return getValue(); 72 } 73 return range(field).checkValidIntValue(getLong(field), field); 74 } 75 76 @Override getLong(TemporalField field)77 public long getLong(TemporalField field) { 78 if (field == ERA) { 79 return getValue(); 80 } else if (field instanceof ChronoField) { 81 throw new UnsupportedTemporalTypeException("Unsupported field: " + field); 82 } 83 return field.getFrom(this); 84 } 85 86 //------------------------------------------------------------------------- 87 @Override adjustInto(Temporal temporal)88 public Temporal adjustInto(Temporal temporal) { 89 return temporal.with(ERA, getValue()); 90 } 91 92 @SuppressWarnings("unchecked") 93 @Override query(TemporalQuery<R> query)94 public <R> R query(TemporalQuery<R> query) { 95 if (query == TemporalQueries.precision()) { 96 return (R) ChronoUnit.ERAS; 97 } 98 if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || 99 query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || 100 query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { 101 return null; 102 } 103 return query.queryFrom(this); 104 } 105 106 //----------------------------------------------------------------------- 107 @Override getDisplayName(TextStyle style, Locale locale)108 public String getDisplayName(TextStyle style, Locale locale) { 109 return new DateTimeFormatterBuilder().appendText(ERA, style).toFormatter(locale).format(this); 110 } 111 112 } 113