You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2016/09/06 17:18:22 UTC
[26/50] [abbrv] incubator-tamaya-sandbox git commit: Simplified
implementation, defined final parameter naming, synched with documentation.
Simplified implementation, defined final parameter naming, synched with documentation.
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/715293d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/715293d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/715293d4
Branch: refs/heads/master
Commit: 715293d4a075edc3d3aeca04604dcf6866866196
Parents: e94ac73
Author: anatole <an...@apache.org>
Authored: Wed Feb 17 22:13:46 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Feb 17 22:13:46 2016 +0100
----------------------------------------------------------------------
.../internal/AdaptiveCombinationPolicy.java | 133 ++++++++++---------
.../internal/ArrayListConverter.java | 5 +-
.../internal/ConcurrentHashMapConverter.java | 32 +----
.../collections/internal/HashMapConverter.java | 49 ++-----
.../collections/internal/HashSetConverter.java | 29 ++--
.../collections/internal/ItemTokenizer.java | 5 +-
.../internal/LinkedListConverter.java | 30 ++---
.../collections/internal/TreeMapConverter.java | 18 ++-
.../collections/internal/TreeSetConverter.java | 30 ++---
.../collections/CollectionAdvancedTests.java | 21 +++
.../META-INF/javaconfiguration.properties | 6 +-
11 files changed, 161 insertions(+), 197 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index ac5af36..3234e37 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -33,13 +33,45 @@ import java.util.logging.Logger;
/**
* PropertyValueCombinationPolicy that allows to configure a PropertyValueCombinationPolicy for each key
- * individually, by adding a configured entry of the form {@code key{combinationPolicy}=fqPolicyClassName}.
+ * individually, by adding a configured entry of the form
+ * {@code _key.combination-policy=collect|override|fqPolicyClassName}.
*/
@Priority(100)
public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy {
-
+ /** Logger. */
private static final Logger LOG = Logger.getLogger(AdaptiveCombinationPolicy.class.getName());
+ /**
+ * Collecting combination policy using (optional) {@code item-separator} parameter for determining the sparator
+ * to combine multiple config entries found.
+ */
+ private static final PropertyValueCombinationPolicy COLLECTING_POLICY = new PropertyValueCombinationPolicy(){
+ @Override
+ public Map<String, String> collect(Map<String, String> currentValue, String key, PropertySource propertySource) {
+ // check for default collection combination policies for lists, sets, maps etc.
+ final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".item-separator", ",");
+ PropertyValue newValue = propertySource.get(key);
+ if(newValue!=null){
+ Map<String,String> newMapValue = new HashMap<>();
+ if(currentValue!=null){
+ newMapValue.putAll(currentValue);
+ }
+ String oldVal = newMapValue.get(key);
+ newMapValue.putAll(newValue.getConfigEntries());
+ if(oldVal!=null){
+ newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
+ }
+ return newMapValue;
+ }else{
+ if(currentValue!=null){
+ return currentValue;
+ }
+ return Collections.emptyMap();
+ }
+ }
+ };
+
+ /** Cache for loaded custom combination policies. */
private Map<Class, PropertyValueCombinationPolicy> configuredPolicies = new ConcurrentHashMap<>();
@Override
@@ -51,69 +83,44 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
}
return currentValue;
}
- String adaptiveCombinationPolicyClass = ConfigurationProvider.getConfiguration().get('_' + key+".combinationPolicy");
- if(adaptiveCombinationPolicyClass!=null){
- PropertyValueCombinationPolicy delegatePolicy = null;
- try{
- Class clazz = Class.forName(adaptiveCombinationPolicyClass);
- delegatePolicy = configuredPolicies.get(clazz);
- if(delegatePolicy==null){
- delegatePolicy = PropertyValueCombinationPolicy.class.cast(clazz.newInstance());
- configuredPolicies.put(clazz, delegatePolicy);
+ String adaptiveCombinationPolicyClass = ConfigurationProvider.getConfiguration().getOrDefault(
+ '_' + key+".combination-policy", "override");
+ PropertyValueCombinationPolicy combinationPolicy = null;
+ switch(adaptiveCombinationPolicyClass){
+ case "collect":
+ case "COLLECT":
+ if(LOG.isLoggable(Level.FINEST)){
+ LOG.finest("Using collecting combination policy for key: " + key + ".");
}
- return delegatePolicy.collect(currentValue, key, propertySource);
- }
- catch(Exception e){
- LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for key: " + key, e);
- }
- }
- // check for default collection combination policies for lists, sets, maps etc.
- final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".collection-separator", ",");
- String collectionType = ConfigurationProvider.getConfiguration().get('_' + key+".collection-type");
- if(collectionType!=null) {
- if (collectionType.startsWith("java.util.")) {
- collectionType = collectionType.substring("java.util.".length());
- }
- switch(collectionType){
- case "List":
- case "ArrayList":
- case "LinkedList":
- case "Collection":
- case "Set":
- case "HashSet":
- case "TreeSet":
- case "SortedSet":
- case "Map":
- case "HashMap":
- case "ConcurrentHashMap":
- case "TreeMap":
- case "SortedMap":
- PropertyValue newValue = propertySource.get(key);
- if(newValue!=null){
- Map<String,String> newMapValue = new HashMap<>();
- if(currentValue!=null){
- newMapValue.putAll(currentValue);
- }
- String oldVal = newMapValue.get(key);
- newMapValue.putAll(newValue.getConfigEntries());
- if(oldVal!=null){
- newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
- }
- return newMapValue;
- }else{
- if(currentValue!=null){
- return currentValue;
- }
- return Collections.emptyMap();
+ combinationPolicy = COLLECTING_POLICY;
+ break;
+ case "override":
+ case "OVERRIDE":
+ if(LOG.isLoggable(Level.FINEST)){
+ LOG.finest("Using default (overriding) combination policy for key: " + key + ".");
+ }
+ combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
+ break;
+ default:
+ try{
+ Class<PropertyValueCombinationPolicy> clazz = (Class<PropertyValueCombinationPolicy>)
+ Class.forName(adaptiveCombinationPolicyClass);
+ combinationPolicy = configuredPolicies.get(clazz);
+ if(combinationPolicy==null){
+ combinationPolicy = clazz.newInstance();
+ configuredPolicies.put(clazz, combinationPolicy);
}
- default:
- LOG.log(Level.SEVERE, "Unsupported collection-type for key: " + key + ": " + collectionType);
- }
- }
- PropertyValue newValue = propertySource.get(key);
- if(newValue!=null){
- return newValue.getConfigEntries();
+ if(LOG.isLoggable(Level.FINEST)){
+ LOG.finest("Using custom combination policy "+adaptiveCombinationPolicyClass+" for " +
+ "key: " + key + ".");
+ }
+ }
+ catch(Exception e){
+ LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for " +
+ "key: " + key + ", using default (overriding) policy.", e);
+ combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
+ }
}
- return currentValue;
+ return combinationPolicy.collect(currentValue, key, propertySource);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
index 3e95438..8281395 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -48,10 +48,7 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
@Override
public ArrayList convert(String value, ConversionContext context) {
- final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault(
- '_' + context.getKey()+".collection-separator", ",");
- List<String> rawList = ItemTokenizer.split(value, SEPARATOR);
-
+ List<String> rawList = ItemTokenizer.split(value, context);
ArrayList<Object> mlist = new ArrayList<>();
for(String raw:rawList){
Object convValue = ItemTokenizer.convertValue(raw, context);
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
index 07aecc8..131b41c 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
@@ -22,6 +22,7 @@ import org.apache.tamaya.TypeLiteral;
import org.apache.tamaya.spi.ConversionContext;
import org.apache.tamaya.spi.PropertyConverter;
+import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
@@ -47,33 +48,14 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
@Override
public ConcurrentHashMap convert(String value, ConversionContext context) {
List<String> rawList = ItemTokenizer.split(value, context);
- String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
- if(converterClass!=null){
- try {
- PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
- ConcurrentHashMap<String,Object> mlist = new ConcurrentHashMap<>();
- ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
- context.getConfigurationContext(), context.getKey(),
- TypeLiteral.of(context.getTargetType().getType())).build();
- for(String raw:rawList){
- String[] items = ItemTokenizer.splitMapEntry(raw, context);
- Object convValue = valueConverter.convert(items[1], ctx);
- if(convValue!=null){
- mlist.put(items[0], convValue);
- continue;
- }
- }
- return mlist;
-
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
- }
- }
- ConcurrentHashMap<String,String> result = new ConcurrentHashMap<>();
+ ConcurrentHashMap result = new ConcurrentHashMap(rawList.size());
for(String raw:rawList){
String[] items = ItemTokenizer.splitMapEntry(raw, context);
- if(items!=null){
- result.put(items[0], items[1]);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.put(items[0], convValue);
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
}
}
return result;
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 29d7ad7..6a3ac97 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -47,51 +47,18 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
@Override
public HashMap convert(String value, ConversionContext context) {
List<String> rawList = ItemTokenizer.split(value, context);
- String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
- if(converterClass!=null){
- try {
- PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
- HashMap<String,Object> mlist = new HashMap<>();
- ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
- context.getConfigurationContext(), context.getKey(),
- TypeLiteral.of(context.getTargetType().getType())).build();
- for(String raw:rawList){
- String[] items = splitItems(raw);
- Object convValue = valueConverter.convert(items[1], ctx);
- if(convValue!=null){
- mlist.put(items[0], convValue);
- continue;
- }
- }
- return mlist;
-
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
- }
- }
- HashMap<String,String> result = new HashMap<>();
+ HashMap result = new HashMap(rawList.size());
for(String raw:rawList){
- String[] items = splitItems(raw);
- if(items!=null){
- result.put(items[0], items[1]);
+ String[] items = ItemTokenizer.splitMapEntry(raw, context);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.put(items[0], convValue);
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
}
}
return result;
}
- static String[] splitItems(String raw) {
- 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-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
index 47c32f6..40b204f 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -50,27 +50,16 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
@Override
public HashSet convert(String value, ConversionContext context) {
List<String> rawList = ItemTokenizer.split(value, context);
- String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
- if(converterClass!=null){
- try {
- PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
- HashSet<Object> mlist = new HashSet<>();
- ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
- context.getConfigurationContext(), context.getKey(),
- TypeLiteral.of(context.getTargetType().getType())).build();
- for(String raw:rawList){
- Object convValue = valueConverter.convert(raw, ctx);
- if(convValue!=null){
- mlist.add(convValue);
- continue;
- }
- }
- return mlist;
-
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+ HashSet<Object> result = new HashSet<>();
+ for(String raw:rawList){
+ String[] items = ItemTokenizer.splitMapEntry(raw, context);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.add(convValue);
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
}
}
- return new HashSet(rawList);
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
index 37f7cf1..98831e1 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
@@ -50,7 +50,8 @@ final class ItemTokenizer {
*/
public static List<String> split(String value, ConversionContext context){
return split(value, ConfigurationProvider.getConfiguration().getOrDefault(
- '_' + context.getKey()+".collection-separator", ","));
+ '_' + context.getKey()+"." +
+ "item-separator", ","));
}
/**
@@ -91,7 +92,7 @@ final class ItemTokenizer {
*/
public static String[] splitMapEntry(String mapEntry, ConversionContext context){
return splitMapEntry(mapEntry, ConfigurationProvider.getConfiguration().getOrDefault(
- '_' + context.getKey()+".collection-map-separator", ","));
+ '_' + context.getKey()+".map-entry-separator", "::"));
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index 986a303..4389a54 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -47,28 +47,18 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> {
@Override
public LinkedList convert(String value, ConversionContext context) {
List<String> rawList = ItemTokenizer.split(value, context);
- String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
- if(converterClass!=null){
- try {
- PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
- LinkedList<Object> mlist = new LinkedList<>();
- ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
- context.getConfigurationContext(), context.getKey(),
- TypeLiteral.of(context.getTargetType().getType())).build();
- for(String raw:rawList){
- Object convValue = valueConverter.convert(raw, ctx);
- if(convValue!=null){
- mlist.add(convValue);
- continue;
- }
- }
- return mlist;
-
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+ LinkedList<Object> result = new LinkedList<>();
+ for(String raw:rawList){
+ String[] items = ItemTokenizer.splitMapEntry(raw, context);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.add(convValue);
+ continue;
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
}
}
- return new LinkedList(rawList);
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
index b350944..fef25fe 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
@@ -21,12 +21,17 @@ package org.apache.tamaya.collections.internal;
import org.apache.tamaya.spi.ConversionContext;
import org.apache.tamaya.spi.PropertyConverter;
+import java.util.List;
import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* PropertyConverter for gnerating HashMap representation of a values.
*/
public class TreeMapConverter implements PropertyConverter<TreeMap> {
+ /** Logger used. */
+ private static final Logger LOG = Logger.getLogger(HashMapConverter.class.getName());
/** The shared instance, used by other collection converters in this package.*/
private static TreeMapConverter INSTANCE = new TreeMapConverter();
@@ -41,6 +46,17 @@ public class TreeMapConverter implements PropertyConverter<TreeMap> {
@Override
public TreeMap convert(String value, ConversionContext context) {
- return new TreeMap<>(HashMapConverter.getInstance().convert(value, context));
+ List<String> rawList = ItemTokenizer.split(value, context);
+ TreeMap result = new TreeMap();
+ for(String raw:rawList){
+ String[] items = ItemTokenizer.splitMapEntry(raw, context);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.put(items[0], convValue);
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
+ }
+ }
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index f9cba02..9206f07 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -48,27 +48,17 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> {
@Override
public TreeSet convert(String value, ConversionContext context) {
List<String> rawList = ItemTokenizer.split(value, context);
- String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
- if(converterClass!=null){
- try {
- PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
- TreeSet<Object> mlist = new TreeSet<>();
- ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
- context.getConfigurationContext(), context.getKey(),
- TypeLiteral.of(context.getTargetType().getType())).build();
- for(String raw:rawList){
- Object convValue = valueConverter.convert(raw, ctx);
- if(convValue!=null){
- mlist.add(convValue);
- continue;
- }
- }
- return mlist;
-
- } catch (Exception e) {
- LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+ TreeSet<Object> result = new TreeSet<>();
+ for(String raw:rawList){
+ String[] items = ItemTokenizer.splitMapEntry(raw, context);
+ Object convValue = ItemTokenizer.convertValue(items[1], context);
+ if(convValue!=null){
+ result.add(convValue);
+ continue;
+ }else{
+ LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
}
}
- return new TreeSet<>(rawList);
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
index 435ed5d..ddabb23 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
@@ -7,6 +7,7 @@ import org.junit.Test;
import java.util.Currency;
import java.util.List;
+import java.util.Map;
import static junit.framework.TestCase.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -75,4 +76,24 @@ public class CollectionAdvancedTests {
assertEquals("(B)", items.get(1));
assertEquals("(C)", items.get(2));
}
+
+ /**
+ * Redefined map format parsing, Config is as follows:
+ * <pre>
+ * redefined-map=0==none | 1==single | 2==any
+ * _redefined-map.map-entry-separator===
+ * _redefined-map.item-separator=|
+ * </pre>
+ */
+ @Test
+ public void testCustomMapParser(){
+ Configuration config = ConfigurationProvider.getConfiguration();
+ Map<String,String> items = config.get("redefined-map", Map.class);
+ assertNotNull(items);
+ assertFalse(items.isEmpty());
+ assertEquals(3, items.size());
+ assertEquals("none", items.get("0"));
+ assertEquals("single", items.get("1"));
+ assertEquals("any", items.get("2"));
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 2bb8414..e9a234c 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -59,7 +59,7 @@ _typed.treemap.collection-type=TreeMap
# Config for advanced tests
sep-list=a,b,c|d,e,f|g,h,i
_sep-list.collection-type=List
-_sep-list.collection-separator=|
+_sep-list.item-separator=|
currency-list=CHF,USD,USS
_currency-list.collection-type=List
@@ -67,3 +67,7 @@ parser-list=a,b,c
_parser-list.collection-type=List
_parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
+redefined-map=0==none | 1==single | 2==any
+_redefined-map.map-entry-separator===
+_redefined-map.item-separator=|
+