TAMAYA-355 Enable mapping of lists and arrays into internal datastructures, reestablished conversion/filter context (backward compatible).
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/1fbe9a15 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/1fbe9a15 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/1fbe9a15 Branch: refs/heads/master Commit: 1fbe9a1589ecc591164d7457f0c74fdd2bb3f20a Parents: 70980cc Author: Anatole Tresch <[email protected]> Authored: Sat Nov 3 21:27:53 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Sat Nov 3 21:27:53 2018 +0100 ---------------------------------------------------------------------- .../tamaya/collections/ArrayListConverter.java | 9 +-- .../tamaya/collections/CollectionConverter.java | 71 +++++++++--------- .../collections/ConcurrentHashMapConverter.java | 19 +---- .../tamaya/collections/HashMapConverter.java | 8 +-- .../tamaya/collections/HashSetConverter.java | 19 +---- .../tamaya/collections/ItemTokenizer.java | 75 ++++++++------------ .../tamaya/collections/LinkedListConverter.java | 20 +----- .../tamaya/collections/ListConverter.java | 7 +- .../apache/tamaya/collections/MapConverter.java | 9 ++- .../apache/tamaya/collections/SetConverter.java | 7 +- .../tamaya/collections/SortedMapConverter.java | 5 +- .../tamaya/collections/SortedSetConverter.java | 4 +- .../tamaya/collections/TreeMapConverter.java | 19 +---- .../tamaya/collections/TreeSetConverter.java | 16 +---- .../collections/MyUpperCaseConverter.java | 3 +- .../hazelcast/HazelcastPropertySource.java | 5 -- .../tamaya/jodatime/DateTimeConverter.java | 6 +- .../tamaya/jodatime/DateTimeZoneConverter.java | 12 +--- .../tamaya/jodatime/DurationConverter.java | 40 ++++------- .../tamaya/jodatime/InstantConverter.java | 6 +- .../tamaya/jodatime/LocalDateConverter.java | 6 +- .../tamaya/jodatime/LocalTimeConverter.java | 6 +- .../apache/tamaya/jodatime/PeriodConverter.java | 12 +--- .../tamaya/jodatime/DateTimeConverterTest.java | 26 +++---- .../jodatime/DateTimeZoneConverterTest.java | 22 +++--- .../tamaya/jodatime/DurationConverterTest.java | 24 +++---- .../tamaya/jodatime/PeriodConverterTest.java | 21 +++--- .../apache/tamaya/metamodel/CachedFilter.java | 3 +- .../org/apache/tamaya/metamodel/HideFilter.java | 3 +- .../tamaya/metamodel/ImmutableFilter.java | 5 +- .../org/apache/tamaya/metamodel/MapFilter.java | 3 +- .../org/apache/tamaya/metamodel/MaskFilter.java | 3 +- .../apache/tamaya/metamodel/SecuredFilter.java | 3 +- .../metamodel/ext/FilteredPropertySource.java | 43 ++++------- .../tamaya/metamodel/ext/MyConverter.java | 3 +- .../apache/tamaya/metamodel/ext/MyFilter.java | 3 +- .../org/apache/tamaya/uom/UnitConverter.java | 9 +-- .../apache/tamaya/uom/UnitConverterTest.java | 5 +- .../internal/UsageTrackerFilter.java | 5 +- 39 files changed, 201 insertions(+), 364 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java index 616b22a..2715cfc 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java @@ -43,13 +43,8 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> { } @Override - public ArrayList convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - // Use configurable mechanism - return CollectionConverter.convertList(context, ArrayList::new); - } - return CollectionConverter.convertSimpleList(value); + public ArrayList convert(String value, ConversionContext context) { + return CollectionConverter.convertList(context, ArrayList::new); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java index 69aa99e..215d128 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java @@ -68,23 +68,23 @@ public final class CollectionConverter implements PropertyConverter<Collection> T result = collectionSupplier.get(); switch (mappingType) { case node_all: - return convertListByNodes(context.getValues(), context.getConfiguration(), + return convertListByNodes(context.getValues(), context, collectionTargetType, result, true); case node: - return convertListByNodes(context.getValues(), context.getConfiguration(), + return convertListByNodes(context.getValues(), context, collectionTargetType, result, false); case value: - return convertListByValues(context.getValues(), context.getConfiguration(), + return convertListByValues(context.getValues(), context, collectionTargetType, result, false); default: case value_all: - return convertListByValues(context.getValues(), context.getConfiguration(), + return convertListByValues(context.getValues(), context, collectionTargetType, result, true); } } private static <T extends Collection> T convertListByValues(List<PropertyValue> values, - Configuration config, + ConversionContext context, TypeLiteral<?> targetType, T result, boolean combine) { @@ -92,9 +92,9 @@ public final class CollectionConverter implements PropertyConverter<Collection> values = Collections.singletonList(values.get(0)); } for (PropertyValue val : values) { - List<String> tokenList = ItemTokenizer.split(val.getValue()); + List<String> tokenList = ItemTokenizer.split(val.getValue(), context); for (String token : tokenList) { - Object o = ItemTokenizer.convertValue(token, targetType); + Object o = ItemTokenizer.convertValue(token, targetType, context); if (o != null) { result.add(o); }else{ @@ -107,7 +107,7 @@ public final class CollectionConverter implements PropertyConverter<Collection> } private static <T extends Collection> T convertListByNodes(List<PropertyValue> values, - Configuration config, + ConversionContext context, TypeLiteral<?> targetType, T result, boolean combine) { @@ -119,7 +119,7 @@ public final class CollectionConverter implements PropertyConverter<Collection> if(targetType.equals(TypeLiteral.of(String.class))){ result.add(itemNode.getValue()); }else { - Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType); + Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType, context); if (o != null) { result.add(o); }else{ @@ -147,35 +147,35 @@ public final class CollectionConverter implements PropertyConverter<Collection> T result = collectionSupplier.get(); switch (mappingType) { case node_all: - return convertMapByNodes(context.getValues(), context.getConfiguration(), + return convertMapByNodes(context.getValues(), context, collectionTargetType, result, true); case node: - return convertMapByNodes(context.getValues(), context.getConfiguration(), + return convertMapByNodes(context.getValues(), context, collectionTargetType, result, false); case value: - return convertMapByValues(context.getValues(), context.getConfiguration(), + return convertMapByValues(context.getValues(), context, collectionTargetType, result, false); default: case value_all: - return convertMapByValues(context.getValues(), context.getConfiguration(), + return convertMapByValues(context.getValues(), context, collectionTargetType, result, true); } } private static <T extends Map> T convertMapByValues(List<PropertyValue> values, - Configuration config, - TypeLiteral<?> targetType, - T result, - boolean combine) { + ConversionContext context, + TypeLiteral<?> targetType, + T result, + boolean combine) { if(!combine){ values = Collections.singletonList(values.get(0)); } for (PropertyValue val : values) { - List<String> tokenList = ItemTokenizer.split(val.getValue()); + List<String> tokenList = ItemTokenizer.split(val.getValue(), context); for(String token:tokenList) { - String[] keyValue = ItemTokenizer.splitMapEntry(token); - Object o = ItemTokenizer.convertValue(keyValue[1], targetType); + String[] keyValue = ItemTokenizer.splitMapEntry(token, context); + Object o = ItemTokenizer.convertValue(keyValue[1], targetType, context); if (o != null) { result.put(keyValue[0], o); }else{ @@ -188,16 +188,16 @@ public final class CollectionConverter implements PropertyConverter<Collection> } private static <T extends Map> T convertMapByNodes(List<PropertyValue> values, - Configuration config, - TypeLiteral<?> targetType, - T result, - boolean combine) { + ConversionContext context, + TypeLiteral<?> targetType, + T result, + boolean combine) { if(!combine){ values = Collections.singletonList(values.get(0)); } for (PropertyValue val : values) { for(PropertyValue itemNode:val) { - Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType); + Object o = ItemTokenizer.convertValue(itemNode.getValue(), targetType, context); if (o != null) { result.put(itemNode.getKey(), o); }else{ @@ -210,8 +210,8 @@ public final class CollectionConverter implements PropertyConverter<Collection> } - public static ArrayList<String> convertSimpleList(String value) { - List<String> rawList = ItemTokenizer.split(value); + public static ArrayList<String> convertSimpleList(String value, ConversionContext context) { + List<String> rawList = ItemTokenizer.split(value, context); ArrayList<String> mlist = new ArrayList<>(); for(String raw:rawList){ String convValue = raw; @@ -222,11 +222,11 @@ public final class CollectionConverter implements PropertyConverter<Collection> return mlist; } - public static Map<String,String> convertSimpleMap(String value) { - List<String> rawList = ItemTokenizer.split(value); + public static Map<String,String> convertSimpleMap(String value, ConversionContext context) { + List<String> rawList = ItemTokenizer.split(value, context); HashMap<String,String> result = new HashMap(rawList.size()); for(String raw:rawList){ - String[] items = ItemTokenizer.splitMapEntry(raw); + String[] items = ItemTokenizer.splitMapEntry(raw, context); if(items.length==1){ result.put(items[0], items[0]); }else{ @@ -237,8 +237,7 @@ public final class CollectionConverter implements PropertyConverter<Collection> } @Override - public Collection convert(String value) { - ConversionContext context = ConversionContext.current(); + public Collection convert(String value, ConversionContext context) { String collectionType = "List"; if(context!=null) { collectionType = (String)context.getMeta().getOrDefault("collection-type", "List"); @@ -249,20 +248,20 @@ public final class CollectionConverter implements PropertyConverter<Collection> Collection result = null; switch (collectionType) { case "LinkedList": - result = LinkedListConverter.getInstance().convert(value); + result = LinkedListConverter.getInstance().convert(value, context); break; case "Set": case "HashSet": - result = HashSetConverter.getInstance().convert(value); + result = HashSetConverter.getInstance().convert(value, context); break; case "SortedSet": case "TreeSet": - result = TreeSetConverter.getInstance().convert(value); + result = TreeSetConverter.getInstance().convert(value, context); break; case "List": case "ArrayList": default: - result = ArrayListConverter.getInstance().convert(value); + result = ArrayListConverter.getInstance().convert(value, context); break; } return result; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java index 3c56749..506ac00 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java @@ -45,23 +45,8 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH } @Override - public ConcurrentHashMap convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - return CollectionConverter.convertMap(context, ConcurrentHashMap::new); - } - List<String> rawList = ItemTokenizer.split(value); - ConcurrentHashMap result = new ConcurrentHashMap(rawList.size()); - for(String raw:rawList){ - String[] items = ItemTokenizer.splitMapEntry(raw); - Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class)); - if(convValue!=null){ - result.put(items[0], convValue); - }else{ - LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'."); - } - } - return result; + public ConcurrentHashMap convert(String value, ConversionContext context) { + return CollectionConverter.convertMap(context, ConcurrentHashMap::new); } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java index 3e27b5d..19ecb46 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java @@ -42,12 +42,8 @@ public class HashMapConverter implements PropertyConverter<HashMap> { } @Override - public HashMap convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - return CollectionConverter.convertMap(context, HashMap::new); - } - return (HashMap)CollectionConverter.convertSimpleMap(value); + public HashMap convert(String value, ConversionContext context) { + return CollectionConverter.convertMap(context, HashMap::new); } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java index b7ca65e..47a5044 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java @@ -46,22 +46,7 @@ public class HashSetConverter implements PropertyConverter<HashSet> { } @Override - public HashSet convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - return CollectionConverter.convertList(context, HashSet::new); - } - List<String> rawList = ItemTokenizer.split(value); - HashSet<Object> result = new HashSet<>(); - for(String raw:rawList){ - String[] items = ItemTokenizer.splitMapEntry(raw); - Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class)); - if(convValue!=null){ - result.add(convValue); - }else{ - LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'."); - } - } - return result; + public HashSet convert(String value, ConversionContext context) { + return CollectionConverter.convertList(context, HashSet::new); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java index 4267c24..7cd043b 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java +++ b/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java @@ -46,13 +46,9 @@ final class ItemTokenizer { * @param value the createValue, not null. * @return the tokenized createValue as createList, in order of occurrence. */ - public static List<String> split(String value){ - ConversionContext ctx = ConversionContext.current(); - if(ctx != null){ - String itemSeparator = (String)ctx.getMeta().getOrDefault("item-separator", ","); - return split(value, itemSeparator); - } - return split(value, ","); + public static List<String> split(String value, ConversionContext ctx){ + String itemSeparator = (String)ctx.getMeta().getOrDefault("item-separator", ","); + return split(value, itemSeparator); } /** @@ -87,13 +83,9 @@ final class ItemTokenizer { * @param mapEntry the entry, not null. * @return an array of length 2, with the trimmed and parsed key/createValue pair. */ - public static String[] splitMapEntry(String mapEntry){ - ConversionContext ctx = ConversionContext.current(); - if(ctx != null){ - String entrySeparator = (String)ctx.getMeta().getOrDefault("map-entry-separator", "="); - return splitMapEntry(mapEntry, entrySeparator); - } - return splitMapEntry(mapEntry, "="); + public static String[] splitMapEntry(String mapEntry, ConversionContext ctx){ + String entrySeparator = (String)ctx.getMeta().getOrDefault("map-entry-separator", "="); + return splitMapEntry(mapEntry, entrySeparator); } /** @@ -132,42 +124,35 @@ final class ItemTokenizer { * @param value the raw String createValue. * @return the parsed createValue, or null. */ - public static <T> T convertValue(String value, TypeLiteral<T> targetType) { - ConversionContext context = ConversionContext.current(); - if (context != null) { - String converterClass = context.getMeta().get("item-converter"); - List<PropertyConverter<T>> valueConverters = new ArrayList<>(1); - if (converterClass != null) { + public static <T> T convertValue(String value, TypeLiteral<T> targetType, ConversionContext context) { + String converterClass = context.getMeta().get("item-converter"); + List<PropertyConverter<T>> valueConverters = new ArrayList<>(1); + if (converterClass != null) { + try { + valueConverters.add((PropertyConverter<T>) Class.forName(converterClass).newInstance()); + } catch (Exception e) { + LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e); + } + } + valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(targetType)); + if (valueConverters.isEmpty()) { + if(targetType.getRawType().equals(String.class)) { + return (T)value; + } + } else { + ConversionContext newContext = new ConversionContext.Builder(context.getConfiguration(), context.getKey(), + targetType).build(); + T result = null; + for (PropertyConverter<T> conv : valueConverters) { try { - valueConverters.add((PropertyConverter<T>) Class.forName(converterClass).newInstance()); + result = conv.convert(value, newContext); + if (result != null) { + return result; + } } catch (Exception e) { LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e); } } - valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(targetType)); - try{ - if (valueConverters.isEmpty()) { - if(targetType.getRawType().equals(String.class)) { - return (T)value; - } - } else { - ConversionContext.set(new ConversionContext.Builder(context.getConfiguration(), context.getKey(), - targetType).build()); - T result = null; - for (PropertyConverter<T> conv : valueConverters) { - try { - result = conv.convert(value); - if (result != null) { - return result; - } - } catch (Exception e) { - LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e); - } - } - } - }finally { - ConversionContext.set(context); - } } LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '" + value + "'."); return null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java index 6c3fa3d..b769ab6 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java @@ -45,24 +45,8 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> { } @Override - public LinkedList convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - return CollectionConverter.convertList(context, LinkedList::new); - } - List<String> rawList = ItemTokenizer.split(value); - LinkedList<Object> result = new LinkedList<>(); - for(String raw:rawList){ - String[] items = ItemTokenizer.splitMapEntry(raw); - Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class)); - if(convValue!=null){ - result.add(convValue); - continue; - }else{ - LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'."); - } - } - return result; + public LinkedList convert(String value, ConversionContext context) { + return CollectionConverter.convertList(context, LinkedList::new); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java index 1a97132..769be12 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java @@ -31,8 +31,7 @@ import java.util.function.Supplier; public class ListConverter implements PropertyConverter<List> { @Override - public List convert(String value) { - ConversionContext context = ConversionContext.current(); + public List convert(String value, ConversionContext context) { String collectionType = "ArrayList"; boolean readOnly = false; if(context!=null) { @@ -45,12 +44,12 @@ public class ListConverter implements PropertyConverter<List> { List result = null; switch(collectionType){ case "LinkedList": - result = LinkedListConverter.getInstance().convert(value); + result = LinkedListConverter.getInstance().convert(value, context); break; case "List": case "ArrayList": default: - result = ArrayListConverter.getInstance().convert(value); + result = ArrayListConverter.getInstance().convert(value, context); break; } if(readOnly){ http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java index d7e149e..08fefff 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java @@ -30,8 +30,7 @@ import java.util.Map; public class MapConverter implements PropertyConverter<Map> { @Override - public Map convert(String value) { - ConversionContext context = ConversionContext.current(); + public Map convert(String value, ConversionContext context) { String collectionType = "HashMap"; boolean readOnly = false; if(context!=null) { @@ -45,15 +44,15 @@ public class MapConverter implements PropertyConverter<Map> { switch(collectionType){ case "TreeMap": case "SortedMap": - result = TreeMapConverter.getInstance().convert(value); + result = TreeMapConverter.getInstance().convert(value, context); break; case "ConcurrentHashMap": - result = ConcurrentHashMapConverter.getInstance().convert(value); + result = ConcurrentHashMapConverter.getInstance().convert(value, context); break; case "Map": case "HashMap": default: - result = HashMapConverter.getInstance().convert(value); + result = HashMapConverter.getInstance().convert(value, context); break; } if(readOnly){ http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java index c9a70b5..b66ef5b 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java @@ -30,8 +30,7 @@ import java.util.Set; public class SetConverter implements PropertyConverter<Set> { @Override - public Set convert(String value) { - ConversionContext context = ConversionContext.current(); + public Set convert(String value, ConversionContext context) { String collectionType = "Set"; boolean readOnly = false; if(context!=null) { @@ -44,12 +43,12 @@ public class SetConverter implements PropertyConverter<Set> { Set result; switch(collectionType){ case "TreeSet": - result = TreeSetConverter.getInstance().convert(value); + result = TreeSetConverter.getInstance().convert(value, context); break; case "Set": case "HashSet": default: - result = HashSetConverter.getInstance().convert(value); + result = HashSetConverter.getInstance().convert(value, context); break; } if(readOnly){ http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java index 972c72c..5416e28 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/SortedMapConverter.java @@ -18,6 +18,7 @@ */ package org.apache.tamaya.collections; +import org.apache.tamaya.spi.ConversionContext; import org.apache.tamaya.spi.PropertyConverter; import java.util.Collections; @@ -29,7 +30,7 @@ import java.util.SortedMap; public class SortedMapConverter implements PropertyConverter<SortedMap> { @Override - public SortedMap convert(String value) { - return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value)); + public SortedMap convert(String value, ConversionContext context) { + return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value, context)); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java index 6ae4f5b..acac96c 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java @@ -31,7 +31,7 @@ import java.util.TreeSet; public class SortedSetConverter implements PropertyConverter<SortedSet> { @Override - public SortedSet convert(String value) { - return TreeSetConverter.getInstance().convert(value); + public SortedSet convert(String value, ConversionContext context) { + return TreeSetConverter.getInstance().convert(value, context); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java index 08378a6..b287dd9 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java @@ -46,22 +46,7 @@ public class TreeMapConverter implements PropertyConverter<TreeMap> { } @Override - public TreeMap convert(String value) { - ConversionContext context = ConversionContext.current(); - if(context!=null){ - return CollectionConverter.convertMap(context, TreeMap::new); - } - List<String> rawList = ItemTokenizer.split(value); - TreeMap result = new TreeMap(); - for(String raw:rawList){ - String[] items = ItemTokenizer.splitMapEntry(raw); - Object convValue = ItemTokenizer.convertValue(items[1], TypeLiteral.of(String.class)); - if(convValue!=null){ - result.put(items[0], convValue); - }else{ - LOG.log(Level.SEVERE, "Failed to convert collection createValue type for '"+raw+"'."); - } - } - return result; + public TreeMap convert(String value, ConversionContext context) { + return CollectionConverter.convertMap(context, TreeMap::new); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java index 0625957..c5651f5 100644 --- a/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java +++ b/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java @@ -46,19 +46,7 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> { } @Override - public TreeSet convert(String value) { - TreeSet result = null; - ConversionContext context = ConversionContext.current(); - if(context!=null) { - result = CollectionConverter.convertList(context, TreeSet::new); - } - else { - List<String> rawList = ItemTokenizer.split(value); - result = new TreeSet<>(); - for (String raw : rawList) { - result.add(raw); - } - } - return result; + public TreeSet convert(String value, ConversionContext context) { + return CollectionConverter.convertList(context, TreeSet::new); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java ---------------------------------------------------------------------- diff --git a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java index 221b9a1..1c95261 100644 --- a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java +++ b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java @@ -18,6 +18,7 @@ */ package org.apache.tamaya.collections; +import org.apache.tamaya.spi.ConversionContext; import org.apache.tamaya.spi.PropertyConverter; /** @@ -26,7 +27,7 @@ import org.apache.tamaya.spi.PropertyConverter; */ public class MyUpperCaseConverter implements PropertyConverter<String>{ @Override - public String convert(String value) { + public String convert(String value, ConversionContext context) { return "("+value.toUpperCase()+")"; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java ---------------------------------------------------------------------- diff --git a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java index 2da7739..1a716d3 100644 --- a/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java +++ b/hazelcast/src/main/java/org/apache/tamaya/hazelcast/HazelcastPropertySource.java @@ -179,11 +179,6 @@ implements MutablePropertySource{ return PropertyValue.map(this.configMap, getName(), meta); } - @Override - public boolean isScannable() { - return true; - } - /** * Reloads the configuration map from Hazelcast completely. */ http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java index 5942f8c..864eb32 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java @@ -90,10 +90,8 @@ public class DateTimeConverter implements PropertyConverter<DateTime> { } @Override - public DateTime convert(String value) { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(DateTimeConverter.class, PARSER_FORMATS); - }); + public DateTime convert(String value, ConversionContext context) { + context.addSupportedFormats(DateTimeConverter.class, PARSER_FORMATS); String trimmed = Objects.requireNonNull(value).trim(); DateTime result = null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java index ba13442..b4d4e0e 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java @@ -42,9 +42,10 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> { private static final Pattern IS_INTEGER_VALUE = Pattern.compile(PATTERN_REGEX); @Override - public DateTimeZone convert(String value) { + public DateTimeZone convert(String value, ConversionContext context) { String trimmed = requireNonNull(value).trim(); - addSupportedFormats(); + context.addSupportedFormats(DateTimeZoneConverter.class, "Time zone in the form [+-]hh:mm via the regex " + PATTERN_REGEX); + context.addSupportedFormats(DateTimeZoneConverter.class, "All time zone ids supported by Joda Time"); DateTimeZone result = null; @@ -63,13 +64,6 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> { return result; } - private void addSupportedFormats() { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(DateTimeZoneConverter.class, "Time zone in the form [+-]hh:mm via the regex " + PATTERN_REGEX); - context.addSupportedFormats(DateTimeZoneConverter.class, "All time zone ids supported by Joda Time"); - }); - } - private boolean isSingleIntegerValue(String value) { boolean match = IS_INTEGER_VALUE.matcher(value).matches(); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java index 32fdc7f..efefd25 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DurationConverter.java @@ -43,40 +43,28 @@ public class DurationConverter implements PropertyConverter<Duration> { private PeriodConverter periodConverter = new PeriodConverter(); @Override - public Duration convert(String value) { + public Duration convert(String value, ConversionContext context) { String trimmed = Objects.requireNonNull(value).trim(); - addSupportedFormats(); + context.addSupportedFormats(getClass(), "PTa.bS"); + context.addSupportedFormats(getClass(), "PdDThHmMsS"); + context.addSupportedFormats(getClass(), "ddThh:mm:ss"); try { return Duration.parse(value); }catch(Exception e){ + ConversionContext subContext = new ConversionContext.Builder(context.getConfiguration(), context.getKey(), context.getTargetType()) + .setValues(context.getValues()).build(); Period period = null; - ConversionContext ctx = ConversionContext.current(); - try { - ConversionContext.reset(); - if (value.startsWith("P")) { - period = periodConverter.convert("P0Y0M0W" + value.substring(1)); - } - if (period == null) { - period = periodConverter.convert("P0000-00-" + value); - } - if (period != null) { - return period.toStandardDuration(); - } - }finally{ - if(ctx!=null){ - ConversionContext.set(ctx); - } + if (value.startsWith("P")) { + period = periodConverter.convert("P0Y0M0W" + value.substring(1), subContext); + } + if (period == null) { + period = periodConverter.convert("P0000-00-" + value, subContext); + } + if (period != null) { + return period.toStandardDuration(); } } return null; } - private void addSupportedFormats() { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(getClass(), "PTa.bS"); - context.addSupportedFormats(getClass(), "PdDThHmMsS"); - context.addSupportedFormats(getClass(), "ddThh:mm:ss"); - }); - } - } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java index b1d6f53..3295fbc 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/InstantConverter.java @@ -87,10 +87,8 @@ public class InstantConverter implements PropertyConverter<Instant> { } @Override - public Instant convert(String value) { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(InstantConverter.class, PARSER_FORMATS); - }); + public Instant convert(String value, ConversionContext context) { + context.addSupportedFormats(InstantConverter.class, PARSER_FORMATS); String trimmed = Objects.requireNonNull(value).trim(); try { http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java index d4c5cd6..0739e93 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalDateConverter.java @@ -66,10 +66,8 @@ public class LocalDateConverter implements PropertyConverter<LocalDate> { } @Override - public LocalDate convert(String value) { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(LocalDateConverter.class, PARSER_FORMATS); - }); + public LocalDate convert(String value, ConversionContext context) { + context.addSupportedFormats(LocalDateConverter.class, PARSER_FORMATS); String trimmed = Objects.requireNonNull(value).trim(); LocalDate result = null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java index 7784308..22593c0 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/LocalTimeConverter.java @@ -50,10 +50,8 @@ public class LocalTimeConverter implements PropertyConverter<LocalTime> { }; @Override - public LocalTime convert(String value) { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(LocalTimeConverter.class, PARSER_FORMATS); - }); + public LocalTime convert(String value, ConversionContext context) { + context.addSupportedFormats(LocalTimeConverter.class, PARSER_FORMATS); String trimmed = Objects.requireNonNull(value).trim(); try { http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java ---------------------------------------------------------------------- diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java index 0b8e22d..dfe18e1 100644 --- a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java +++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java @@ -57,10 +57,11 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period> private final static Pattern ALTERNATIVE_PATTERN = Pattern.compile(ALTERNATIVE_REGEX); @Override - public Period convert(String value) { + public Period convert(String value, ConversionContext context) { String trimmed = Objects.requireNonNull(value).trim(); - addSupportedFormats(); + context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS"); + context.addSupportedFormats(PeriodConverter.class, "Pyyyy-mm-ddThh:mm:ss"); MutablePeriod result = null; PeriodParser format = null; @@ -83,13 +84,6 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period> return result != null ? result.toPeriod() : null; } - private void addSupportedFormats() { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS"); - context.addSupportedFormats(PeriodConverter.class, "Pyyyy-mm-ddThh:mm:ss"); - }); - } - private boolean isISOFormat(String value) { return ISO_PATTERN.matcher(value).matches(); } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java ---------------------------------------------------------------------- diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java index 7283cb2..58b4587 100644 --- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java +++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java @@ -68,9 +68,9 @@ public class DateTimeConverterTest { {" 2007-08-31T16:47:01.123+00:00", FORMATTER.parseDateTime("2007-08-31T16:47:01.123+00:00")}, {"2007-08-31T16:47:01+00:00 ", FORMATTER.parseDateTime("2007-08-31T16:47:01.0+00:00")}, }; - + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build(); for (Object[] pair : inputResultPairs) { - DateTime date = converter.convert((String)pair[0]); + DateTime date = converter.convert((String)pair[0], context); assertThat("Converter failed to convert input createValue " + pair[0], date, notNullValue()); assertThat(date.isEqual((DateTime)pair[1]), is(true)); @@ -83,8 +83,9 @@ public class DateTimeConverterTest { "00:00", "a", "-", "+ :00", "+00:" }; + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build(); for (String input : inputValues) { - DateTime date = converter.convert(input); + DateTime date = converter.convert(input, context); assertThat(date, nullValue()); } @@ -93,18 +94,13 @@ public class DateTimeConverterTest { @Test public void allSupportedFormatsAreAddedToTheConversionContext() { ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build(); - try { - ConversionContext.set(context); - converter.convert("2007-08-31T16+00:00"); - - assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length)); - - for (String format : DateTimeConverter.PARSER_FORMATS) { - String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")"; - assertThat(context.getSupportedFormats(), hasItem(expected)); - } - }finally { - ConversionContext.reset(); + converter.convert("2007-08-31T16+00:00", context); + + assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length)); + + for (String format : DateTimeConverter.PARSER_FORMATS) { + String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")"; + assertThat(context.getSupportedFormats(), hasItem(expected)); } } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java ---------------------------------------------------------------------- diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java index 6061d29..7bc3adb 100644 --- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java +++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java @@ -55,9 +55,9 @@ public class DateTimeZoneConverterTest { {" +00:00 ", DateTimeZone.forID("+00:00")}, {"+04:00", DateTimeZone.forID("+04:00")}, }; - + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTimeZone.class)).build(); for (Object[] pair : inputResultPairs) { - DateTimeZone zone = converter.convert((String) pair[0]); + DateTimeZone zone = converter.convert((String) pair[0], context); assertThat("Converter failed to convert input createValue " + pair[0], zone, notNullValue()); assertThat(zone, equalTo((DateTimeZone)pair[1])); @@ -74,8 +74,9 @@ public class DateTimeZoneConverterTest { "2007-08-01+00:00" }; + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTimeZone.class)).build(); for (String input : inputValues) { - DateTimeZone date = converter.convert(input); + DateTimeZone date = converter.convert(input, context); assertThat(date, nullValue()); } @@ -87,17 +88,12 @@ public class DateTimeZoneConverterTest { String secondFormat = "All time zone ids supported by Joda Time (DateTimeZoneConverter)"; ConversionContext context = new Builder(TypeLiteral.of(DateTimeZone.class)).build(); - try { - ConversionContext.set(context); - DateTimeZone result = converter.convert("+01:00"); + DateTimeZone result = converter.convert("+01:00", context); - assertThat(result, notNullValue()); - assertThat(context.getSupportedFormats(), hasSize(2)); - assertThat(context.getSupportedFormats(), hasItem(firstFormat)); - assertThat(context.getSupportedFormats(), hasItem(secondFormat)); - }finally{ - ConversionContext.reset(); - } + assertThat(result, notNullValue()); + assertThat(context.getSupportedFormats(), hasSize(2)); + assertThat(context.getSupportedFormats(), hasItem(firstFormat)); + assertThat(context.getSupportedFormats(), hasItem(secondFormat)); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java ---------------------------------------------------------------------- diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java index 07270d1..7ddf6da 100644 --- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java +++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java @@ -58,8 +58,9 @@ public class DurationConverterTest { }; + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build(); for (Object[] pair : inputResultPairs) { - Duration duration = converter.convert((String) pair[0]); + Duration duration = converter.convert((String) pair[0], context); assertThat("Converter failed to convert input createValue " + pair[0], duration, notNullValue()); assertThat(duration, equalTo((Duration) pair[1])); @@ -75,9 +76,9 @@ public class DurationConverterTest { "-", "fooBar", }; - + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build(); for (String input : inputValues) { - Duration duration = converter.convert(input); + Duration duration = converter.convert(input, context); assertThat(duration, nullValue()); } @@ -88,16 +89,11 @@ public class DurationConverterTest { String name = DurationConverter.class.getSimpleName(); ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build(); - try { - ConversionContext.set(context); - converter.convert("P0DT0H0M0S"); - - assertThat(context.getSupportedFormats(), hasSize(3)); - assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + name + ")")); - assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + name + ")")); - assertThat(context.getSupportedFormats(), hasItem("PTa.bS (" + name + ")")); - }finally{ - ConversionContext.reset(); - } + converter.convert("P0DT0H0M0S", context); + + assertThat(context.getSupportedFormats(), hasSize(3)); + assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + name + ")")); + assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + name + ")")); + assertThat(context.getSupportedFormats(), hasItem("PTa.bS (" + name + ")")); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java ---------------------------------------------------------------------- diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java index 15e0018..9ed7724 100644 --- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java +++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java @@ -62,8 +62,9 @@ public class PeriodConverterTest { {"P0002-03-00T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")} }; + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build(); for (Object[] pair : inputResultPairs) { - Period period = converter.convert((String) pair[0]); + Period period = converter.convert((String) pair[0], context); assertThat("Converter failed to convert input createValue " + pair[0], period, notNullValue()); assertThat(period, equalTo((Period)pair[1])); @@ -78,8 +79,9 @@ public class PeriodConverterTest { "P0002T00:05" }; + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build(); for (String input : inputValues) { - Period period = converter.convert(input); + Period period = converter.convert(input, context); assertThat(period, nullValue()); } @@ -90,15 +92,10 @@ public class PeriodConverterTest { String name = PeriodConverter.class.getSimpleName(); ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build(); - try { - ConversionContext.set(context); - converter.convert("P7Y0M0W0DT0H0M0S"); - - assertThat(context.getSupportedFormats(), hasSize(2)); - assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")")); - assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")")); - }finally{ - ConversionContext.reset(); - } + converter.convert("P7Y0M0W0DT0H0M0S", context); + + assertThat(context.getSupportedFormats(), hasSize(2)); + assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")")); + assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")")); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java index 52e92c4..45d4b0a 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java @@ -19,6 +19,7 @@ package org.apache.tamaya.metamodel; import org.apache.tamaya.metamodel.spi.ItemFactory; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -68,7 +69,7 @@ public class CachedFilter implements PropertyFilter{ } @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ if(value.getKey().matches(matches)){ return resolveCachedEntry(value); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java index 431b72e..b100906 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/HideFilter.java @@ -21,6 +21,7 @@ package org.apache.tamaya.metamodel; import java.util.Map; import org.apache.tamaya.metamodel.spi.ItemFactory; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -63,7 +64,7 @@ public class HideFilter implements PropertyFilter{ } @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ if(value.getKey().matches(matches)){ return null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java index 0b957a3..0a2acad 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/ImmutableFilter.java @@ -56,10 +56,9 @@ public class ImmutableFilter implements PropertyFilter{ private Map<String,PropertyValue> map = new ConcurrentHashMap<>(); @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { String key = value.getKey(); - FilterContext context = FilterContext.get(); - if(context!=null && !context.isSinglePropertyScoped()) { + if(!context.isSinglePropertyScoped()) { key = value.getKey() + "_all"; } PropertyValue val = map.get(key); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java index f7ed5a7..9bf7d15 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MapFilter.java @@ -19,6 +19,7 @@ package org.apache.tamaya.metamodel; import org.apache.tamaya.metamodel.spi.ItemFactory; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -83,7 +84,7 @@ public class MapFilter implements PropertyFilter{ } @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { value = value.mutable(); String key = value.getKey(); if(matches !=null){ http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java index cb63a25..9d356b2 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java @@ -19,6 +19,7 @@ package org.apache.tamaya.metamodel; import org.apache.tamaya.metamodel.spi.ItemFactory; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -112,7 +113,7 @@ public class MaskFilter implements PropertyFilter{ } @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ if(value.getKey().matches(matches)){ return null; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java index bfa3672..7d41f68 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java @@ -20,6 +20,7 @@ package org.apache.tamaya.metamodel; import org.apache.tamaya.ConfigException; import org.apache.tamaya.metamodel.spi.ItemFactory; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -91,7 +92,7 @@ public class SecuredFilter implements PropertyFilter{ } @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ if(!value.getKey().matches(matches)) { return value; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java index 1fe93ff..856ef56 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/ext/FilteredPropertySource.java @@ -85,18 +85,13 @@ public final class FilteredPropertySource extends BasePropertySource { PropertyValue value = wrapped.get(key); if(value != null && value.getValue()!=null){ if(filters!=null){ - try{ - FilterContext fc = new FilterContext(value, dummyContext); - FilterContext.set(fc); - PropertyValue filteredValue = value; - for(PropertyFilter pf:filters){ - filteredValue = pf.filterProperty(filteredValue); - } - if(filteredValue!=null){ - return filteredValue; - } - }finally { - FilterContext.reset(); + FilterContext fc = new FilterContext(value, dummyContext); + PropertyValue filteredValue = value; + for(PropertyFilter pf:filters){ + filteredValue = pf.filterProperty(filteredValue, fc); + } + if(filteredValue!=null){ + return filteredValue; } } } @@ -110,18 +105,13 @@ public final class FilteredPropertySource extends BasePropertySource { Map<String, PropertyValue> result = new HashMap<>(); synchronized (filters) { for (PropertyValue value : props.values()) { - try{ - FilterContext fc = new FilterContext(value, dummyContext); - FilterContext.set(fc); - PropertyValue filteredValue = value; - for (PropertyFilter pf : filters) { - filteredValue = pf.filterProperty(filteredValue); - } - if (filteredValue != null) { - result.put(filteredValue.getKey(), filteredValue); - } - }finally { - FilterContext.reset(); + FilterContext fc = new FilterContext(value, dummyContext); + PropertyValue filteredValue = value; + for (PropertyFilter pf : filters) { + filteredValue = pf.filterProperty(filteredValue, fc); + } + if (filteredValue != null) { + result.put(filteredValue.getKey(), filteredValue); } } } @@ -130,11 +120,6 @@ public final class FilteredPropertySource extends BasePropertySource { return Collections.emptyMap(); } - @Override - public boolean isScannable() { - return wrapped.isScannable(); - } - /** * Adds the given filters to this property source. * @param filter the filters, not null. http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java index d19b3c3..038fcd2 100644 --- a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyConverter.java @@ -18,6 +18,7 @@ */ package org.apache.tamaya.metamodel.ext; +import org.apache.tamaya.spi.ConversionContext; import org.apache.tamaya.spi.PropertyConverter; /** @@ -31,7 +32,7 @@ public class MyConverter implements PropertyConverter<String> { private String overrideValue; @Override - public String convert(String value) { + public String convert(String value, ConversionContext conversionContext) { return value; } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java ---------------------------------------------------------------------- diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java index 938a48d..e6ab7e6 100644 --- a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/MyFilter.java @@ -18,6 +18,7 @@ */ package org.apache.tamaya.metamodel.ext; +import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; @@ -32,7 +33,7 @@ public class MyFilter implements PropertyFilter{ private String overrideValue; @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { return value; } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java ---------------------------------------------------------------------- diff --git a/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java b/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java index 0fb69f4..7c41aa0 100644 --- a/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java +++ b/uom/src/main/java/org/apache/tamaya/uom/UnitConverter.java @@ -40,9 +40,9 @@ public class UnitConverter implements PropertyConverter<Unit> { private static final Pattern IS_INTEGER_VALUE = Pattern.compile(PATTERN_REGEX); @Override - public Unit convert(String value) { + public Unit convert(String value, ConversionContext context) { String trimmed = requireNonNull(value).trim(); - addSupportedFormats(); + context.addSupportedFormats(UnitConverter.class, "All Units supported by JSR 363"); UnitFormat format = ServiceProvider.current().getUnitFormatService().getUnitFormat(); Unit result = null; @@ -58,9 +58,4 @@ public class UnitConverter implements PropertyConverter<Unit> { return result; } - private void addSupportedFormats() { - ConversionContext.doOptional(context -> { - context.addSupportedFormats(UnitConverter.class, "All Units supported by JSR 363"); - }); - } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java ---------------------------------------------------------------------- diff --git a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java index 0afe8c9..7852693 100644 --- a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java +++ b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java @@ -18,6 +18,8 @@ */ package org.apache.tamaya.uom; +import org.apache.tamaya.TypeLiteral; +import org.apache.tamaya.spi.ConversionContext; import org.junit.Test; import tec.units.ri.unit.Units; @@ -34,7 +36,8 @@ public class UnitConverterTest { @Test public void canConvertUnitInformation() { - Unit<?> unit = converter.convert("m"); + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Unit.class)).build(); + Unit<?> unit = converter.convert("m", context); assertThat("Converter failed to convert input createValue " + unit, notNullValue()); assertEquals(unit, Units.METRE); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1fbe9a15/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java ---------------------------------------------------------------------- diff --git a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java index 0c67354..f3811d5 100644 --- a/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java +++ b/usagetracker/src/main/java/org/apache/tamaya/usagetracker/internal/UsageTrackerFilter.java @@ -36,10 +36,9 @@ import java.util.logging.Filter; public class UsageTrackerFilter implements PropertyFilter{ @Override - public PropertyValue filterProperty(PropertyValue value) { + public PropertyValue filterProperty(PropertyValue value, FilterContext context) { ConfigUsageSpi tracker = ServiceContextManager.getServiceContext().getService(ConfigUsageSpi.class); - FilterContext context = FilterContext.get(); - if (context == null || context.isSinglePropertyScoped()) { + if (context.isSinglePropertyScoped()) { tracker.recordSingleKeyAccess(value, context.current()); } else { tracker.recordAllPropertiesAccess(context.current());
