You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2015/03/14 00:57:24 UTC

[3/3] incubator-tamaya git commit: TAMAYA-60 Removed the modules package for the package hierarchy.

TAMAYA-60 Removed the modules package for the package hierarchy.


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

Branch: refs/heads/master
Commit: 812b11eac3a9bd58e2fa3e0bc829bfc0369aae52
Parents: f7480b2
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sat Mar 14 00:56:48 2015 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sat Mar 14 00:56:48 2015 +0100

----------------------------------------------------------------------
 .../tamaya/builder/ConfigurationBuilder.java    | 580 ++++++++++++
 .../ProgrammaticConfigurationContext.java       | 406 +++++++++
 .../org/apache/tamaya/builder/package-info.java |  28 +
 .../modules/builder/ConfigurationBuilder.java   | 580 ------------
 .../ProgrammaticConfigurationContext.java       | 406 ---------
 .../tamaya/modules/builder/package-info.java    |  28 -
 .../builder/ConfigurationBuilderTest.java       | 896 +++++++++++++++++++
 .../builder/TestNonSPIPropertyFilterA.java      |  34 +
 .../builder/TestNonSPIPropertyFilterB.java      |  34 +
 .../tamaya/builder/TestPropertyFilter.java      |  34 +
 .../tamaya/builder/TestPropertySource.java      |  58 ++
 .../builder/TestPropertySourceProvider.java     |  89 ++
 .../builder/TestPropertySourceProviderB.java    |  89 ++
 .../builder/util/mockito/NotMockedAnswer.java   |  55 ++
 .../tamaya/builder/util/types/CustomTypeA.java  |  34 +
 .../tamaya/builder/util/types/CustomTypeB.java  |  39 +
 .../tamaya/builder/util/types/CustomTypeC.java  |  36 +
 .../types/CustomTypeCPropertyConverter.java     |  28 +
 .../builder/ConfigurationBuilderTest.java       | 896 -------------------
 .../builder/TestNonSPIPropertyFilterA.java      |  34 -
 .../builder/TestNonSPIPropertyFilterB.java      |  34 -
 .../modules/builder/TestPropertyFilter.java     |  34 -
 .../modules/builder/TestPropertySource.java     |  58 --
 .../builder/TestPropertySourceProvider.java     |  89 --
 .../builder/TestPropertySourceProviderB.java    |  89 --
 .../builder/util/mockito/NotMockedAnswer.java   |  55 --
 .../modules/builder/util/types/CustomTypeA.java |  34 -
 .../modules/builder/util/types/CustomTypeB.java |  39 -
 .../modules/builder/util/types/CustomTypeC.java |  36 -
 .../types/CustomTypeCPropertyConverter.java     |  28 -
 .../org.apache.tamaya.PropertyConverter         |   2 +-
 .../org.apache.tamaya.spi.PropertyFilter        |   2 +-
 .../org.apache.tamaya.spi.PropertySource        |   2 +-
 ...org.apache.tamaya.spi.PropertySourceProvider |   2 +-
 34 files changed, 2444 insertions(+), 2444 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
