You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/09/15 01:27:09 UTC

[20/21] git commit: Update TypeConverters to use TypeConverterRegistry.

Update TypeConverters to use TypeConverterRegistry.

  - Manual registration of converters removed.
  - Remove unused methods.
  - Remove EnumConverter that was already extracted.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/74130e4c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/74130e4c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/74130e4c

Branch: refs/heads/master
Commit: 74130e4c958bdbee9f769edfa619353b8ccb6d06
Parents: cbf19ad
Author: Matt Sicker <ma...@apache.org>
Authored: Sun Sep 14 18:26:11 2014 -0500
Committer: Matt Sicker <ma...@apache.org>
Committed: Sun Sep 14 18:26:11 2014 -0500

----------------------------------------------------------------------
 .../config/plugins/convert/TypeConverters.java  | 117 +------------------
 1 file changed, 1 insertion(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/74130e4c/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
index 7e9f573..260c09c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.java
@@ -27,24 +27,14 @@ import java.net.URL;
 import java.nio.charset.Charset;
 import java.security.Provider;
 import java.security.Security;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 import javax.xml.bind.DatatypeConverter;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.Filter;
-import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.layout.GelfLayout;
-import org.apache.logging.log4j.core.layout.HtmlLayout;
-import org.apache.logging.log4j.core.net.Facility;
-import org.apache.logging.log4j.core.net.Protocol;
-import org.apache.logging.log4j.core.util.Assert;
 import org.apache.logging.log4j.core.util.Loader;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.EnglishEnums;
 
 /**
  * Collection of basic TypeConverter implementations. May be used to register additional TypeConverters or find
@@ -194,25 +184,6 @@ public final class TypeConverters {
     }
 
     /**
-     * Converts a {@link String} into a {@link Enum}. Returns {@code null} for invalid enum names.
-     * 
-     * @param <E>
-     *        the enum class to parse.
-     */
-    public static class EnumConverter<E extends Enum<E>> implements TypeConverter<E> {
-        private final Class<E> clazz;
-
-        private EnumConverter(final Class<E> clazz) {
-            this.clazz = clazz;
-        }
-
-        @Override
-        public E convert(final String s) {
-            return EnglishEnums.valueOf(clazz, s);
-        }
-    }
-
-    /**
      * Converts a {@link String} into a {@link File}.
      */
     @Plugin(name = "File", category = CATEGORY)
@@ -234,10 +205,6 @@ public final class TypeConverters {
         }
     }
 
-    private static final class Holder {
-        private static final TypeConverters INSTANCE = new TypeConverters();
-    }
-
     /**
      * Converts a {@link String} into a {@link Integer}.
      */
@@ -355,11 +322,7 @@ public final class TypeConverters {
      *         if no TypeConverter exists for the given class
      */
     public static Object convert(final String s, final Class<?> clazz, final Object defaultValue) {
-        final TypeConverter<?> converter = findTypeConverter(Assert.requireNonNull(clazz,
-                "No class specified to convert to."));
-        if (converter == null) {
-            throw new IllegalArgumentException("No type converter found for class: " + clazz.getName());
-        }
+        final TypeConverter<?> converter = TypeConverterRegistry.getInstance().findCompatibleConverter(clazz);
         if (s == null) {
             // don't debug print here, resulting output is hard to understand
             // LOGGER.debug("Null string given to convert. Using default [{}].", defaultValue);
@@ -374,21 +337,6 @@ public final class TypeConverters {
         }
     }
 
-    /**
-     * Locates a TypeConverter for a specified class.
-     * 
-     * @param clazz
-     *        the class to get a TypeConverter for
-     * @return the associated TypeConverter for that class or {@code null} if none could be found
-     */
-    public static TypeConverter<?> findTypeConverter(final Class<?> clazz) {
-        // TODO: what to do if there's no converter?
-        // supplementary idea: automatically add type converters for enums using EnglishEnums
-        // Idea 1: use reflection to see if the class has a static "valueOf" method and use that
-        // Idea 2: reflect on class's declared methods to see if any methods look suitable (probably too complex)
-        return Holder.INSTANCE.registry.get(clazz);
-    }
-
     private static Object parseDefaultValue(final TypeConverter<?> converter, final Object defaultValue) {
         if (defaultValue == null) {
             return null;
@@ -404,69 +352,6 @@ public final class TypeConverters {
         }
     }
 
-    /**
-     * Registers a TypeConverter for a specified class. This will overwrite any existing TypeConverter that may be
-     * registered for the class.
-     * 
-     * @param clazz
-     *        the class to register the TypeConverter for
-     * @param converter
-     *        the TypeConverter to register
-     */
-    public static void registerTypeConverter(final Class<?> clazz, final TypeConverter<?> converter) {
-        Holder.INSTANCE.registry.put(clazz, converter);
-    }
-
     private static final Logger LOGGER = StatusLogger.getLogger();
 
-    private final Map<Class<?>, TypeConverter<?>> registry = new ConcurrentHashMap<Class<?>, TypeConverter<?>>();
-
-    /**
-     * Constructs default TypeConverter registry. Used solely by singleton instance.
-     */
-    private TypeConverters() {
-        // Primitive wrappers
-        registry.put(Boolean.class, new BooleanConverter());
-        registry.put(Byte.class, new ByteConverter());
-        registry.put(Character.class, new CharacterConverter());
-        registry.put(Double.class, new DoubleConverter());
-        registry.put(Float.class, new FloatConverter());
-        registry.put(Integer.class, new IntegerConverter());
-        registry.put(Long.class, new LongConverter());
-        registry.put(Short.class, new ShortConverter());
-        // Primitives
-        registry.put(boolean.class, registry.get(Boolean.class));
-        registry.put(byte.class, new ByteConverter());
-        registry.put(char[].class, new CharArrayConverter());
-        registry.put(double.class, registry.get(Double.class));
-        registry.put(float.class, registry.get(Float.class));
-        registry.put(int.class, registry.get(Integer.class));
-        registry.put(long.class, registry.get(Long.class));
-        registry.put(short.class, registry.get(Short.class));
-        // Primitive arrays
-        registry.put(byte[].class, new ByteArrayConverter());
-        registry.put(char.class, new CharacterConverter());
-        // Numbers
-        registry.put(BigInteger.class, new BigIntegerConverter());
-        registry.put(BigDecimal.class, new BigDecimalConverter());
-        // JRE
-        registry.put(String.class, new StringConverter());
-        registry.put(Charset.class, new CharsetConverter());
-        registry.put(File.class, new FileConverter());
-        registry.put(URL.class, new UrlConverter());
-        registry.put(URI.class, new UriConverter());
-        registry.put(Class.class, new ClassConverter());
-        registry.put(Pattern.class, new PatternConverter());
-        registry.put(Provider.class, new SecurityProviderConverter());
-        // Log4J
-        registry.put(Level.class, new LevelConverter());
-        registry.put(Filter.Result.class, new EnumConverter<Filter.Result>(Filter.Result.class));
-        registry.put(Facility.class, new EnumConverter<Facility>(Facility.class));
-        registry.put(Protocol.class, new EnumConverter<Protocol>(Protocol.class));
-        registry.put(GelfLayout.CompressionType.class, new EnumConverter<GelfLayout.CompressionType>(
-                GelfLayout.CompressionType.class));
-        registry.put(HtmlLayout.FontSize.class, new EnumConverter<HtmlLayout.FontSize>(HtmlLayout.FontSize.class));
-        registry.put(ConsoleAppender.Target.class, new EnumConverter<ConsoleAppender.Target>(
-            ConsoleAppender.Target.class));
-    }
 }