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));
- }
}