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 */