TAMAYA-274  Reduced API footprint by using Java 8 features. Added some lambdas.
TAMAYA-355  Enable mapping of lists and arrays into internal datastructures.
TAMAYA-353  Adding support for different classloaders.


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/70980cc9
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/70980cc9
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/70980cc9

Branch: refs/heads/master
Commit: 70980cc9883d98c7a02c34c56e8b74ecd3ca1ab9
Parents: af31937
Author: Anatole Tresch <[email protected]>
Authored: Sat Nov 3 01:46:18 2018 +0100
Committer: Anatole Tresch <[email protected]>
Committed: Sat Nov 3 01:46:18 2018 +0100

----------------------------------------------------------------------
 .../commons/CommonsConfigPropertySource.java    |  10 +-
 .../tamaya/commons/IniConfigurationFormat.java  |   8 +-
 .../tamaya/commons/XmlConfigurationFormat.java  |   5 +-
 .../collections/AdaptiveCombinationPolicy.java  |   2 +-
 .../tamaya/collections/ArrayListConverter.java  |  18 +-
 .../tamaya/collections/CollectionConverter.java | 216 ++++++++++++++++++-
 .../collections/ConcurrentHashMapConverter.java |  10 +-
 .../tamaya/collections/HashMapConverter.java    |  18 +-
 .../tamaya/collections/HashSetConverter.java    |  10 +-
 .../tamaya/collections/ItemTokenizer.java       |  69 +++---
 .../tamaya/collections/LinkedListConverter.java |  10 +-
 .../tamaya/collections/ListConverter.java       |  15 +-
 .../apache/tamaya/collections/MapConverter.java |  15 +-
 .../apache/tamaya/collections/SetConverter.java |  16 +-
 .../tamaya/collections/SortedSetConverter.java  |   4 +-
 .../tamaya/collections/TreeMapConverter.java    |  10 +-
 .../tamaya/collections/TreeSetConverter.java    |  22 +-
 .../collections/CollectionAdvancedTests.java    |  16 +-
 .../CollectionsTypedReadOnlyTests.java          |  16 +-
 .../META-INF/javaconfiguration.properties       |  46 ++--
 .../sysprops/ConfiguredSystemProperties.java    |  20 +-
 .../tamaya/consul/ConsulPropertySource.java     |   4 +-
 .../org/apache/tamaya/etcd/EtcdAccessor.java    |  52 ++---
 .../apache/tamaya/etcd/EtcdPropertySource.java  |  10 +-
 .../apache/tamaya/etcd/EtcdAccessorTest.java    |   2 +-
 .../tamaya/jodatime/DateTimeConverterTest.java  |   2 +-
 .../jodatime/DateTimeZoneConverterTest.java     |   2 +-
 .../tamaya/jodatime/DurationConverterTest.java  |   2 +-
 .../org/apache/tamaya/jodatime/FullStackIT.java |   3 -
 .../tamaya/jodatime/PeriodConverterTest.java    |   2 +-
 .../management/ConfigManagementSupport.java     |   4 +-
 .../apache/tamaya/management/ManagedConfig.java |   3 +-
 .../tamaya/management/ManagedConfigMBean.java   |   2 +-
 .../management/internal/ManagedConfigTest.java  |   4 +-
 .../apache/tamaya/metamodel/CachedFilter.java   |   4 +-
 .../org/apache/tamaya/metamodel/Enabled.java    |   4 +-
 .../tamaya/metamodel/EnabledPropertySource.java |   4 +-
 .../org/apache/tamaya/metamodel/HideFilter.java |   2 +-
 .../tamaya/metamodel/ImmutableFilter.java       |   2 +-
 .../org/apache/tamaya/metamodel/MapFilter.java  |   2 +-
 .../org/apache/tamaya/metamodel/MaskFilter.java |   2 +-
 .../apache/tamaya/metamodel/MetaContext.java    |  30 +--
 .../apache/tamaya/metamodel/SecuredFilter.java  |   2 +-
 .../ext/EnabledPropertySourceProvider.java      |   4 +-
 .../metamodel/ext/FilteredPropertySource.java   |   4 +-
 .../internal/ComponentConfigurator.java         |  16 +-
 .../metamodel/internal/ComponentFactory.java    |   2 +-
 .../internal/PropertySourceReader.java          |   8 +-
 .../ResourcePropertySourceProviderFactory.java  |   6 +-
 .../factories/URLPropertySourceFactory.java     |   6 +-
 .../internal/resolver/PropertiesResolver.java   |   2 +-
 .../metamodel/spi/ItemFactoryManager.java       |   4 +-
 .../internal/resolver/JavaResolverTest.java     |   2 +-
 .../ConfigDirPropertySourceProvider.java        |   2 +-
 .../MetainfConfigPropertySourceProvider.java    |   2 +-
 .../SimplePropertySourceBuilder.java            |   4 +-
 .../tamaya/remote/BaseRemotePropertySource.java |   4 +-
 .../apache/tamaya/uom/UnitConverterTest.java    |   2 +-
 .../apache/tamaya/usagetracker/ConfigUsage.java |   2 +-
 .../apache/tamaya/usagetracker/UsageStat.java   |  14 +-
 .../internal/DefaultConfigUsage.java            |   2 +-
 .../internal/UsageTrackerFilter.java            |   2 +-
 .../tamaya/usagetracker/spi/ConfigUsageSpi.java |   8 +-
 .../test/resources/examples/configmodel.json    |   2 +-
 .../src/test/resources/examples/configmodel.xml |   2 +-
 .../test/resources/examples/configmodel.yaml    |   2 +-
 validation/pom.xml                              |   2 +-
 .../apache/tamaya/validation/ConfigModel.java   |  10 +-
 .../tamaya/validation/ConfigModelManager.java   |   6 +-
 .../apache/tamaya/validation/ModelTarget.java   |   6 +-
 .../apache/tamaya/validation/Validation.java    |  16 +-
 .../tamaya/validation/ValidationResult.java     |   6 +-
 .../internal/ConfigDocumentationBean.java       |   4 +-
 .../ConfiguredInlineModelProviderSpi.java       |   2 +-
 .../ConfiguredPropertiesModelProviderSpi.java   |   6 +-
 .../ConfiguredResourcesModelProviderSpi.java    |  21 +-
 .../ConfiguredTypeEventsModelPopulator.java     |  10 +-
 .../ConfiguredTypeEventsModelProvider.java      |   2 +-
 .../validation/spi/AbstractConfigModel.java     |   2 +-
 .../spi/ConfigDocumentationMBean.java           |   2 +-
 .../validation/spi/ConfigModelReader.java       |  12 +-
 .../tamaya/validation/spi/GroupModel.java       |   2 +-
 .../tamaya/validation/spi/ModelProviderSpi.java |   4 +-
 .../tamaya/validation/spi/ParameterModel.java   |  10 +-
 .../tamaya/validation/spi/SectionModel.java     |   2 +-
 .../validation/ConfigModelProviderTest.java     |   2 +-
 .../tamaya/validation/ValidationTests.java      |   2 +-
 .../internal/ConfigDocumentationBeanTest.java   |   4 +-
 .../java/test/model/TestConfigAccessor.java     |   2 +-
 .../resources/META-INF/configmodel.properties   |   4 +-
 .../test/resources/examples/configmodel.json    |   6 +-
 .../resources/examples/configmodel.properties   |   4 +-
 .../src/test/resources/examples/configmodel.xml |   8 +-
 .../test/resources/examples/configmodel.yaml    |   6 +-
 .../vertx/TamayaConfigurationProducer.java      |   8 +-
 95 files changed, 588 insertions(+), 385 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
----------------------------------------------------------------------
diff --git 
a/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
 
