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=|
+