Added test and fixes for collection support.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/609b4764 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/609b4764 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/609b4764 Branch: refs/heads/master Commit: 609b476485fc75aafbc099c2a6678004b7e76f67 Parents: 30ad130 Author: anatole <anat...@apache.org> Authored: Mon Feb 15 01:51:23 2016 +0100 Committer: anatole <anat...@apache.org> Committed: Mon Feb 15 01:51:23 2016 +0100 ---------------------------------------------------------------------- .../java/org/apache/tamaya/TypeLiteral.java | 10 ++++---- .../core/internal/PropertyConverterManager.java | 13 ++++++++++ .../internal/AdaptiveCombinationPolicy.java | 7 +++++ .../collections/internal/HashMapConverter.java | 27 ++++++++++++++++---- .../internal/LinkedListConverter.java | 2 +- .../collections/internal/SetConverter.java | 2 +- .../collections/internal/TreeMapConverter.java | 6 ++--- .../collections/internal/TreeSetConverter.java | 4 +-- 8 files changed, 54 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/code/api/src/main/java/org/apache/tamaya/TypeLiteral.java ---------------------------------------------------------------------- diff --git a/code/api/src/main/java/org/apache/tamaya/TypeLiteral.java b/code/api/src/main/java/org/apache/tamaya/TypeLiteral.java index 597c27c..729f2b6 100644 --- a/code/api/src/main/java/org/apache/tamaya/TypeLiteral.java +++ b/code/api/src/main/java/org/apache/tamaya/TypeLiteral.java @@ -48,14 +48,14 @@ public class TypeLiteral<T> implements Serializable { * Constructor. * @param definedType the defined type. */ - protected TypeLiteral(Type definedType) { + public TypeLiteral(Type definedType) { this.definedType = definedType; } /** * Constructor only for directly implemeting a TypeLiteral hereby dynamically implementing a generic interface. */ - protected TypeLiteral() { + public TypeLiteral() { this.definedType = getDefinedType(this.getClass()); } @@ -140,9 +140,7 @@ public class TypeLiteral<T> implements Serializable { Type superClazz = clazz.getGenericSuperclass(); - if (superClazz.equals(Object.class)) { - throw new RuntimeException("Super class must be parametrized type"); - } else if (superClazz instanceof ParameterizedType) { + if (superClazz instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) superClazz; Type[] actualArgs = pt.getActualTypeArguments(); @@ -153,6 +151,8 @@ public class TypeLiteral<T> implements Serializable { throw new RuntimeException("More than one parametric type"); } + } else if (superClazz.equals(Object.class)) { + throw new RuntimeException("Super class must be parametrized type"); } else { type = getDefinedType((Class<?>) superClazz); } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java index eb18cfb..72facc4 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java @@ -273,6 +273,19 @@ public class PropertyConverterManager { converterList.addAll(converters); } } + // check for parametrized types, ignoring param type + // direct mapped converters + if(targetType.getType()!=null) { + try { + readLock.lock(); + converters = List.class.cast(this.converters.get(TypeLiteral.of(targetType.getRawType()))); + } finally { + readLock.unlock(); + } + if (converters != null) { + converterList.addAll(converters); + } + } return converterList; } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java index 9170eb3..161e874 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java @@ -43,6 +43,13 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy @Override public Map<String,String> collect(Map<String,String> currentValue, String key, PropertySource propertySource){ + if(key.startsWith("_")){ + PropertyValue newValue = propertySource.get(key); + if(newValue!=null){ + return newValue.getConfigEntries(); + } + return currentValue; + } String adaptiveCombinationPolicyClass = ConfigurationProvider.getConfiguration().get('_' + key+".combinationPolicy"); if(adaptiveCombinationPolicyClass!=null){ PropertyValueCombinationPolicy delegatePolicy = null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java index 76ded4f..8091dc6 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java @@ -24,6 +24,7 @@ import org.apache.tamaya.spi.PropertyConverter; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -68,13 +69,29 @@ public class HashMapConverter implements PropertyConverter<HashMap> { LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e); } } - return null; + HashMap<String,String> result = new HashMap<>(); + for(String raw:rawList){ + String[] items = splitItems(raw); + if(items!=null){ + result.put(items[0], items[1]); + } + } + return result; } static String[] splitItems(String raw) { - String[] items = new String[2]; - // check for '[]' - // else split with ':' - return raw.split("::"); + String[] items = raw.split("::"); + if(items[0].trim().startsWith("[")){ + items[0]= items[0].trim(); + items[0] = items[0].substring(1); + }else{ + items[0]= items[0].trim(); + } + if(items[1].trim().endsWith("]")){ + items[1] = items[1].substring(0,items[1].length()-1); + }else{ + items[1]= items[1].trim(); + } + return items; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java index d41211c..f1c2514 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java @@ -56,7 +56,7 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> { LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e); } } - return null; + return new LinkedList(rawList); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java index ddf19ad..27fdee9 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java @@ -27,7 +27,7 @@ import java.util.Set; /** * PropertyConverter for gnerating a LIST representation of values. */ -public class SetConverter implements PropertyConverter<Set<?>> { +public class SetConverter implements PropertyConverter<Set> { @Override public Set convert(String value, ConversionContext context) { http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java index 08b92fd..b350944 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java @@ -26,7 +26,7 @@ import java.util.TreeMap; /** * PropertyConverter for gnerating HashMap representation of a values. */ -public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> { +public class TreeMapConverter implements PropertyConverter<TreeMap> { /** The shared instance, used by other collection converters in this package.*/ private static TreeMapConverter INSTANCE = new TreeMapConverter(); @@ -40,7 +40,7 @@ public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> { } @Override - public TreeMap<?, ?> convert(String value, ConversionContext context) { - return null; + public TreeMap convert(String value, ConversionContext context) { + return new TreeMap<>(HashMapConverter.getInstance().convert(value, context)); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/609b4764/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java ---------------------------------------------------------------------- diff --git a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java index fca00de..32fee83 100644 --- a/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java +++ b/sandbox/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java @@ -30,7 +30,7 @@ import java.util.logging.Logger; /** * PropertyConverter for gnerating HashSet representation of a values. */ -public class TreeSetConverter implements PropertyConverter<TreeSet<?>> { +public class TreeSetConverter implements PropertyConverter<TreeSet> { private static final Logger LOG = Logger.getLogger(TreeSetConverter.class.getName()); @@ -68,6 +68,6 @@ public class TreeSetConverter implements PropertyConverter<TreeSet<?>> { LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e); } } - return null; + return new TreeSet<>(rawList); } }