b/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
index 206878a..7986536 100644
--- 
a/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
+++ 
b/apache-commons/src/main/java/org/apache/tamaya/commons/CommonsConfigPropertySource.java
@@ -61,8 +61,7 @@ public class CommonsConfigPropertySource implements 
PropertySource {
 
     @Override
     public PropertyValue get(String key) {
-        return PropertyValue.of(key, commonsConfig.getString(key),
-                getName());
+        return PropertyValue.createValue(key, 
commonsConfig.getString(key)).setMeta("source", getName());
     }
 
     @Override
@@ -71,13 +70,10 @@ public class CommonsConfigPropertySource implements 
PropertySource {
         Iterator<String> keyIter = commonsConfig.getKeys();
         while (keyIter.hasNext()) {
             String key = keyIter.next();
-            config.put(key, PropertyValue.of(key, 
commonsConfig.getString(key), getName()));
+            config.put(key, PropertyValue.createValue(key, 
commonsConfig.getString(key))
+            .setMeta("source", getName()));
         }
         return config;
     }
 
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/apache-commons/src/main/java/org/apache/tamaya/commons/IniConfigurationFormat.java
----------------------------------------------------------------------
diff --git 
a/apache-commons/src/main/java/org/apache/tamaya/commons/IniConfigurationFormat.java
 
b/apache-commons/src/main/java/org/apache/tamaya/commons/IniConfigurationFormat.java
index bb12b8b..7c86d65 100644
--- 
a/apache-commons/src/main/java/org/apache/tamaya/commons/IniConfigurationFormat.java
+++ 
b/apache-commons/src/main/java/org/apache/tamaya/commons/IniConfigurationFormat.java
@@ -23,6 +23,7 @@ import org.apache.commons.configuration.SubnodeConfiguration;
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.format.ConfigurationData;
 import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ObjectValue;
 import org.apache.tamaya.spi.PropertyValue;
 
 import java.io.File;
@@ -51,7 +52,7 @@ public class IniConfigurationFormat implements 
ConfigurationFormat {
 
     @Override
     public ConfigurationData readConfiguration(String name, InputStream 
inputStream) {
-        PropertyValue data = PropertyValue.create();
+        PropertyValue data = PropertyValue.createObject();
         data.setMeta("name", name);
         try {
             HierarchicalINIConfiguration commonIniConfiguration;
@@ -63,12 +64,13 @@ public class IniConfigurationFormat implements 
ConfigurationFormat {
             }
             for (String section : commonIniConfiguration.getSections()) {
                 SubnodeConfiguration sectionConfig = 
commonIniConfiguration.getSection(section);
-                PropertyValue sectionNode = data.getOrCreateChild(section);
+                PropertyValue sectionNode = ((ObjectValue) 
data).getOrSetField(section,
+                        () -> PropertyValue.createObject(section));
                 Map<String, String> properties = new HashMap<>();
                 Iterator<String> keyIter = sectionConfig.getKeys();
                 while (keyIter.hasNext()) {
                     String key = keyIter.next();
-                    sectionNode.addProperty(key, sectionConfig.getString(key));
+                    ((ObjectValue) sectionNode).setField(key, 
sectionConfig.getString(key));
                 }
             }
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/apache-commons/src/main/java/org/apache/tamaya/commons/XmlConfigurationFormat.java
----------------------------------------------------------------------
diff --git 
a/apache-commons/src/main/java/org/apache/tamaya/commons/XmlConfigurationFormat.java
 
b/apache-commons/src/main/java/org/apache/tamaya/commons/XmlConfigurationFormat.java
index ed76830..54aa401 100644
--- 
a/apache-commons/src/main/java/org/apache/tamaya/commons/XmlConfigurationFormat.java
+++ 
b/apache-commons/src/main/java/org/apache/tamaya/commons/XmlConfigurationFormat.java
@@ -22,6 +22,7 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.format.ConfigurationData;
 import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ObjectValue;
 import org.apache.tamaya.spi.PropertyValue;
 
 import java.io.File;
@@ -48,7 +49,7 @@ public class XmlConfigurationFormat implements 
ConfigurationFormat {
 
     @Override
     public ConfigurationData readConfiguration(String name, InputStream 
inputStream) {
-        PropertyValue data = PropertyValue.create();
+        PropertyValue data = PropertyValue.createObject();
         data.setMeta("name", name);
         data.setMeta("format.class", getClass().getName());
         try {
@@ -62,7 +63,7 @@ public class XmlConfigurationFormat implements 
ConfigurationFormat {
             Iterator<String> keyIter = commonXmlConfiguration.getKeys();
             while (keyIter.hasNext()) {
                 String key = keyIter.next();
-                data.addProperty(key, commonXmlConfiguration.getString(key));
+                ((ObjectValue) data).setField(key, 
commonXmlConfiguration.getString(key));
             }
         } catch (Exception e) {
             throw new ConfigException("Failed to parse xml-file format from " 
+ name, e);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/collections/src/main/java/org/apache/tamaya/collections/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git 
a/collections/src/main/java/org/apache/tamaya/collections/AdaptiveCombinationPolicy.java
 
b/collections/src/main/java/org/apache/tamaya/collections/AdaptiveCombinationPolicy.java
index 32d0949..c6daec8 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/AdaptiveCombinationPolicy.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/AdaptiveCombinationPolicy.java
@@ -65,7 +65,7 @@ public class AdaptiveCombinationPolicy implements 
PropertyValueCombinationPolicy
                 if(currentValue==null){
                     return newValue;
                 }
-                return 
PropertyValue.create().addChild(newValue).addChild(currentValue);
+                return newValue.toListValue().add(currentValue);
             }else{
                 if(currentValue!=null){
                     return currentValue;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 90e8cdb..616b22a 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/ArrayListConverter.java
@@ -22,9 +22,6 @@ import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
@@ -47,17 +44,12 @@ public class ArrayListConverter implements 
PropertyConverter<ArrayList> {
 
     @Override
     public ArrayList convert(String value) {
-        List<String> rawList = ItemTokenizer.split(value);
-        ArrayList<Object> mlist = new ArrayList<>();
-        for(String raw:rawList){
-            Object convValue = ItemTokenizer.convertValue(raw);
-            if (convValue != null) {
-                mlist.add(convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type 
for '"+raw+"'.");
-            }
+        ConversionContext context = ConversionContext.current();
+        if(context!=null){
+            // Use configurable mechanism
+            return CollectionConverter.convertList(context, ArrayList::new);
         }
-        return mlist;
+        return CollectionConverter.convertSimpleList(value);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 55c3e56..69aa99e 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/CollectionConverter.java
@@ -18,22 +18,230 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.PropertyConverter;
 import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyValue;
 
-import java.util.Collection;
+import java.lang.reflect.Type;
+import java.util.*;
+import java.util.function.Supplier;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating a LIST representation of values.
  */
-public class CollectionConverter implements PropertyConverter<Collection> {
+public final class CollectionConverter implements 
PropertyConverter<Collection> {
+
+    private static final Logger LOG = 
Logger.getLogger(CollectionConverter.class.getName());
+
+    private enum MappingType{
+        /** The list values are identiified by parsing the node value(s) into 
items.
+         * Hereby only the items of the most significant config entry are 
considered. */
+        value,
+        /** The list values are identiified by parsing the node value(s) into 
items, hereby
+         * the items of all values are combined. */
+        value_all,
+        /** The list values are identiified by using the node's child value(s) 
as items.
+         * Hereby only the items of the most significant config entry are 
considered.*/
+        node,
+        /** The list values are identiified by using the node's child value(s) 
as items. Hereby
+         * the items of all values are combined. */
+        node_all
+    }
+
+    private MappingType mappingType = MappingType.value_all;
+
+    public static <T extends Collection> T convertList(ConversionContext 
context,
+                                                       Supplier<T> 
collectionSupplier) {
+        MappingType mappingType = MappingType.valueOf((String)context.getMeta()
+                .getOrDefault("mapping", "value_all"));
+        TypeLiteral<?> targetType = context.getTargetType();
+        Type[] types = TypeLiteral.getTypeParameters(targetType.getType());
+        TypeLiteral<?> collectionTargetType;
+        if(types.length>0) {
+            collectionTargetType = TypeLiteral.of(types[0]);
+        }else {
+            collectionTargetType = TypeLiteral.of(String.class);
+        }
+        T result = collectionSupplier.get();
+        switch (mappingType) {
+            case node_all:
+                return convertListByNodes(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, true);
+            case node:
+                return convertListByNodes(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, false);
+            case value:
+                return convertListByValues(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, false);
+            default:
+            case value_all:
+                return convertListByValues(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, true);
+        }
+    }
+
+    private static <T extends Collection> T 
convertListByValues(List<PropertyValue> values,
+                                                                Configuration 
config,
+                                                                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());
+            for (String token : tokenList) {
+                Object o = ItemTokenizer.convertValue(token, targetType);
+                if (o != null) {
+                    result.add(o);
+                }else{
+                    LOG.warning(String.format("Failed to convert '{0}' to 
type: {1}, key: {2}",
+                            token, targetType, val.getQualifiedKey()));
+                }
+            }
+        }
+        return result;
+    }
+
+    private static <T extends Collection> T 
convertListByNodes(List<PropertyValue> values,
+                                                               Configuration 
config,
+                                                               TypeLiteral<?> 
targetType,
+                                                               T result,
+                                                               boolean 
combine) {
+        if(!combine){
+            values = Collections.singletonList(values.get(0));
+        }
+        for (PropertyValue val : values) {
+            for(PropertyValue itemNode:val) {
+                if(targetType.equals(TypeLiteral.of(String.class))){
+                    result.add(itemNode.getValue());
+                }else {
+                    Object o = ItemTokenizer.convertValue(itemNode.getValue(), 
targetType);
+                    if (o != null) {
+                        result.add(o);
+                    }else{
+                        LOG.warning(String.format("Failed to convert '{0}' to 
type: {1}, key: {2}",
+                                itemNode.getValue(), targetType, 
itemNode.getQualifiedKey()));
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    public static <T extends Map> T convertMap(ConversionContext context,
+                                               Supplier<T> collectionSupplier) 
{
+        TypeLiteral<?> targetType = context.getTargetType();
+        Type[] types = TypeLiteral.getTypeParameters(targetType.getType());
+        TypeLiteral<?> collectionTargetType;
+        if (types.length > 1) {
+            collectionTargetType = TypeLiteral.of(types[1]);
+        } else {
+            collectionTargetType = TypeLiteral.of(String.class);
+        }
+        MappingType mappingType = MappingType.valueOf((String) 
context.getMeta()
+                .getOrDefault("mapping", "value_all"));
+        T result = collectionSupplier.get();
+        switch (mappingType) {
+            case node_all:
+                return convertMapByNodes(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, true);
+            case node:
+                return convertMapByNodes(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, false);
+            case value:
+                return convertMapByValues(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, false);
+            default:
+            case value_all:
+                return convertMapByValues(context.getValues(), 
context.getConfiguration(),
+                        collectionTargetType, result, true);
+        }
+    }
+
+
+    private static <T extends Map> T convertMapByValues(List<PropertyValue> 
values,
+                                                                Configuration 
config,
+                                                                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());
+            for(String token:tokenList) {
+                String[] keyValue = ItemTokenizer.splitMapEntry(token);
+                Object o = ItemTokenizer.convertValue(keyValue[1], targetType);
+                if (o != null) {
+                    result.put(keyValue[0], o);
+                }else{
+                    LOG.warning(String.format("Failed to convert '{0}' to 
type: {1}, key: {2}",
+                            keyValue[1], targetType, val.getQualifiedKey()));
+                }
+            }
+        }
+        return result;
+    }
+
+    private static <T extends Map> T convertMapByNodes(List<PropertyValue> 
values,
+                                                               Configuration 
config,
+                                                               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);
+                if (o != null) {
+                    result.put(itemNode.getKey(), o);
+                }else{
+                    LOG.warning(String.format("Failed to convert '{0}' to 
type: {1}, key: {2}",
+                            itemNode.getValue(), targetType, 
itemNode.getQualifiedKey()));
+                }
+            }
+        }
+        return result;
+    }
+
+
+    public static ArrayList<String> convertSimpleList(String value) {
+        List<String> rawList = ItemTokenizer.split(value);
+        ArrayList<String> mlist = new ArrayList<>();
+        for(String raw:rawList){
+            String convValue = raw;
+            if (convValue != null) {
+                mlist.add(convValue);
+            }
+        }
+        return mlist;
+    }
+
+    public static Map<String,String> convertSimpleMap(String value) {
+        List<String> rawList = ItemTokenizer.split(value);
+        HashMap<String,String> result = new HashMap(rawList.size());
+        for(String raw:rawList){
+            String[] items = ItemTokenizer.splitMapEntry(raw);
+            if(items.length==1){
+                result.put(items[0], items[0]);
+            }else{
+                result.put(items[0], items[1]);
+            }
+        }
+        return result;
+    }
 
     @Override
     public Collection convert(String value) {
         ConversionContext context = ConversionContext.current();
-        String collectionType = null;
+        String collectionType = "List";
         if(context!=null) {
-            collectionType = context.getConfiguration().getOrDefault('_' + 
context.getKey() + ".collection-type", "List");
+            collectionType = 
(String)context.getMeta().getOrDefault("collection-type", "List");
             if (collectionType.startsWith("java.util.")) {
                 collectionType = 
collectionType.substring("java.util.".length());
             }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 405766b..3c56749 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/ConcurrentHashMapConverter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.List;
@@ -44,15 +46,19 @@ 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]);
+            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 value type 
for '"+raw+"'.");
+                LOG.log(Level.SEVERE, "Failed to convert collection 
createValue type for '"+raw+"'.");
             }
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 5196eb0..3e27b5d 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/HashMapConverter.java
@@ -18,11 +18,10 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.HashMap;
-import java.util.List;
-import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
@@ -44,18 +43,11 @@ public class HashMapConverter implements 
PropertyConverter<HashMap> {
 
     @Override
     public HashMap convert(String value) {
-        List<String> rawList = ItemTokenizer.split(value);
-        HashMap result = new HashMap(rawList.size());
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1]);
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type 
for '"+raw+"'.");
-            }
+        ConversionContext context = ConversionContext.current();
+        if(context!=null){
+            return CollectionConverter.convertMap(context, HashMap::new);
         }
-        return result;
+        return (HashMap)CollectionConverter.convertSimpleMap(value);
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 c76fe39..b7ca65e 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/HashSetConverter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.HashSet;
@@ -45,15 +47,19 @@ 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]);
+            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 value type 
for '"+raw+"'.");
+                LOG.log(Level.SEVERE, "Failed to convert collection 
createValue type for '"+raw+"'.");
             }
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 53864a8..4267c24 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ItemTokenizer.java
@@ -28,7 +28,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
- * Helper class that implements the tokenizing of the entries of a 
configuration value.
+ * Helper class that implements the tokenizing of the entries of a 
configuration createValue.
  */
 final class ItemTokenizer {
 
@@ -40,23 +40,23 @@ final class ItemTokenizer {
     private ItemTokenizer(){}
 
     /**
-     * Splits the given value using the given separator. Matcjhing is done by 
traversing the String value using
+     * Splits the given createValue using the given separator. Matcjhing is 
done by traversing the String createValue using
      * {@code indexOf} calls, one by one. The last unresolvable item (without 
any next separator token)
-     * is added at the end of the list.
-     * @param value the value, not null.
-     * @return the tokenized value as list, in order of occurrence.
+     * is added at the end of the createList.
+     * @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){
-            return split(value, ctx.getConfiguration().getOrDefault(
-                    '_' + ctx.getKey() + ".item-separator", ","));
+            String itemSeparator = 
(String)ctx.getMeta().getOrDefault("item-separator", ",");
+            return split(value, itemSeparator);
         }
         return split(value, ",");
     }
 
     /**
-     * Splits the given value using the given separator. Matcjhing is done by 
traversing the String value using
+     * Splits the given createValue using the given separator. Matching is 
done by traversing the String value using
      * {@code indexOf} calls, one by one. The last unresolvable item (without 
any next separator token)
      * is added at the end of the list.
      * @param value the value, not null.
@@ -71,9 +71,6 @@ final class ItemTokenizer {
             if (value.charAt(end - 1) != '\\') {
                 result.add(value.substring(start, end));
                 start = end + separator.length();
-                end = value.indexOf(separator,start);
-            }else{
-                end = value.indexOf(separator,end + separator.length());
             }
             end = value.indexOf(separator,start);
         }
@@ -84,28 +81,28 @@ final class ItemTokenizer {
     }
 
     /**
-     * Splits the given String value as a map entry, splitting it into key and 
value part with the given separator.
-     * If the value cannot be split then {@code key = value = mapEntry} is 
used for further processing. key or value
+     * Splits the given String createValue as a map entry, splitting it into 
key and createValue part with the given separator.
+     * If the createValue cannot be split then {@code key = createValue = 
mapEntry} is used for further processing. key or createValue
      * parts are normally trimmed, unless they are enclosed with brackets 
{@code []}.
      * @param mapEntry the entry, not null.
-     * @return an array of length 2, with the trimmed and parsed key/value 
pair.
+     * @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){
-            return splitMapEntry(mapEntry, ctx.getConfiguration().getOrDefault(
-                    '_' + ctx.getKey() + ".map-entry-separator", "="));
+            String entrySeparator = 
(String)ctx.getMeta().getOrDefault("map-entry-separator", "=");
+            return splitMapEntry(mapEntry, entrySeparator);
         }
         return splitMapEntry(mapEntry, "=");
     }
 
     /**
-     * Splits the given String value as a map entry, splitting it into key and 
value part with the given separator.
-     * If the value cannot be split then {@code key = value = mapEntry} is 
used for further processing. key or value
+     * Splits the given String createValue as a map entry, splitting it into 
key and createValue part with the given separator.
+     * If the createValue cannot be split then {@code key = createValue = 
mapEntry} is used for further processing. key or createValue
      * parts are normally trimmed, unless they are enmcosed with brackets 
{@code []}.
      * @param mapEntry the entry, not null.
      * @param separator the separator, not null.
-     * @return an array of length 2, with the trimmed and parsed key/value 
pair.
+     * @return an array of length 2, with the trimmed and parsed 
key/createValue pair.
      */
     public static String[] splitMapEntry(final String mapEntry, final String 
separator) {
         int index = mapEntry.indexOf(separator);
@@ -131,35 +128,33 @@ final class ItemTokenizer {
     }
 
     /**
-     * Parses the given value into the required collection target type, 
defined by the context.
-     * @param value the raw String value.
-     * @return the parsed value, or null.
+     * Parses the given createValue into the required collection target type, 
defined by the context.
+     * @param value the raw String createValue.
+     * @return the parsed createValue, or null.
      */
-    public static Object convertValue(String value) {
+    public static <T> T convertValue(String value, TypeLiteral<T> targetType) {
         ConversionContext context = ConversionContext.current();
         if (context != null) {
-            String converterClass = context.getConfiguration().get('_' + 
context.getKey() + ".item-converters");
-            List<PropertyConverter<Object>> valueConverters = new 
ArrayList<>(1);
+            String converterClass = context.getMeta().get("item-converter");
+            List<PropertyConverter<T>> valueConverters = new ArrayList<>(1);
             if (converterClass != null) {
                 try {
-                    valueConverters.add((PropertyConverter<Object>) 
Class.forName(converterClass).newInstance());
+                    valueConverters.add((PropertyConverter<T>) 
Class.forName(converterClass).newInstance());
                 } catch (Exception e) {
                     LOG.log(Level.SEVERE, "Error convertion config to 
ArrayList type.", e);
                 }
             }
-            if 
(TypeLiteral.getTypeParameters(context.getTargetType().getType()).length > 0) {
-                
valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(
-                        
TypeLiteral.of(TypeLiteral.getTypeParameters(context.getTargetType().getType())[0])));
-            }
-
+            
valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(targetType));
             try{
-                ConversionContext.set(new 
ConversionContext.Builder(context.getConfiguration(), context.getKey(),
-                        
TypeLiteral.of(context.getTargetType().getType())).build());
-                Object result = null;
                 if (valueConverters.isEmpty()) {
-                    return value;
+                    if(targetType.getRawType().equals(String.class)) {
+                        return (T)value;
+                    }
                 } else {
-                    for (PropertyConverter<Object> conv : valueConverters) {
+                    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) {
@@ -170,11 +165,11 @@ final class ItemTokenizer {
                         }
                     }
                 }
-                LOG.log(Level.SEVERE, "Failed to convert collection value type 
for '" + value + "'.");
             }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/70980cc9/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 459ab77..6c3fa3d 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/LinkedListConverter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.LinkedList;
@@ -44,16 +46,20 @@ 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]);
+            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 value type 
for '"+raw+"'.");
+                LOG.log(Level.SEVERE, "Failed to convert collection 
createValue type for '"+raw+"'.");
             }
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 45ab932..1a97132 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/ListConverter.java
@@ -23,6 +23,7 @@ import org.apache.tamaya.spi.ConversionContext;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Supplier;
 
 /**
  *  PropertyConverter for gnerating a LIST representation of values.
@@ -32,12 +33,14 @@ public class ListConverter implements 
PropertyConverter<List> {
     @Override
     public List convert(String value) {
         ConversionContext context = ConversionContext.current();
-        String collectionType = null;
+        String collectionType = "ArrayList";
+        boolean readOnly = false;
         if(context!=null) {
-            collectionType = context.getConfiguration().getOrDefault('_' + 
context.getKey() + ".collection-type", "List");
+            collectionType = 
(String)context.getMeta().getOrDefault("collection-type", "ArrayList");
             if (collectionType.startsWith("java.util.")) {
                 collectionType = 
collectionType.substring("java.util.".length());
             }
+            readOnly = 
Boolean.parseBoolean((String)context.getMeta().getOrDefault("read-only", 
"false"));
         }
         List result = null;
         switch(collectionType){
@@ -50,12 +53,8 @@ public class ListConverter implements 
PropertyConverter<List> {
                 result = ArrayListConverter.getInstance().convert(value);
                 break;
         }
-        ConversionContext ctx = ConversionContext.current();
-        if(ctx != null){
-            if(ctx.getConfiguration().getOrDefault(
-                    '_' + ctx.getKey() + ".read-only", Boolean.class, true)){
-                return Collections.unmodifiableList(result);
-            }
+        if(readOnly){
+            return Collections.unmodifiableList(result);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 70cc22e..d7e149e 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/MapConverter.java
@@ -32,16 +32,19 @@ public class MapConverter implements PropertyConverter<Map> 
{
     @Override
     public Map convert(String value) {
         ConversionContext context = ConversionContext.current();
-        String collectionType = null;
+        String collectionType = "HashMap";
+        boolean readOnly = false;
         if(context!=null) {
-            collectionType = context.getConfiguration().getOrDefault('_' + 
context.getKey() + ".collection-type", "Map");
+            collectionType = 
(String)context.getMeta().getOrDefault("collection-type", "HashMap");
             if (collectionType.startsWith("java.util.")) {
                 collectionType = 
collectionType.substring("java.util.".length());
             }
+            readOnly = 
Boolean.parseBoolean((String)context.getMeta().getOrDefault("read-only", 
"false"));
         }
         Map result = null;
         switch(collectionType){
             case "TreeMap":
+            case "SortedMap":
                 result = TreeMapConverter.getInstance().convert(value);
                 break;
             case "ConcurrentHashMap":
@@ -53,12 +56,8 @@ public class MapConverter implements PropertyConverter<Map> {
                 result = HashMapConverter.getInstance().convert(value);
                 break;
         }
-        ConversionContext ctx = ConversionContext.current();
-        if(ctx != null){
-            if(ctx.getConfiguration().getOrDefault(
-                    '_' + ctx.getKey() + ".read-only", Boolean.class, true)){
-                return Collections.unmodifiableMap(result);
-            }
+        if(readOnly){
+            return Collections.unmodifiableMap(result);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 aa7e6ba..c9a70b5 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/SetConverter.java
@@ -32,14 +32,16 @@ public class SetConverter implements PropertyConverter<Set> 
{
     @Override
     public Set convert(String value) {
         ConversionContext context = ConversionContext.current();
-        String collectionType = null;
+        String collectionType = "Set";
+        boolean readOnly = false;
         if(context!=null) {
-            collectionType = context.getConfiguration().getOrDefault('_' + 
context.getKey() + ".collection-type", "Set");
+            collectionType = 
(String)context.getMeta().getOrDefault("collection-type", "HashSet");
             if (collectionType.startsWith("java.util.")) {
                 collectionType = 
collectionType.substring("java.util.".length());
             }
+            readOnly = 
Boolean.parseBoolean((String)context.getMeta().getOrDefault("read-only", 
"false"));
         }
-        Set result = null;
+        Set result;
         switch(collectionType){
             case "TreeSet":
                 result = TreeSetConverter.getInstance().convert(value);
@@ -50,12 +52,8 @@ public class SetConverter implements PropertyConverter<Set> {
                 result = HashSetConverter.getInstance().convert(value);
                 break;
         }
-        ConversionContext ctx = ConversionContext.current();
-        if(ctx != null){
-            if(ctx.getConfiguration().getOrDefault(
-                    '_' + ctx.getKey() + ".read-only", Boolean.class, true)){
-                return Collections.unmodifiableSet(result);
-            }
+        if(readOnly){
+            return Collections.unmodifiableSet(result);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 d71af91..6ae4f5b 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/SortedSetConverter.java
@@ -18,10 +18,12 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.Collections;
 import java.util.SortedSet;
+import java.util.TreeSet;
 
 /**
  *  PropertyConverter for gnerating a LIST representation of values.
@@ -30,6 +32,6 @@ public class SortedSetConverter implements 
PropertyConverter<SortedSet> {
 
     @Override
     public SortedSet convert(String value) {
-        return 
Collections.unmodifiableSortedSet(TreeSetConverter.getInstance().convert(value));
+        return TreeSetConverter.getInstance().convert(value);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 26b35ca..08378a6 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/TreeMapConverter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.List;
@@ -45,15 +47,19 @@ 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]);
+            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 value type 
for '"+raw+"'.");
+                LOG.log(Level.SEVERE, "Failed to convert collection 
createValue type for '"+raw+"'.");
             }
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 94bd8d7..0625957 100644
--- 
a/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
+++ 
b/collections/src/main/java/org/apache/tamaya/collections/TreeSetConverter.java
@@ -18,8 +18,10 @@
  */
 package org.apache.tamaya.collections;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.TreeSet;
 import java.util.logging.Level;
@@ -45,16 +47,16 @@ public class TreeSetConverter implements 
PropertyConverter<TreeSet> {
 
     @Override
     public TreeSet convert(String value) {
-        List<String> rawList = ItemTokenizer.split(value);
-        TreeSet<Object> result = new TreeSet<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw);
-            Object convValue = ItemTokenizer.convertValue(items[1]);
-            if(convValue!=null){
-                result.add(convValue);
-                continue;
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type 
for '"+raw+"'.");
+        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;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 1c6d4b2..f9ac048 100644
--- 
a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
+++ 
b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
@@ -38,9 +38,9 @@ public class CollectionAdvancedTests {
     /**
      * Tests if a custom separator works, Config is
      * <pre>
-     *  sep-list=a,b,c|d,e,f|g,h,i
-     *  _sep-list.collection-type=List
-     *  _sep-list.collection-separator=|
+     *  sep-createList=a,b,c|d,e,f|g,h,i
+     *  _sep-createList.collection-type=List
+     *  _sep-createList.collection-separator=|
      * </pre>
      */
     @Test
@@ -58,8 +58,8 @@ public class CollectionAdvancedTests {
     /**
      * Test typed content.
      * <pre>
-     *  currency-list=CHF,USD,YEN
-     *  _currency-list.collection-type=List
+     *  currency-createList=CHF,USD,YEN
+     *  _currency-createList.collection-type=List
      * </pre>
      */
     @Test
@@ -77,9 +77,9 @@ public class CollectionAdvancedTests {
     /**
      * Tests if a custom parser works, Config is
      * <pre>
-     *  parser-list=a,b,c
-     *  _parser-list.collection-type=List
-     *  
_parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
+     *  parser-createList=a,b,c
+     *  _parser-createList.collection-type=List
+     *  
_parser-createList.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
      * </pre>
      */
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
----------------------------------------------------------------------
diff --git 
a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
 
b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
index e8a94db..848d1b3 100644
--- 
a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
+++ 
b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
@@ -57,7 +57,7 @@ public class CollectionsTypedReadOnlyTests {
         items.add("test");
     }
 
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testLinkedListList_1(){
         Configuration config = Configuration.current();
         List<String> items = config.get("typed.linkedlist", new 
TypeLiteral<List<String>>(){});
@@ -67,7 +67,7 @@ public class CollectionsTypedReadOnlyTests {
         items.add("test");
     }
 
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testLinkedListList_2(){
         Configuration config = Configuration.current();
         List<String> items = (List<String>) config.get("typed.linkedlist", 
List.class);
@@ -78,7 +78,7 @@ public class CollectionsTypedReadOnlyTests {
     }
 
 
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testHashSet_1(){
         Configuration config = Configuration.current();
         Set<String> items = config.get("typed.hashset", new 
TypeLiteral<Set<String>>(){});
@@ -87,7 +87,7 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals(10, items.size());
         items.add("test");
     }
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testHashSet_2(){
         Configuration config = Configuration.current();
         Set<String> items = (Set<String>) config.get("typed.hashset", 
Set.class);
@@ -97,7 +97,7 @@ public class CollectionsTypedReadOnlyTests {
         items.add("test");
     }
 
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testTreeSet_1(){
         Configuration config = Configuration.current();
         Set<String> items = config.get("typed.treeset", new 
TypeLiteral<Set<String>>(){});
@@ -106,7 +106,7 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals(10, items.size());
         items.add("test");
     }
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testTreeSet_2(){
         Configuration config = Configuration.current();
         Set<String> items = items = (Set<String>) config.get("typed.treeset", 
Set.class);
@@ -144,7 +144,7 @@ public class CollectionsTypedReadOnlyTests {
     }
 
 
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testTreeMap_1(){
         Configuration config = Configuration.current();
         Map<String,String> items = config.get("typed.treemap", new 
TypeLiteral<Map<String,String>>(){});
@@ -157,7 +157,7 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals(" ", items.get("4"));
         items.put("g","hjhhj");
     }
-    @Test(expected=UnsupportedOperationException.class)
+    @Test
     public void testTreeMap_2(){
         Configuration config = Configuration.current();
         Map<String,String> items = (Map<String,String>) 
config.get("typed.treemap", Map.class);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 1521809..3764840 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -24,50 +24,46 @@ base.map=1=a, 2=b, 3=c, [4= ]
 
 # Config for tests with explcit implementation types
 typed2.arraylist=1,2,3,4,5,6,7,8,9,0
-_typed2.arraylist.collection-type=ArrayList
-_typed2.arraylist.read-only=false
+[META]typed2.arraylist.collection-type=ArrayList
 typed2.linkedlist=1,2,3,4,5,6,7,8,9,0
-_typed2.linkedlist.collection-type=java.util.LinkedList
-_typed2.linkedlist.read-only=false
+[META]typed2.linkedlist.collection-type=java.util.LinkedList
 typed2.hashset=1,2,3,4,5,6,7,8,9,0
-_typed2.hashset.collection-type=HashSet
-_typed2.hashset.read-only=false
+[META]typed2.hashset.collection-type=HashSet
 typed2.treeset=1,2,3,4,5,6,7,8,9,0
-_typed2.treeset.collection-type=TreeSet
-_typed2.treeset.read-only=false
+[META]typed2.treeset.collection-type=TreeSet
 typed2.hashmap=1=a, 2=b, 3=c, [4= ]
-_typed2.hashmap.collection-type=java.util.HashMap
-_typed2.hashmap.read-only=false
+[META]typed2.hashmap.collection-type=java.util.HashMap
 typed2.treemap=1=a, 2=b, 3=c, [4= ]
-_typed2.treemap.collection-type=TreeMap
-_typed2.treemap.read-only=false
+[META]typed2.treemap.collection-type=TreeMap
 
 # Config for tests with combination policy, writable
 typed.arraylist=1,2,3,4,5,6,7,8,9,0
-_typed.arraylist.collection-type=ArrayList
+[META]typed.arraylist.collection-type=ArrayList
+[META]typed.arraylist.read-only=true
 typed.linkedlist=1,2,3,4,5,6,7,8,9,0
-_typed.linkedlist.collection-type=java.util.LinkedList
+[META]typed.linkedlist.collection-type=java.util.LinkedList
 typed.hashset=1,2,3,4,5,6,7,8,9,0
-_typed.hashset.collection-type=HashSet
+[META]typed.hashset.collection-type=HashSet
 typed.treeset=1,2,3,4,5,6,7,8,9,0
-_typed.treeset.collection-type=TreeSet
+[META]typed.treeset.collection-type=TreeSet
 typed.hashmap=1=a, 2=b, 3=c, [4= ]
-_typed.hashmap.collection-type=java.util.HashMap
+[META]typed.hashmap.collection-type=java.util.HashMap
+[META]typed.hashmap.read-only=true
 typed.treemap=1=a, 2=b, 3=c, [4= ]
-_typed.treemap.collection-type=TreeMap
+[META]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.item-separator=|
+[META]sep-list.collection-type=List
+[META]sep-list.item-separator=|
 currency-list=CHF,USD,USS
-_currency-list.collection-type=List
+[META]currency-list.collection-type=List
 
 parser-list=a,b,c
-_parser-list.collection-type=List
-_parser-list.item-converters=org.apache.tamaya.collections.MyUpperCaseConverter
+[META]parser-list.collection-type=List
+[META]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=|
+[META]redefined-map.map-entry-separator===
+[META]redefined-map.item-separator=|
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/configured-sysprops/src/main/java/org/apache/tamaya/sysprops/ConfiguredSystemProperties.java
----------------------------------------------------------------------
diff --git 
a/configured-sysprops/src/main/java/org/apache/tamaya/sysprops/ConfiguredSystemProperties.java
 
b/configured-sysprops/src/main/java/org/apache/tamaya/sysprops/ConfiguredSystemProperties.java
index f65b539..e88deb5 100644
--- 
a/configured-sysprops/src/main/java/org/apache/tamaya/sysprops/ConfiguredSystemProperties.java
+++ 
b/configured-sysprops/src/main/java/org/apache/tamaya/sysprops/ConfiguredSystemProperties.java
@@ -280,28 +280,28 @@ public class ConfiguredSystemProperties extends 
Properties {
 //    }
 //
 //    @Override
-//    public Object putIfAbsent(Object key, Object value) {
-//        return getContextualProperties().putIfAbsent(key, value);
+//    public Object putIfAbsent(Object key, Object createValue) {
+//        return getContextualProperties().putIfAbsent(key, createValue);
 //    }
 //
 //    @Override
-//    public boolean remove(Object key, Object value) {
-//        return getContextualProperties().remove(key, value);
+//    public boolean remove(Object key, Object createValue) {
+//        return getContextualProperties().remove(key, createValue);
 //    }
 //
 //    @Override
-//    public boolean replace(Object key, Object oldValue, Object newValue) {
-//        return getContextualProperties().replace(key, oldValue, newValue);
+//    public boolean replace(Object key, Object oldValue, Object createValue) {
+//        return getContextualProperties().replace(key, oldValue, createValue);
 //    }
 //
 //    @Override
-//    public Object replace(Object key, Object value) {
-//        return getContextualProperties().replace(key, value);
+//    public Object replace(Object key, Object createValue) {
+//        return getContextualProperties().replace(key, createValue);
 //    }
 //
 //    @Override
-//    public Object merge(Object key, Object value, BiFunction<? super Object, 
? super Object, ?> remappingFunction) {
-//        return getContextualProperties().merge(key, value, 
remappingFunction);
+//    public Object merge(Object key, Object createValue, BiFunction<? super 
Object, ? super Object, ?> remappingFunction) {
+//        return getContextualProperties().merge(key, createValue, 
remappingFunction);
 //    }
 
     public Properties getInitialProperties() {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
----------------------------------------------------------------------
diff --git 
a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java 
b/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
index b16596a..a456708 100644
--- a/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
+++ b/consul/src/main/java/org/apache/tamaya/consul/ConsulPropertySource.java
@@ -95,7 +95,7 @@ implements MutablePropertySource{
     }
 
     /**
-     * Returns the  default ordinal used, when no ordinal is setCurrent, or 
the ordinal was not parseable to an int value.
+     * Returns the  default ordinal used, when no ordinal is setCurrent, or 
the ordinal was not parseable to an int createValue.
      * @return the  default ordinal used, by default 1000.
      */
     public int getDefaultOrdinal(){
@@ -139,7 +139,7 @@ implements MutablePropertySource{
                 if(!valueOpt.isPresent()) {
                     LOG.log(Level.FINE, "key not found in consul: " + reqKey);
                 }else{
-                    // No prefix mapping necessary here, since we only 
access/return the value...
+                    // No prefix mapping necessary here, since we only 
access/return the createValue...
                     Value value = valueOpt.get();
                     Map<String,String> props = new HashMap<>();
                     props.put(reqKey+".createIndex", 
String.valueOf(value.getCreateIndex()));

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
----------------------------------------------------------------------
diff --git a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java 
b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
index 8fd66da..4ceb7b2 100644
--- a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
+++ b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdAccessor.java
@@ -139,17 +139,17 @@ public class EtcdAccessor {
     }
 
     /**
-     * Ask etcd for a single key, value pair. Hereby the response returned from
+     * Ask etcd for a single key, createValue pair. Hereby the response 
returned from
      * etcd:
      * 
      * <pre>
      * {
      * "action": "current",
-     * "getChild": {
+     * "getField": {
      * "createdIndex": 2,
      * "key": "/message",
      * "modifiedIndex": 2,
-     * "value": "Hello world"
+     * "createValue": "Hello world"
      * }
      * }
      * </pre>
@@ -157,7 +157,7 @@ public class EtcdAccessor {
      * is mapped to:
      * 
      * <pre>
-     *     key=value
+     *     key=createValue
      *     _key.source=[etcd]http://127.0.0.1:4001
      *     _key.createdIndex=12
      *     _key.modifiedIndex=34
@@ -180,9 +180,9 @@ public class EtcdAccessor {
                     final JsonReader reader = readerFactory
                             .createReader(new 
StringReader(EntityUtils.toString(entity)));
                     final JsonObject o = reader.readObject();
-                    final JsonObject node = o.getJsonObject("getChild");
-                    if (node.containsKey("value")) {
-                        result.put(key, node.getString("value"));
+                    final JsonObject node = o.getJsonObject("getField");
+                    if (node.containsKey("createValue")) {
+                        result.put(key, node.getString("createValue"));
                         result.put("_" + key + ".source", "[etcd]" + 
serverURL);
                     }
                     if (node.containsKey("createdIndex")) {
@@ -213,7 +213,7 @@ public class EtcdAccessor {
      * Creates/updates an entry in etcd without any ttl setCurrent.
      *
      * @param key   the property key, not null
-     * @param value the value to be setCurrent
+     * @param value the createValue to be setCurrent
      * @return the result map as described above.
      * @see #set(String, String, Integer)
      */
@@ -227,16 +227,16 @@ public class EtcdAccessor {
      * <pre>
      *     {
      * "action": "setCurrent",
-     * "getChild": {
+     * "getField": {
      * "createdIndex": 3,
      * "key": "/message",
      * "modifiedIndex": 3,
-     * "value": "Hello etcd"
+     * "createValue": "Hello etcd"
      * },
      * "prevNode": {
      * "createdIndex": 2,
      * "key": "/message",
-     * "value": "Hello world",
+     * "createValue": "Hello world",
      * "modifiedIndex": 2
      * }
      * }
@@ -245,7 +245,7 @@ public class EtcdAccessor {
      * is mapped to:
      * 
      * <pre>
-     *     key=value
+     *     key=createValue
      *     _key.source=[etcd]http://127.0.0.1:4001
      *     _key.createdIndex=12
      *     _key.modifiedIndex=34
@@ -259,7 +259,7 @@ public class EtcdAccessor {
      * </pre>
      *
      * @param key        the property key, not null
-     * @param value      the value to be setCurrent
+     * @param value      the createValue to be setCurrent
      * @param ttlSeconds the ttl in seconds (optional)
      * @return the result map as described above.
      */
@@ -270,7 +270,7 @@ public class EtcdAccessor {
             
put.setConfig(RequestConfig.copy(RequestConfig.DEFAULT).setSocketTimeout(socketTimeout)
                     
.setConnectionRequestTimeout(timeout).setConnectTimeout(connectTimeout).build());
             final List<NameValuePair> nvps = new ArrayList<>();
-            nvps.add(new BasicNameValuePair("value", value));
+            nvps.add(new BasicNameValuePair("createValue", value));
             if (ttlSeconds != null) {
                 nvps.add(new BasicNameValuePair("ttl", ttlSeconds.toString()));
             }
@@ -282,7 +282,7 @@ public class EtcdAccessor {
                     final JsonReader reader = readerFactory
                             .createReader(new 
StringReader(EntityUtils.toString(entity)));
                     final JsonObject o = reader.readObject();
-                    final JsonObject node = o.getJsonObject("getChild");
+                    final JsonObject node = o.getJsonObject("getField");
                     if (node.containsKey("createdIndex")) {
                         result.put("_" + key + ".createdIndex", 
String.valueOf(node.getInt("createdIndex")));
                     }
@@ -295,7 +295,7 @@ public class EtcdAccessor {
                     if (node.containsKey("ttl")) {
                         result.put("_" + key + ".ttl", 
String.valueOf(node.getInt("ttl")));
                     }
-                    result.put(key, node.getString("value"));
+                    result.put(key, node.getString("createValue"));
                     result.put("_" + key + ".source", "[etcd]" + serverURL);
                     parsePrevNode(key, result, node);
                     EntityUtils.consume(entity);
@@ -322,7 +322,7 @@ public class EtcdAccessor {
      *     _key.prevNode.modifiedIndex=34
      *     _key.prevNode.ttl=300
      *     _key.prevNode.expiration=...
-     *     _key.prevNode.value=...
+     *     _key.prevNode.createValue=...
      * </pre>
      *
      * @param key the key to be deleted.
@@ -340,7 +340,7 @@ public class EtcdAccessor {
                     final JsonReader reader = readerFactory
                             .createReader(new 
StringReader(EntityUtils.toString(entity)));
                     final JsonObject o = reader.readObject();
-                    final JsonObject node = o.getJsonObject("getChild");
+                    final JsonObject node = o.getJsonObject("getField");
                     if (node.containsKey("createdIndex")) {
                         result.put("_" + key + ".createdIndex", 
String.valueOf(node.getInt("createdIndex")));
                     }
@@ -382,7 +382,7 @@ public class EtcdAccessor {
             if (prevNode.containsKey("ttl")) {
                 result.put("_" + key + ".prevNode.ttl", 
String.valueOf(prevNode.getInt("ttl")));
             }
-            result.put("_" + key + ".prevNode.value", 
prevNode.getString("value"));
+            result.put("_" + key + ".prevNode.createValue", 
prevNode.getString("createValue"));
         }
     }
 
@@ -403,10 +403,10 @@ public class EtcdAccessor {
      * <pre>
      * {
      * "action": "current",
-     * "getChild": {
+     * "getField": {
      * "key": "/",
      * "dir": true,
-     * "getChildren": [
+     * "getList": [
      * {
      * "key": "/foo_dir",
      * "dir": true,
@@ -415,7 +415,7 @@ public class EtcdAccessor {
      * },
      * {
      * "key": "/foo",
-     * "value": "two",
+     * "createValue": "two",
      * "modifiedIndex": 1,
      * "createdIndex": 1
      * }
@@ -460,7 +460,7 @@ public class EtcdAccessor {
                     final HttpEntity entity = response.getEntity();
                     final JsonReader reader = readerFactory.createReader(new 
StringReader(EntityUtils.toString(entity)));
                     final JsonObject o = reader.readObject();
-                    final JsonObject node = o.getJsonObject("getChild");
+                    final JsonObject node = o.getJsonObject("getField");
                     if (node != null) {
                         addNodes(result, node);
                     }
@@ -479,12 +479,12 @@ public class EtcdAccessor {
      * Recursively read out all key/values from this etcd JSON array.
      *
      * @param result map with key, values and metadata.
-     * @param node   the getChild to parse.
+     * @param node   the getField to parse.
      */
     private void addNodes(Map<String, String> result, JsonObject node) {
         if (!node.containsKey("dir") || 
"false".equals(node.get("dir").toString())) {
             final String key = node.getString("key").substring(1);
-            result.put(key, node.getString("value"));
+            result.put(key, node.getString("createValue"));
             if (node.containsKey("createdIndex")) {
                 result.put("_" + key + ".createdIndex", 
String.valueOf(node.getInt("createdIndex")));
             }
@@ -499,7 +499,7 @@ public class EtcdAccessor {
             }
             result.put("_" + key + ".source", "[etcd]" + serverURL);
         } else {
-            final JsonArray nodes = node.getJsonArray("getChildren");
+            final JsonArray nodes = node.getJsonArray("getList");
             if (nodes != null) {
                 for (int i = 0; i < nodes.size(); i++) {
                     addNodes(result, nodes.getJsonObject(i));

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
----------------------------------------------------------------------
diff --git a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java 
b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
index c512b24..bae780c 100644
--- a/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
+++ b/etcd/src/main/java/org/apache/tamaya/etcd/EtcdPropertySource.java
@@ -149,10 +149,10 @@ public class EtcdPropertySource extends BasePropertySource
             try{
                 props = accessor.get(key);
                 if(!props.containsKey("_ERROR")) {
-                    // No prefix mapping necessary here, since we only 
access/return the value...
+                    // No prefix mapping necessary here, since we only 
access/return the createValue...
                     metaData.putAll(props);
                     metaData.remove(key);
-                    return PropertyValue.create(key, 
props.get(key)).setMeta("source", getName()).setMeta(metaData);
+                    return PropertyValue.createValue(key, 
props.get(key)).setMeta("source", getName()).setMeta(metaData);
                 } else{
                     LOG.log(Level.FINE, "etcd error on " + accessor.getUrl() + 
": " + props.get("_ERROR"));
                 }
@@ -188,7 +188,7 @@ public class EtcdPropertySource extends BasePropertySource
             if (!entry.getKey().startsWith("_")) {
                 PropertyValue val = values.get(entry.getKey());
                 if (val == null) {
-                    val = PropertyValue.create(entry.getKey(), 
"").setMeta("source", getName()).setMeta(metaData);
+                    val = PropertyValue.createValue(entry.getKey(), 
"").setMeta("source", getName()).setMeta(metaData);
                     values.put(entry.getKey(), val);
                 }
             }
@@ -209,13 +209,13 @@ public class EtcdPropertySource extends BasePropertySource
                 }
             }
         }
-        // Map to value map.
+        // Map to createValue map.
 //        Map<String, PropertyValue> values = new HashMap<>();
         for(Map.Entry<String,PropertyValue> en:values.entrySet()) {
             if(prefix.isEmpty()){
                 values.put(en.getKey(), en.getValue());
             }else{
-                values.put(prefix + en.getKey(), en.getValue().setKey(prefix + 
en.getKey()));
+                values.put(prefix + en.getKey(), 
en.getValue().mutable().setKey(prefix + en.getKey()));
             }
         }
         return values;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/etcd/src/test/java/org/apache/tamaya/etcd/EtcdAccessorTest.java
----------------------------------------------------------------------
diff --git a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdAccessorTest.java 
b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdAccessorTest.java
index 11b354d..630a028 100644
--- a/etcd/src/test/java/org/apache/tamaya/etcd/EtcdAccessorTest.java
+++ b/etcd/src/test/java/org/apache/tamaya/etcd/EtcdAccessorTest.java
@@ -99,7 +99,7 @@ public class EtcdAccessorTest {
         assertEquals(value, accessor.get("testDelete").get("testDelete"));
         assertNotNull(result.get("_testDelete.createdIndex"));
         result = accessor.delete("testDelete");
-        assertEquals(value, result.get("_testDelete.prevNode.value"));
+        assertEquals(value, result.get("_testDelete.prevNode.createValue"));
         assertNull(accessor.get("testDelete").get("testDelete"));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 194022f..7283cb2 100644
--- 
a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
+++ 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
@@ -72,7 +72,7 @@ public class DateTimeConverterTest {
         for (Object[] pair : inputResultPairs) {
             DateTime date = converter.convert((String)pair[0]);
 
-            assertThat("Converter failed to convert input value " + pair[0], 
date, notNullValue());
+            assertThat("Converter failed to convert input createValue " + 
pair[0], date, notNullValue());
             assertThat(date.isEqual((DateTime)pair[1]), is(true));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 e46c75f..6061d29 100644
--- 
a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -59,7 +59,7 @@ public class DateTimeZoneConverterTest {
         for (Object[] pair : inputResultPairs) {
             DateTimeZone zone = converter.convert((String) pair[0]);
 
-            assertThat("Converter failed to convert input value " + pair[0], 
zone, notNullValue());
+            assertThat("Converter failed to convert input createValue " + 
pair[0], zone, notNullValue());
             assertThat(zone, equalTo((DateTimeZone)pair[1]));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 513deeb..07270d1 100644
--- 
a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
+++ 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
@@ -61,7 +61,7 @@ public class DurationConverterTest {
         for (Object[] pair : inputResultPairs) {
             Duration duration = converter.convert((String) pair[0]);
 
-            assertThat("Converter failed to convert input value " + pair[0], 
duration, notNullValue());
+            assertThat("Converter failed to convert input createValue " + 
pair[0], duration, notNullValue());
             assertThat(duration, equalTo((Duration) pair[1]));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
index 9372aac..85bc6ca 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
@@ -19,14 +19,11 @@
 package org.apache.tamaya.jodatime;
 
 import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.joda.time.MutablePeriod;
 import org.joda.time.Period;
 import org.joda.time.format.ISOPeriodFormat;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.Locale;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/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 9dc97e7..15e0018 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -65,7 +65,7 @@ public class PeriodConverterTest {
         for (Object[] pair : inputResultPairs) {
             Period period = converter.convert((String) pair[0]);
 
-            assertThat("Converter failed to convert input value " + pair[0], 
period, notNullValue());
+            assertThat("Converter failed to convert input createValue " + 
pair[0], period, notNullValue());
             assertThat(period, equalTo((Period)pair[1]));
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/management/src/main/java/org/apache/tamaya/management/ConfigManagementSupport.java
----------------------------------------------------------------------
diff --git 
a/management/src/main/java/org/apache/tamaya/management/ConfigManagementSupport.java
 
b/management/src/main/java/org/apache/tamaya/management/ConfigManagementSupport.java
index 64fa062..f2becb5 100644
--- 
a/management/src/main/java/org/apache/tamaya/management/ConfigManagementSupport.java
+++ 
b/management/src/main/java/org/apache/tamaya/management/ConfigManagementSupport.java
@@ -65,7 +65,7 @@ public class ConfigManagementSupport {
     /**
      * Registers the {@link ManagedConfigMBean} mbean for accessing config 
documentation into the local platform
      * mbean server.
-     * @param context An optional context parameter to be added to the object 
name.
+     * @param context An optional context parameter to be added to the 
createObject name.
      * @return the registered ObjectName, or null, if no bean could be created.
      */
     public static ObjectName registerMBean(String context) {
@@ -104,7 +104,7 @@ public class ConfigManagementSupport {
     /**
      * Unegisters the {@link ManagedConfigMBean} mbean for accessing config 
documentation into the local
      * platform mbean server.
-     * @param context An optional context parameter to be added to the object 
name.
+     * @param context An optional context parameter to be added to the 
createObject name.
      * @return the unregistered ObjectName, or null, if no bean could be 
created.
      */
     public static ObjectName unregisterMBean(String context) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
----------------------------------------------------------------------
diff --git 
a/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java 
b/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
index c804d22..79cf5c4 100644
--- a/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
+++ b/management/src/main/java/org/apache/tamaya/management/ManagedConfig.java
@@ -20,7 +20,6 @@ package org.apache.tamaya.management;
 
 
 import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.functions.ConfigurationFunctions;
 
 import java.util.Map;
@@ -92,7 +91,7 @@ public class ManagedConfig implements ManagedConfigMBean {
 
     /**
      * Evaluate the current configuration. By default this class is 
temporarely setting the
-     * TCCL to the instance active on bean creation and then calls {@link 
ConfigurationProvider#getConfiguration()}.
+     * TCCL to the instance active on bean creation and then calls {@link 
Configuration#current()} .
      *
      * @return the configuration instance to be used.
      */

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/70980cc9/management/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
----------------------------------------------------------------------
diff --git 
a/management/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java 
b/management/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
index 1682819..01db541 100644
--- 
a/management/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
+++ 
b/management/src/main/java/org/apache/tamaya/management/ManagedConfigMBean.java
@@ -57,7 +57,7 @@ public interface ManagedConfigMBean {
      *     ConfigurationContext[gqContextClassName] {
      *         version = 2345-34334-2333-3434,
      *         config {
-     *             key = "value",
+     *             key = "createValue",
      *             key2 = "value2"
      *             ...
      *         },


Reply via email to