You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2017/11/14 09:25:48 UTC

[07/12] incubator-tamaya git commit: TAMAYA-318 Moved spi-support as API base implementation package to remove code duplicates.

TAMAYA-318 Moved spi-support as API base implementation package to remove code duplicates.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/7917a9f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/7917a9f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/7917a9f3

Branch: refs/heads/master
Commit: 7917a9f38e4087814ea1987395cb48edff7dfe2c
Parents: 353817c
Author: Anatole Tresch <an...@apache.org>
Authored: Mon Nov 13 16:40:43 2017 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Mon Nov 13 16:40:45 2017 +0100

----------------------------------------------------------------------
 code/core/pom.xml                               |   5 +
 .../org/apache/tamaya/core/OSGIActivator.java   |   4 +
 .../internal/DefaultConfigValueEvaluator.java   |  72 ---
 .../core/internal/DefaultConfiguration.java     | 245 ----------
 .../internal/DefaultConfigurationContext.java   |  73 ++-
 .../DefaultConfigurationContextBuilder.java     | 101 ++--
 .../internal/DefaultConfigurationProvider.java  |   1 +
 .../core/internal/DefaultServiceContext.java    |   1 +
 .../tamaya/core/internal/OSGIServiceLoader.java |   1 +
 .../internal/PriorityServiceComparator.java     |  81 ----
 .../core/internal/PropertyConverterManager.java | 464 ------------------
 .../core/internal/PropertyFilterComparator.java |  73 ---
 .../tamaya/core/internal/PropertyFiltering.java | 125 -----
 .../core/internal/PropertySourceComparator.java |  86 ----
 .../tamaya/core/internal/ReflectionUtil.java    |  42 --
 .../core/internal/WrappedPropertySource.java    | 125 -----
 .../core/internal/converters/ConvertQuery.java  |  68 +++
 .../core/internal/converters/EnumConverter.java |  83 ----
 .../core/internal/converters/FileConverter.java |   1 -
 .../converters/OffsetDateTimeConverter.java     |   1 -
 .../converters/OffsetTimeConverter.java         |   1 -
 .../internal/converters/OptionalConverter.java  |  42 --
 .../core/internal/converters/PathConverter.java |   3 -
 .../internal/converters/SupplierConverter.java  |  71 +++
 .../core/propertysource/BasePropertySource.java | 162 -------
 .../core/propertysource/CLIPropertySource.java  | 131 ------
 .../EnvironmentPropertySource.java              | 293 ------------
 .../JavaConfigurationPropertySource.java        | 136 ------
 .../propertysource/SimplePropertySource.java    | 140 ------
 .../propertysource/SystemPropertySource.java    | 190 --------
 .../core/propertysource/package-info.java       |  23 -
 .../org.apache.tamaya.spi.PropertyConverter     |   1 +
 .../org.apache.tamaya.spi.PropertySource        |   8 +-
 .../core/ConfigurationContextBuilderTest.java   |   2 +-
 .../DefaultConfigurationContextTest.java        |   1 -
 .../core/internal/DefaultConfigurationTest.java | 201 --------
 .../internal/PriorityServiceComparatorTest.java |  45 --
 .../internal/PropertyConverterManagerTest.java  | 182 -------
 .../internal/PropertyFilterComparatorTest.java  |  75 ---
 .../propertysource/BasePropertySourceTest.java  | 136 ------
 .../propertysource/CLIPropertySourceTest.java   |  58 ---
 .../EnvironmentPropertySourceTest.java          | 180 -------
 .../PropertiesFilePropertySourceTest.java       |  59 ---
 .../SimplePropertySourceTest.java               |  89 ----
 .../SystemPropertySourceTest.java               |  91 ----
 .../testdata/TestPropertyDefaultSource.java     |   2 +-
 .../testdata/TestPropertySourceProvider.java    |   2 +-
 .../org.apache.tamaya.spi.PropertySource        |   4 +-
 code/pom.xml                                    |   1 +
 code/spi-support/pom.xml                        |  81 ++++
 .../tamaya/spisupport/ConfigValueEvaluator.java |  48 ++
 .../tamaya/spisupport/ConfigurationBuilder.java | 334 +++++++++++++
 .../spisupport/DefaultConfigValueEvaluator.java |  70 +++
 .../tamaya/spisupport/DefaultConfiguration.java | 268 +++++++++++
 .../spisupport/DefaultConfigurationBuilder.java | 229 +++++++++
 .../spisupport/DefaultServiceContext.java       | 204 ++++++++
 .../apache/tamaya/spisupport/EnumConverter.java |  83 ++++
 .../spisupport/PriorityServiceComparator.java   |  84 ++++
 .../spisupport/PropertyConverterManager.java    | 471 +++++++++++++++++++
 .../spisupport/PropertyFilterComparator.java    |  72 +++
 .../tamaya/spisupport/PropertyFiltering.java    | 124 +++++
 .../spisupport/PropertySourceComparator.java    | 122 +++++
 .../tamaya/spisupport/ReflectionUtil.java       |  42 ++
 .../tamaya/spisupport/RegexPropertyFilter.java  |  84 ++++
 .../propertysource/BasePropertySource.java      | 173 +++++++
 .../propertysource/BuildablePropertySource.java | 231 +++++++++
 .../BuildablePropertySourceProvider.java        | 114 +++++
 .../propertysource/CLIPropertySource.java       | 137 ++++++
 .../EnvironmentPropertySource.java              | 287 +++++++++++
 .../JavaConfigurationPropertySource.java        | 134 ++++++
 .../propertysource/MapPropertySource.java       | 102 ++++
 .../PropertiesResourcePropertySource.java       | 109 +++++
 .../propertysource/SimplePropertySource.java    | 284 +++++++++++
 .../propertysource/SystemPropertySource.java    | 199 ++++++++
 .../propertysource/WrappedPropertySource.java   | 126 +++++
 .../spisupport/propertysource/package-info.java |  23 +
 .../java/org/apache/tamaya/spisupport/A.java    |  29 ++
 .../java/org/apache/tamaya/spisupport/B.java    |  29 ++
 .../BuildablePropertySourceProviderTest.java    |  78 +++
 .../spisupport/BuildablePropertySourceTest.java |  89 ++++
 .../java/org/apache/tamaya/spisupport/C.java    |  56 +++
 .../tamaya/spisupport/CTestConverter.java       |  32 ++
 .../spisupport/DefaultConfigurationTest.java    | 201 ++++++++
 .../spisupport/EmptyConfigurationContext.java   |  78 +++
 .../EmptyConfigurationContextBuilder.java       | 174 +++++++
 .../PriorityServiceComparatorTest.java          |  44 ++
 .../PropertyConverterManagerTest.java           | 180 +++++++
 .../PropertyFilterComparatorTest.java           |  76 +++
 .../spisupport/RegexPropertyFilterTest.java     |  70 +++
 .../propertysource/BasePropertySourceTest.java  | 136 ++++++
 .../propertysource/CLIPropertySourceTest.java   |  59 +++
 .../propertysource/EnumConverterTest.java       |  60 +++
 .../EnvironmentPropertySourceTest.java          |  68 +++
 .../propertysource/MapPropertySourceTest.java   |  76 +++
 .../PropertiesFilePropertySourceTest.java       |  60 +++
 .../SimplePropertySourceTest.java               |  89 ++++
 .../SystemPropertySourceTest.java               |  91 ++++
 .../TestPropertyDefaultSource.java              |  57 +++
 .../services/DefaultServiceContext.java         | 205 ++++++++
 .../org.apache.tamaya.spi.PropertyConverter     |  19 +
 .../org.apache.tamaya.spi.ServiceContext        |  19 +
 .../src/test/resources/invalid-properties.xml   |  25 +
 .../src/test/resources/non-xml-properties.xml   |  18 +
 .../test/resources/overrideOrdinal.properties   |  25 +
 .../src/test/resources/testfile.properties      |  22 +
 .../src/test/resources/valid-properties.xml     |  25 +
 .../apache/tamaya/examples/minimal/Main.java    |   4 +-
 .../examples/minimal/TestConfigProvider.java    |   2 +-
 .../SimplePropertySource.java                   |   2 +-
 .../SimplePropertySourceProvider.java           |   2 +-
 .../tamaya/examples/distributed/Display.java    |   4 +-
 .../examples/distributed/DisplayManager.java    |   4 +-
 112 files changed, 6703 insertions(+), 3721 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/pom.xml
