You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by st...@apache.org on 2017/11/22 10:10:47 UTC

svn commit: r1816024 - in /geronimo/components/config/branches/ConfigJSR: ./ impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java

Author: struberg
Date: Wed Nov 22 10:10:47 2017
New Revision: 1816024

URL: http://svn.apache.org/viewvc?rev=1816024&view=rev
Log:
provide implicit converter logic

Added:
    geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java
      - copied, changed from r1815628, geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java
Modified:
    geronimo/components/config/branches/ConfigJSR/   (props changed)
    geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java

Propchange: geronimo/components/config/branches/ConfigJSR/
------------------------------------------------------------------------------
    svn:mergeinfo = /geronimo/components/config/trunk:1815628

Modified: geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java?rev=1816024&r1=1816023&r2=1816024&view=diff
==============================================================================
--- geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java (original)
+++ geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/ConfigImpl.java Wed Nov 22 10:10:47 2017
@@ -33,6 +33,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
@@ -41,6 +42,7 @@ import org.apache.geronimo.config.conver
 import org.apache.geronimo.config.converters.DoubleConverter;
 import org.apache.geronimo.config.converters.DurationConverter;
 import org.apache.geronimo.config.converters.FloatConverter;
+import org.apache.geronimo.config.converters.ImplicitConverter;
 import org.apache.geronimo.config.converters.InstantConverter;
 import org.apache.geronimo.config.converters.IntegerConverter;
 import org.apache.geronimo.config.converters.LocalDateConverter;
@@ -70,6 +72,7 @@ public class ConfigImpl implements Confi
 
     protected List<ConfigSource> configSources = new ArrayList<>();
     protected Map<Type, Converter> converters = new HashMap<>();
+    protected Map<Type, Converter> implicitConverters = new ConcurrentHashMap<>();
 
 
     public ConfigImpl() {
@@ -150,10 +153,30 @@ public class ConfigImpl implements Confi
     private <T> Converter getConverter(Class<T> asType) {
         Converter converter = converters.get(asType);
         if (converter == null) {
+            converter = getImplicitConverter(asType);
+        }
+        if (converter == null) {
             throw new IllegalArgumentException("No Converter registered for class " + asType);
         }
         return converter;
     }
+
+    private <T> Converter getImplicitConverter(Class<T> asType) {
+        Converter converter = implicitConverters.get(asType);
+        if (converter == null) {
+            synchronized (implicitConverters) {
+                converter = implicitConverters.get(asType);
+                if (converter == null) {
+                    // try to check whether the class is an 'implicit converter'
+                    converter = ImplicitConverter.getImplicitConverter(asType);
+                    if (converter != null) {
+                        implicitConverters.putIfAbsent(asType, converter);
+                    }
+                }
+            }
+        }
+        return converter;
+    }
 
     public ConfigValueImpl<String> access(String key) {
         return new ConfigValueImpl<>(this, key);

Copied: geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java (from r1815628, geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java)
URL: http://svn.apache.org/viewvc/geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java?p2=geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java&p1=geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java&r1=1815628&r2=1816024&rev=1816024&view=diff
==============================================================================
--- geronimo/components/config/trunk/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java (original)
+++ geronimo/components/config/branches/ConfigJSR/impl/src/main/java/org/apache/geronimo/config/converters/ImplicitConverter.java Wed Nov 22 10:10:47 2017
@@ -21,7 +21,8 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
-import org.eclipse.microprofile.config.spi.Converter;
+import javax.config.spi.Converter;
+
 
 /**
  * A Converter factory + impl for 'common sense converters'