All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.time4j.engine.ChronoMerger Maven / Gradle / Ivy

There is a newer version: 4.38
Show newest version
/*
 * -----------------------------------------------------------------------
 * Copyright © 2013-2017 Meno Hochschild, 
 * -----------------------------------------------------------------------
 * This file (ChronoMerger.java) is part of project Time4J.
 *
 * Time4J is free software: You can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * Time4J is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Time4J. If not, see .
 * -----------------------------------------------------------------------
 */

package net.time4j.engine;

import net.time4j.base.TimeSource;

import java.time.temporal.TemporalAccessor;
import java.util.Locale;


/**
 * 

Merges any set of chronological informations to a new chronological * entity.

* *

This interface abstracts the knowledge of the chronology how to * construct a new entity based on any set of chronological informations. * It is mainly used by a parser in order to interprete textual representations * of chronological entities.

* *

Using this low-level-interface is usually reserved for Time4J and * serves for internal format support. However, for constructing new * calendar systems implementing this interface is an essential part * for parsing support. Implementation note: All classes of this type * must be immutable.

* * @param generic type of time context * (compatible to {@link ChronoEntity}) * @author Meno Hochschild */ /*[deutsch] *

Erzeugt aus chronologischen Informationen eine neue * {@code ChronoEntity}.

* *

Dieses Interface abstrahiert das Wissen der jeweiligen Zeitwertklasse, * wie aus beliebigen chronologischen Informationen eine neue Zeitwertinstanz * zu konstruieren ist und wird zum Beispiel beim Parsen von textuellen * Darstellungen zu Zeitwertobjekten benötigt.

* *

Die Benutzung dieses Low-Level-Interface bleibt in der Regel Time4J * vorbehalten und dient vorwiegend der internen Formatunterstützung. * Zur Konstruktion von neuen Kalendersystemen ist die Implementierung * dieses Interface ein wichtiger Bestandteil. Implementierungshinweis: * Alle Klassen dieses Typs müssen immutable, also * unveränderlich sein.

* * @param generic type of time context * (compatible to {@link ChronoEntity}) * @author Meno Hochschild */ public interface ChronoMerger { //~ Methoden ---------------------------------------------------------- /** *

Creates a new entity which reflects current time.

* *

In a date-only chronology this method will create the current date * using the necessary timezone contained in given attributes.

* * @param clock source for current time * @param attributes configuration attributes which might contain * the timezone to translate current time to * local time * @return new time context or {@code null} if given data are insufficient */ /*[deutsch] *

Konstruiert eine neue Entität, die der aktuellen Zeit * entspricht.

* *

In einer rein datumsbezogenen kalendarischen Chronologie wird hier * das aktuelle Tagesdatum erzeugt, indem zusätzlich über die * Attribute die notwendige Zeitzone ermittelt wird.

* * @param clock source for current time * @param attributes configuration attributes which might contain * the timezone to translate current time to * local time * @return new time context or {@code null} if given data are insufficient */ T createFrom( TimeSource clock, AttributeQuery attributes ); /** *

Creates a new entity of type T based on given chronological * data.

* *

Typically the method will query the given {@code entity} with * different priorities for elements which can compose a new chronological * entity (per group). For example a calendar date can be composed either * by epoch days or the group (year)-(month)-(day-of-month) or the group * (year)-(day-of-year) etc.

* *

A text parser will call this method after having resolved a text * into single chronological elements and values. Implementations should * always validate the parsed values. In case of error, they are free to * either throw an {@code IllegalArgumentException} or to generate * and to save an error message by mean of the expression * {@code entity.with(ValidationElement.ERROR_MESSAGE, message}.

* * @deprecated use {@link #createFrom(ChronoEntity, AttributeQuery, boolean, boolean)} instead * @param entity any chronological entity like parsed * elements with their values * @param attributes configuration attributes given by parser * @param preparsing preparsing phase active? * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @see ValidationElement#ERROR_MESSAGE */ /*[deutsch] *

Konstruiert eine neue Entität basierend auf den angegebenen * chronologischen Daten.

* *

Typischerweise wird mit verschiedenen Prioritäten das Argument * {@code entity} nach Elementen abgefragt, die gruppenweise einen * Zeitwert konstruieren. Zum Beispiel kann ein Datum entweder über * die Epochentage, die Gruppe Jahr-Monat-Tag oder die Gruppe Jahr und Tag * des Jahres konstruiert werden.

* *

Ein Textinterpretierer ruft diese Methode auf, nachdem ein Text * elementweise in chronologische Elemente und Werte aufgelöst * wurde. Implementierungen sollten immer die interpretierten Werte * validieren. Im Fehlerfall sind Implementierungen frei, entweder eine * {@code IllegalArgumentException} zu werfen oder mittels des Ausdrucks * {@code entity.with(ValidationElement.ERROR_MESSAGE, message} eine * Fehlermeldung nur zu generieren und zu speichern.

* * @deprecated use {@link #createFrom(ChronoEntity, AttributeQuery, boolean, boolean)} instead * @param entity any chronological entity like parsed * elements with their values * @param attributes configuration attributes given by parser * @param preparsing preparsing phase active? * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @see ValidationElement#ERROR_MESSAGE */ @Deprecated T createFrom( ChronoEntity entity, AttributeQuery attributes, boolean preparsing ); /** *

Creates a new entity of type T based on given chronological data.

* *

Typically the method will query the given {@code entity} with * different priorities for elements which can compose a new chronological * entity (per group). For example a calendar date can be composed either * by epoch days or the group (year)-(month)-(day-of-month) or the group * (year)-(day-of-year) etc.

* *

A text parser will call this method after having resolved a text * into single chronological elements and values. Implementations should * always validate the parsed values. In case of error, they are free to * either throw an {@code IllegalArgumentException} or to generate * and to save an error message by mean of the expression * {@code entity.with(ValidationElement.ERROR_MESSAGE, message}.

* * @param entity any chronological entity like parsed * elements with their values * @param attributes configuration attributes given by parser * @param lenient controls the leniency how to interprete invalid values * @param preparsing preparsing phase active? * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @see ValidationElement#ERROR_MESSAGE * @since 3.15/4.12 */ /*[deutsch] *

Konstruiert eine neue Entität basierend auf den angegebenen * chronologischen Daten.

* *

Typischerweise wird mit verschiedenen Prioritäten das Argument * {@code entity} nach Elementen abgefragt, die gruppenweise einen * Zeitwert konstruieren. Zum Beispiel kann ein Datum entweder über * die Epochentage, die Gruppe Jahr-Monat-Tag oder die Gruppe Jahr und Tag * des Jahres konstruiert werden.

* *

Ein Textinterpretierer ruft diese Methode auf, nachdem ein Text * elementweise in chronologische Elemente und Werte aufgelöst * wurde. Implementierungen sollten immer die interpretierten Werte * validieren. Im Fehlerfall sind Implementierungen frei, entweder eine * {@code IllegalArgumentException} zu werfen oder mittels des Ausdrucks * {@code entity.with(ValidationElement.ERROR_MESSAGE, message} eine * Fehlermeldung nur zu generieren und zu speichern.

* * @param entity any chronological entity like parsed * elements with their values * @param attributes configuration attributes given by parser * @param lenient controls the leniency how to interprete invalid values * @param preparsing preparsing phase active? * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @see ValidationElement#ERROR_MESSAGE * @since 3.15/4.12 */ default T createFrom( ChronoEntity entity, AttributeQuery attributes, boolean lenient, boolean preparsing ) { return this.createFrom(entity, attributes, preparsing); } /** *

Transforms the current context/entity into another set of chronological * values which finally shall be formatted using given attributes.

* * @param context actual chronological context to be formatted * @param attributes controls attributes during formatting * @return replacement entity which will finally be used for formatting * @throws IllegalArgumentException in any case of inconsistent data */ /*[deutsch] *

Transformiert den aktuellen Kontext unter Beachtung der Attribute * bei Bedarf in den tatsächlich zu formatierenden Satz von * chronologischen Werten.

* * @param context actual chronological context to be formatted * @param attributes controls attributes during formatting * @return replacement entity which will finally be used for formatting * @throws IllegalArgumentException in any case of inconsistent data */ default ChronoDisplay preformat( T context, AttributeQuery attributes ) { try { return (ChronoDisplay) context; } catch (ClassCastException cce) { throw new IllegalArgumentException(cce.getMessage()); } } /** *

This method defines a child chronology which can preparse * a chronological text.

* * @return preparsing chronology or {@code null} (default) */ /*[deutsch] *

Diese Methode definiert eine Kindschronologie, wenn eine * Vorinterpretierung des chronologischen Texts notwendig ist.

* * @return preparsing chronology or {@code null} (default) */ default Chronology preparser() { return null; } /** *

Creates a new entity of type T based on given chronological * data.

* *

The default implementation always returns {@code null} so subclasses * with better knowledge about their own state and needs should override it.

* * @param threeten object of type {@code TemporalAccessor} * @param attributes configuration attributes given by parser * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @since 4.0 * @deprecated Use new {@link BridgeChronology bridge chronology} */ /*[deutsch] *

Konstruiert eine neue Entität basierend auf den angegebenen * chronologischen Daten.

* *

Die Standardimplementierung liefert immer {@code null}, so daß * Subklassen mit besserer Kenntnis ihres Zustands und ihrer Anforderungen * diese Methode überschreiben sollten.

* * @param threeten object of type {@code TemporalAccessor} * @param attributes configuration attributes given by parser * @return new time context or {@code null} if given data are insufficient * @throws IllegalArgumentException in any case of inconsistent data * @since 4.0 * @deprecated Use new {@link BridgeChronology bridge chronology} */ @Deprecated default T createFrom( TemporalAccessor threeten, AttributeQuery attributes ) { return null; } /** *

Defines a CLDR-compatible localized format pattern.

* * @param style format style * @param locale language and country setting * @return localized format pattern * @throws UnsupportedOperationException if given style is not supported * or if no localized format pattern support is available * @see net.time4j.format.LocalizedPatternSupport * @since 3.10/4.7 */ /*[deutsch] *

Definiert ein CLDR-kompatibles lokalisiertes Formatmuster.

* * @param style format style * @param locale language and country setting * @return localized format pattern * @throws UnsupportedOperationException if given style is not supported * or if no localized format pattern support is available * @see net.time4j.format.LocalizedPatternSupport * @since 3.10/4.7 */ default String getFormatPattern( DisplayStyle style, Locale locale ) { throw new UnsupportedOperationException("Localized format patterns are not available."); } /** *

Determines the default start of day.

* * @return start of day * @since 3.11/4.8 */ /*[deutsch] *

Bestimmt den üblichen Tagesbeginn.

* * @return start of day * @since 3.11/4.8 */ default StartOfDay getDefaultStartOfDay() { return StartOfDay.MIDNIGHT; } /** *

Determines the default pivot year which might be calendar specific and serves for the * formatting of two-digit-years.

* *

Most calendar chronologies should choose a pivot year 20 years in the future. The standard * implementation is based on the gregorian calendar.

* * @return default pivot year (must not be smaller than {@code 100}) * @since 3.32/4.27 */ /*[deutsch] *

Bestimmt das übliche kalender-spezifische Kippjahr, das zur Formatierung * von zweistelligen Jahresangaben dient.

* *

Die meisten Kalenderchronologien sollten ein Kippjahr 20 Jahre in der Zukunft wählen. * Die Standardimplementierung basiert auf dem gregorianischen Kalender.

* * @return default pivot year (must not be smaller than {@code 100}) * @since 3.32/4.27 */ default int getDefaultPivotYear() { return IsoDefaultPivotYear.VALUE; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy