001/*
002 * ============================================================================
003 *  Copyright © 2002-2023 by Thomas Thrien.
004 *  All Rights Reserved.
005 * ============================================================================
006 *  Licensed to the public under the agreements of the GNU Lesser General Public
007 *  License, version 3.0 (the "License"). You may obtain a copy of the License at
008 *
009 *       http://www.gnu.org/licenses/lgpl.html
010 *
011 *  Unless required by applicable law or agreed to in writing, software
012 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
013 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
014 *  License for the specific language governing permissions and limitations
015 *  under the License.
016 */
017
018package org.tquadrat.foundation.config.internal;
019
020import static java.util.Map.entry;
021import static org.apiguardian.api.API.Status.INTERNAL;
022
023import java.awt.image.BufferedImage;
024import java.time.Instant;
025import java.time.LocalDate;
026import java.time.LocalDateTime;
027import java.time.LocalTime;
028import java.time.Year;
029import java.time.YearMonth;
030import java.time.ZonedDateTime;
031import java.util.Date;
032import java.util.Map;
033
034import org.apiguardian.api.API;
035import org.tquadrat.foundation.annotation.ClassVersion;
036import org.tquadrat.foundation.annotation.UtilityClass;
037import org.tquadrat.foundation.config.cli.BooleanValueHandler;
038import org.tquadrat.foundation.config.cli.CmdLineValueHandler;
039import org.tquadrat.foundation.config.cli.DateValueHandler;
040import org.tquadrat.foundation.config.cli.DocumentValueHandler;
041import org.tquadrat.foundation.config.cli.ImageValueHandler;
042import org.tquadrat.foundation.config.cli.InstantValueHandler;
043import org.tquadrat.foundation.config.cli.LocalDateTimeValueHandler;
044import org.tquadrat.foundation.config.cli.LocalDateValueHandler;
045import org.tquadrat.foundation.config.cli.StringValueHandler;
046import org.tquadrat.foundation.config.cli.YearMonthValueHandler;
047import org.tquadrat.foundation.config.cli.YearValueHandler;
048import org.tquadrat.foundation.config.cli.ZonedDateTimeValueHandler;
049import org.tquadrat.foundation.config.spi.prefs.BooleanAccessor;
050import org.tquadrat.foundation.config.spi.prefs.ByteAccessor;
051import org.tquadrat.foundation.config.spi.prefs.DateAccessor;
052import org.tquadrat.foundation.config.spi.prefs.DoubleAccessor;
053import org.tquadrat.foundation.config.spi.prefs.FloatAccessor;
054import org.tquadrat.foundation.config.spi.prefs.ImageAccessor;
055import org.tquadrat.foundation.config.spi.prefs.IntegerAccessor;
056import org.tquadrat.foundation.config.spi.prefs.LongAccessor;
057import org.tquadrat.foundation.config.spi.prefs.PreferenceAccessor;
058import org.tquadrat.foundation.config.spi.prefs.PrimitiveBooleanAccessor;
059import org.tquadrat.foundation.config.spi.prefs.PrimitiveByteAccessor;
060import org.tquadrat.foundation.config.spi.prefs.PrimitiveDoubleAccessor;
061import org.tquadrat.foundation.config.spi.prefs.PrimitiveIntAccessor;
062import org.tquadrat.foundation.config.spi.prefs.PrimitiveLongAccessor;
063import org.tquadrat.foundation.config.spi.prefs.PrimitiveShortAccessor;
064import org.tquadrat.foundation.config.spi.prefs.ShortAccessor;
065import org.tquadrat.foundation.config.spi.prefs.StringAccessor;
066import org.tquadrat.foundation.exception.PrivateConstructorForStaticClassCalledError;
067import org.w3c.dom.Document;
068
069/**
070 *  This class is meant as a place to hold the predefined implementations of
071 *  {@link CmdLineValueHandler}
072 *  for classes that are not covered by
073 *  {@link org.tquadrat.foundation.config.cli.SimpleCmdLineValueHandler},
074 *  either because there is no implementation of
075 *  {@link org.tquadrat.foundation.lang.StringConverter}
076 *  for that class, or because the {@code CmdLineValueHandler} allows
077 *  additional settings.
078 *
079 *  @extauthor Thomas Thrien - thomas.thrien@tquadrat.org
080 *  @version $Id: ClassRegistry.java 1061 2023-09-25 16:32:43Z tquadrat $
081 *
082 *  @UMLGraph.link
083 *  @since 0.1.0
084 */
085@SuppressWarnings( {"UseOfObsoleteDateTimeApi", "OverlyCoupledClass"} )
086@UtilityClass
087@ClassVersion( sourceVersion = "$Id: ClassRegistry.java 1061 2023-09-25 16:32:43Z tquadrat $" )
088@API( status = INTERNAL, since = "0.1.0" )
089public final class ClassRegistry
090{
091        /*------------------------*\
092    ====** Static Initialisations **===========================================
093        \*------------------------*/
094    /**
095     *  The handler classes.
096     */
097    @SuppressWarnings( "StaticCollection" )
098    @API( status = INTERNAL, since = "0.1.0" )
099    public static final Map<Class<?>,Class<? extends CmdLineValueHandler<?>>> m_HandlerClasses;
100
101    /**
102     *  The preferences accessor classes.
103     */
104    @SuppressWarnings( "StaticCollection" )
105    @API( status = INTERNAL, since = "0.1.0" )
106    public static final Map<Class<?>,Class<? extends PreferenceAccessor<?>>> m_PrefsAccessorClasses;
107
108    static
109    {
110        m_HandlerClasses = Map.ofEntries
111        (
112            entry( boolean.class, BooleanValueHandler.class ),
113            entry( Boolean.class, BooleanValueHandler.class ),
114            entry( BufferedImage.class, ImageValueHandler.class ),
115            entry( Date.class, DateValueHandler.class ),
116            entry( Document.class, DocumentValueHandler.class ),
117            entry( Instant.class, InstantValueHandler.class ),
118            entry( LocalDate.class, LocalDateValueHandler.class ),
119            entry( LocalDateTime.class, LocalDateTimeValueHandler.class ),
120            entry( LocalTime.class, LocalDateTimeValueHandler.class ),
121            entry( String.class, StringValueHandler.class ),
122            entry( YearMonth.class, YearMonthValueHandler.class ),
123            entry( Year.class, YearValueHandler.class ),
124            entry( ZonedDateTime.class, ZonedDateTimeValueHandler.class )
125        );
126
127        m_PrefsAccessorClasses = Map.ofEntries
128        (
129            entry( boolean.class, PrimitiveBooleanAccessor.class ),
130            entry( Boolean.class, BooleanAccessor.class ),
131            entry( BufferedImage.class, ImageAccessor.class ),
132            entry( byte.class, PrimitiveByteAccessor.class ),
133            entry( Byte.class, ByteAccessor.class ),
134            entry( Date.class, DateAccessor.class ),
135            entry( double.class, PrimitiveDoubleAccessor.class ),
136            entry( Double.class, DoubleAccessor.class ),
137            entry( Float.class, FloatAccessor.class ),
138            entry( int.class, PrimitiveIntAccessor.class ),
139            entry( Integer.class, IntegerAccessor.class ),
140            entry( long.class, PrimitiveLongAccessor.class ),
141            entry( Long.class, LongAccessor.class ),
142            entry( short.class, PrimitiveShortAccessor.class ),
143            entry( Short.class, ShortAccessor.class ),
144            entry( String.class, StringAccessor.class )
145        );
146    }
147
148        /*--------------*\
149    ====** Constructors **=====================================================
150        \*--------------*/
151    /**
152     *  No instance allowed for this class.
153     */
154    private ClassRegistry() { throw new PrivateConstructorForStaticClassCalledError( ClassRegistry.class ); }
155}
156//  class ClassRegistry
157
158/*
159 *  End of File
160 */