http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationContextBuilder.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationContextBuilder.java
deleted file mode 100644
index 17c1bf4..0000000
--- 
a/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationContextBuilder.java
+++ /dev/null
@@ -1,336 +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.spi;
-
-import org.apache.tamaya.TypeLiteral;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A builder for creating new or adapting instances of {@link 
ConfigurationContext}.
- * Builders can be obtained in exactly two ways:
- * <ol>
- *     <li>By accessing a preinitialized builder from an existing {@link 
ConfigurationContext},
- *     by calling {@link 
org.apache.tamaya.spi.ConfigurationContext#toBuilder()}.</li>
- *     <li>By accessing an empty builder instance from
- *     {@link 
org.apache.tamaya.ConfigurationProvider#getConfigurationContextBuilder()}.</li>
- * </ol>
- * After all changes are applied to a builder a new {@link 
ConfigurationContext} instance can
- * be created and can be applied by calling
- * {@link 
org.apache.tamaya.ConfigurationProvider#setConfigurationContext(org.apache.tamaya.spi.ConfigurationContext)}.
- * @deprecated Use {@link ConfigurationBuilder} instead.
- */
-@Deprecated
-public interface ConfigurationContextBuilder {
-
-    /**
-     * Init this builder instance with the given {@link ConfigurationContext} 
instance. This
-     * method will use any existing property sources, filters, converters and 
the combination
-     * policy of the given {@link ConfigurationContext} and initialize the 
current builder
-     * with them.
-     *
-     * @param context the {@link ConfigurationContext} instance to be used, 
not {@code null}.
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder setContext(ConfigurationContext context);
-
-    /**
-     * This method can be used for adding {@link PropertySource}s.
-     * Hereby the property source is added to the tail of property sources with
-     * lowest priority  regardless of its current ordinal value. To sort the 
property
-     * sources based on their ordinals call {@link #sortPropertySources}.
-     *
-     * @param propertySources the PropertySources to add
-     * @return this builder, for chaining, never null.
-     * @throws IllegalArgumentException If a property source with a given name 
already
-     * exists.
-     */
-    ConfigurationContextBuilder addPropertySources(PropertySource... 
propertySources);
-
-    /**
-     * This method can be used for programmatically adding {@link 
PropertySource}s.
-     * Hereby the property source is added to the tail of property sources with
-     * lowest priority regardless of its current ordinal value. To sort the 
property
-     * sources based on their ordinals call {@link #sortPropertySources}.
-     *
-     * @param propertySources the PropertySources to add
-     * @return this builder, for chaining, never null.
-     * @throws IllegalArgumentException If a property source with a given name 
already
-     * exists.
-     */
-    ConfigurationContextBuilder addPropertySources(Collection<PropertySource> 
propertySources);
-
-    /**
-     * Add all registered (default) property sources to the context built. The 
sources are ordered
-     * based on their ordinal values and added to the chain of property 
sources with
-     * higher priority.
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder addDefaultPropertySources();
-
-    /**
-     * Removes the given property sources, if existing. The existing order of 
property
-     * sources is preserved.
-     *
-     * @param propertySources the property sources to remove, not {@code null}.
-     * @return the builder for chaining.
-     */
-    ConfigurationContextBuilder removePropertySources(PropertySource... 
propertySources);
-
-    /**
-     * Removes the given property sources, if existing. The existing order of 
property
-     * sources is preserved.
-     *
-     * @param propertySources the property sources to remove, not {@code null}.
-     * @return the builder for chaining.
-     */
-    ConfigurationContextBuilder 
removePropertySources(Collection<PropertySource> propertySources);
-
-    /**
-     * Access the current chain of property sources. Items at the end of the 
list have
-     * precedence/more significance.
-     *
-     * @return the property source chain, never {@code null}.
-     */
-    List<PropertySource> getPropertySources();
-
-    /**
-     * Access the current chain of property filters. Items at the end of the 
list have
-     * precedence/more significance.
-     *
-     * @return the property source chain, never {@code null}.
-     */
-    List<PropertyFilter> getPropertyFilters();
-
-    /**
-     * Access the current registered property converters.
-     *
-     * @return the current registered property converters.
-     */
-    Map<TypeLiteral<?>, Collection<PropertyConverter<?>>> 
getPropertyConverter();
-
-    /**
-     * Increases the priority of the given property source, by moving it 
towards the end
-     * of the chain of property sources. If the property source given is 
already at the end
-     * this method has no effect. This operation does not change any ordinal 
values.
-     *
-     * @param propertySource the property source to be incresed regarding its 
significance.
-     * @return the builder for chaining.
-     * @throws IllegalArgumentException If no such property source exists in 
the current
-     * chain.
-     */
-    ConfigurationContextBuilder increasePriority(PropertySource 
propertySource);
-
-    /**
-     * Decreases the priority of the given property source, by moving it 
towards the start
-     * of the chain of property sources. If the property source given is 
already the first
-     * this method has no effect. This operation does not change any ordinal 
values.
-     *
-     * @param propertySource the property source to be decresed regarding its 
significance.
-     * @return the builder for chaining.
-     * @throws IllegalArgumentException If no such property source exists in 
the current
-     * chain.
-     */
-    ConfigurationContextBuilder decreasePriority(PropertySource 
propertySource);
-
-    /**
-     * Increases the priority of the given property source to be maximal, by 
moving it to
-     * the tail of the of property source chain. If the property source given 
is
-     * already the last item this method has no effect. This operation does 
not change
-     * any ordinal values.
-     *
-     * @param propertySource the property source to be maximized regarding its 
significance.
-     * @return the builder for chaining.
-     * @throws IllegalArgumentException If no such property source exists in 
the current
-     * chain.
-     */
-    ConfigurationContextBuilder highestPriority(PropertySource propertySource);
-
-    /**
-     * Decreases the priority of the given property source to be minimal, by 
moving it to
-     * the start of the chain of property source chain. If the property source 
given is
-     * already the first item this method has no effect. This operation does 
not change
-     * any ordinal values.
-     *
-     * @param propertySource the property source to be minimized regarding its 
significance.
-     * @return the builder for chaining.
-     * @throws IllegalArgumentException If no such property source exists in 
the current
-     * chain.
-     */
-    ConfigurationContextBuilder lowestPriority(PropertySource propertySource);
-
-    /**
-     * Adds the given PropertyFilter instances, hereby the instances are added
-     * to the end of the list with highest priority. The ordering of existing
-     * property filters remains unchanged. To sort the property
-     * filters call {@link #sortPropertyFilter}.
-     *
-     * @param filters the filters to add
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder addPropertyFilters(PropertyFilter... filters);
-
-    /**
-     * Adds the given PropertyFilter instances, hereby the instances are added
-     * to the end of the list with highest priority. The ordering of existing
-     * property filters remains unchanged. To sort the property
-     * filters call {@link #sortPropertyFilter}.
-     *
-     * @param filters the filters to add
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder addPropertyFilters(Collection<PropertyFilter> 
filters);
-
-    /**
-     * Add all registered (default) property filters to the context built.
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder addDefaultPropertyFilters();
-
-
-    /**
-     * Removes the given PropertyFilter instances, if existing. The order of 
the remaining
-     * filters is preserved.
-     *
-     * @param filters the filter to remove
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder removePropertyFilters(PropertyFilter... 
filters);
-
-    /**
-     * Removes the given PropertyFilter instances, if existing. The order of 
the remaining
-     * filters is preserved.
-     *
-     * @param filters the filter to remove
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder 
removePropertyFilters(Collection<PropertyFilter> filters);
-
-    /**
-     * This method can be used for adding {@link PropertyConverter}s.
-     * Converters are added at the end after any existing converters.
-     * For converters already registered for the current target type the
-     * method has no effect.
-     *
-     * @param typeToConvert     the type for which the converters is for
-     * @param propertyConverters the PropertyConverters to add for this type
-     * @param <T> the target type.
-     * @return this builder, for chaining, never null.
-     */
-    <T> ConfigurationContextBuilder addPropertyConverters(TypeLiteral<T> 
typeToConvert,
-                                                          
@SuppressWarnings("unchecked") PropertyConverter<T>... propertyConverters);
-
-    /**
-     * This method can be used for adding {@link PropertyConverter}s.
-     * Converters are added at the end after any existing converters.
-     * For converters already registered for the current target type the
-     * method has no effect.
-     *
-     * @param typeToConvert     the type for which the converters is for
-     * @param propertyConverters the PropertyConverters to add for this type
-     * @param <T> the target type.
-     * @return this builder, for chaining, never null.
-     */
-    <T> ConfigurationContextBuilder addPropertyConverters(TypeLiteral<T> 
typeToConvert,
-                                                          
Collection<PropertyConverter<T>> propertyConverters);
-
-    /**
-     * Add all registered (default) property converters to the context built.
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder addDefaultPropertyConverters();
-
-    /**
-     * Removes the given PropertyConverter instances for the given type,
-     * if existing.
-     *
-     * @param typeToConvert the type which the converters is for
-     * @param propertyConverters    the converters to remove
-     * @param <T> the target type.
-     * @return this builder, for chaining, never null.
-     */
-    <T> ConfigurationContextBuilder removePropertyConverters(TypeLiteral<T> 
typeToConvert,
-                                                             
@SuppressWarnings("unchecked") PropertyConverter<T>... propertyConverters);
-
-    /**
-     * Removes the given PropertyConverter instances for the given type,
-     * if existing.
-     *
-     * @param typeToConvert the type which the converters is for
-     * @param propertyConverters    the converters to remove
-     * @param <T> the target type.
-     * @return this builder, for chaining, never null.
-     */
-    <T> ConfigurationContextBuilder removePropertyConverters(TypeLiteral<T> 
typeToConvert,
-                                                             
Collection<PropertyConverter<T>> propertyConverters);
-
-    /**
-     * Removes all converters for the given type, which actually renders a 
given type
-     * unsupported for type conversion.
-     *
-     * @param typeToConvert the type which the converters is for
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder removePropertyConverters(TypeLiteral<?> 
typeToConvert);
-
-    /**
-     * Sorts the current registered property sources using the given 
comparator.
-     *
-     * NOTE: property sources at the beginning have minimal significance.
-     *
-     * @param comparator the comparator to be used, not {@code null}.
-     * @return this instance for chaining.
-     */
-    ConfigurationContextBuilder sortPropertySources(Comparator<PropertySource> 
comparator);
-
-    /**
-     * Sorts the current registered property filters using the given 
comparator.
-     *
-     * NOTE: property filters at the beginning have minimal significance.
-     *
-     * @param comparator the comparator to be used, not {@code null}.
-     * @return this instance for chaining.
-     */
-    ConfigurationContextBuilder sortPropertyFilter(Comparator<PropertyFilter> 
comparator);
-
-    /**
-     * Sets the {@link PropertyValueCombinationPolicy} used to evaluate the 
final
-     * property values.
-     *
-     * @param policy the {@link PropertyValueCombinationPolicy} used, not 
{@code null}.
-     * @return this builder, for chaining, never null.
-     */
-    ConfigurationContextBuilder 
setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy policy);
-
-    /**
-     * Builds a new {@link ConfigurationContext} based on the data in this 
builder. The ordering of property
-     * sources and property filters is not changed, regardless of their 
ordinals. For ensure a certain
-     * ordering/significance call {@link #sortPropertyFilter(Comparator)} 
and/or {@link #sortPropertySources(Comparator)}
-     * before building the context.
-     *
-     * @return the final context to be used to create a configuration.
-     * @see 
org.apache.tamaya.ConfigurationProvider#createConfiguration(ConfigurationContext)
-     */
-    ConfigurationContext build();
-
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationProviderSpi.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationProviderSpi.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationProviderSpi.java
deleted file mode 100644
index fb93ab4..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/ConfigurationProviderSpi.java
+++ /dev/null
@@ -1,128 +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.spi;
-
-import org.apache.tamaya.Configuration;
-
-/**
- * SPI that must be implemented to provide the component that manages all 
{@link org.apache.tamaya.Configuration}
- * instances in a system. In SE this may be a true singleton containing exact 
one {@link org.apache.tamaya.Configuration}
- * instance, whereas in Java EE and other more complex environments instances 
may be returned depending the current
- * runtime context.
- */
-public interface ConfigurationProviderSpi {
-
-    /**
-     * Access the current {@link org.apache.tamaya.Configuration}.
-     *
-     * @return the current {@link org.apache.tamaya.Configuration} instance, 
never null.
-     */
-    Configuration getConfiguration();
-
-    /**
-     * Create a {@link Configuration} instance using the given context. The 
configuration
-     * created hereby must respect the artifacts provided by its context 
(property sources,
-     * filters, converters, policies etc), including their ordering and 
significance.
-     * @param context the context to be used, not {@code null}.
-     * @return the corresponding configuration instance.
-     */
-    Configuration createConfiguration(ConfigurationContext context);
-
-    /**
-     * Creates a new {@link org.apache.tamaya.spi.ConfigurationContextBuilder} 
instance.
-     *
-     * @return a new {@link 
org.apache.tamaya.spi.ConfigurationContextBuilder}, never null.
-     * @deprecated Will be removed
-     */
-    @Deprecated
-    ConfigurationContextBuilder getConfigurationContextBuilder();
-
-    /**
-     * Creates a new {@link org.apache.tamaya.spi.ConfigurationBuilder} 
instance.
-     *
-     * @return a new {@link org.apache.tamaya.spi.ConfigurationBuilder}, never 
null.
-     */
-    ConfigurationBuilder getConfigurationBuilder();
-
-    /**
-     * This method allows to replace the current {@link 
org.apache.tamaya.Configuration} with a new
-     * instance. This can be used to update the configuration with a new one, 
e.g. because some of the
-     * data has changed and must be updated. It is the responsibility of the 
ConfigurationProvider to trigger
-     * corresponding update events for the current {@link 
org.apache.tamaya.Configuration}.
-     *
-     * @param config the new Configuration to be applied.
-     * @throws java.lang.UnsupportedOperationException if the current provider 
is read-only.
-     */
-    void setConfiguration(Configuration config);
-
-    /**
-     * Method that allows to determine if a new {@link 
org.apache.tamaya.Configuration} can be applied
-     * programmatically.
-     *
-     * @return true, if {@link 
#setConfiguration(org.apache.tamaya.Configuration)} is supported
-     * by the current implementation.
-     * @see #setConfiguration(org.apache.tamaya.Configuration)
-     */
-    default boolean isConfigurationSettable(){
-        return true;
-    }
-
-    /**
-     * Get access to the current {@link ConfigurationContext}.
-     *
-     * @return the current {@link ConfigurationContext}, never null.
-     * @deprecated Will be removed in favour of {@link 
Configuration#getContext()}.
-     */
-    @Deprecated
-    default ConfigurationContext getConfigurationContext(){
-        return getConfiguration().getContext();
-    }
-
-    /**
-     * This method allows to replace the current {@link 
org.apache.tamaya.spi.ConfigurationContext} with a new
-     * instance. This can be used to update the context with a new one, e.g. 
because some of the configuration
-     * data has changed and must be updated. It is the responsibility of the 
ConfigurationProvider to trigger
-     * corresponding update event for the current {@link 
org.apache.tamaya.spi.ConfigurationContext} or
-     * {@link org.apache.tamaya.Configuration}.
-     *
-     * @param context the new ConfigurationContext to be applied.
-     * @throws java.lang.UnsupportedOperationException if the current provider 
is read-only.
-     * @deprecated use {@link #setConfiguration(Configuration)}
-     */
-    @Deprecated
-    default void setConfigurationContext(ConfigurationContext context){
-        setConfiguration(createConfiguration(context));
-    }
-
-    /**
-     * Method that allows to determine if a new {@link 
org.apache.tamaya.spi.ConfigurationContext} can be applied
-     * programmatically.
-     *
-     * @return true, if {@link 
#setConfigurationContext(org.apache.tamaya.spi.ConfigurationContext)} is 
supported
-     * by the current implementation.
-     * @see 
#setConfigurationContext(org.apache.tamaya.spi.ConfigurationContext)
-     * @deprecated use {@link #isConfigurationSettable()}
-     */
-    @Deprecated
-    default boolean isConfigurationContextSettable(){
-        return isConfigurationSettable();
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
deleted file mode 100644
index ac8de68..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
+++ /dev/null
@@ -1,267 +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.spi;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-
-import java.lang.reflect.AnnotatedElement;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * A conversion context containing all the required values for implementing 
conversion. Use the included #Builder
- * for creating new instances of. This class is thread-safe to use. Adding 
supported formats is synchronized.
- * @see PropertyConverter
- */
-public class ConversionContext {
-
-    private final Configuration configuration;
-    private final String key;
-    private final TypeLiteral<?> targetType;
-    private final AnnotatedElement annotatedElement;
-    private final List<String> supportedFormats = new ArrayList<>();
-    private final ConfigurationContext configurationContext;
-
-    /**
-     * Private constructor used from builder.
-     * @param builder the builder, not {@code null}.
-     */
-    protected ConversionContext(Builder builder){
-        this.key = builder.key;
-        this.annotatedElement = builder.annotatedElement;
-        this.targetType = builder.targetType;
-        this.supportedFormats.addAll(builder.supportedFormats);
-        this.configuration = builder.configuration;
-        this.configurationContext = builder.configurationContext;
-    }
-
-    /**
-     * Get the key accessed. This information is very useful to evaluate 
additional metadata needed to determine/
-     * control further aspects of the conversion.
-     * @return the key. This may be null in case where a default value has to 
be converted and no unique underlying
-     * key/value configuration is present.
-     */
-    public String getKey(){
-        return key;
-    }
-
-    /**
-     * Get the target type required.
-     * @return the target type required.
-     */
-    public TypeLiteral<?> getTargetType(){
-        return targetType;
-    }
-
-    /**
-     * Get the annotated element, if conversion is performed using injection 
mechanisms.
-     * @return the annotated element, or {@code null}.
-     */
-    public AnnotatedElement getAnnotatedElement(){
-        return annotatedElement;
-    }
-
-    /**
-     * Get the configuration, which is targeted.
-     * @return the configuration instance, or {@code null}.
-     */
-    public Configuration getConfiguration(){
-        return configuration;
-    }
-
-    /**
-     * Allows to add information on the supported/tried formats, which can be 
shown to the user, especially when
-     * conversion failed. Adding of formats is synchronized, all formats are 
added in order to the overall list.
-     * This means formats should be passed in order of precedence.
-     * @param converterType the converters, which implements the formats 
provided.
-     * @param formatDescriptors the format descriptions in a human readable 
form, e.g. as regular expressions.
-     */
-    public void addSupportedFormats(@SuppressWarnings("rawtypes") Class<? 
extends PropertyConverter> converterType, String... formatDescriptors){
-        synchronized (supportedFormats){
-            for(String format: formatDescriptors) {
-                supportedFormats.add(format + " (" + 
converterType.getSimpleName() + ")");
-            }
-        }
-    }
-
-    /**
-     * Get the supported/tried formats in precedence order. The contents of 
this method depends on the
-     * {@link PropertyConverter} instances involved in a conversion.
-     * @return the supported/tried formats, never {@code null}.
-     */
-    public List<String> getSupportedFormats(){
-        synchronized (supportedFormats){
-            return new ArrayList<>(supportedFormats);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "ConversionContext{" +
-                "configuration=" + configuration +
-                ", key='" + key + '\'' +
-                ", targetType=" + targetType +
-                ", annotatedElement=" + annotatedElement +
-                ", supportedFormats=" + supportedFormats +
-                '}';
-    }
-
-    public ConfigurationContext getConfigurationContext() {
-        return configurationContext;
-    }
-
-    /**
-     * Builder to create new instances of {@link ConversionContext}.
-     */
-    public static final class Builder{
-        /** The backing configuration. */
-        private Configuration configuration;
-        /** The configuration context. */
-        private ConfigurationContext configurationContext;
-        /** The accessed key, or null. */
-        private String key;
-        /** The target type. */
-        private TypeLiteral<?> targetType;
-        /** The injection target (only set with injection used). */
-        private AnnotatedElement annotatedElement;
-        /** The ordered list of formats tried. */
-        private final Set<String> supportedFormats = new HashSet<>();
-
-        /**
-         * Creates a new Builder instance.
-         * @param targetType the target type
-         */
-        public Builder(TypeLiteral<?> targetType) {
-            this(null, null, null, targetType);
-        }
-
-        /**
-         * Creates a new Builder instance.
-         * @param key the requested key, may be null.
-         * @param targetType the target type
-         */
-        public Builder(String key, TypeLiteral<?> targetType) {
-            this(null, null, key, targetType);
-        }
-
-        /**
-         * Creates a new Builder instance.
-         * @param configuration the configuration, not {@code null}.
-         * @param configurationContext configuration context, not {@code null}.
-         * @param key the requested key, may be {@code null}.
-         * @param targetType the target type
-         */
-        public Builder(Configuration configuration, ConfigurationContext 
configurationContext, String key, TypeLiteral<?> targetType){
-            this.key = key;
-            this.configuration = configuration;
-            this.configurationContext = configurationContext;
-            this.targetType = Objects.requireNonNull(targetType);
-        }
-
-        /**
-         * Sets the key.
-         * @param key the key, not {@code null}.
-         * @return the builder instance, for chaining
-         */
-        public Builder setKey(String key){
-            this.key = Objects.requireNonNull(key);
-            return this;
-        }
-
-        /**
-         * Sets the configuration.
-         * @param configuration the configuration, not {@code null}
-         * @return the builder instance, for chaining
-         */
-        public Builder setConfiguration(Configuration configuration){
-            this.configuration = Objects.requireNonNull(configuration);
-            return this;
-        }
-
-        /**
-         * Sets the configuration.
-         * @param configurationContext the configuration, not {@code null}
-         * @return the builder instance, for chaining
-         */
-        public Builder setConfigurationContext(ConfigurationContext 
configurationContext){
-            this.configurationContext = 
Objects.requireNonNull(configurationContext);
-            return this;
-        }
-
-        /**
-         * Sets the annotated element, when configuration is injected.
-         * @param annotatedElement the annotated element, not {@code null}
-         * @return the builder instance, for chaining
-         */
-        public Builder setAnnotatedElement(AnnotatedElement annotatedElement){
-            this.annotatedElement = Objects.requireNonNull(annotatedElement);
-            return this;
-        }
-
-        /**
-         * Sets the target type explicitly. This is required in some rare 
cases, e.g. injection of {@code Provider}
-         * instances, where the provider's result type must be produced.
-         * @param targetType the
-         * @return the builder for chaining.
-         */
-        public Builder setTargetType(@SuppressWarnings("rawtypes") TypeLiteral 
targetType) {
-            this.targetType = Objects.requireNonNull(targetType);
-            return this;
-        }
-
-        /**
-         * Add the formats provided by a {@link PropertyConverter}. This 
method should be called by each converters
-         * performing/trying conversion, so the user can be given feedback on 
the supported formats on failure.
-         * @param converterType the converters type, not {@code null}.
-         * @param formatDescriptors the formats supported in a human readable 
form, e.g. as regular expressions.
-         * @return the builder instance, for chaining
-         */
-        public Builder addSupportedFormats(@SuppressWarnings("rawtypes") 
Class<? extends PropertyConverter> converterType, String... formatDescriptors){
-            for(String format: formatDescriptors) {
-                supportedFormats.add(format + " (" + 
converterType.getSimpleName() + ")");
-            }
-            return this;
-        }
-
-        /**
-         * Builds a new context instance.
-         * @return a new context, never null.
-         */
-        public ConversionContext build(){
-            return new ConversionContext(this);
-        }
-
-        @Override
-        public String toString() {
-            return "Builder{" +
-                    "configuration=" + configuration +
-                    "context=" + configurationContext +
-                    ", key='" + key + '\'' +
-                    ", targetType=" + targetType +
-                    ", annotatedElement=" + annotatedElement +
-                    ", supportedFormats=" + supportedFormats +
-                    '}';
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/Experimental.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/Experimental.java 
b/code/api/src/main/java/org/apache/tamaya/spi/Experimental.java
deleted file mode 100644
index 9831820..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/Experimental.java
+++ /dev/null
@@ -1,32 +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.spi;
-
-import java.lang.annotation.*;
-
-/**
- * This is a simple annotation for flaging out functionality or features the 
Tamaya team is not sure if it is already
- * stabilized, so use it with some caution.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Inherited
-@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE, 
ElementType.CONSTRUCTOR, ElementType.FIELD,
-        ElementType.TYPE})
-public @interface Experimental {
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/FilterContext.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/FilterContext.java 
b/code/api/src/main/java/org/apache/tamaya/spi/FilterContext.java
deleted file mode 100644
index 2851697..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/FilterContext.java
+++ /dev/null
@@ -1,140 +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.spi;
-
-import org.apache.tamaya.Configuration;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * A filter context containing all the required values for implementing 
filtering.
- *
- * @see PropertyFilter
- */
-public class FilterContext {
-    /** The key. */
-    private final PropertyValue value;
-    /** The current context. */
-    private final ConfigurationContext context;
-    @Experimental
-    private Map<String, PropertyValue> configEntries = new HashMap<>();
-    @Experimental
-    private boolean singlePropertyScoped;
-
-
-    /**
-     * Creates a new FilterContext, for filtering of a multi value access
-     * using {@link Configuration#getProperties()}.
-     *
-     * @param value the value under evaluation, not {@code null}.
-     * @param configEntries the raw configuration data available in the
-     *                      current evaluation context, not {@code null}.
-     * @param context the current context, not {@code null}.
-     */
-    public FilterContext(PropertyValue value, Map<String,PropertyValue> 
configEntries, ConfigurationContext context) {
-        Objects.requireNonNull(value, "Value must not be null.");
-        Objects.requireNonNull(configEntries, "Initial configuration entries 
must be not null.");
-        Objects.requireNonNull(context, "Context must be not null.");
-
-        this.singlePropertyScoped = false;
-        this.value = Objects.requireNonNull(value);
-        this.context = Objects.requireNonNull(context);
-        this.configEntries.putAll(configEntries);
-        this.configEntries = Collections.unmodifiableMap(this.configEntries);
-    }
-
-    /**
-     * Creates a new FilterContext, for filtering of a single value access
-     * using {@link Configuration#getProperties()}.
-     * @param value the value under evaluation, not {@code null}.
-     * @param context the current context, not {@code null}.
-     */
-    public FilterContext(PropertyValue value, ConfigurationContext context) {
-        Objects.requireNonNull(value, "Value must not be null.");
-        Objects.requireNonNull(context, "Context must be not null.");
-
-        this.singlePropertyScoped = true;
-        this.context = Objects.requireNonNull(context);
-        this.value = Objects.requireNonNull(value);
-        this.configEntries = Collections.unmodifiableMap(this.configEntries);
-    }
-
-    /**
-     * Get the current context.
-     * @return the current context, not {@code null}.
-     */
-    public ConfigurationContext getContext(){
-        return context;
-    }
-
-    /**
-     * Get the property value under evaluation. This information is very 
useful to evaluate additional metadata needed to determine/
-     * control further aspects of the conversion.
-     *
-     * @return the key. This may be null in case where a default value has to 
be converted and no unique underlying
-     * key/value configuration is present.
-     */
-    public PropertyValue getProperty() {
-        return value;
-    }
-
-    /**
-     * Method that determines if filtering is done for a single property 
accessed, or as part of call to
-     * {@code getProperties()}.
-     * @return true, if its scoped to a single property accessed.
-     */
-    @Experimental
-    public boolean isSinglePropertyScoped(){
-        return singlePropertyScoped;
-    }
-
-    /**
-     * This map contains the following keys:
-     * <ul>
-     * <li>the original value <b>before</b> any filters were applied on 
it.</li>
-     * <li>all values starting with an {@code _<key>.}, for example {@code 
a.value}
-     * may have a map set with {@code a.value} (oringinal value), {@code 
_a.value.origin,
-     * _a.value.type, etc}. The exact contents is determine by the {@link 
PropertySource}s
-     * active.</li>
-     * </ul>
-     * Also important to know is that this map given contains all the 
evaluated raw entries, regardless
-     * of the filters that are later applied. This ensures that 
met-information required by one filter is
-     * not hidden by another filter, because of an invalid filter ordering. In 
other words filters may remove
-     * key/value pairs, e.g. fir security reasons, by returning {@code null}, 
but the values in the raw map
-     * passed as input to the filter process will not be affected by any such 
removal (but the final properties
-     * returned are affected, of course).
-     * 
-     * Finally, when a single property is accessed, e.g. by calling {@code 
Configuration.get(String)}.
-     *
-     * @return the configuration instance, or null.
-     */
-    @Experimental
-    public Map<String, PropertyValue> getConfigEntries() {
-        return configEntries;
-    }
-
-    @Override
-    public String toString() {
-        return "FilterContext{value='" + value + "', configEntries=" + 
configEntries.keySet() + '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertyConverter.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/PropertyConverter.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertyConverter.java
deleted file mode 100644
index ab96b6b..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertyConverter.java
+++ /dev/null
@@ -1,44 +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.spi;
-
-/**
- * Interface for an property that converts a configured String into something 
else.
- * This is used for implementing type conversion from a property (String) to a 
certain target
- * type. Hereby the target type can be multi-value (e.g. collections) or 
complex if needed.
- * 
- * @param <T> the type of the type literal
- */
-@FunctionalInterface
-public interface PropertyConverter<T>{
-
-    /**
-     * Convert the given configuration keys from its String representation 
into the required target type.
-     * The context instance passed also allows to add a list of supported 
formats, which is very handy in case a
-     * value could not be converted. This list of supported formats can then 
shown to the user to give some hints
-     * how a value could be configured.
-     * 
-     * @param value configuration key that needs to be converted
-     * @param context the {@link ConversionContext}, containing the String 
value and the requested configuration key.
-     * @return converted keys
-     * @see ConversionContext#addSupportedFormats(Class, String...)
-     */
-    T convert(String value, ConversionContext context);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertyFilter.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/PropertyFilter.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertyFilter.java
deleted file mode 100644
index 3054496..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertyFilter.java
+++ /dev/null
@@ -1,51 +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.spi;
-
-
-/**
- * <p>Interface for filtering the current map of properties during the 
evaluation of the chain of PropertySources.
- * Filters can be registered using the {@link 
org.apache.tamaya.spi.ServiceContext}. The ordinal
- * hereby is defined by the corresponding {@code @Priority} annotation.</p>
- * <p>Filters </p>
- */
-@FunctionalInterface
-public interface PropertyFilter {
-
-    /**
-     * <p>Maps the current {@code valueToBeFiltered} value to a new value. The 
resulting value will be used as the result
-     * passed to the user.</p>
-     * <p>If a filter is currently not available, it should just pass the 
input map to the method's
-     * output.</p>
-     * <p>Returning {@code null} will remove the entry.</p>
-     * <h3>Implementation specification</h3>
-     * Implementations of this class must be
-     * <ul>
-     *     <li>reentrant</li>
-     *     <li>thread-safe</li>
-     * </ul>
-     * @param value the value to be filtered, which also can be {@code null} 
if removed by another filter.
-     * @param context the filter context, not {@code null}.
-     * @return the filtered value, or {@code null} if the value should be 
removed alltogether.
-     * @see PropertyValue
-     * @see PropertyValueBuilder
-     */
-    PropertyValue filterProperty(PropertyValue value, FilterContext context);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertySource.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/PropertySource.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertySource.java
deleted file mode 100644
index 864cd95..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertySource.java
+++ /dev/null
@@ -1,174 +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.spi;
-
-
-import org.apache.tamaya.Configuration;
-
-import java.util.Collections;
-import java.util.Map;
-
-
-/**
- * <p>This interface models a provider that serves configuration properties. 
The contained
- * properties may be read from a Map of single or several sources (composite).
- * PropertySources are the building blocks of the final configuration. </p>
- * <h3>Implementation Requirements</h3>
- * <p>Implementations of this interface must be</p>
- * <ul>
- * <li>Thread safe.</li>
- * </ul>
- *
- * <p>A PropertySourceProvider will get picked up via the
- * {@link java.util.ServiceLoader} mechanism and can be registered via
- * {@code META-INF/services/org.apache.tamaya.spi.PropertySource}
- * </p>
- * <p>
- * If you like to register multiple PropertySources at the same time
- * you can use the {@link org.apache.tamaya.spi.PropertySourceProvider}
- * interface.
- * </p>
- */
-public interface PropertySource {
-
-    /**
-     * property name to override default tamaya ordinals
-     */
-    String TAMAYA_ORDINAL = "tamaya.ordinal";
-
-    /**
-     * A resusable instance of an empty PropertySource.
-     */
-    PropertySource EMPTY = new PropertySource() {
-
-        @Override
-        public int getOrdinal() {
-            return Integer.MIN_VALUE;
-        }
-
-        @Override
-        public String getName() {
-            return "<empty>";
-        }
-
-        @Override
-        public PropertyValue get(String key) {
-            return null;
-        }
-
-        @Override
-        public Map<String, PropertyValue> getProperties() {
-            return Collections.emptyMap();
-        }
-
-        @Override
-        public boolean isScannable() {
-            return false;
-        }
-
-        @Override
-        public String toString(){
-            return "PropertySource.EMPTY";
-        }
-    };
-
-
-    /**
-     * The ordinal value is the default ordering parameter which definines the 
default order of
-     * auto-discovered property sources. Ordering of property sources is 
important since values
-     * from property sources with higher ordinal values override values from 
less significant
-     * property sources.
-     *
-     * By default Tamaya includes the following property sources:
-     * <ol>
-     *     <li>Properties file values (/META-INF/javaconfiguration.properties) 
(ordinal 100)</li>
-     *     <li>JNDI values (ordinal 200, only when adding the {@code 
tamaya-jndi} extension module)</li>
-     *     <li>Environment properties (ordinal 300)</li>
-     *     <li>System properties (ordinal 1000)</li>
-     * </ol>
-     *
-     * <p><b>Important Hints for custom implementations</b>:</p>
-     * <p>
-     * If a custom implementation should be invoked <b>before</b> the default 
implementations, use a value &gt; 1000
-     * </p>
-     * <p>
-     * If a custom implementation should be invoked <b>after</b> the default 
implementations, use a value &lt; 100
-     * </p>
-     *
-     * <p>Reordering of the default order of the config-sources:</p>
-     * <p>Example: If the properties file/s should be used <b>before</b> the 
other implementations,
-     * you have to configure an ordinal &gt; 1000. That means, you have to add 
e.g. tamaya.ordinal=401 to
-     * /META-INF/javaconfiguration.properties . Hint: In case of property 
files every file is handled as independent
-     * config-source, but all of them have ordinal 400 by default (and can be 
reordered in a fine-grained manner.</p>
-     *
-     * In cases where it is not possible to change a config sources ordinal 
value, you may have several options:
-     * <ul>
-     *     <li>you can register an alternate implementation of {@link 
PropertyValueCombinationPolicy}.</li>
-     *     <li>you can use a {@link ConfigurationContextBuilder} to redefine 
the source order and finally use
-     *     {@link 
org.apache.tamaya.ConfigurationProvider#setConfiguration(Configuration)} to
-     *     change the current default {@link Configuration}.</li>
-     *     <li>finally, the imeplementor of this API may define alternate 
mechanism to reconfigure an ordinal
-     *     in a vendor specific way.</li>
-     * </ul>
-     * @return the 'importance' aka ordinal of the configured values. The 
higher, the more important.
-     */
-    int getOrdinal();
-
-
-    /**
-     * Get the name of the property source. The name should be unique for the 
type of source, whereas the id is used
-     * to ensure unique identity, either locally or remotely.
-     * @return the configuration's name, never {@code null}.
-     */
-    String getName();
-
-    /**
-     * Access a property.
-     *
-     * @param key the property's key, not {@code null}.
-     * @return the property value map, where {@code map.get(key) == value}, 
including also any metadata. In case a
-     * value is null, simply return {@code null}.
-     */
-    PropertyValue get(String key);
-
-    /**
-     * Access the current properties as Set. The resulting Map may not return 
all items accessible, e.g.
-     * when the underlying storage does not support iteration of its entries.
-     {@code null}
-     * @return the corresponding map, never null.
-     */
-    Map<String, PropertyValue> getProperties();
-
-    /**
-     * Determines if this config source can be scanned for its list of 
properties.
-     *
-     * <p>
-     * PropertySources which are not scannable might not be able to find all 
the
-     * configured values to provide via {@link #getProperties()}. This might 
happen
-     * if the underlying storage doesn't support listing.
-     * </p>
-     *
-     * @return {@code true} if this PropertySource can be scanned for its list 
of properties,
-     *         {@code false} if it cannot/should not be scanned.
-     */
-    default boolean isScannable(){
-        return true;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertySourceProvider.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/PropertySourceProvider.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertySourceProvider.java
deleted file mode 100644
index 3f7beea..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertySourceProvider.java
+++ /dev/null
@@ -1,61 +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.spi;
-
-import java.util.Collection;
-import java.util.Collections;
-
-/**
- * <p>Implement this interfaces to provide a PropertySource provider which
- * is able to register multiple PropertySources. This is e.g. needed if
- * there are multiple property files of a given config file name.</p>
- * 
- * <p>If a PropertySource like JNDI only exists once, then there is no need
- * to implement it via the PropertySourceProvider but should directly
- * expose a {@link PropertySource}.</p>
- *
- * <p>A PropertySourceProvider will get picked up via the
- * {@link java.util.ServiceLoader} mechanism and must get registered via
- * META-INF/services/org.apache.tamaya.spi.PropertySourceProvider</p>
- */
-@FunctionalInterface
-public interface PropertySourceProvider {
-
-    /**
-     * A resusable instance of an empty PropertySource.
-     */
-    PropertySourceProvider EMPTY = new PropertySourceProvider() {
-
-        @Override
-        public Collection<PropertySource> getPropertySources() {
-            return Collections.emptySet();
-        }
-
-        @Override
-        public String toString(){
-            return "PropertySourceProvider(empty)";
-        }
-    };
-
-    /**
-     * @return For each e.g. property file, we return a single PropertySource
-     *         or an empty list if no PropertySource exists.
-     */
-    Collection<PropertySource> getPropertySources();
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertyValue.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValue.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertyValue.java
deleted file mode 100644
index c538de7..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValue.java
+++ /dev/null
@@ -1,232 +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.spi;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Class modelling the result of a request for a property value. A property 
value is basically identified by its key.
- * There might be reasons, where one want to further analyze, which 
PropertySources provided a value and which not, so
- * it is possible to create a PropertyValue with a null value. Nevertheless in 
all cases the provider source (typically
- * the name of the PropertySource) must be set.
- */
-public final class PropertyValue implements Serializable{
-    private static final long serialVersionUID = 1L;
-    /** The requested key. */
-    private String key;
-    /** The value. */
-    private String value;
-    /** The source of the value. */
-    private String source;
-    /** Additional metadata provided by the provider. */
-    private Map<String,String> metaEntries = new HashMap<>();
-
-    PropertyValue(PropertyValueBuilder builder){
-        this.key = Objects.requireNonNull(builder.key);
-        this.value = builder.value;
-        this.source = Objects.requireNonNull(builder.source);
-        if(builder.metaEntries !=null) {
-            this.metaEntries.putAll(builder.metaEntries);
-        }
-    }
-
-    /**
-     * Creates a new instance
-     * @param key the key, not {@code null}.
-     * @param value the value, not {@code null}.
-     * @param source the source, typically the name of the {@link 
PropertySource} providing
-     *               the value, not {@code null}.
-     */
-    private PropertyValue(String key, String value, String source){
-        this.key = Objects.requireNonNull(key, "Key is required.");
-        this.value = Objects.requireNonNull(value, "Value is required.");
-        this.source = Objects.requireNonNull(source, "Source is required.");
-    }
-
-    /**
-     * The requested key.
-     * @return the, key never {@code null}.
-     */
-    public String getKey() {
-        return key;
-    }
-
-    /**
-     * The source.
-     * @return the source, which provided the value, not {@code null}.
-     * @see PropertySource#getName() .
-     */
-    public String getSource() {
-        return this.source;
-    }
-
-
-    /**
-     * The value.
-     * @return the value, in case a value is null it is valid to return {#code 
null} as result for
-     * {@link PropertySource#get(String)}.
-     */
-    public String getValue() {
-        return this.value;
-    }
-
-    /**
-     * Creates a full configuration map for this key, value pair and all its 
meta context data. This map
-     * is also used for subsequent processing, like value filtering.
-     * @return the property value entry map.
-     */
-    public Map<String, String> getMetaEntries() {
-        return Collections.unmodifiableMap(metaEntries);
-    }
-
-    /**
-     * Creates a new builder instance.
-     * @param key the key, not {@code null}.
-     * @param source the source, typically the name of the {@link 
PropertySource}
-     *               providing the value, not {@code null}.
-     * @return a new builder instance.
-     */
-    public static PropertyValueBuilder builder(String key, String source){
-        Objects.requireNonNull(key, "Key must be given.");
-        Objects.requireNonNull(source, "Source must be given");
-
-        return new PropertyValueBuilder(key, source);
-    }
-
-    /**
-     * Creates a new builder instance.
-     * @param key the key, not {@code null}.
-     * @param value the property value, not {@code null}.
-     * @param source the source, typically the name of the {@link 
PropertySource}
-     *               providing the value, not {@code null}.
-     * @return a new builder instance.
-     */
-    public static PropertyValueBuilder builder(String key, String value, 
String source) {
-        Objects.requireNonNull(key, "Key must be given.");
-        Objects.requireNonNull(value, "Value must be given");
-        Objects.requireNonNull(source, "Source must be given.");
-
-        return new PropertyValueBuilder(key, value, source);
-    }
-
-
-    /**
-     * Creates a new PropertyValue without any metadata..
-     * @param key the key, not {@code null}.
-     * @param value the value.
-     * @param source the source, typically the name of the {@link 
PropertySource}
-     *               providing the value, not  {@code null}.
-     * @return a new property value instance, or {@code null},
-     *         if the value passed is {@code null}..
-     */
-    public static PropertyValue of(String key, String value, String source) {
-        if (value==null) {
-            return null;
-        }
-        return new PropertyValue(key, value, source);
-    }
-
-    /**
-     * Access the given key from this value. Valid keys are the key or any 
meta-context key.
-     * @param key the key, not {@code null}.
-     * @return the value found, or {@code null}.
-     */
-    public String getMetaEntry(String key) {
-        return this.metaEntries.get(Objects.requireNonNull(key));
-    }
-
-    /**
-     * Creates a new builder instance based on this item.
-     * @return a new builder, never null.
-     */
-    public PropertyValueBuilder toBuilder() {
-        return new PropertyValueBuilder(this.getKey(), this.getSource())
-                .setValue(this.getValue())
-        .setMetaEntries(this.metaEntries);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof PropertyValue)) return false;
-        PropertyValue that = (PropertyValue) o;
-        return Objects.equals(getKey(), that.getKey()) &&
-                Objects.equals(getValue(), that.getValue()) &&
-                Objects.equals(getSource(), that.getSource()) &&
-                Objects.equals(getMetaEntries(), that.getMetaEntries());
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(getKey(), getValue(), getSource(),
-                getMetaEntries());
-    }
-
-    @Override
-    public String toString() {
-        return "PropertyValue{" +
-                "key='" + key + '\'' +
-                ", value='" + value + '\'' +
-                ", source='" + source + '\'' +
-                (metaEntries.isEmpty()?"":", metaEntries=" + metaEntries) +
-                '}';
-    }
-
-    /**
-     * Maps a map of {@code Map<String,String>} to a {@code 
Map<String,PropertyValue>}.
-     * @param config the String based map, not {@code null}.
-     * @param source the source name, not {@code null}.
-     * @return the corresponding value based map.
-     */
-    public static Map<String,PropertyValue> map(Map<String, String> config, 
String source) {
-        Map<String,PropertyValue> result = new HashMap<>(config.size());
-        for(Map.Entry<String,String> en:config.entrySet()){
-            result.put(en.getKey(), PropertyValue.of(en.getKey(), 
en.getValue(), source));
-        }
-        return result;
-    }
-
-    /**
-     * Maps a map of {@code Map<String,String>} to a {@code 
Map<String,PropertyValue>}.
-     *
-     * @param config the String based map, not {@code null}.
-     * @param source the source name, not {@code null}.
-     * @param metaData additional metadata, not {@code null}.
-     * @return the corresponding value based map.
-     */
-    public static Map<String,PropertyValue> map(Map<String, String> config, 
String source,
-                                                Map<String,String> metaData) {
-        Objects.requireNonNull(config, "Config must be given.");
-        Objects.requireNonNull(source, "Source must be given.");
-        Objects.requireNonNull(metaData, "Meta data must be given.");
-
-        Map<String,PropertyValue> result = new HashMap<>(config.size());
-
-        for(Map.Entry<String,String> en:config.entrySet()){
-            PropertyValue value = new PropertyValueBuilder(en.getKey(), 
source).setValue(en.getValue())
-                                                                               
.addMetaEntries(metaData).build();
-            result.put(en.getKey(), value);
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueBuilder.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueBuilder.java 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueBuilder.java
deleted file mode 100644
index af01987..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueBuilder.java
+++ /dev/null
@@ -1,196 +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.spi;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Builder to create a {@link PropertyValue} instance.
- */
-public class PropertyValueBuilder {
-    /** The key accessed. */
-    String key;
-    /** The property value. */
-    String value;
-    /** The property vaoue source. */
-    String source;
-    /** additional metadata entries (optional). */
-    Map<String,String> metaEntries = new HashMap<>();
-
-    /**
-     * Create a new builder instance, for a given set of parameters.
-     * Before calling build at least a {@link #value} and its {@link #source}
-     * must be set.
-     */
-    PropertyValueBuilder(String key){
-        this.key = Objects.requireNonNull(key);
-    }
-
-    /**
-     * Create a new builder instance, for a given set of parameters.
-     * @param key to access a property value, not  {@code null}.
-     * @param source property source.
-     */
-    PropertyValueBuilder(String key, String source) {
-        this.key = Objects.requireNonNull(key);
-        this.source = Objects.requireNonNull(source);
-    }
-
-    /**
-     * Create a new builder instance, for a given set of parameters.
-     *
-     * @param key to access a property value.
-     * @param value the value, not {@code null}. If a value is  {@code null}
-     *              {@link PropertySource#get(String)} should return {@code 
null}.
-     * @param source property source.
-     */
-    PropertyValueBuilder(String key, String value, String source) {
-        this.key = Objects.requireNonNull(key);
-        this.value = value;
-        this.source = Objects.requireNonNull(source);
-    }
-
-    /**
-     * Replaces/sets the context data.
-     * @param metaEntries the context data to be applied, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder setMetaEntries(Map<String, String> 
metaEntries) {
-        this.metaEntries.clear();
-        this.metaEntries.putAll(metaEntries);
-        return this;
-    }
-
-    /**
-     * Add an additional context data information.
-     * @param key the context data key, not {@code null}.
-     * @param value the context value, not {@code null} (will be converted to 
String).
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder addMetaEntry(String key, Object value) {
-        Objects.requireNonNull(key, "Meta key must be given.");
-        Objects.requireNonNull(value, "Meta value must be given.");
-
-        this.metaEntries.put(key, String.valueOf(value));
-        return this;
-    }
-
-    /**
-     * Adds the context data given.
-     * @param metaEntries the context data to be applied, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder addMetaEntries(Map<String, String> 
metaEntries) {
-        this.metaEntries.putAll(metaEntries);
-        return this;
-    }
-
-    /**
-     * Removes a meta entry.
-     * @param key the entry's key, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder removeMetaEntry(String key) {
-        Objects.requireNonNull(key, "Key must be given.");
-
-        this.metaEntries.remove(key);
-        return this;
-    }
-
-    /**
-     * Get the value's context data.
-     * @return the context data, not {@code null}.
-     */
-    public Map<String,String> getMetaEntries() {
-        return Collections.unmodifiableMap(this.metaEntries);
-    }
-
-    /**
-     * Changes the entry's key, mapping also corresponding context entries.
-     * @param key the new key, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder mapKey(String key) {
-        // todo obf if (1==1) throw new RuntimeException("No tests written.");
-        Map<String,String> newContext = new HashMap<>();
-        for(Map.Entry<String,String> en:this.metaEntries.entrySet()){
-            if(en.getKey().startsWith("_"+this.key)){
-                newContext.put("_"+key+'.'+ 
en.getKey().substring(this.key.length()+1), en.getValue());
-            }else{
-                newContext.put(en.getKey(), en.getValue());
-            }
-        }
-        this.metaEntries = newContext;
-        this.key = key;
-        return this;
-    }
-
-    /**
-     * Sets a new key.
-     * @param key the new key, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder setKey(String key) {
-        this.key = Objects.requireNonNull(key);
-        return this;
-    }
-
-    /**
-     * Sets a new value.
-     * @param value the new value, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder setValue(String value) {
-        this.value = Objects.requireNonNull(value, "Value must be given.");
-
-        return this;
-    }
-
-    /**
-     * Sets a new source.
-     * @param source the new source, not {@code null}.
-     * @return the builder for chaining.
-     */
-    public PropertyValueBuilder setSource(String source) {
-        // todo obf if (1==1) throw new RuntimeException("No tests written.");
-        this.source = Objects.requireNonNull(source);
-        return this;
-    }
-
-    /**
-     * Creates a new immutable {@link PropertyValue}.
-     * @return a new immutable {@link PropertyValue}, never {@code null}.
-     */
-    public PropertyValue build(){
-        return new PropertyValue(this);
-    }
-
-    @Override
-    public String toString() {
-        return "PropertyValueBuilder{" +
-                "key='" + key + '\'' +
-                "value='" + value + '\'' +
-                ", metaEntries=" + metaEntries +
-                '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
 
b/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
deleted file mode 100644
index 14640e6..0000000
--- 
a/code/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
+++ /dev/null
@@ -1,71 +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.spi;
-
-
-/**
- * Policy that determines how the final value of a configuration entry is 
evaluated. An instances of this
- * interface can be registered to get control how multiple PropertySources are 
combined. This is useful in cases
- * where the default overriding policy as implemented in {@link 
#DEFAULT_OVERRIDING_POLICY} is not matching
- * the need of the current application, e.g. then entries containing multiple 
values should be combined to new
- * values instead of overridden.
- */
-public interface PropertyValueCombinationPolicy {
-
-    /**
-     * Default overriding collector, where each existing entry ({@code 
current} is overridden by a subsequent non-null
-     * entry evaluated by {@code propertySource.get(key)}.
-     */
-    PropertyValueCombinationPolicy DEFAULT_OVERRIDING_POLICY = new 
PropertyValueCombinationPolicy(){
-
-        @Override
-        public PropertyValue collect(PropertyValue currentValue, String key, 
PropertySource propertySource) {
-            PropertyValue value = propertySource.get(key);
-            return value!=null?value:currentValue;
-        }
-    };
-
-    /**
-     * @deprecated Use {@linkplain #DEFAULT_OVERRIDING_POLICY} instead. Will 
be removed in 1.0.
-     */
-    @Deprecated
-    PropertyValueCombinationPolicy DEFAULT_OVERRIDING_COLLECTOR = 
DEFAULT_OVERRIDING_POLICY;
-
-
-        /**
-     * Method that is called for each value evaluated by a PropertySource for 
the given key. This method is called
-     * either when a single key is accessed, e.g. by calling {@code 
org.apache.tamaya.Configuration.getXXX}, but also
-     * when the full configuration property map is accessed by calling
-     * {@link org.apache.tamaya.Configuration#getProperties()}.
-     *
-     * @param currentValue the current value, including metadata entries. If 
no such key is present the current value
-     *                     is null.
-     *                     The collector should either combine the existing 
value with value from {@code currentValue}
-     *                     or replace the value in {@code currentValue} with 
{@code valueRead}, hereby returning the
-     *                     result to be used as new {@code currentValue}.
-     * @param key The current key to be evaluated.
-     * @param propertySource The PropertySource that may return an value for 
the given key. The PropertySource given
-     *                       may be evaluated for additional meta-data, how 
the given values are to be combined.
-     *                       Note that the value returned by a PropertySource 
can be null. In that case
-     *                       {@code currentValue} should be returned in almost 
all cases.
-     * @return the value to be used for future evaluation, including metadata 
entries.
-     */
-    PropertyValue collect(PropertyValue currentValue, String key, 
PropertySource propertySource);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
deleted file mode 100644
index 9eb18e8..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContext.java
+++ /dev/null
@@ -1,93 +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.spi;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.List;
-
-
-/**
- * This class models the component that is managing the lifecycle current the
- * services used by the Configuration API.
- */
-public interface ServiceContext {
-
-    /**
-     * @return ordinal of the ServiceContext. The one with the highest ordinal 
will be taken.
-     */
-    int ordinal();
-
-    /**
-     * Access a service singleton via its type.
-     * If multiple implementations for the very serviceType exist then
-     * the one with the highest {@link javax.annotation.Priority} will be used.
-     *
-     * @param <T> the type of the service type.
-     * @param serviceType the service type.
-     * @return The instance to be used, or {@code null}
-     * @throws org.apache.tamaya.ConfigException if there are multiple service 
implementations with the maximum priority.
-     */
-    <T> T getService(Class<T> serviceType);
-
-    /**
-     * Factory method to create a type, hereby a new instance is created on 
each access.
-     * If multiple implementations for the very serviceType exist then
-     * the one with the highest {@link javax.annotation.Priority} will be used 
as the base
-     * for creating subsequent instances.
-     *
-     * @param <T> the type of the service type.
-     * @param serviceType the service type.
-     * @return The new instance to be used, or {@code null}
-     * @throws org.apache.tamaya.ConfigException if there are multiple service 
implementations with the maximum priority.
-     */
-    <T> T create(Class<T> serviceType);
-
-    /**
-     * Access a list current services, given its type. The bootstrap mechanism 
should
-     * order the instance for precedence, hereby the most significant should be
-     * first in order.
-     *
-     * @param serviceType
-     *            the service type.
-     * @param <T> the type of the list element returned by this method
-     * @return The instance to be used, never {@code null}
-     */
-     <T> List<T> getServices(Class<T> serviceType);
-
-    /**
-     * Loads resources from the current runtime context. This method allows to 
use runtime
-     * specific code to load resources, e.g. within OSGI environments.
-     * @param resource the resource, not {@code null}.
-     * @param cl the desired classloader context, if null, the current thread 
context classloader is used.
-     * @return the resources found
-     * @throws IOException if load fails.
-     */
-    Enumeration<URL> getResources(String resource, ClassLoader cl) throws 
IOException;
-
-    /**
-     * Loads a resource from the current runtime context. This method allows 
to use runtime
-     * specific code to load a resource, e.g. within OSGI environments.
-     * @param resource the resource, not {@code null}.
-     * @param cl the desired classloader context, if null, the current thread 
context classloader is used.
-     * @return the resource found, or {@code null}.
-     */
-    URL getResource(String resource, ClassLoader cl);
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/ServiceContextManager.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContextManager.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ServiceContextManager.java
deleted file mode 100644
index f58c27a..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/ServiceContextManager.java
+++ /dev/null
@@ -1,118 +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.spi;
-
-import java.util.Objects;
-import java.util.ServiceLoader;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.tamaya.ConfigException;
-
-
-/**
- * This singleton provides access to the services available in the current 
{@link ServiceContext}. The
- * behaviour can be adapted, by calling {@link 
ServiceContextManager#set(ServiceContext)} before accessing any
- * services.
- */
-public final class ServiceContextManager {
-
-    /** The logger used. */
-    private static final Logger LOG = 
Logger.getLogger(ServiceContextManager.class.getName());
-
-    /**
-     * The ServiceProvider used.
-     */
-    private static volatile ServiceContext serviceContextProviderDelegate;
-
-    /**
-     * Private singletons constructor.
-     */
-    private ServiceContextManager() {
-    }
-
-    /**
-     * Load the {@link ServiceContext} to be used.
-     *
-     * @return {@link ServiceContext} to be used for loading the services.
-     */
-    private static ServiceContext loadDefaultServiceProvider() {
-        ServiceContext highestServiceContext = null;
-        try {
-            int highestOrdinal = 0;
-            for (ServiceContext serviceContext : 
ServiceLoader.load(ServiceContext.class)) {
-                if(highestServiceContext==null){
-                    highestServiceContext = serviceContext;
-                }else if (serviceContext.ordinal() > highestOrdinal) {
-                    highestServiceContext = serviceContext;
-                    highestOrdinal = serviceContext.ordinal();
-                }
-            }
-        } catch (Exception e) {
-            throw new ConfigException("ServiceContext not loadable", e);
-        }
-        if (highestServiceContext==null){
-            throw new ConfigException("No ServiceContext found");
-        }
-        LOG.info("Using Service Context of type: " + 
highestServiceContext.getClass().getName());
-        return highestServiceContext;
-    }
-
-    /**
-     * Replace the current {@link ServiceContext} in use.
-     *
-     * @param serviceContextProvider the new {@link ServiceContext}, not 
{@code null}.
-     * @return the currently used context after setting it.
-     */
-    public static ServiceContext set(ServiceContext serviceContextProvider) {
-        Objects.requireNonNull(serviceContextProvider);
-        ServiceContext currentContext = 
ServiceContextManager.serviceContextProviderDelegate;
-
-        synchronized (ServiceContextManager.class) {
-            if (ServiceContextManager.serviceContextProviderDelegate == null) {
-                ServiceContextManager.serviceContextProviderDelegate = 
serviceContextProvider;
-                LOG.log(Level.INFO, "Using ServiceProvider: " + 
serviceContextProvider.getClass().getName());
-            } else {
-                LOG.log(Level.WARNING, "Replacing ServiceProvider " +
-                                
ServiceContextManager.serviceContextProviderDelegate.getClass().getName() +
-                                " with: " + 
serviceContextProvider.getClass().getName());
-                ServiceContextManager.serviceContextProviderDelegate = 
serviceContextProvider;
-            }
-        }
-
-        return currentContext;
-    }
-
-    /**
-     * Ge {@link ServiceContext}. If necessary the {@link ServiceContext} will 
be laziliy loaded.
-     *
-     * @return the {@link ServiceContext} used.
-     */
-    public static ServiceContext getServiceContext() {
-        if (serviceContextProviderDelegate == null) {
-            synchronized (ServiceContextManager.class) {
-                if (serviceContextProviderDelegate == null) {
-                    serviceContextProviderDelegate = 
loadDefaultServiceProvider();
-                }
-            }
-        }
-        return serviceContextProviderDelegate;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/9bc56a38/code/api/src/main/java/org/apache/tamaya/spi/package-info.java
----------------------------------------------------------------------
diff --git a/code/api/src/main/java/org/apache/tamaya/spi/package-info.java 
b/code/api/src/main/java/org/apache/tamaya/spi/package-info.java
deleted file mode 100644
index 49dbab9..0000000
--- a/code/api/src/main/java/org/apache/tamaya/spi/package-info.java
+++ /dev/null
@@ -1,24 +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 contains the Apache Tamaya SPI artifacts.
- */
[email protected]("0.4")
-package org.apache.tamaya.spi;
\ No newline at end of file

Reply via email to