----------------------------------------------------------------------
diff --git a/code/core/pom.xml b/code/core/pom.xml
index 0c57c6d..2d98631 100644
--- a/code/core/pom.xml
+++ b/code/core/pom.xml
@@ -40,6 +40,11 @@ under the License.
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/OSGIActivator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/OSGIActivator.java b/code/core/src/main/java/org/apache/tamaya/core/OSGIActivator.java
index 46355f3..09bf384 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/OSGIActivator.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/OSGIActivator.java
@@ -23,6 +23,10 @@ package org.apache.tamaya.core;
 import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.core.internal.*;
 import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.core.internal.DefaultConfigurationContextBuilder;
+import org.apache.tamaya.spisupport.PropertyFilterComparator;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigValueEvaluator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigValueEvaluator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigValueEvaluator.java
deleted file mode 100644
index 4d8a7f3..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigValueEvaluator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.osgi.service.component.annotations.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
- * chain of {@link PropertySource} and {@link PropertyFilter}
- * instance to evaluate the current Configuration.
- */
-@Component(service = ConfigValueEvaluator.class)
-public class DefaultConfigValueEvaluator implements ConfigValueEvaluator{
-
-    @Override
-    public PropertyValue evaluteRawValue(String key, ConfigurationContext context) {
-        PropertyValue unfilteredValue = null;
-        for (PropertySource propertySource : context.getPropertySources()) {
-            unfilteredValue = context.getPropertyValueCombinationPolicy().
-                    collect(unfilteredValue, key, propertySource);
-        }
-        if(unfilteredValue==null || unfilteredValue.getValue()==null){
-            return null;
-        }
-        return unfilteredValue;
-    }
-
-    @Override
-    public Map<String, PropertyValue> evaluateRawValues(ConfigurationContext context) {
-        Map<String, PropertyValue> result = new HashMap<>();
-        for (PropertySource propertySource : context.getPropertySources()) {
-            for (Map.Entry<String,PropertyValue> propEntry: propertySource.getProperties().entrySet()) {
-                PropertyValue unfilteredValue = result.get(propEntry.getKey());
-                unfilteredValue = context.getPropertyValueCombinationPolicy().
-                        collect(unfilteredValue, propEntry.getKey(), propertySource);
-                if(unfilteredValue!=null){
-                    result.put(unfilteredValue.getKey(), unfilteredValue);
-                }
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return "DefaultConfigEvaluator{}";
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
deleted file mode 100644
index 1c22e44..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfiguration.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.*;
-import org.osgi.service.component.annotations.Component;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
- * chain of {@link PropertySource} and {@link PropertyFilter}
- * instance to evaluate the current Configuration.
- */
-@Component(service = Configuration.class)
-public class DefaultConfiguration implements Configuration {
-    /**
-     * The logger.
-     */
-    private static final Logger LOG = Logger.getLogger(DefaultConfiguration.class.getName());
-
-    /**
-     * The current {@link ConfigurationContext} of the current instance.
-     */
-    private final ConfigurationContext configurationContext;
-
-    /**
-     * EvaluationStrategy
-     */
-    private ConfigValueEvaluator configEvaluator = loadConfigValueEvaluator();
-
-    private ConfigValueEvaluator loadConfigValueEvaluator() {
-        ConfigValueEvaluator eval = null;
-        try{
-            eval = ServiceContextManager.getServiceContext()
-                    .getService(ConfigValueEvaluator.class);
-        }catch(Exception e){
-            LOG.log(Level.WARNING, "Failed to load ConfigValueEvaluator from ServiceContext, using default.", e);
-        }
-        if(eval==null){
-            eval = new DefaultConfigValueEvaluator();
-        }
-        return eval;
-    }
-
-
-    /**
-     * Constructor.
-     * @param configurationContext The configuration Context to be used.
-     */
-    public DefaultConfiguration(ConfigurationContext configurationContext){
-        this.configurationContext = Objects.requireNonNull(configurationContext);
-    }
-
-    @Override
-    public String get(String key) {
-        Objects.requireNonNull(key, "Key must not be null.");
-
-        PropertyValue value = configEvaluator.evaluteRawValue(key, configurationContext);
-        if(value==null){
-            return null;
-        }
-        value = PropertyFiltering.applyFilter(value, configurationContext);
-        if(value!=null){
-            return value.getValue();
-        }
-        return null;
-    }
-
-
-    @Override
-    public String getOrDefault(String key, String defaultValue) {
-        Objects.requireNonNull(key, "Key must not be null.");
-        Objects.requireNonNull(defaultValue, "Default value must not be null");
-
-        String val = get(key);
-        if(val==null){
-            return defaultValue;
-        }
-        return val;
-    }
-
-    @Override
-    public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
-        Objects.requireNonNull(key, "Key must not be null.");
-        Objects.requireNonNull(type, "Target type must not be null");
-        Objects.requireNonNull(defaultValue, "Default value must not be null");
-
-        T val = get(key, type);
-        if(val==null){
-            return defaultValue;
-        }
-        return val;
-    }
-
-    /**
-     * Get the current properties, composed by the loaded {@link PropertySource} and filtered
-     * by registered {@link PropertyFilter}.
-     *
-     * @return the final properties.
-     */
-    @Override
-    public Map<String, String> getProperties() {
-        Map<String, PropertyValue> filtered = PropertyFiltering.applyFilters(
-                configEvaluator.evaluateRawValues(configurationContext),
-                configurationContext);
-        Map<String,String> result = new HashMap<>();
-        for(PropertyValue val:filtered.values()){
-            if(val.getValue()!=null) {
-                result.put(val.getKey(), val.getValue());
-                // TODO: Discuss metadata handling...
-                result.putAll(val.getMetaEntries());
-            }
-        }
-        return result;
-    }
-
-
-    /**
-     * Accesses the current String value for the given key and tries to convert it
-     * using the {@link PropertyConverter} instances provided by the current
-     * {@link ConfigurationContext}.
-     *
-     * @param key  the property's absolute, or relative path, e.g. @code
-     *             a/b/c/d.myProperty}, never {@code null}.
-     * @param type The target type required, not {@code null}.
-     * @param <T>  the value type
-     * @return the converted value, never {@code null}.
-     */
-    @SuppressWarnings("unchecked")
-	@Override
-    public <T> T get(String key, Class<T> type) {
-        Objects.requireNonNull(key, "Key must not be null.");
-        Objects.requireNonNull(type, "Target type must not be null");
-
-        return get(key, (TypeLiteral<T>)TypeLiteral.of(type));
-    }
-
-    /**
-     * Accesses the current String value for the given key and tries to convert it
-     * using the {@link PropertyConverter} instances provided by the current
-     * {@link ConfigurationContext}.
-     *
-     * @param key  the property's absolute, or relative path, e.g. @code
-     *             a/b/c/d.myProperty}.
-     * @param type The target type required, not {@code null}.
-     * @param <T>  the value type
-     * @return the converted value, never {@code null}.
-     */
-    @Override
-    public <T> T get(String key, TypeLiteral<T> type) {
-        Objects.requireNonNull(key, "Key must not be null.");
-        Objects.requireNonNull(type, "Target type must not be null");
-
-        return convertValue(key, get(key), type);
-    }
-
-    @SuppressWarnings("unchecked")
-	protected <T> T convertValue(String key, String value, TypeLiteral<T> type) {
-        if (value != null) {
-            List<PropertyConverter<T>> converters = configurationContext.getPropertyConverters(type);
-            ConversionContext context = new ConversionContext.Builder(this, this.configurationContext, key, type)
-                    .build();
-            for (PropertyConverter<T> converter : converters) {
-                try {
-                    T t = converter.convert(value, context);
-                    if (t != null) {
-                        return t;
-                    }
-                } catch (Exception e) {
-                    LOG.log(Level.INFO, "PropertyConverter: " + converter + " failed to convert value: " + value, e);
-                }
-            }
-            // if the target type is a String, we can return the value, no conversion required.
-            if(type.equals(TypeLiteral.of(String.class))){
-                return (T)value;
-            }
-            // unsupported type, throw an exception
-            throw new ConfigException("Unparseable config value for type: " + type.getRawType().getName() + ": " + key +
-                    ", supported formats: " + context.getSupportedFormats());
-        }
-        return null;
-    }
-
-    @Override
-    public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
-        Objects.requireNonNull(key);
-        Objects.requireNonNull(type);
-        Objects.requireNonNull(defaultValue);
-
-        T val = get(key, type);
-        if(val==null){
-            return defaultValue;
-        }
-        return val;
-    }
-
-    @Override
-    public Configuration with(ConfigOperator operator) {
-        return operator.operate(this);
-    }
-
-    @Override
-    public <T> T query(ConfigQuery<T> query) {
-        return query.query(this);
-    }
-
-    @Override
-    public ConfigurationContext getContext() {
-        return this.configurationContext;
-    }
-
-    @Override
-    public String toString() {
-        return "Configuration{\n " +
-                configurationContext +
-                '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
index 9645681..95ebbca 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContext.java
@@ -1,24 +1,23 @@
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
  *
- *   http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
  */
 package org.apache.tamaya.core.internal;
 
-import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.ConfigurationContextBuilder;
@@ -28,8 +27,15 @@ import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.util.*;
+import org.apache.tamaya.spisupport.PropertyConverterManager;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.logging.Logger;
@@ -86,13 +92,17 @@ public class DefaultConfigurationContext implements ConfigurationContext {
                 this.propertyConverterManager.register(en.getKey(), converter);
             }
         }
+        LOG.info("Registered " + propertyConverterManager.getPropertyConverters().size() + " property converters: " +
+                propertyConverterManager.getPropertyConverters());
+
         propertyValueCombinationPolicy = builder.combinationPolicy;
         if(propertyValueCombinationPolicy==null){
             propertyValueCombinationPolicy = ServiceContextManager.getServiceContext().getService(PropertyValueCombinationPolicy.class);
         }
         if(propertyValueCombinationPolicy==null){
-            propertyValueCombinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_POLICY;
+            propertyValueCombinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
         }
+        LOG.info("Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
     }
 
 
@@ -114,14 +124,24 @@ public class DefaultConfigurationContext implements ConfigurationContext {
 
     @Override
     public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof DefaultConfigurationContext)) return false;
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DefaultConfigurationContext)){
+            return false;
+        }
 
         DefaultConfigurationContext that = (DefaultConfigurationContext) o;
 