new file mode 100644
index 0000000..51abbcf
--- /dev/null
+++ b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
@@ -0,0 +1,580 @@
+/*
+ * 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.builder;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.PropertyConverter;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.core.internal.DefaultConfiguration;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.format.FlattenedDefaultPropertySource;
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.spi.PropertyFilter;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static java.lang.String.format;
+
+/**
+ * <p>Builder class used for building a configuration manually without relying
+ * only on the Service Provider Interface API.</p>
+ *
+ * <p><strong>Features of the builder</strong></p>
+ *
+ * <ol>
+ *   <li>Adding of property converters manually</li>
+ *   <li>Adding of property sources directly</li>
+ *   <li>Adding of property sources via URL</li>
+ *   <li>Adding of property source providers directly</li>
+ *   <li>Enabling and disabling of via SPI mechanism provided resources as converters,
+ *       property sources, etc.</li>
+ * </ol>
+ *
+ * <p><strong>Example</strong></p>
+ *
+ * <pre>{@code ConfigurationBuilder builder = new ConfigurationBuilder();
+ * builder.disableProvidedPropertySources()           // Do not load provided property
+ *        .disableProvidedPropertySourceProviders()   // sources and providers automatically
+ *        .addPropertySource("file:/etc/conf.properties"); // Load properties from conf.properties
+ *
+ * Configuration config = builder.build();
+ * }</pre>
+ *
+ * <p><strong>Support for configuration formats</strong></p>
+ *
+ * The configuration builder allows you to add property resources
+ * via a URL, as shown in the code example above, without implementing
+ * a {@link org.apache.tamaya.spi.PropertySource PropertySource} or providing an
+ * instance of a {@link org.apache.tamaya.spi.PropertySource PropertySource}.
+ * If a property resource in
+ * a specific format can be added to configuration builder or not depends
+ * on the available implementations of
+ * {@link org.apache.tamaya.format.ConfigurationFormat} in the classpath.
+ * Which formats are available can be checked via
+ * {@link org.apache.tamaya.format.ConfigurationFormats#getFormats()}.
+ */
+public class ConfigurationBuilder {
+    /** Builder used to create new ConfigurationContext instances. */
+    private ProgrammaticConfigurationContext.Builder contextBuilder = new ProgrammaticConfigurationContext.Builder();
+
+    /**
+     * Flag if the config has already been built.
+     * Configuration can be built only once
+     */
+    private boolean built;
+
+    /**
+     * Flag if all existing property converter service providers
+     * should be loaded if the configuration is build.
+     */
+    private boolean loadProvidedPropertyConverters = true;
+
+    /**
+     * Flag if all existing property source service providers
+     * will be loaded if the configuration is build.
+     */
+    private boolean loadProvidedPropertySources = false;
+    private boolean loadProvidedPropertySourceProviders = false;
+
+    private boolean isLoadProvidedPropertyFilters = false;
+
+    /**
+     * Creates a new builder instance.
+     */
+    public ConfigurationBuilder() {
+    }
+
+    /**
+     * Allows to set configuration context during unit tests.
+     */
+    ConfigurationBuilder setConfigurationContext(ConfigurationContext configurationContext) {
+        contextBuilder.setConfigurationContext(configurationContext);
+        return this;
+    }
+
+    /**
+     * Adds one resources with properties in an arbitrary format
+     * to the configuration to be build.
+     *
+     * <p>If a specific format is supported depends on the available
+     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
+     *
+     * <pre>{@code URL resource = new URL("file:/etc/service/config.json");
+     *
+     * builder.addPropertySources(resource);}
+     * </pre>
+     *
+     * @param url resource with properties for the the configuration to be build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.format.ConfigurationFormat
+     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
+     */
+    public ConfigurationBuilder addPropertySource(URL url) {
+        try {
+            ConfigurationData data = getConfigurationDataFromURL(url);
+
+            FlattenedDefaultPropertySource propertySource = new FlattenedDefaultPropertySource(data);
+            addPropertySources(propertySource);
+        } catch (IOException e) {
+            throw new ConfigException("Failed to read " + url.toString(), e);
+        }
+
+        return this;
+    }
+
+    protected ConfigurationData getConfigurationDataFromURL(URL url) throws IOException {
+        ConfigurationData data = ConfigurationFormats.readConfigurationData(url);
+
+        if (null == data) {
+            String mesg = format("No configuration format found which is able " +
+                                 "to read properties from %s.", url.toString());
+
+            throw new ConfigException(mesg);
+        }
+
+        return data;
+    }
+
+    /**
+     * Adds one or more resources with properties in an arbitrary format
+     * to the configuration to be build.
+     *
+     * <p>If a specific format is supported depends on the available
+     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
+     *
+     *<pre>{@code URL first = new URL("file:/etc/service/config.json");
+     * URL second = new URL("file:/etc/defaults/values.properties");
+     *
+     * builder.addPropertySources(first, second);}
+     *</pre>
+     *
+     * @param url first resource with properties for the the configuration to be build.
+     * @param urls list additional of resources with properties for the configuration to be
+     *             build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.format.ConfigurationFormat
+     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
+     */
+    public ConfigurationBuilder addPropertySource(URL url, URL... urls) {
+        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
+              .flatMap(Collection::stream)
+              .filter(entry -> entry != null)
+              .collect(Collectors.toList())
+              .forEach(this::addPropertySource);
+
+        return this;
+    }
+
+
+    /**
+     * Adds one or more resources with properties in an arbitrary format
+     * to the configuration to be build.
+     *
+     * <p>If a specific format is supported depends on the available
+     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
+     *
+     *<pre>{@code builder.addPropertySources("file:/etc/service/config.json",
+     *                            "file:/etc/defaults/values.properties");}
+     *</pre>
+     *
+     * @param url first resource with properties for the the configuration to be build.
+     * @param urls list additional of resources with properties for the configuration to be
+     *             build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.format.ConfigurationFormat
+     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
+     */
+    public ConfigurationBuilder addPropertySource(String url, String... urls) {
+        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
+              .flatMap(Collection::stream)
+              .filter(entry -> entry != null)
+              .map(new StringToURLMapper())
+              .collect(Collectors.toList())
+              .forEach(this::addPropertySource);
+
+        return this;
+    }
+
+    /**
+     * Adds one or more property source instances to the configuration to be build.
+     *
+     *<pre>{@code PropertySource first = new CustomPropertySource();
+     * PropertySource second = new YetAnotherPropertySource();
+     *
+     * builder.addPropertySources(first, second)};
+     *</pre>
+     *
+     * @param sources list of property source instances with properties for the
+     *                configuration to be build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertySource
+     */
+    public ConfigurationBuilder addPropertySources(PropertySource... sources){
+        checkBuilderState();
+
+        contextBuilder.addPropertySources(Objects.requireNonNull(sources));
+        return this;
+    }
+
+    private void checkBuilderState() {
+        if (built) {
+            throw new IllegalStateException("Configuration has already been build.");
+        }
+    }
+
+    /**
+     * Adds one or more property source provider instances to the configuration to be build.
+     *
+     * <pre>{@code PropertySourceProvider jc = new JavaConfigurationProvider();
+     *
+     * builder.addPropertySources(jc)};
+     * </pre>
+     *
+     * @param providers list of property source provider instances each providing a set
+     *                  of property source instances for the configuration to be build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertySourceProvider
+     */
+    public ConfigurationBuilder addPropertySourceProviders(PropertySourceProvider... providers){
+        contextBuilder.addPropertySourceProviders(providers);
+        return this;
+    }
+
+    /**
+     * Adds one or more property filter instances to the configuration to be build.
+     *
+     * <pre>{@code PropertyFilter quoteReplacingFilter = new QuoteFilter();
+     * PropertyFilter commaRemovingFilter = new CommaFilter();
+     *
+     * builder.addPropertyFilters(commaRemovingFilter, quoteReplacingFilter)};
+     * </pre>
+     *
+     * @param filters list of property filter instances which should be applied
+     *                to the properties of the configuration to be build.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertyFilter
+     * @see #disableProvidedPropertyFilters()
+     * @see #enabledProvidedPropertyFilters()
+     */
+    public ConfigurationBuilder addPropertyFilters(PropertyFilter... filters){
+        Objects.requireNonNull(filters);
+
+        contextBuilder.addPropertyFilters(filters);
+        return this;
+    }
+
+
+    /**
+     * @return the builder instance currently used
+     */
+    public ConfigurationBuilder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy propertyValueCombinationPolicy){
+        contextBuilder.setPropertyValueCombinationPolicy(propertyValueCombinationPolicy);
+        return this;
+    }
+
+    /**
+     * Adds a property converter for the a given type to the configuration to
+     * be build.
+     *
+     * <pre>{@code PropertyConverter<MyType> converter = value -> new MyType(value, 42);
+     *
+     * builder.addPropertyConverter(MyType.class, converter}
+     * </pre>
+     *
+     * @param type the required target type the converter should be applied to
+     * @param converter the converter to be used to convert the string property
+     *                  to the given target type.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.PropertyConverter
+     * @see #enableProvidedPropertyConverters()
+     * @see #disableProvidedPropertyConverters()
+     */
+    public <T> ConfigurationBuilder addPropertyConverter(Class<T> type, PropertyConverter<T> converter) {
+        Objects.requireNonNull(type);
+        Objects.requireNonNull(converter);
+
+        return addPropertyConverter(TypeLiteral.of(type), converter);
+    }
+
+    /**
+     * @return the builder instance currently used
+     */
+    public <T> ConfigurationBuilder addPropertyConverter(TypeLiteral<T> type, PropertyConverter<T> propertyConverter){
+        Objects.requireNonNull(type);
+        Objects.requireNonNull(propertyConverter);
+
+        contextBuilder.addPropertyConverter(type, propertyConverter);
+        return this;
+    }
+
+    /**
+     * Checks if the automatic loading of all {@link org.apache.tamaya.PropertyConverter
+     * PropertyConverter} service providers is enabled or disabled.
+     *
+     * @return {@code true} if the automatic loading is enabled,
+     *         otherwise {@code false}.
+     *
+     * @see #enableProvidedPropertyConverters()
+     * @see #disableProvidedPropertyConverters()
+     * @see #addPropertyConverter(Class, org.apache.tamaya.PropertyConverter)
+     * @see #addPropertyConverter(org.apache.tamaya.TypeLiteral, org.apache.tamaya.PropertyConverter)
+     */
+    public boolean isPropertyConverterLoadingEnabled() {
+        return loadProvidedPropertyConverters;
+    }
+
+    /**
+     * Enables the loading of all {@link org.apache.tamaya.PropertyConverter}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.PropertyConverter
+     * @see #disableProvidedPropertyConverters()
+     * @see #enableProvidedPropertyConverters()
+     */
+    public ConfigurationBuilder enableProvidedPropertyConverters() {
+        checkBuilderState();
+
+        loadProvidedPropertyConverters = true;
+
+        return this;
+    }
+
+    /**
+     * Disables the automatic loading of all {@link org.apache.tamaya.PropertyConverter}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.PropertyConverter
+     * @see #enableProvidedPropertyConverters()
+     * @see #addPropertyConverter(Class, org.apache.tamaya.PropertyConverter)
+     */
+    public ConfigurationBuilder disableProvidedPropertyConverters() {
+        checkBuilderState();
+
+        loadProvidedPropertyConverters = false;
+
+        return this;
+    }
+
+
+    /**
+     * Enables the automatic loading of all {@link org.apache.tamaya.spi.PropertySource}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertySource
+     * @see #disableProvidedPropertySources()
+     */
+    public ConfigurationBuilder enableProvidedPropertySources() {
+        checkBuilderState();
+
+        loadProvidedPropertySources = true;
+
+        return this;
+    }
+
+    /**
+     * Checks if the automatic loading of all {@link org.apache.tamaya.spi.PropertySource
+     * PropertySource} service providers is enabled or disabled.
+     *
+     * @return {@code true} if the automatic loading is enabled,
+     *         otherwise {@code false}.
+     */
+    public boolean isPropertySourcesLoadingEnabled() {
+        return loadProvidedPropertySources;
+    }
+
+
+    /**
+     * Checks if the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter
+     * PropertyFilter} service providers is enabled or disabled.
+     *
+     * @return {@code true} if the automatic loading is enabled,
+     *         otherwise {@code false}.
+     */
+    public boolean isPropertyFilterLoadingEnabled() {
+        return isLoadProvidedPropertyFilters;
+    }
+
+    /**
+     * Enables the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertyFilter
+     * @see #disableProvidedPropertyFilters()
+     * @see #addPropertyFilters(org.apache.tamaya.spi.PropertyFilter...)
+     */
+    public ConfigurationBuilder enabledProvidedPropertyFilters() {
+        checkBuilderState();
+
+        isLoadProvidedPropertyFilters = true;
+
+        return this;
+    }
+
+    /**
+     * Disables the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertyFilter
+     * @see #enabledProvidedPropertyFilters()
+     * @see #addPropertyFilters(org.apache.tamaya.spi.PropertyFilter...)
+     *
+     * @return the builder instance currently used
+     */
+    public ConfigurationBuilder disableProvidedPropertyFilters() {
+        checkBuilderState();
+
+        isLoadProvidedPropertyFilters = false;
+
+        return this;
+    }
+
+    /**
+     * Disables the automatic loading of all {@link org.apache.tamaya.spi.PropertySource}
+     * service providers.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertySource
+     * @see #enableProvidedPropertySources()
+     */
+    public ConfigurationBuilder disableProvidedPropertySources() {
+        checkBuilderState();
+
+        loadProvidedPropertySources = false;
+
+        return this;
+    }
+
+    /**
+     * Enables the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
+     * property source providers} provided via the SPI API.
+     *
+     * @return the builder instance currently used
+     *
+     * @see org.apache.tamaya.spi.PropertySourceProvider
+     * @see
+     */
+    public ConfigurationBuilder enableProvidedPropertySourceProviders() {
+        checkBuilderState();
+
+        loadProvidedPropertySourceProviders = true;
+
+        return this;
+    }
+
+    /**
+     * Disables the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
+     * property source providers} provided via the SPI API.
+     *
+     * @return the builder instance currently used
+     */
+    public ConfigurationBuilder disableProvidedPropertySourceProviders() {
+        checkBuilderState();
+
+        loadProvidedPropertySourceProviders = false;
+
+        return this;
+    }
+
+    /**
+     * Checks if the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
+     * PropertySourceProviders} is enabled or disabled.
+     *
+     * @return {@code true} if the automatic loading is enabled,
+     *         otherwise {@code false}.
+     */
+    public boolean isPropertySourceProvidersLoadingEnabled() {
+        return loadProvidedPropertySourceProviders;
+    }
+
+    //X TODO think on a functonality/API for using the default PropertyConverters and use the configured ones here
+    //X TODO as overrides used first.
+
+
+    /**
+     * Builds a new configuration based on the configuration of this builder instance.
+     *
+     * @return a new {@link org.apache.tamaya.Configuration configuration instance},
+     *         never {@code null}.
+     */
+    public Configuration build() {
+        checkBuilderState();
+
+        built = true;
+
+        contextBuilder.loadProvidedPropertyConverters(isPropertyConverterLoadingEnabled());
+        contextBuilder.loadProvidedPropertySources(isPropertySourcesLoadingEnabled());
+        contextBuilder.loadProvidedPropertySourceProviders(isPropertySourceProvidersLoadingEnabled());
+        contextBuilder.loadProvidedPropertyFilters(isLoadProvidedPropertyFilters);
+
+        return new DefaultConfiguration(contextBuilder.build());
+    }
+
+    /**
+     * Mapper to map a URL given as string to an URL instance.
+     */
+    private static class StringToURLMapper implements Function<String, URL> {
+        @Override
+        public URL apply(String u) {
+            try {
+                return new URL(u);
+            } catch (MalformedURLException e) {
+                throw new ConfigException(u + " is not a valid URL", e);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java b/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
new file mode 100644
index 0000000..6c7e845
--- /dev/null
+++ b/modules/builder/src/main/java/org/apache/tamaya/builder/ProgrammaticConfigurationContext.java
@@ -0,0 +1,406 @@
+/*
+ * 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.builder;
+
+
+import org.apache.tamaya.PropertyConverter;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.core.internal.PropertyConverterManager;
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spi.PropertyFilter;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
+import org.apache.tamaya.spi.ServiceContext;
+
+import javax.annotation.Priority;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.StringJoiner;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.StampedLock;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.toList;
+
+/**
+ * Implementation of the {@link org.apache.tamaya.spi.ConfigurationContext}
+ * used by the {@link org.apache.tamaya.builder.ConfigurationBuilder}
+ * internally.
+ */
+class ProgrammaticConfigurationContext implements ConfigurationContext {
+
+    /**
+     * The logger used.
+     */
+    private final static Logger LOG = Logger.getLogger(ProgrammaticConfigurationContext.class.getName());
+    /**
+     * Cubcomponent handling {@link org.apache.tamaya.PropertyConverter} instances.
+     */
+    private PropertyConverterManager propertyConverterManager = new PropertyConverterManager();
+
+    /**
+     * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertySource} instances.
+     */
+    private List<PropertySource> immutablePropertySources = new ArrayList<>();
+
+    /**
+     * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertyFilter} instances.
+     */
+    private List<PropertyFilter> immutablePropertyFilters = new ArrayList<>();
+
+    /**
+     * The overriding policy used when combining PropertySources registered to evalute the final configuration
+     * values.
+     */
+    private PropertyValueCombinationPolicy propertyValueCombinationPolicy;
+
+    /**
+     * Lock for internal synchronization.
+     */
+    private StampedLock propertySourceLock = new StampedLock();
+
+
+    /**
+     * The first time the Configuration system gets invoked we do initialize
+     * all our {@link org.apache.tamaya.spi.PropertySource}s and
+     * {@link org.apache.tamaya.spi.PropertyFilter}s which are known at startup.
+     */
+    @SuppressWarnings("unchecked")
+    public ProgrammaticConfigurationContext(Builder builder) {
+        propertyConverterManager = new PropertyConverterManager(builder.loadProvidedPropertyConverters);
+
+        immutablePropertySources = getAllPropertySources(builder).stream()
+                                                                 .sorted(this::comparePropertySources)
+                                                                 .collect(Collectors.toList());
+
+
+        immutablePropertyFilters = getPropertyFilters(builder).stream()
+                                                              .sorted(this::comparePropertyFilters)
+                                                              .collect(toList());
+
+
+        propertyValueCombinationPolicy = builder.propertyValueCombinationPolicy;
+
+        builder.propertyConverters.forEach((literal, converters) -> {
+            converters.stream().filter(c -> c != null)
+                      .forEach(c -> propertyConverterManager.register((TypeLiteral<Object>) literal,
+                                                                      (PropertyConverter<Object>) c));
+        });
+
+        LOG.info(() -> "Using " + immutablePropertySources.size() + " property sources: " +
+                createStringList(immutablePropertySources, ps -> ps.getName() + '[' + ps.getClass().getName() + ']'));
+
+
+        LOG.info(() -> "Using " + immutablePropertyFilters.size() + " property filters: " +
+                createStringList(immutablePropertyFilters, f -> f.getClass().getName()));
+
+
+        LOG.info(() -> "Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
+    }
+
+    private List<PropertyFilter> getPropertyFilters(Builder builder) {
+        List<PropertyFilter> provided = builder.loadProvidedPropertyFilters
+                ? ServiceContext.getInstance().getServices(PropertyFilter.class)
+                : new ArrayList<>(0);
+
+        List<PropertyFilter> configured = builder.propertyFilters;
+
+        return Stream.of(provided, configured).flatMap(Collection::stream)
+                     .collect(toList());
+    }
+
+    private List<PropertySource> getAllPropertySources(Builder builder) {
+        List<PropertySource> provided = builder.loadProvidedPropertySources
+                ? ServiceContext.getInstance().getServices(PropertySource.class)
+                : new ArrayList<>(0);
+
+        if (builder.loadProvidedPropertySourceProviders) {
+            List<PropertySourceProvider> providers = ServiceContext.getInstance()
+                                                                  .getServices(PropertySourceProvider.class);
+            for (PropertySourceProvider provider : providers) {
+                Collection<PropertySource> sources = provider.getPropertySources();
+                provided.addAll(sources);
+            }
+        }
+
+        List<PropertySource> configured = builder.propertySources;
+
+        return Stream.of(provided, configured).flatMap(Collection::stream)
+                     .collect(toList());
+    }
+
+    public void addPropertySources(PropertySource... propertySourcesToAdd) {
+        Lock writeLock = propertySourceLock.asWriteLock();
+        try {
+            writeLock.lock();
+            List<PropertySource> newPropertySources = new ArrayList<>(this.immutablePropertySources);
+            newPropertySources.addAll(Arrays.asList(propertySourcesToAdd));
+            Collections.sort(newPropertySources, this::comparePropertySources);
+
+            this.immutablePropertySources = Collections.unmodifiableList(newPropertySources);
+        } finally {
+            writeLock.unlock();
+        }
+    }
+
+    /**
+     * Order property source reversely, the most important come first.
+     *
+     * @param source1 the first PropertySource
+     * @param source2 the second PropertySource
+     * @return the comparison result.
+     */
+    private int comparePropertySources(PropertySource source1, PropertySource source2) {
+
+        //X TODO this method duplicates org.apache.tamaya.core.internal.DefaultConfigurationContext.PropertySourceComparator.comparePropertySources()
+        //X maybe we should extract the Comperator in an own class for real code-reuse (copy paste == bad code reuse)
+
+        if (source1.getOrdinal() < source2.getOrdinal()) {
+            return -1;
+        } else if (source1.getOrdinal() > source2.getOrdinal()) {
+            return 1;
+        } else {
+            return source1.getClass().getName().compareTo(source2.getClass().getName());
+        }
+    }
+
+    /**
+     * 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) {
+
+        //X TODO this method duplicates org.apache.tamaya.core.internal.DefaultConfigurationContext.PropertySourceComparator.comparePropertyFilters()
+        //X maybe we should extract the Comperator in an own class for real code-reuse (copy paste == bad code reuse)
+
+        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 List<PropertySource> getPropertySources() {
+        return immutablePropertySources;
+    }
+
+    public <T> void addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
+        propertyConverterManager.register(typeToConvert, propertyConverter);
+        LOG.info(() -> "Added PropertyConverter: " + propertyConverter.getClass().getName());
+    }
+
+    @Override
+    public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
+        return propertyConverterManager.getPropertyConverters();
+    }
+
+    @Override
+    public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
+        return propertyConverterManager.getPropertyConverters(targetType);
+    }
+
+    @Override
+    public List<PropertyFilter> getPropertyFilters() {
+        return immutablePropertyFilters;
+    }
+
+    @Override
+    public PropertyValueCombinationPolicy getPropertyValueCombinationPolicy() {
+        return propertyValueCombinationPolicy;
+    }
+
+    private <T> String createStringList(Collection<T> propertySources, Function<T, String> mapper) {
+        StringJoiner joiner = new StringJoiner(", ");
+        propertySources.forEach(t -> joiner.add(mapper.apply(t)));
+        return joiner.toString();
+    }
+
+    @Override
+    public ConfigurationContextBuilder toBuilder() {
+        // @todo Check if it could be useful to support this method, Oliver B. Fischer
+        throw new RuntimeException("This method is currently not supported.");
+    }
+
+    @Override
+    public Collection<PropertySource> getPropertySources(Predicate<PropertySource> selector) {
+        // @todo Check if it could be useful to support this method, Oliver B. Fischer
+        throw new RuntimeException("This method is currently not supported.");
+    }
+
+    /**
+     * The Builder for {@link ProgrammaticConfigurationContext}
+     */
+    public final static class Builder {
+        /**
+         * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertySource} instances.
+         */
+        private List<PropertySource> propertySources = new ArrayList<>();
+
+        /**
+         * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertyFilter} instances.
+         */
+        private List<PropertyFilter> propertyFilters = new ArrayList<>();
+
+        private Map<TypeLiteral<?>, List<PropertyConverter<?>>> propertyConverters = new HashMap<>();
+
+        /**
+         * The overriding policy used when combining PropertySources registered to evalute the final configuration
+         * values.
+         */
+        private PropertyValueCombinationPolicy propertyValueCombinationPolicy =
+                PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
+
+        private boolean loadProvidedPropertyConverters;
+        private boolean loadProvidedPropertySources;
+        private boolean loadProvidedPropertySourceProviders;
+        private boolean loadProvidedPropertyFilters;
+
+        public Builder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy policy) {
+            this.propertyValueCombinationPolicy = Objects.requireNonNull(policy);
+            return this;
+        }
+
+        public Builder addPropertySources(PropertySource... propertySources) {
+            List<PropertySource> filtered = Stream.of(propertySources).filter(this::isNotNull)
+                                                  .collect(toList());
+
+            this.propertySources.addAll(filtered);
+
+            return this;
+        }
+
+        public Builder addPropertySources(Collection<PropertySource> propertySources) {
+            List<PropertySource> filtered = propertySources.stream().filter(this::isNotNull)
+                                                           .collect(toList());
+
+            this.propertySources.addAll(filtered);
+
+            return this;
+        }
+
+        public Builder addPropertySourceProviders(PropertySourceProvider... propertySourceProviders) {
+            List<PropertySourceProvider> providers = Stream.of(propertySourceProviders).filter(this::isNotNull)
+                                                           .collect(toList());
+
+            return addPropertySourceProviders(providers);
+        }
+
+        public Builder addPropertySourceProviders(Collection<PropertySourceProvider> providers) {
+            List<PropertySource> filtered = providers.stream().filter(this::isNotNull)
+                                                     .flatMap(p -> p.getPropertySources().stream())
+                                                     .filter(this::isNotNull)
+                                                     .collect(toList());
+
+            this.propertySources.addAll(filtered);
+
+            return this;
+        }
+
+        public Builder addPropertyFilters(PropertyFilter... propertySources) {
+            List<PropertyFilter> sources = Stream.of(propertySources).filter(this::isNotNull)
+                                                 .collect(toList());
+
+            this.propertyFilters.addAll(sources);
+
+            return this;
+        }
+
+        public Builder addPropertyFilters(Collection<PropertyFilter> propertySources) {
+            List<PropertyFilter> sources = propertySources.stream().filter(this::isNotNull)
+                                                          .collect(toList());
+
+            this.propertyFilters.addAll(sources);
+
+            return this;
+        }
+
+        /**
+         * Should be never used.
+         */
+        @Deprecated
+        public Builder setConfigurationContext(ConfigurationContext configurationContext) {
+            this.addPropertySources(configurationContext.getPropertySources());
+            this.addPropertyFilters(configurationContext.getPropertyFilters());
+            this.propertyValueCombinationPolicy = Objects.requireNonNull(
+                    configurationContext.getPropertyValueCombinationPolicy());
+            return this;
+        }
+
+        //X TODO think on a functonality/API for using the default PropertyConverters and use the configured ones here
+        //X TODO as overrides used first.
+
+        public <T> Builder addPropertyConverter(TypeLiteral<T> type, PropertyConverter<T> propertyConverter) {
+            propertyConverters.computeIfAbsent(type, (t) -> new ArrayList<>())
+                              .add(propertyConverter);
+
+            return this;
+        }
+
+        public ConfigurationContext build() {
+            return new ProgrammaticConfigurationContext(this);
+        }
+
+
+        public void loadProvidedPropertyConverters(boolean state) {
+            loadProvidedPropertyConverters = state;
+        }
+
+        public void loadProvidedPropertySources(boolean state) {
+            loadProvidedPropertySources = state;
+        }
+
+        public void loadProvidedPropertySourceProviders(boolean state) {
+            loadProvidedPropertySourceProviders = state;
+        }
+
+        public void loadProvidedPropertyFilters(boolean state) {
+            loadProvidedPropertyFilters = state;
+        }
+
+        private <T> boolean isNotNull(T item) {
+            return null != item;
+        }
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/builder/package-info.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/builder/package-info.java b/modules/builder/src/main/java/org/apache/tamaya/builder/package-info.java
new file mode 100644
index 0000000..24c86a9
--- /dev/null
+++ b/modules/builder/src/main/java/org/apache/tamaya/builder/package-info.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+/**
+ * This package provides
+ * {@link org.apache.tamaya.builder.ConfigurationBuilder a configuration
+ * builder} that allows to build a configuration manually without
+ * using exclusively on the Service Provider Interface API of Tamaya.
+ *
+ * @see org.apache.tamaya.builder.ConfigurationBuilder
+ * @see org.apache.tamaya.Configuration
+ */
+package org.apache.tamaya.builder;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java b/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
deleted file mode 100644
index 2d7ccac..0000000
--- a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
+++ /dev/null
@@ -1,580 +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.modules.builder;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.PropertyConverter;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.core.internal.DefaultConfiguration;
-import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.format.FlattenedDefaultPropertySource;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Objects;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static java.lang.String.format;
-
-/**
- * <p>Builder class used for building a configuration manually without relying
- * only on the Service Provider Interface API.</p>
- *
- * <p><strong>Features of the builder</strong></p>
- *
- * <ol>
- *   <li>Adding of property converters manually</li>
- *   <li>Adding of property sources directly</li>
- *   <li>Adding of property sources via URL</li>
- *   <li>Adding of property source providers directly</li>
- *   <li>Enabling and disabling of via SPI mechanism provided resources as converters,
- *       property sources, etc.</li>
- * </ol>
- *
- * <p><strong>Example</strong></p>
- *
- * <pre>{@code ConfigurationBuilder builder = new ConfigurationBuilder();
- * builder.disableProvidedPropertySources()           // Do not load provided property
- *        .disableProvidedPropertySourceProviders()   // sources and providers automatically
- *        .addPropertySource("file:/etc/conf.properties"); // Load properties from conf.properties
- *
- * Configuration config = builder.build();
- * }</pre>
- *
- * <p><strong>Support for configuration formats</strong></p>
- *
- * The configuration builder allows you to add property resources
- * via a URL, as shown in the code example above, without implementing
- * a {@link org.apache.tamaya.spi.PropertySource PropertySource} or providing an
- * instance of a {@link org.apache.tamaya.spi.PropertySource PropertySource}.
- * If a property resource in
- * a specific format can be added to configuration builder or not depends
- * on the available implementations of
- * {@link org.apache.tamaya.format.ConfigurationFormat} in the classpath.
- * Which formats are available can be checked via
- * {@link org.apache.tamaya.format.ConfigurationFormats#getFormats()}.
- */
-public class ConfigurationBuilder {
-    /** Builder used to create new ConfigurationContext instances. */
-    private ProgrammaticConfigurationContext.Builder contextBuilder = new ProgrammaticConfigurationContext.Builder();
-
-    /**
-     * Flag if the config has already been built.
-     * Configuration can be built only once
-     */
-    private boolean built;
-
-    /**
-     * Flag if all existing property converter service providers
-     * should be loaded if the configuration is build.
-     */
-    private boolean loadProvidedPropertyConverters = true;
-
-    /**
-     * Flag if all existing property source service providers
-     * will be loaded if the configuration is build.
-     */
-    private boolean loadProvidedPropertySources = false;
-    private boolean loadProvidedPropertySourceProviders = false;
-
-    private boolean isLoadProvidedPropertyFilters = false;
-
-    /**
-     * Creates a new builder instance.
-     */
-    public ConfigurationBuilder() {
-    }
-
-    /**
-     * Allows to set configuration context during unit tests.
-     */
-    ConfigurationBuilder setConfigurationContext(ConfigurationContext configurationContext) {
-        contextBuilder.setConfigurationContext(configurationContext);
-        return this;
-    }
-
-    /**
-     * Adds one resources with properties in an arbitrary format
-     * to the configuration to be build.
-     *
-     * <p>If a specific format is supported depends on the available
-     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
-     *
-     * <pre>{@code URL resource = new URL("file:/etc/service/config.json");
-     *
-     * builder.addPropertySources(resource);}
-     * </pre>
-     *
-     * @param url resource with properties for the the configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.format.ConfigurationFormat
-     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
-     */
-    public ConfigurationBuilder addPropertySource(URL url) {
-        try {
-            ConfigurationData data = getConfigurationDataFromURL(url);
-
-            FlattenedDefaultPropertySource propertySource = new FlattenedDefaultPropertySource(data);
-            addPropertySources(propertySource);
-        } catch (IOException e) {
-            throw new ConfigException("Failed to read " + url.toString(), e);
-        }
-
-        return this;
-    }
-
-    protected ConfigurationData getConfigurationDataFromURL(URL url) throws IOException {
-        ConfigurationData data = ConfigurationFormats.readConfigurationData(url);
-
-        if (null == data) {
-            String mesg = format("No configuration format found which is able " +
-                                 "to read properties from %s.", url.toString());
-
-            throw new ConfigException(mesg);
-        }
-
-        return data;
-    }
-
-    /**
-     * Adds one or more resources with properties in an arbitrary format
-     * to the configuration to be build.
-     *
-     * <p>If a specific format is supported depends on the available
-     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
-     *
-     *<pre>{@code URL first = new URL("file:/etc/service/config.json");
-     * URL second = new URL("file:/etc/defaults/values.properties");
-     *
-     * builder.addPropertySources(first, second);}
-     *</pre>
-     *
-     * @param url first resource with properties for the the configuration to be build.
-     * @param urls list additional of resources with properties for the configuration to be
-     *             build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.format.ConfigurationFormat
-     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
-     */
-    public ConfigurationBuilder addPropertySource(URL url, URL... urls) {
-        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
-              .flatMap(Collection::stream)
-              .filter(entry -> entry != null)
-              .collect(Collectors.toList())
-              .forEach(this::addPropertySource);
-
-        return this;
-    }
-
-
-    /**
-     * Adds one or more resources with properties in an arbitrary format
-     * to the configuration to be build.
-     *
-     * <p>If a specific format is supported depends on the available
-     * {@link org.apache.tamaya.format.ConfigurationFormat} implementations.</p>
-     *
-     *<pre>{@code builder.addPropertySources("file:/etc/service/config.json",
-     *                            "file:/etc/defaults/values.properties");}
-     *</pre>
-     *
-     * @param url first resource with properties for the the configuration to be build.
-     * @param urls list additional of resources with properties for the configuration to be
-     *             build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.format.ConfigurationFormat
-     * @see org.apache.tamaya.format.ConfigurationFormats#getFormats()
-     */
-    public ConfigurationBuilder addPropertySource(String url, String... urls) {
-        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
-              .flatMap(Collection::stream)
-              .filter(entry -> entry != null)
-              .map(new StringToURLMapper())
-              .collect(Collectors.toList())
-              .forEach(this::addPropertySource);
-
-        return this;
-    }
-
-    /**
-     * Adds one or more property source instances to the configuration to be build.
-     *
-     *<pre>{@code PropertySource first = new CustomPropertySource();
-     * PropertySource second = new YetAnotherPropertySource();
-     *
-     * builder.addPropertySources(first, second)};
-     *</pre>
-     *
-     * @param sources list of property source instances with properties for the
-     *                configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertySource
-     */
-    public ConfigurationBuilder addPropertySources(PropertySource... sources){
-        checkBuilderState();
-
-        contextBuilder.addPropertySources(Objects.requireNonNull(sources));
-        return this;
-    }
-
-    private void checkBuilderState() {
-        if (built) {
-            throw new IllegalStateException("Configuration has already been build.");
-        }
-    }
-
-    /**
-     * Adds one or more property source provider instances to the configuration to be build.
-     *
-     * <pre>{@code PropertySourceProvider jc = new JavaConfigurationProvider();
-     *
-     * builder.addPropertySources(jc)};
-     * </pre>
-     *
-     * @param providers list of property source provider instances each providing a set
-     *                  of property source instances for the configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertySourceProvider
-     */
-    public ConfigurationBuilder addPropertySourceProviders(PropertySourceProvider... providers){
-        contextBuilder.addPropertySourceProviders(providers);
-        return this;
-    }
-
-    /**
-     * Adds one or more property filter instances to the configuration to be build.
-     *
-     * <pre>{@code PropertyFilter quoteReplacingFilter = new QuoteFilter();
-     * PropertyFilter commaRemovingFilter = new CommaFilter();
-     *
-     * builder.addPropertyFilters(commaRemovingFilter, quoteReplacingFilter)};
-     * </pre>
-     *
-     * @param filters list of property filter instances which should be applied
-     *                to the properties of the configuration to be build.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyFilter
-     * @see #disableProvidedPropertyFilters()
-     * @see #enabledProvidedPropertyFilters()
-     */
-    public ConfigurationBuilder addPropertyFilters(PropertyFilter... filters){
-        Objects.requireNonNull(filters);
-
-        contextBuilder.addPropertyFilters(filters);
-        return this;
-    }
-
-
-    /**
-     * @return the builder instance currently used
-     */
-    public ConfigurationBuilder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy propertyValueCombinationPolicy){
-        contextBuilder.setPropertyValueCombinationPolicy(propertyValueCombinationPolicy);
-        return this;
-    }
-
-    /**
-     * Adds a property converter for the a given type to the configuration to
-     * be build.
-     *
-     * <pre>{@code PropertyConverter<MyType> converter = value -> new MyType(value, 42);
-     *
-     * builder.addPropertyConverter(MyType.class, converter}
-     * </pre>
-     *
-     * @param type the required target type the converter should be applied to
-     * @param converter the converter to be used to convert the string property
-     *                  to the given target type.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.PropertyConverter
-     * @see #enableProvidedPropertyConverters()
-     * @see #disableProvidedPropertyConverters()
-     */
-    public <T> ConfigurationBuilder addPropertyConverter(Class<T> type, PropertyConverter<T> converter) {
-        Objects.requireNonNull(type);
-        Objects.requireNonNull(converter);
-
-        return addPropertyConverter(TypeLiteral.of(type), converter);
-    }
-
-    /**
-     * @return the builder instance currently used
-     */
-    public <T> ConfigurationBuilder addPropertyConverter(TypeLiteral<T> type, PropertyConverter<T> propertyConverter){
-        Objects.requireNonNull(type);
-        Objects.requireNonNull(propertyConverter);
-
-        contextBuilder.addPropertyConverter(type, propertyConverter);
-        return this;
-    }
-
-    /**
-     * Checks if the automatic loading of all {@link org.apache.tamaya.PropertyConverter
-     * PropertyConverter} service providers is enabled or disabled.
-     *
-     * @return {@code true} if the automatic loading is enabled,
-     *         otherwise {@code false}.
-     *
-     * @see #enableProvidedPropertyConverters()
-     * @see #disableProvidedPropertyConverters()
-     * @see #addPropertyConverter(Class, org.apache.tamaya.PropertyConverter)
-     * @see #addPropertyConverter(org.apache.tamaya.TypeLiteral, org.apache.tamaya.PropertyConverter)
-     */
-    public boolean isPropertyConverterLoadingEnabled() {
-        return loadProvidedPropertyConverters;
-    }
-
-    /**
-     * Enables the loading of all {@link org.apache.tamaya.PropertyConverter}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.PropertyConverter
-     * @see #disableProvidedPropertyConverters()
-     * @see #enableProvidedPropertyConverters()
-     */
-    public ConfigurationBuilder enableProvidedPropertyConverters() {
-        checkBuilderState();
-
-        loadProvidedPropertyConverters = true;
-
-        return this;
-    }
-
-    /**
-     * Disables the automatic loading of all {@link org.apache.tamaya.PropertyConverter}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.PropertyConverter
-     * @see #enableProvidedPropertyConverters()
-     * @see #addPropertyConverter(Class, org.apache.tamaya.PropertyConverter)
-     */
-    public ConfigurationBuilder disableProvidedPropertyConverters() {
-        checkBuilderState();
-
-        loadProvidedPropertyConverters = false;
-
-        return this;
-    }
-
-
-    /**
-     * Enables the automatic loading of all {@link org.apache.tamaya.spi.PropertySource}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertySource
-     * @see #disableProvidedPropertySources()
-     */
-    public ConfigurationBuilder enableProvidedPropertySources() {
-        checkBuilderState();
-
-        loadProvidedPropertySources = true;
-
-        return this;
-    }
-
-    /**
-     * Checks if the automatic loading of all {@link org.apache.tamaya.spi.PropertySource
-     * PropertySource} service providers is enabled or disabled.
-     *
-     * @return {@code true} if the automatic loading is enabled,
-     *         otherwise {@code false}.
-     */
-    public boolean isPropertySourcesLoadingEnabled() {
-        return loadProvidedPropertySources;
-    }
-
-
-    /**
-     * Checks if the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter
-     * PropertyFilter} service providers is enabled or disabled.
-     *
-     * @return {@code true} if the automatic loading is enabled,
-     *         otherwise {@code false}.
-     */
-    public boolean isPropertyFilterLoadingEnabled() {
-        return isLoadProvidedPropertyFilters;
-    }
-
-    /**
-     * Enables the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyFilter
-     * @see #disableProvidedPropertyFilters()
-     * @see #addPropertyFilters(org.apache.tamaya.spi.PropertyFilter...)
-     */
-    public ConfigurationBuilder enabledProvidedPropertyFilters() {
-        checkBuilderState();
-
-        isLoadProvidedPropertyFilters = true;
-
-        return this;
-    }
-
-    /**
-     * Disables the automatic loading of all {@link org.apache.tamaya.spi.PropertyFilter}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertyFilter
-     * @see #enabledProvidedPropertyFilters()
-     * @see #addPropertyFilters(org.apache.tamaya.spi.PropertyFilter...)
-     *
-     * @return the builder instance currently used
-     */
-    public ConfigurationBuilder disableProvidedPropertyFilters() {
-        checkBuilderState();
-
-        isLoadProvidedPropertyFilters = false;
-
-        return this;
-    }
-
-    /**
-     * Disables the automatic loading of all {@link org.apache.tamaya.spi.PropertySource}
-     * service providers.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertySource
-     * @see #enableProvidedPropertySources()
-     */
-    public ConfigurationBuilder disableProvidedPropertySources() {
-        checkBuilderState();
-
-        loadProvidedPropertySources = false;
-
-        return this;
-    }
-
-    /**
-     * Enables the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
-     * property source providers} provided via the SPI API.
-     *
-     * @return the builder instance currently used
-     *
-     * @see org.apache.tamaya.spi.PropertySourceProvider
-     * @see
-     */
-    public ConfigurationBuilder enableProvidedPropertySourceProviders() {
-        checkBuilderState();
-
-        loadProvidedPropertySourceProviders = true;
-
-        return this;
-    }
-
-    /**
-     * Disables the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
-     * property source providers} provided via the SPI API.
-     *
-     * @return the builder instance currently used
-     */
-    public ConfigurationBuilder disableProvidedPropertySourceProviders() {
-        checkBuilderState();
-
-        loadProvidedPropertySourceProviders = false;
-
-        return this;
-    }
-
-    /**
-     * Checks if the automatic loading of {@link org.apache.tamaya.spi.PropertySourceProvider
-     * PropertySourceProviders} is enabled or disabled.
-     *
-     * @return {@code true} if the automatic loading is enabled,
-     *         otherwise {@code false}.
-     */
-    public boolean isPropertySourceProvidersLoadingEnabled() {
-        return loadProvidedPropertySourceProviders;
-    }
-
-    //X TODO think on a functonality/API for using the default PropertyConverters and use the configured ones here
-    //X TODO as overrides used first.
-
-
-    /**
-     * Builds a new configuration based on the configuration of this builder instance.
-     *
-     * @return a new {@link org.apache.tamaya.Configuration configuration instance},
-     *         never {@code null}.
-     */
-    public Configuration build() {
-        checkBuilderState();
-
-        built = true;
-
-        contextBuilder.loadProvidedPropertyConverters(isPropertyConverterLoadingEnabled());
-        contextBuilder.loadProvidedPropertySources(isPropertySourcesLoadingEnabled());
-        contextBuilder.loadProvidedPropertySourceProviders(isPropertySourceProvidersLoadingEnabled());
-        contextBuilder.loadProvidedPropertyFilters(isLoadProvidedPropertyFilters);
-
-        return new DefaultConfiguration(contextBuilder.build());
-    }
-
-    /**
-     * Mapper to map a URL given as string to an URL instance.
-     */
-    private static class StringToURLMapper implements Function<String, URL> {
-        @Override
-        public URL apply(String u) {
-            try {
-                return new URL(u);
-            } catch (MalformedURLException e) {
-                throw new ConfigException(u + " is not a valid URL", e);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ProgrammaticConfigurationContext.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ProgrammaticConfigurationContext.java b/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ProgrammaticConfigurationContext.java
deleted file mode 100644
index e748eaa..0000000
--- a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ProgrammaticConfigurationContext.java
+++ /dev/null
@@ -1,406 +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.modules.builder;
-
-
-import org.apache.tamaya.PropertyConverter;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.core.internal.PropertyConverterManager;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-import org.apache.tamaya.spi.ServiceContext;
-
-import javax.annotation.Priority;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.StringJoiner;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.StampedLock;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static java.util.stream.Collectors.toList;
-
-/**
- * Implementation of the {@link org.apache.tamaya.spi.ConfigurationContext}
- * used by the {@link org.apache.tamaya.modules.builder.ConfigurationBuilder}
- * internally.
- */
-class ProgrammaticConfigurationContext implements ConfigurationContext {
-
-    /**
-     * The logger used.
-     */
-    private final static Logger LOG = Logger.getLogger(ProgrammaticConfigurationContext.class.getName());
-    /**
-     * Cubcomponent handling {@link org.apache.tamaya.PropertyConverter} instances.
-     */
-    private PropertyConverterManager propertyConverterManager = new PropertyConverterManager();
-
-    /**
-     * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertySource} instances.
-     */
-    private List<PropertySource> immutablePropertySources = new ArrayList<>();
-
-    /**
-     * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertyFilter} instances.
-     */
-    private List<PropertyFilter> immutablePropertyFilters = new ArrayList<>();
-
-    /**
-     * The overriding policy used when combining PropertySources registered to evalute the final configuration
-     * values.
-     */
-    private PropertyValueCombinationPolicy propertyValueCombinationPolicy;
-
-    /**
-     * Lock for internal synchronization.
-     */
-    private StampedLock propertySourceLock = new StampedLock();
-
-
-    /**
-     * The first time the Configuration system gets invoked we do initialize
-     * all our {@link org.apache.tamaya.spi.PropertySource}s and
-     * {@link org.apache.tamaya.spi.PropertyFilter}s which are known at startup.
-     */
-    @SuppressWarnings("unchecked")
-    public ProgrammaticConfigurationContext(Builder builder) {
-        propertyConverterManager = new PropertyConverterManager(builder.loadProvidedPropertyConverters);
-
-        immutablePropertySources = getAllPropertySources(builder).stream()
-                                                                 .sorted(this::comparePropertySources)
-                                                                 .collect(Collectors.toList());
-
-
-        immutablePropertyFilters = getPropertyFilters(builder).stream()
-                                                              .sorted(this::comparePropertyFilters)
-                                                              .collect(toList());
-
-
-        propertyValueCombinationPolicy = builder.propertyValueCombinationPolicy;
-
-        builder.propertyConverters.forEach((literal, converters) -> {
-            converters.stream().filter(c -> c != null)
-                      .forEach(c -> propertyConverterManager.register((TypeLiteral<Object>) literal,
-                                                                      (PropertyConverter<Object>) c));
-        });
-
-        LOG.info(() -> "Using " + immutablePropertySources.size() + " property sources: " +
-                createStringList(immutablePropertySources, ps -> ps.getName() + '[' + ps.getClass().getName() + ']'));
-
-
-        LOG.info(() -> "Using " + immutablePropertyFilters.size() + " property filters: " +
-                createStringList(immutablePropertyFilters, f -> f.getClass().getName()));
-
-
-        LOG.info(() -> "Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
-    }
-
-    private List<PropertyFilter> getPropertyFilters(Builder builder) {
-        List<PropertyFilter> provided = builder.loadProvidedPropertyFilters
-                ? ServiceContext.getInstance().getServices(PropertyFilter.class)
-                : new ArrayList<>(0);
-
-        List<PropertyFilter> configured = builder.propertyFilters;
-
-        return Stream.of(provided, configured).flatMap(Collection::stream)
-                     .collect(toList());
-    }
-
-    private List<PropertySource> getAllPropertySources(Builder builder) {
-        List<PropertySource> provided = builder.loadProvidedPropertySources
-                ? ServiceContext.getInstance().getServices(PropertySource.class)
-                : new ArrayList<>(0);
-
-        if (builder.loadProvidedPropertySourceProviders) {
-            List<PropertySourceProvider> providers = ServiceContext.getInstance()
-                                                                  .getServices(PropertySourceProvider.class);
-            for (PropertySourceProvider provider : providers) {
-                Collection<PropertySource> sources = provider.getPropertySources();
-                provided.addAll(sources);
-            }
-        }
-
-        List<PropertySource> configured = builder.propertySources;
-
-        return Stream.of(provided, configured).flatMap(Collection::stream)
-                     .collect(toList());
-    }
-
-    public void addPropertySources(PropertySource... propertySourcesToAdd) {
-        Lock writeLock = propertySourceLock.asWriteLock();
-        try {
-            writeLock.lock();
-            List<PropertySource> newPropertySources = new ArrayList<>(this.immutablePropertySources);
-            newPropertySources.addAll(Arrays.asList(propertySourcesToAdd));
-            Collections.sort(newPropertySources, this::comparePropertySources);
-
-            this.immutablePropertySources = Collections.unmodifiableList(newPropertySources);
-        } finally {
-            writeLock.unlock();
-        }
-    }
-
-    /**
-     * Order property source reversely, the most important come first.
-     *
-     * @param source1 the first PropertySource
-     * @param source2 the second PropertySource
-     * @return the comparison result.
-     */
-    private int comparePropertySources(PropertySource source1, PropertySource source2) {
-
-        //X TODO this method duplicates org.apache.tamaya.core.internal.DefaultConfigurationContext.PropertySourceComparator.comparePropertySources()
-        //X maybe we should extract the Comperator in an own class for real code-reuse (copy paste == bad code reuse)
-
-        if (source1.getOrdinal() < source2.getOrdinal()) {
-            return -1;
-        } else if (source1.getOrdinal() > source2.getOrdinal()) {
-            return 1;
-        } else {
-            return source1.getClass().getName().compareTo(source2.getClass().getName());
-        }
-    }
-
-    /**
-     * 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) {
-
-        //X TODO this method duplicates org.apache.tamaya.core.internal.DefaultConfigurationContext.PropertySourceComparator.comparePropertyFilters()
-        //X maybe we should extract the Comperator in an own class for real code-reuse (copy paste == bad code reuse)
-
-        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 List<PropertySource> getPropertySources() {
-        return immutablePropertySources;
-    }
-
-    public <T> void addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
-        propertyConverterManager.register(typeToConvert, propertyConverter);
-        LOG.info(() -> "Added PropertyConverter: " + propertyConverter.getClass().getName());
-    }
-
-    @Override
-    public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
-        return propertyConverterManager.getPropertyConverters();
-    }
-
-    @Override
-    public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
-        return propertyConverterManager.getPropertyConverters(targetType);
-    }
-
-    @Override
-    public List<PropertyFilter> getPropertyFilters() {
-        return immutablePropertyFilters;
-    }
-
-    @Override
-    public PropertyValueCombinationPolicy getPropertyValueCombinationPolicy() {
-        return propertyValueCombinationPolicy;
-    }
-
-    private <T> String createStringList(Collection<T> propertySources, Function<T, String> mapper) {
-        StringJoiner joiner = new StringJoiner(", ");
-        propertySources.forEach(t -> joiner.add(mapper.apply(t)));
-        return joiner.toString();
-    }
-
-    @Override
-    public ConfigurationContextBuilder toBuilder() {
-        // @todo Check if it could be useful to support this method, Oliver B. Fischer
-        throw new RuntimeException("This method is currently not supported.");
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources(Predicate<PropertySource> selector) {
-        // @todo Check if it could be useful to support this method, Oliver B. Fischer
-        throw new RuntimeException("This method is currently not supported.");
-    }
-
-    /**
-     * The Builder for {@link ProgrammaticConfigurationContext}
-     */
-    public final static class Builder {
-        /**
-         * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertySource} instances.
-         */
-        private List<PropertySource> propertySources = new ArrayList<>();
-
-        /**
-         * The current unmodifiable list of loaded {@link org.apache.tamaya.spi.PropertyFilter} instances.
-         */
-        private List<PropertyFilter> propertyFilters = new ArrayList<>();
-
-        private Map<TypeLiteral<?>, List<PropertyConverter<?>>> propertyConverters = new HashMap<>();
-
-        /**
-         * The overriding policy used when combining PropertySources registered to evalute the final configuration
-         * values.
-         */
-        private PropertyValueCombinationPolicy propertyValueCombinationPolicy =
-                PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
-
-        private boolean loadProvidedPropertyConverters;
-        private boolean loadProvidedPropertySources;
-        private boolean loadProvidedPropertySourceProviders;
-        private boolean loadProvidedPropertyFilters;
-
-        public Builder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy policy) {
-            this.propertyValueCombinationPolicy = Objects.requireNonNull(policy);
-            return this;
-        }
-
-        public Builder addPropertySources(PropertySource... propertySources) {
-            List<PropertySource> filtered = Stream.of(propertySources).filter(this::isNotNull)
-                                                  .collect(toList());
-
-            this.propertySources.addAll(filtered);
-
-            return this;
-        }
-
-        public Builder addPropertySources(Collection<PropertySource> propertySources) {
-            List<PropertySource> filtered = propertySources.stream().filter(this::isNotNull)
-                                                           .collect(toList());
-
-            this.propertySources.addAll(filtered);
-
-            return this;
-        }
-
-        public Builder addPropertySourceProviders(PropertySourceProvider... propertySourceProviders) {
-            List<PropertySourceProvider> providers = Stream.of(propertySourceProviders).filter(this::isNotNull)
-                                                           .collect(toList());
-
-            return addPropertySourceProviders(providers);
-        }
-
-        public Builder addPropertySourceProviders(Collection<PropertySourceProvider> providers) {
-            List<PropertySource> filtered = providers.stream().filter(this::isNotNull)
-                                                     .flatMap(p -> p.getPropertySources().stream())
-                                                     .filter(this::isNotNull)
-                                                     .collect(toList());
-
-            this.propertySources.addAll(filtered);
-
-            return this;
-        }
-
-        public Builder addPropertyFilters(PropertyFilter... propertySources) {
-            List<PropertyFilter> sources = Stream.of(propertySources).filter(this::isNotNull)
-                                                 .collect(toList());
-
-            this.propertyFilters.addAll(sources);
-
-            return this;
-        }
-
-        public Builder addPropertyFilters(Collection<PropertyFilter> propertySources) {
-            List<PropertyFilter> sources = propertySources.stream().filter(this::isNotNull)
-                                                          .collect(toList());
-
-            this.propertyFilters.addAll(sources);
-
-            return this;
-        }
-
-        /**
-         * Should be never used.
-         */
-        @Deprecated
-        public Builder setConfigurationContext(ConfigurationContext configurationContext) {
-            this.addPropertySources(configurationContext.getPropertySources());
-            this.addPropertyFilters(configurationContext.getPropertyFilters());
-            this.propertyValueCombinationPolicy = Objects.requireNonNull(
-                    configurationContext.getPropertyValueCombinationPolicy());
-            return this;
-        }
-
-        //X TODO think on a functonality/API for using the default PropertyConverters and use the configured ones here
-        //X TODO as overrides used first.
-
-        public <T> Builder addPropertyConverter(TypeLiteral<T> type, PropertyConverter<T> propertyConverter) {
-            propertyConverters.computeIfAbsent(type, (t) -> new ArrayList<>())
-                              .add(propertyConverter);
-
-            return this;
-        }
-
-        public ConfigurationContext build() {
-            return new ProgrammaticConfigurationContext(this);
-        }
-
-
-        public void loadProvidedPropertyConverters(boolean state) {
-            loadProvidedPropertyConverters = state;
-        }
-
-        public void loadProvidedPropertySources(boolean state) {
-            loadProvidedPropertySources = state;
-        }
-
-        public void loadProvidedPropertySourceProviders(boolean state) {
-            loadProvidedPropertySourceProviders = state;
-        }
-
-        public void loadProvidedPropertyFilters(boolean state) {
-            loadProvidedPropertyFilters = state;
-        }
-
-        private <T> boolean isNotNull(T item) {
-            return null != item;
-        }
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/812b11ea/modules/builder/src/main/java/org/apache/tamaya/modules/builder/package-info.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/package-info.java b/modules/builder/src/main/java/org/apache/tamaya/modules/builder/package-info.java
deleted file mode 100644
index dacba73..0000000
--- a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/package-info.java
+++ /dev/null
@@ -1,28 +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.
- */
-/**
- * This package provides
- * {@link org.apache.tamaya.modules.builder.ConfigurationBuilder a configuration
- * builder} that allows to build a configuration manually without
- * using exclusively on the Service Provider Interface API of Tamaya.
- *
- * @see org.apache.tamaya.modules.builder.ConfigurationBuilder
- * @see org.apache.tamaya.Configuration
- */
-package org.apache.tamaya.modules.builder;
\ No newline at end of file