-        if (!propertyConverterManager.equals(that.propertyConverterManager)) return false;
-        if (!immutablePropertySources.equals(that.immutablePropertySources)) return false;
-        if (!immutablePropertyFilters.equals(that.immutablePropertyFilters)) return false;
+        if (!propertyConverterManager.equals(that.propertyConverterManager)) {
+            return false;
+        }
+        if (!immutablePropertySources.equals(that.immutablePropertySources)) {
+            return false;
+        }
+        if (!immutablePropertyFilters.equals(that.immutablePropertyFilters)) {
+            return false;
+        }
         return getPropertyValueCombinationPolicy().equals(that.getPropertyValueCombinationPolicy());
 
     }
@@ -143,11 +163,12 @@ public class DefaultConfigurationContext implements ConfigurationContext {
         if(immutablePropertySources.isEmpty()){
             b.append("  No property sources loaded.\n\n");
         }else {
-            b.append("  CLASS                         NAME                                                              SCANNABLE SIZE    STATE     ERROR\n\n");
+            b.append("  CLASS                         NAME                                                                  ORDINAL SCANNABLE SIZE    STATE     ERROR\n\n");
             for (PropertySource ps : immutablePropertySources) {
                 b.append("  ");
                 appendFormatted(b, ps.getClass().getSimpleName(), 30);
                 appendFormatted(b, ps.getName(), 70);
+                appendFormatted(b, String.valueOf(PropertySourceComparator.getOrdinal(ps)), 8);
                 appendFormatted(b, String.valueOf(ps.isScannable()), 10);
                 if (ps.isScannable()) {
                     appendFormatted(b, String.valueOf(ps.getProperties().size()), 8);
@@ -188,7 +209,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
         b.append("  -------------------\n");
         b.append("  CLASS                         TYPE                          INFO\n\n");
         for(Map.Entry<TypeLiteral<?>, List<PropertyConverter<?>>> converterEntry:getPropertyConverters().entrySet()){
-            for(PropertyConverter<?> converter: converterEntry.getValue()){
+            for(PropertyConverter converter: converterEntry.getValue()){
                 b.append("  ");
                 appendFormatted(b, converter.getClass().getSimpleName(), 30);
                 appendFormatted(b, converterEntry.getKey().getRawType().getSimpleName(), 30);
@@ -197,7 +218,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
             }
         }
         b.append("\n\n");
-        b.append("  PropertyValueCombinationPolicy: ").append(getPropertyValueCombinationPolicy().getClass().getName()).append('\n');
+        b.append("  PropertyValueCombinationPolicy: " + getPropertyValueCombinationPolicy().getClass().getName()).append('\n');
         b.append('}');
         return b.toString();
     }
@@ -264,7 +285,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
 
     @Override
     public ConfigurationContextBuilder toBuilder() {
-        return ConfigurationProvider.getConfigurationContextBuilder().setContext(this);
+        return new DefaultConfigurationContextBuilder(this);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
index 2ddade6..4cad87d 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java
@@ -1,30 +1,24 @@
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
  *
- *   http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
  */
 package org.apache.tamaya.core.internal;
 
-import org.apache.tamaya.Configuration;
 import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.core.internal.converters.*;
-import org.apache.tamaya.core.propertysource.CLIPropertySource;
-import org.apache.tamaya.core.propertysource.EnvironmentPropertySource;
-import org.apache.tamaya.core.propertysource.SystemPropertySource;
-import org.apache.tamaya.core.propertysource.JavaConfigurationPropertySource;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.ConfigurationContextBuilder;
 import org.apache.tamaya.spi.PropertyConverter;
@@ -33,10 +27,14 @@ import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertySourceProvider;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 import org.apache.tamaya.spi.ServiceContextManager;
-import org.osgi.service.component.annotations.Component;
+import org.apache.tamaya.core.internal.converters.*;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
+import org.apache.tamaya.spisupport.propertysource.CLIPropertySource;
+import org.apache.tamaya.spisupport.propertysource.EnvironmentPropertySource;
+import org.apache.tamaya.spisupport.propertysource.JavaConfigurationPropertySource;
+import org.apache.tamaya.spisupport.propertysource.SystemPropertySource;
 
 import java.io.File;
-import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.URI;
@@ -46,9 +44,8 @@ import java.util.*;
 import java.util.logging.Logger;
 
 /**
- * Default implementation of {@link org.apache.tamaya.spi.ConfigurationContextBuilder}.
+ * Default implementation of {@link ConfigurationContextBuilder}.
  */
-@Component(service = ConfigurationContextBuilder.class)
 public class DefaultConfigurationContextBuilder implements ConfigurationContextBuilder {
 
     private static final Logger LOG = Logger.getLogger(DefaultConfigurationContextBuilder.class.getName());
@@ -64,6 +61,8 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
      */
     private boolean built;
 
+
+
     /**
      * Creates a new builder instance.
      */
@@ -71,7 +70,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
     }
 
     /**
-     * Creates a new builder instance.
+     * Creates a new builder instance initializing it with the given context.
      * @param context the context to be used, not null.
      */
     public DefaultConfigurationContextBuilder(ConfigurationContext context) {
@@ -101,6 +100,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
+
     @Override
     public ConfigurationContextBuilder setContext(ConfigurationContext context) {
         checkBuilderState();
@@ -134,7 +134,11 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         checkBuilderState();
         List<PropertySource> propertySources = new ArrayList<>();
         addCorePropertyResources(propertySources);
-        propertySources.addAll(ServiceContextManager.getServiceContext().getServices(PropertySource.class));
+        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)) {
+            if(!propertySources.contains(ps)){
+                propertySources.add(ps);
+            }
+        }
         for(PropertySourceProvider provider:
                 ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
                 propertySources.addAll(provider.getPropertySources());
@@ -144,10 +148,16 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
     }
 
     private void addCorePropertyResources(List<PropertySource> propertySources) {
-        propertySources.add(new EnvironmentPropertySource());
-        propertySources.add(new JavaConfigurationPropertySource());
-        propertySources.add(new CLIPropertySource());
-        propertySources.add(new SystemPropertySource());
+        for(PropertySource ps: new PropertySource[]{
+                new EnvironmentPropertySource(),
+                new JavaConfigurationPropertySource(),
+                new CLIPropertySource(),
+                new SystemPropertySource()
+        }){
+            if(!propertySources.contains(ps)){
+                propertySources.add(ps);
+            }
+        }
     }
 
     @Override
@@ -159,8 +169,6 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-	@Override
     public DefaultConfigurationContextBuilder addDefaultPropertyConverters() {
         checkBuilderState();
         addCorePropertyConverters();
@@ -173,7 +181,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
     }
 
     @SuppressWarnings("unchecked")
-	private void addCorePropertyConverters() {
+	protected void addCorePropertyConverters() {
         addPropertyConverters(TypeLiteral.<BigDecimal>of(BigDecimal.class), new BigDecimalConverter());
         addPropertyConverters(TypeLiteral.<BigInteger>of(BigInteger.class), new BigIntegerConverter());
         addPropertyConverters(TypeLiteral.<Boolean>of(Boolean.class), new BooleanConverter());
@@ -205,6 +213,15 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
+    private PropertySource getPropertySource(String name) {
+        for(PropertySource ps:propertySources){
+            if(ps.getName().equals(name)){
+                return ps;
+            }
+        }
+        throw new IllegalArgumentException("No such PropertySource: "+name);
+    }
+
     @Override
     public List<PropertySource> getPropertySources() {
         return this.propertySources;
@@ -317,6 +334,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
+
     @Override
     public ConfigurationContextBuilder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy combinationPolicy){
         checkBuilderState();
@@ -324,8 +342,9 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return this;
     }
 
+
     @Override
-    public <T> ConfigurationContextBuilder addPropertyConverters(TypeLiteral<T> type, @SuppressWarnings("unchecked") PropertyConverter<T>... propertyConverters){
+    public <T> ConfigurationContextBuilder addPropertyConverters(TypeLiteral<T> type, PropertyConverter<T>... propertyConverters){
         checkBuilderState();
         Objects.requireNonNull(type);
         Objects.requireNonNull(propertyConverters);
@@ -338,7 +357,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
             if (!converters.contains(propertyConverter)) {
                 converters.add(propertyConverter);
             } else {
-                LOG.finer("Converter ignored, already registered: " + propertyConverter);
+                LOG.warning("Converter ignored, already registered: " + propertyConverter);
             }
         }
         return this;
@@ -358,7 +377,7 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
             if (!converters.contains(propertyConverter)) {
                 converters.add(propertyConverter);
             } else {
-                LOG.finer("Converter ignored, already registered: " + propertyConverter);
+                LOG.warning("Converter ignored, already registered: " + propertyConverter);
             }
         }
         return this;
@@ -366,20 +385,19 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
 
     protected ConfigurationContextBuilder loadDefaults() {
         checkBuilderState();
-        this.combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_POLICY;
+        this.combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
         addDefaultPropertySources();
         addDefaultPropertyFilters();
         addDefaultPropertyConverters();
         return this;
     }
 
-    @SuppressWarnings("rawtypes")
-	private Map<TypeLiteral, Collection<PropertyConverter>> getDefaultPropertyConverters() {
+
+    private Map<TypeLiteral, Collection<PropertyConverter>> getDefaultPropertyConverters() {
         Map<TypeLiteral, Collection<PropertyConverter>> result = new HashMap<>();
         for (PropertyConverter conv : ServiceContextManager.getServiceContext().getServices(
                 PropertyConverter.class)) {
-            Type type = TypeLiteral.getGenericInterfaceTypeParameters(conv.getClass(), PropertyConverter.class)[0];
-            TypeLiteral target = TypeLiteral.of(type);
+            TypeLiteral target = TypeLiteral.of(TypeLiteral.of(conv.getClass()).getType());
             Collection<PropertyConverter> convList = result.get(target);
             if (convList == null) {
                 convList = new ArrayList<>();
@@ -390,10 +408,11 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB
         return result;
     }
 
+
     /**
      * Builds a new configuration based on the configuration of this builder instance.
      *
-     * @return a new {@link Configuration configuration instance},
+     * @return a new {@link org.apache.tamaya.Configuration configuration instance},
      *         never {@code null}.
      */
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationProvider.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationProvider.java
index d7abf8b..dd73889 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationProvider.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationProvider.java
@@ -22,6 +22,7 @@ import org.apache.tamaya.Configuration;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.ConfigurationContextBuilder;
 import org.apache.tamaya.spi.ConfigurationProviderSpi;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
 import org.osgi.service.component.annotations.Component;
 
 import java.util.Objects;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
index 04377e2..372ae2a 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.core.internal;
 
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.ServiceContext;
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 
 import javax.annotation.Priority;
 import java.io.IOException;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
index 3bf0291..b973d5f 100644
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
+++ b/code/core/src/main/java/org/apache/tamaya/core/internal/OSGIServiceLoader.java
@@ -26,6 +26,7 @@ import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.apache.tamaya.spisupport.PriorityServiceComparator;
 import org.osgi.framework.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
deleted file mode 100644
index 3b2ff5a..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import javax.annotation.Priority;
-import java.util.Comparator;
-
-/**
- * Comparator implementation for ordering services loaded based on their increasing priority values.
- */
-public class PriorityServiceComparator implements Comparator<Object> {
-
-    private static final PriorityServiceComparator INSTANCE = new PriorityServiceComparator();
-
-    /** Singleton constructor. */
-    private PriorityServiceComparator(){}
-
-    /**
-     * Get the shared instance of the comparator.
-     * @return the shared instance, never null.
-     */
-    public static PriorityServiceComparator getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public int compare(Object o1, Object o2) {
-        int prio = getPriority(o1) - getPriority(o2);
-        if (prio < 0) {
-            return 1;
-        } else if (prio > 0) {
-            return -1;
-        } else {
-            return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
-        }
-    }
-
-    /**
-     * Checks the given instance for a @Priority annotation. If present the annotation's value is evaluated. If no such
-     * annotation is present, a default priority {@code 1} is returned.
-     *
-     * @param o the instance, not {@code null}.
-     * @return a priority, by default 1.
-     */
-    public static int getPriority(Object o) {
-        return getPriority(o.getClass());
-    }
-
-    /**
-     * Checks the given type optionally annotated with a @Priority. If present the annotation's value is evaluated.
-     * If no such annotation is present, a default priority {@code 1} is returned.
-     *
-     * @param type the type, not {@code null}.
-     * @return a priority, by default 1.
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" }) 
-    public static int getPriority(Class type) {
-        int prio = 1;
-		Priority priority = (Priority)type.getAnnotation(Priority.class);
-        if (priority != null) {
-            prio = priority.value();
-        }
-        return prio;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java
deleted file mode 100644
index eb5fa92..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyConverterManager.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.core.internal.converters.EnumConverter;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Manager that deals with {@link org.apache.tamaya.spi.PropertyConverter} instances.
- * This class is thread-safe.
- */
-public class PropertyConverterManager {
-    /**
-     * The logger used.
-     */
-    private static final Logger LOG = Logger.getLogger(PropertyConverterManager.class.getName());
-    /**
-     * The registered converters.
-     */
-    private final Map<TypeLiteral<?>, List<PropertyConverter<?>>> converters = new ConcurrentHashMap<>();
-    /**
-     * The transitive converters.
-     */
-    private final Map<TypeLiteral<?>, List<PropertyConverter<?>>> transitiveConverters = new ConcurrentHashMap<>();
-    /**
-     * The lock used.
-     */
-    private final ReadWriteLock lock = new ReentrantReadWriteLock();
-
-    private static final Comparator<Object> PRIORITY_COMPARATOR = new Comparator<Object>() {
-
-        @Override
-        public int compare(Object o1, Object o2) {
-            int prio = DefaultServiceContext.getPriority(o1) - DefaultServiceContext.getPriority(o2);
-            if (prio < 0) {
-                return 1;
-            } else if (prio > 0) {
-                return -1;
-            } else {
-                return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
-            }
-        }
-    };
-
-    /**
-     * Constructor.
-     */
-    public PropertyConverterManager() {
-        this(false);
-    }
-
-    public PropertyConverterManager(boolean init) {
-        if (init) {
-            initConverters();
-        }
-    }
-
-    /**
-     * Registers the default converters provided out of the box.
-     */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected void initConverters() {
-        for ( PropertyConverter conv : ServiceContextManager.getServiceContext().getServices(PropertyConverter.class)) {
-            Type type = TypeLiteral.getGenericInterfaceTypeParameters(conv.getClass(), PropertyConverter.class)[0];
-            register(TypeLiteral.of(type), conv);
-        }
-    }
-
-    /**
-     * Registers a new converter instance.
-     *
-     * @param targetType the target type, not {@code null}.
-     * @param converter  the converter, not {@code null}.
-     * @param <T>        the type.
-     */
-    @SuppressWarnings("unchecked")
-    public <T> void register(TypeLiteral<T> targetType, PropertyConverter<T> converter) {
-        Objects.requireNonNull(converter);
-        Lock writeLock = lock.writeLock();
-        try {
-            writeLock.lock();
-			List<PropertyConverter<?>> converters = List.class.cast(this.converters.get(targetType));
-            if(converters!=null && converters.contains(converter)){
-                return;
-            }
-            List<PropertyConverter<?>> newConverters = new ArrayList<>();
-            if (converters != null) {
-                newConverters.addAll(converters);
-            }
-            if(!newConverters.contains(converter)) {
-                newConverters.add(converter);
-            }
-            Collections.sort(newConverters, PRIORITY_COMPARATOR);
-            this.converters.put(targetType, Collections.unmodifiableList(newConverters));
-            // evaluate transitive closure for all inherited supertypes and implemented interfaces
-            // direct implemented interfaces
-            for (Class<?> ifaceType : targetType.getRawType().getInterfaces()) {
-                converters = List.class.cast(this.transitiveConverters.get(TypeLiteral.of(ifaceType)));
-                newConverters = new ArrayList<>();
-                if (converters != null) {
-                    newConverters.addAll(converters);
-                }
-                newConverters.add(converter);
-                Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                this.transitiveConverters.put(TypeLiteral.of(ifaceType), Collections.unmodifiableList(newConverters));
-            }
-            Class<?> superClass = targetType.getRawType().getSuperclass();
-            while (superClass != null && !superClass.equals(Object.class)) {
-                converters = List.class.cast(this.transitiveConverters.get(TypeLiteral.of(superClass)));
-                newConverters = new ArrayList<>();
-                if (converters != null) {
-                    newConverters.addAll(converters);
-                }
-                newConverters.add(converter);
-                Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                this.transitiveConverters.put(TypeLiteral.of(superClass), Collections.unmodifiableList(newConverters));
-                for (Class<?> ifaceType : superClass.getInterfaces()) {
-                    converters = List.class.cast(this.transitiveConverters.get(TypeLiteral.of(ifaceType)));
-                    newConverters = new ArrayList<>();
-                    if (converters != null) {
-                        newConverters.addAll(converters);
-                    }
-                    newConverters.add(converter);
-                    Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                    this.transitiveConverters.put(TypeLiteral.of(ifaceType), Collections.unmodifiableList(newConverters));
-                }
-                superClass = superClass.getSuperclass();
-            }
-        } finally {
-            writeLock.unlock();
-        }
-    }
-
-    /**
-     * Allows to evaluate if a given target type is supported.
-     *
-     * @param targetType the target type, not {@code null}.
-     * @return true, if a converter for the given type is registered, or a default one can be created.
-     */
-    public boolean isTargetTypeSupported(TypeLiteral<?> targetType) {
-        return converters.containsKey(targetType) || transitiveConverters.containsKey(targetType) || createDefaultPropertyConverter(targetType) != null;
-    }
-
-    /**
-     * Get a map of all property converters currently registered. This will not contain the converters that
-     * may be created, when an instance is adapted, which provides a String constructor or compatible
-     * factory methods taking a single String instance.
-     *
-     * @return the current map of instantiated and registered converters.
-     * @see #createDefaultPropertyConverter(org.apache.tamaya.TypeLiteral)
-     */
-    public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
-        Lock readLock = lock.readLock();
-        try {
-            readLock.lock();
-            return new HashMap<>(this.converters);
-        } finally {
-            readLock.unlock();
-        }
-    }
-
-    /**
-     * Get the list of all current registered converters for the given target type.
-     * If not converters are registered, they component tries to create and register a dynamic
-     * converter based on String constructor or static factory methods available.
-     * The converters provided are of the following type and returned in the following order:
-     * <ul>
-     * <li>Converters mapped explicitly to the required target type are returned first, ordered
-     * by decreasing priority. This means, if explicit converters are registered these are used
-     * primarily for converting a value.</li>
-     * <li>The target type of each explicitly registered converter also can be transitively mapped to
-     * 1) all directly implemented interfaces, 2) all its superclasses (except Object), 3) all the interfaces
-     * implemented by its superclasses. These groups of transitive converters is returned similarly in the
-     * order as mentioned, whereas also here a priority based decreasing ordering is applied.</li>
-     * <li>java.lang wrapper classes and native types are automatically mapped.</li>
-     * <li>If no explicit converters are registered, for Enum types a default implementation is provided that
-     * compares the configuration values with the different enum members defined (cases sensitive mapping).</li>
-     * </ul>
-     * <p>
-     * So given that list above directly registered mappings always are tried first, before any transitive mapping
-     * should be used. Also in all cases @Priority annotations are honored for ordering of the converters in place.
-     * Transitive conversion is supported for all directly implemented interfaces (including inherited ones) and
-     * the inheritance hierarchy (exception Object). Superinterfaces of implemented interfaces are ignored.
-     *
-     * @param targetType the target type, not {@code null}.
-     * @param <T>        the type class
-     * @return the ordered list of converters (may be empty for not convertible types).
-     * @see #createDefaultPropertyConverter(org.apache.tamaya.TypeLiteral)
-     */
-    @SuppressWarnings("unchecked")
-	public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
-        Lock readLock = lock.readLock();
-        List<PropertyConverter<T>> converterList = new ArrayList<>();
-        // direct mapped converters
-        try {
-            readLock.lock();
-            addConvertersToList(List.class.cast(this.converters.get(targetType)), converterList);
-            addConvertersToList(List.class.cast(this.transitiveConverters.get(targetType)), converterList);
-        } finally {
-            readLock.unlock();
-        }
-        // handling of java.lang wrapper classes
-        TypeLiteral<T> boxedType = mapBoxedType(targetType);
-        if (boxedType != null) {
-            try {
-                readLock.lock();
-                addConvertersToList(List.class.cast(this.converters.get(boxedType)), converterList);
-            } finally {
-                readLock.unlock();
-            }
-        }
-        if (converterList.isEmpty() && !TypeLiteral.of(String.class).equals(targetType)) {
-            // adding any converters created on the fly, e.g. for enum types.
-            PropertyConverter<T> defaultConverter = createDefaultPropertyConverter(targetType);
-            if (defaultConverter != null) {
-                register(targetType, defaultConverter);
-                try {
-                    readLock.lock();
-                    addConvertersToList(List.class.cast(this.converters.get(targetType)), converterList);
-                } finally {
-                    readLock.unlock();
-                }
-            }
-        }
-        // check for parametrized types, ignoring param type
-        // direct mapped converters
-        if(targetType.getType()!=null) {
-            try {
-                readLock.lock();
-                addConvertersToList(List.class.cast(this.converters.get(
-                        TypeLiteral.of(targetType.getRawType()))), converterList);
-            } finally {
-                readLock.unlock();
-            }
-        }
-        return converterList;
-    }
-
-    private <T> void addConvertersToList(Collection<PropertyConverter<T>> converters, List<PropertyConverter<T>> converterList) {
-        if (converters != null) {
-            for(PropertyConverter<T> conv:converters) {
-                if(!converterList.contains(conv)) {
-                    converterList.add(conv);
-                }
-            }
-        }
-    }
-
-    /**
-     * Maps native types to the corresponding boxed types.
-     *
-     * @param targetType the native type.
-     * @param <T>        the type
-     * @return the boxed type, or null.
-     */
-    @SuppressWarnings("unchecked")
-	private <T> TypeLiteral<T> mapBoxedType(TypeLiteral<T> targetType) {
-        Type parameterType = targetType.getType();
-        if (parameterType == int.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Integer.class));
-        }
-        if (parameterType == short.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Short.class));
-        }
-        if (parameterType == byte.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Byte.class));
-        }
-        if (parameterType == long.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Long.class));
-        }
-        if (parameterType == boolean.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Boolean.class));
-        }
-        if (parameterType == char.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Character.class));
-        }
-        if (parameterType == float.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Float.class));
-        }
-        if (parameterType == double.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Double.class));
-        }
-        if (parameterType == int[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Integer[].class));
-        }
-        if (parameterType == short[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Short[].class));
-        }
-        if (parameterType == byte[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Byte[].class));
-        }
-        if (parameterType == long[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Long[].class));
-        }
-        if (parameterType == boolean.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Boolean.class));
-        }
-        if (parameterType == char[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Character[].class));
-        }
-        if (parameterType == float[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Float[].class));
-        }
-        if (parameterType == double[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Double[].class));
-        }
-        return null;
-    }
-
-    /**
-     * Creates a dynamic PropertyConverter for the given target type.
-     *
-     * @param targetType the target type
-     * @param <T>        the type class
-     * @return a new converter, or null.
-     */
-    protected <T> PropertyConverter<T> createDefaultPropertyConverter(final TypeLiteral<T> targetType) {
-        if (Enum.class.isAssignableFrom(targetType.getRawType())) {
-            return new EnumConverter<>(targetType.getRawType());
-        }
-        PropertyConverter<T> converter = null;
-        final Method factoryMethod = getFactoryMethod(targetType.getRawType(), "of", "valueOf", "instanceOf", "getInstance", "from", "fromString", "parse");
-        if (factoryMethod != null) {
-            converter = new DefaultPropertyConverter<>(factoryMethod, targetType.getRawType());
-        }
-        if (converter == null) {
-            final Constructor<T> constr;
-            try {
-                constr = targetType.getRawType().getDeclaredConstructor(String.class);
-            } catch (NoSuchMethodException e) {
-                LOG.log(Level.FINEST, "No matching constructor for " + targetType, e);
-                return null;
-            }
-            converter = new PropertyConverter<T>() {
-                    @Override
-                    public T convert(String value, ConversionContext context) {
-                        AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                            @Override
-                            public Object run() {
-                                AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                                    @Override
-                                    public Object run() {
-                                        constr.setAccessible(true);
-                                        return null;
-                                    }
-                                });
-                                return null;
-                            }
-                        });
-                        try {
-                            return constr.newInstance(value);
-                        } catch (Exception e) {
-                            LOG.log(Level.SEVERE, "Error creating new PropertyConverter instance " + targetType, e);
-                        }
-                        return null;
-                    }
-                };
-        }
-        return converter;
-    }
-
-    /**
-     * Tries to evaluate a factory method that can be used to create an instance based on a String.
-     *
-     * @param type        the target type
-     * @param methodNames the possible static method names
-     * @return the first method found, or null.
-     */
-    private Method getFactoryMethod(Class<?> type, String... methodNames) {
-        Method m;
-        for (String name : methodNames) {
-            try {
-                m = type.getDeclaredMethod(name, String.class);
-                return m;
-            } catch (NoSuchMethodException | RuntimeException e) {
-                LOG.finest("No such factory method found on type: " + type.getName() + ", methodName: " + name);
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof PropertyConverterManager)) return false;
-
-        PropertyConverterManager that = (PropertyConverterManager) o;
-
-        return converters.equals(that.converters);
-    }
-
-    @Override
-    public int hashCode() {
-        return converters.hashCode();
-    }
-
-    private static class DefaultPropertyConverter<T> implements PropertyConverter<T> {
-
-        private final Method factoryMethod;
-        private final Class<T> targetType;
-
-        DefaultPropertyConverter(Method factoryMethod, Class<T> targetType){
-            this.factoryMethod = Objects.requireNonNull(factoryMethod);
-            this.targetType =  Objects.requireNonNull(targetType);
-        }
-
-        @Override
-        public T convert(String value, ConversionContext context) {
-            context.addSupportedFormats(getClass(), "<String -> "+factoryMethod.toGenericString());
-
-            if (!Modifier.isStatic(factoryMethod.getModifiers())) {
-                throw new ConfigException(factoryMethod.toGenericString() +
-                        " is not a static method. Only static methods can be used as factory methods.");
-            }
-            try {
-                AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                    @Override
-                    public Object run() {
-                        factoryMethod.setAccessible(true);
-                        return null;
-                    }
-                });
-                Object invoke = factoryMethod.invoke(null, value);
-                return targetType.cast(invoke);
-            } catch (Exception e) {
-                throw new ConfigException("Failed to decode '" + value + "'", e);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
deleted file mode 100644
index 96779df..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.spi.PropertyFilter;
-
-import javax.annotation.Priority;
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Comparator for PropertyFilters based on their priority annotations.
- */
-public class PropertyFilterComparator implements Comparator<PropertyFilter>, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final PropertyFilterComparator INSTANCE = new PropertyFilterComparator();
-
-    /** Singleton constructor. */
-    private PropertyFilterComparator(){}
-
-    /**
-     * Get the shared instance of the comparator.
-     * @return the shared instance, never null.
-     */
-    public static PropertyFilterComparator getInstance(){
-        return INSTANCE;
-    }
-
-    /**
-     * Compare 2 filters for ordering the filter chain.
-     *
-     * @param filter1 the first filter
-     * @param filter2 the second filter
-     * @return the comparison result
-     */
-    private int comparePropertyFilters(PropertyFilter filter1, PropertyFilter filter2) {
-        Priority prio1 = filter1.getClass().getAnnotation(Priority.class);
-        Priority prio2 = filter2.getClass().getAnnotation(Priority.class);
-        int ord1 = prio1 != null ? prio1.value() : 0;
-        int ord2 = prio2 != null ? prio2.value() : 0;
-
-        if (ord1 < ord2) {
-            return -1;
-        } else if (ord1 > ord2) {
-            return 1;
-        } else {
-            return filter1.getClass().getName().compareTo(filter2.getClass().getName());
-        }
-    }
-
-    @Override
-    public int compare(PropertyFilter filter1, PropertyFilter filter2) {
-        return comparePropertyFilters(filter1, filter2);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
deleted file mode 100644
index 16ff457..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFiltering.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.FilterContext;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
- * chain of {@link PropertySource} and {@link PropertyFilter}
- * instance to evaluate the current Configuration.
- */
-public final class PropertyFiltering{
-    /**
-     * The logger.
-     */
-    private static final Logger LOG = Logger.getLogger(PropertyFiltering.class.getName());
-
-    /**
-     * The maximal number of filter cycles performed before aborting.
-     */
-    private static final int MAX_FILTER_LOOPS = 10;
-
-    /**
-     * Private singleton constructor.
-     */
-    private PropertyFiltering(){}
-
-    /**
-     * Filters a single value.
-     * @param value the raw value, not {@code null}.
-     * @param context the context
-     * @return the filtered value, including {@code null}.
-     */
-    public static PropertyValue applyFilter(PropertyValue value, ConfigurationContext context) {
-        FilterContext filterContext = new FilterContext(value, context);
-        return filterValue(filterContext);
-    }
-
-    /**
-     * Filters all properties.
-     * @param rawProperties the unfiltered properties, not {@code null}.
-     * @param context the context
-     * @return the filtered value, inclusing null.
-     */
-    public static Map<String, PropertyValue> applyFilters(Map<String, PropertyValue> rawProperties, ConfigurationContext context) {
-        Map<String, PropertyValue> result = new HashMap<>();
-        // Apply filters to values, prevent values filtered to null!
-        for (Map.Entry<String, PropertyValue> entry : rawProperties.entrySet()) {
-            FilterContext filterContext = new FilterContext(entry.getValue(), rawProperties, context);
-            PropertyValue filtered = filterValue(filterContext);
-            if(filtered!=null){
-                result.put(filtered.getKey(), filtered);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Basic filter logic.
-     * @param context the filter context, not {@code null}.
-     * @return the filtered value.
-     */
-    private static PropertyValue filterValue(FilterContext context) {
-        PropertyValue inputValue = context.getProperty();
-        PropertyValue filteredValue = inputValue;
-
-        for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
-            int changes = 0;
-            for (PropertyFilter filter : context.getContext().getPropertyFilters()) {
-                filteredValue = filter.filterProperty(inputValue, context);
-                if (filteredValue != null && !filteredValue.equals(inputValue)) {
-                    changes++;
-                    LOG.finest("Filter - " + inputValue + " -> " + filteredValue + " by " + filter);
-                }
-                if(filteredValue==null){
-                    LOG.finest("Filter removed entry - " + inputValue + ": " + filter);
-                    break;
-                }else{
-                    inputValue = filteredValue;
-                }
-            }
-            if (changes == 0) {
-                LOG.finest("Finishing filter loop, no changes detected.");
-                break;
-            } else if (filteredValue == null) {
-                break;
-            } else {
-                if (i == (MAX_FILTER_LOOPS - 1)) {
-                    if (LOG.isLoggable(Level.WARNING)) {
-                        LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
-                    }
-                } else {
-                    LOG.finest("Repeating filter loop, changes detected: " + changes);
-                }
-            }
-        }
-        return filteredValue;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
deleted file mode 100644
index 20ca097..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import javax.annotation.Priority;
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Comparator for ordering of PropertySources based on their ordinal method and class name.
- */
-public class PropertySourceComparator implements Comparator<PropertySource>, Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final PropertySourceComparator INSTANCE = new PropertySourceComparator();
-
-    /** Singleton constructor. */
-    private PropertySourceComparator(){}
-
-    /**
-     * Get the shared instance of the comparator.
-     * @return the shared instance, never null.
-     */
-    public static PropertySourceComparator getInstance(){
-        return INSTANCE;
-    }
-
-    /**
-     * Order property source reversely, the most important comes first.
-     *
-     * @param source1 the first PropertySource
-     * @param source2 the second PropertySource
-     * @return the comparison result.
-     */
-    private int comparePropertySources(PropertySource source1, PropertySource source2) {
-        if (getOrdinal(source1) < getOrdinal(source2)) {
-            return -1;
-        } else if (getOrdinal(source1) > getOrdinal(source2)) {
-            return 1;
-        } else {
-            return source1.getClass().getName().compareTo(source2.getClass().getName());
-        }
-    }
-
-    /**
-     * Evaluates an ordinal value from a {@link PropertySource}, Hereby the ordinal of type {@code int}
-     * is evaluated as follows:
-     * <ol>
-     *     <li>It evaluates the {@code String} value for {@link PropertySource#TAMAYA_ORDINAL} and tries
-     *     to convert it to an {@code int} value, using {@link Integer#parseInt(String)}.</li>
-     *     <li>It tries to find and evaluate a method {@code int getOrdinal()}.</li>
-     *     <li>It tries to find and evaluate a static field {@code int ORDINAL}.</li>
-     *     <li>It tries to find and evaluate a class level {@link Priority} annotation.</li>
-     *     <li>It uses the default priority ({@code 0}.</li>
-     * </ol>
-     * @param propertySource the property source, not {@code null}.
-     * @return the ordinal value to compare the property source.
-     */
-    public static int getOrdinal(PropertySource propertySource) {
-        return propertySource.getOrdinal();
-    }
-
-    @Override
-    public int compare(PropertySource source1, PropertySource source2) {
-        return comparePropertySources(source1, source2);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/ReflectionUtil.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/ReflectionUtil.java b/code/core/src/main/java/org/apache/tamaya/core/internal/ReflectionUtil.java
deleted file mode 100644
index 6c7a1d2..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/ReflectionUtil.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-
-
-/**
- * Small utility class used by other parts.
- */
-public final class ReflectionUtil {
-
-    private ReflectionUtil(){}
-
-    public static ParameterizedType getParametrizedType(Class<?> clazz) {
-        Type[] genericTypes = clazz.getGenericInterfaces();
-        for (Type type : genericTypes) {
-            if (type instanceof ParameterizedType) {
-                return (ParameterizedType) type;
-            }
-
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7917a9f3/code/core/src/main/java/org/apache/tamaya/core/internal/WrappedPropertySource.java
----------------------------------------------------------------------
diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/WrappedPropertySource.java b/code/core/src/main/java/org/apache/tamaya/core/internal/WrappedPropertySource.java
deleted file mode 100644
index 34f4361..0000000
--- a/code/core/src/main/java/org/apache/tamaya/core/internal/WrappedPropertySource.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.tamaya.core.internal;
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Property source effectively managed by the configuration context, allowing resetting of ordinal and its
- * delegate (e.g. in case of refresh).
- */
-class WrappedPropertySource implements PropertySource{
-
-    private Integer ordinal;
-    private PropertySource delegate;
-    private long loaded = System.currentTimeMillis();
-
-    private WrappedPropertySource(PropertySource delegate) {
-        this(delegate, null);
-    }
-
-    private WrappedPropertySource(PropertySource delegate, Integer ordinal) {
-        this.delegate = Objects.requireNonNull(delegate);
-        this.ordinal = ordinal;
-    }
-
-    public static WrappedPropertySource of(PropertySource ps) {
-        if(ps instanceof  WrappedPropertySource){
-            return (WrappedPropertySource)ps;
-        }
-        return new WrappedPropertySource(ps);
-    }
-
-    public static WrappedPropertySource of(PropertySource ps, Integer ordinal) {
-        if(ps instanceof  WrappedPropertySource){
-            return new WrappedPropertySource(((WrappedPropertySource)ps).getDelegate(), ordinal);
-        }
-        return new WrappedPropertySource(ps, ordinal);
-    }
-
-    public int getOrdinal() {
-        if(this.ordinal!=null){
-            return this.ordinal;
-        }
-        return PropertySourceComparator.getOrdinal(delegate);
-    }
-
-    public void setOrdinal(Integer ordinal) {
-        this.ordinal = ordinal;
-    }
-
-    public void setDelegate(PropertySource delegate) {
-        this.delegate = Objects.requireNonNull(delegate);
-        this.loaded = System.currentTimeMillis();
-    }
-
-    @Override
-    public String getName() {
-        return delegate.getName();
-    }
-
-    @Override
-    public PropertyValue get(String key) {
-        return delegate.get(key);
-    }
-
-    @Override
-    public Map<String, PropertyValue> getProperties() {
-        return delegate.getProperties();
-    }
-
-    @Override
-    public boolean isScannable() {
-        return delegate.isScannable();
-    }
-
-    public PropertySource getDelegate() {
-        return delegate;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof WrappedPropertySource)) return false;
-
-        WrappedPropertySource that = (WrappedPropertySource) o;
-
-        return getDelegate().getName().equals(that.getDelegate().getName());
-    }
-
-    @Override
-    public int hashCode() {
-        return getDelegate().getName().hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return "WrappedPropertySource{" +
-                "name=" + getName() +
-                ", ordinal=" + getOrdinal() +
-                ", scannable=" + isScannable() +
-                ", loadedAt=" + loaded +
-                ", delegate-class=" + delegate.getClass().getName() +
-                '}';
-    }
-}