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

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

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

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

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertyFiltering.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertyFiltering.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertyFiltering.java
deleted file mode 100644
index ee76623..0000000
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertyFiltering.java
+++ /dev/null
@@ -1,124 +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.spisupport;
-
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.FilterContext;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
- * chain of {@link org.apache.tamaya.spi.PropertySource} and {@link PropertyFilter}
- * instance to evaluate the current Configuration.
- */
-public final class PropertyFiltering{
-    /**
-     * The logger.
-     */
-    private static final Logger LOG = Logger.getLogger(PropertyFiltering.class.getName());
-    /**
-     * The maximal number of filter cycles performed before aborting.
-     */
-    private static final int MAX_FILTER_LOOPS = 10;
-
-    /**
-     * Private singleton constructor.
-     */
-    private PropertyFiltering(){}
-
-    /**
-     * Filters a single value.
-     * @param value the raw value, not null.
-     * @param context the context
-     * @return the filtered value, inclusing null.
-     */
-    public static PropertyValue applyFilter(PropertyValue value, ConfigurationContext context) {
-        FilterContext filterContext = new FilterContext(value, context);
-        return filterValue(filterContext);
-    }
-
-    /**
-     * Filters all properties.
-     * @param rawProperties the unfiltered properties, not null.
-     * @param context the context
-     * @return the filtered value, inclusing null.
-     */
-    public static Map<String, PropertyValue> applyFilters(Map<String, PropertyValue> rawProperties, ConfigurationContext context) {
-        Map<String, PropertyValue> result = new HashMap<>();
-        // Apply filters to values, prevent values filtered to null!
-        for (Map.Entry<String, PropertyValue> entry : rawProperties.entrySet()) {
-            FilterContext filterContext = new FilterContext(entry.getValue(), rawProperties, context);
-            PropertyValue filtered = filterValue(filterContext);
-            if(filtered!=null){
-                result.put(filtered.getKey(), filtered);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Basic filter logic.
-     * @param context the filter context, not null.
-     * @return the filtered value.
-     */
-    private static PropertyValue filterValue(FilterContext context) {
-        PropertyValue inputValue = context.getProperty();
-        PropertyValue filteredValue = inputValue;
-
-        for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
-            int changes = 0;
-            for (PropertyFilter filter : context.getContext().getPropertyFilters()) {
-                filteredValue = filter.filterProperty(inputValue, context);
-                if (filteredValue != null && !filteredValue.equals(inputValue)) {
-                    changes++;
-                    LOG.finest("Filter - " + inputValue + " -> " + filteredValue + " by " + filter);
-                }
-                if(filteredValue==null){
-                    LOG.finest("Filter removed entry - " + inputValue + ": " + filter);
-                    break;
-                }else{
-                    inputValue = filteredValue;
-                }
-            }
-            if (changes == 0) {
-                LOG.finest("Finishing filter loop, no changes detected.");
-                break;
-            } else if (filteredValue == null) {
-                break;
-            } else {
-                if (i == (MAX_FILTER_LOOPS - 1)) {
-                    if (LOG.isLoggable(Level.WARNING)) {
-                        LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
-                    }
-                } else {
-                    LOG.finest("Repeating filter loop, changes detected: " + changes);
-                }
-            }
-        }
-        return filteredValue;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
deleted file mode 100644
index 6799e4e..0000000
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
+++ /dev/null
@@ -1,107 +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.spisupport;
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import javax.annotation.Priority;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.Comparator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Comparator for ordering of PropertySources based on their ordinal method and class name.
- */
-public class PropertySourceComparator implements Comparator<PropertySource>, Serializable {
-    /** serial version UID. */
-    private static final long serialVersionUID = 1L;
-
-    private static final Logger LOG = Logger.getLogger(PropertySourceComparator.class.getName());
-
-    private static final PropertySourceComparator INSTANCE = new PropertySourceComparator();
-
-    private String alternativeOrdinalKey;
-
-    private PropertySourceComparator(){}
-
-    /**
-     * Get the shared instance of the comparator.
-     * @return the shared instance, never null.
-     */
-    public static PropertySourceComparator getInstance(){
-        return INSTANCE;
-    }
-
-
-    /**
-     * Order property source reversely, the most important come first.
-     *
-     * @param source1 the first PropertySource
-     * @param source2 the second PropertySource
-     * @return the comparison result.
-     */
-    private int comparePropertySources(PropertySource source1, PropertySource source2) {
-        if (getOrdinal(source1, alternativeOrdinalKey) < getOrdinal(source2, alternativeOrdinalKey)) {
-            return -1;
-        } else if (getOrdinal(source1, alternativeOrdinalKey) > getOrdinal(source2, alternativeOrdinalKey)) {
-            return 1;
-        } else {
-            return source1.getClass().getName().compareTo(source2.getClass().getName());
-        }
-    }
-
-    public static int getOrdinal(PropertySource propertySource) {
-        return getOrdinal(propertySource, null);
-    }
-
-    public static int getOrdinal(PropertySource propertySource, String alternativeOrdinalKey) {
-        if(alternativeOrdinalKey!=null) {
-            PropertyValue ordinalValue = propertySource.get(alternativeOrdinalKey);
-            if (ordinalValue != null) {
-                try {
-                    return Integer.parseInt(ordinalValue.getValue().trim());
-                } catch (Exception e) {
-                    LOG.finest("Failed to parse ordinal from " + alternativeOrdinalKey +
-                            " in " + propertySource.getName() + ": " + ordinalValue.getValue());
-                }
-            }
-        }
-        return propertySource.getOrdinal();
-    }
-
-    /**
-     * Overrides/adds the key to evaluate/override a property sources ordinal.
-     * @param ordinalKey sets the alternative ordinal key, if null default
-     *                   behaviour will be active.
-     * @return the instance for chaining.
-     */
-    public PropertySourceComparator setOrdinalKey(String ordinalKey) {
-        this.alternativeOrdinalKey = ordinalKey;
-        return this;
-    }
-
-    @Override
-    public int compare(PropertySource source1, PropertySource source2) {
-        return comparePropertySources(source1, source2);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/RegexPropertyFilter.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/RegexPropertyFilter.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/RegexPropertyFilter.java
deleted file mode 100644
index 1f8cce9..0000000
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/RegexPropertyFilter.java
+++ /dev/null
@@ -1,84 +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.spisupport;
-
-import org.apache.tamaya.spi.FilterContext;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Predicate filtering using a regex expression operating on the key. It allows either
- * to define the target keys to be selected (includes), or to be excluded (excludes).
- */
-public final class RegexPropertyFilter implements PropertyFilter{
-    /** The expression used to include entries that match. */
-    private List<String> includes;
-    /** The expression used to exclude entries that match. */
-    private List<String> excludes;
-
-    /**
-     * Sets the regex expression to be applied on the key to filter the corresponding entry
-     * if matching.
-     * @param expressions the regular expression for inclusion, not null.
-     */
-    public void setIncludes(String... expressions){
-        this.includes = Arrays.asList(expressions);
-    }
-
-    /**
-     * Sets the regex expression to be applied on the key to remove the corresponding entries
-     * if matching.
-     * @param expressions the regular expressions for exclusion, not null.
-     */
-    public void setExcludes(String... expressions){
-        this.excludes= Arrays.asList(expressions);
-    }
-
-    @Override
-    public PropertyValue filterProperty(PropertyValue valueToBeFiltered, FilterContext context) {
-        if(includes!=null){
-            for(String expression:includes){
-                if(context.getProperty().getKey().matches(expression)){
-                    return valueToBeFiltered;
-                }
-            }
-            return null;
-        }
-        if(excludes!=null){
-            for(String expression:excludes){
-                if(context.getProperty().getKey().matches(expression)){
-                    return null;
-                }
-            }
-        }
-        return valueToBeFiltered;
-    }
-
-    @Override
-    public String toString() {
-        return "RegexPropertyFilter{" +
-                "includes='" + includes + '\'' +
-                "excludes='" + excludes + '\'' +
-                '}';
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SimplePropertySource.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SimplePropertySource.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SimplePropertySource.java
deleted file mode 100644
index f1a5a57..0000000
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SimplePropertySource.java
+++ /dev/null
@@ -1,284 +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.spisupport;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.UUID;
-import java.util.logging.Logger;
-
-/**
- * Simple implementation of a {@link org.apache.tamaya.spi.PropertySource} for
- * simple property files and XML property files.
- */
-public class SimplePropertySource extends BasePropertySource {
-
-    private static final Logger LOG = Logger.getLogger(SimplePropertySource.class.getName());
-
-    /**
-     * The current properties.
-     */
-    private Map<String, PropertyValue> properties = new HashMap<>();
-
-    /**
-     * Creates a new Properties based PropertySource based on the given URL.
-     *
-     * @param propertiesLocation the URL encoded location, not null.
-     */
-    public SimplePropertySource(File propertiesLocation) {
-        super(propertiesLocation.toString(), 0);
-        try {
-            this.properties = load(propertiesLocation.toURI().toURL());
-        } catch (IOException e) {
-            throw new ConfigException("Failed to load properties from " + propertiesLocation, e);
-        }
-    }
-
-    /**
-     * Creates a new Properties based PropertySource based on the given URL.
-     *
-     * @param propertiesLocation the URL encoded location, not null.
-     */
-    public SimplePropertySource(URL propertiesLocation) {
-        super(propertiesLocation.toString(), 0);
-        this.properties = load(Objects.requireNonNull(propertiesLocation));
-    }
-
-    /**
-     * Creates a new Properties based PropertySource.
-     *
-     * @param name the property source name, not null.
-     * @param properties the properties, not null
-     * @param defaultOrdinal the default ordinal
-     */
-    public SimplePropertySource(String name, Map<String, String> properties, int defaultOrdinal){
-        super(name, defaultOrdinal);
-        for(Map.Entry<String,String> en: properties.entrySet()) {
-            this.properties.put(en.getKey(), PropertyValue.of(en.getKey(), en.getValue(), name));
-        }
-    }
-
-    /**
-     * Creates a new Properties based PropertySource based on the given properties map.
-     *
-     * @param name       the name, not null.
-     * @param properties the properties, not null.
-     */
-    public SimplePropertySource(String name, Map<String, String> properties) {
-        this(name, properties, 0);
-    }
-
-    /**
-     * Creates a new Properties based PropertySource based on the given URL.
-     *
-     * @param name               The property source name
-     * @param propertiesLocation the URL encoded location, not null.
-     */
-    public SimplePropertySource(String name, URL propertiesLocation) {
-        super(name, 0);
-        this.properties = load(propertiesLocation);
-    }
-
-    private SimplePropertySource(Builder builder) {
-        properties = builder.properties;
-        if(builder.defaultOrdinal!=null){
-            setDefaultOrdinal(builder.defaultOrdinal);
-        }
-        if(builder.ordinal!=null){
-            setOrdinal(builder.ordinal);
-        }
-        setName(builder.name);
-    }
-
-    public static Builder newBuilder() {
-        return new Builder();
-    }
-
-    @Override
-    public Map<String, PropertyValue> getProperties() {
-        return this.properties;
-    }
-
-    /**
-     * loads the Properties from the given URL
-     *
-     * @param propertiesFile {@link URL} to load Properties from
-     * @return loaded {@link Properties}
-     * @throws IllegalStateException in case of an error while reading properties-file
-     */
-    private static Map<String, PropertyValue> load(URL propertiesFile) {
-        boolean isXML = isXMLPropertieFiles(propertiesFile);
-
-        Map<String, PropertyValue> properties = new HashMap<>();
-        try (InputStream stream = propertiesFile.openStream()) {
-            Properties props = new Properties();
-            if (stream != null) {
-                if (isXML) {
-                    props.loadFromXML(stream);
-                } else {
-                    props.load(stream);
-                }
-            }
-            String source = propertiesFile.toString();
-            for (String key : props.stringPropertyNames()) {
-                properties.put(key, PropertyValue.of(key, props.getProperty(key), source));
-            }
-        } catch (IOException e) {
-            throw new ConfigException("Error loading properties from " + propertiesFile, e);
-        }
-
-        return properties;
-    }
-
-    private static boolean isXMLPropertieFiles(URL url) {
-        return url.getFile().endsWith(".xml");
-    }
-
-
-    /**
-     * {@code SimplePropertySource} builder static inner class.
-     */
-    public static final class Builder {
-        private String name;
-        private Integer defaultOrdinal;
-        private Integer ordinal;
-        private Map<String, PropertyValue> properties = new HashMap<>();
-
-        private Builder() {
-        }
-
-        /**
-         * Sets the {@code name} to a new UUID and returns a reference to this Builder so that the methods
-         * can be chained together.
-         *
-         * @return a reference to this Builder
-         */
-        public Builder withUuidName() {
-            this.name = UUID.randomUUID().toString();
-            return this;
-        }
-
-        /**
-         * Sets the {@code name} and returns a reference to this Builder so that the methods
-         * can be chained together.
-         *
-         * @param val the {@code name} to set, not null.
-         * @return a reference to this Builder
-         */
-        public Builder withName(String val) {
-            this.name = Objects.requireNonNull(name);
-            return this;
-        }
-
-        /**
-         * Sets the {@code ordinal} and returns a reference to this Builder so that the methods
-         * can be chained together.
-         *
-         * @param val the {@code ordinal} to set
-         * @return a reference to this Builder
-         */
-        public Builder withOrdinal(int val) {
-            this.ordinal = val;
-            return this;
-        }
-
-        /**
-         * Sets the {@code defaultOrdinal} and returns a reference to this Builder so that the methods
-         * can be chained together.
-         *
-         * @param val the {@code defaultOrdinal} to set
-         * @return a reference to this Builder
-         */
-        public Builder withDefaultOrdinal(int val) {
-            this.defaultOrdinal = val;
-            return this;
-        }
-
-        /**
-         * Reads the {@code properties} from the given resource and returns a reference
-         * to this Builder so that the methods can be chained together.
-         *
-         * @param resource the {@code resource} to read
-         * @return a reference to this Builder
-         */
-        public Builder withProperties(URL resource) {
-            this.properties.putAll(load(resource));
-            return this;
-        }
-
-        /**
-         * Reads the {@code properties} from the given resource and returns a reference
-         * to this Builder so that the methods can be chained together.
-         *
-         * @param file the {@code file} to read from (xml or properties format).
-         * @return a reference to this Builder
-         */
-        public Builder withProperties(File file) {
-            try {
-                this.properties.putAll(load(file.toURI().toURL()));
-            } catch (MalformedURLException e) {
-                throw new IllegalArgumentException("Failed to read file: " + file, e);
-            }
-            return this;
-        }
-
-        /**
-         * Sets the {@code properties} and returns a reference to this Builder so that the methods can be chained together.
-         *
-         * @param val the {@code properties} to set
-         * @return a reference to this Builder
-         */
-        public Builder withProperties(Map<String, String> val) {
-            for(Map.Entry<String,String> en: val.entrySet()) {
-                this.properties.put(en.getKey(), PropertyValue.of(en.getKey(), en.getValue(), name));
-            }
-            return this;
-        }
-
-        /**
-         * Sets the {@code properties} and returns a reference to this Builder so that the methods can be chained together.
-         *
-         * @param val the {@code properties} to set
-         * @return a reference to this Builder
-         */
-        public Builder withProperty(String key, String val) {
-            this.properties.put(key, PropertyValue.of(key, val, name));
-            return this;
-        }
-
-        /**
-         * Returns a {@code SimplePropertySource} built from the parameters previously set.
-         *
-         * @return a {@code SimplePropertySource} built with parameters of this {@code SimplePropertySource.Builder}
-         */
-        public SimplePropertySource build() {
-            return new SimplePropertySource(this);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SystemPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SystemPropertySource.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SystemPropertySource.java
deleted file mode 100644
index bc5f99e..0000000
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/SystemPropertySource.java
+++ /dev/null
@@ -1,199 +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.spisupport;
-
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * This {@link org.apache.tamaya.spi.PropertySource} manages the system properties. You can disable this feature by
- * setting {@code tamaya.envprops.disable} or {@code tamaya.defaults.disable}.
- */
-public class SystemPropertySource extends BasePropertySource {
-
-    /**
-     * default ordinal used.
-     */
-    public static final int DEFAULT_ORDINAL = 1000;
-
-    private volatile Map<String,PropertyValue> cachedProperties;
-
-    /**
-     * previous System.getProperties().hashCode()
-     * so we can check if we need to reload
-     */
-    private volatile int previousHash;
-
-    /**
-     * Prefix that allows system properties to virtually be mapped on specified sub section.
-     */
-    private String prefix;
-
-    /**
-     * If true, this property source does not return any properties. This is useful since this
-     * property source is applied by default, but can be switched off by setting the
-     * {@code tamaya.envprops.disable} system/environment property to {@code true}.
-     */
-    private boolean disabled = false;
-
-    /**
-     * Creates a new instance. Also initializes the {@code prefix} and {@code disabled} properties
-     * from the system-/ environment properties:
-     * <pre>
-     *     tamaya.envprops.prefix
-     *     tamaya.envprops.disable
-     * </pre>
-     */
-    public SystemPropertySource(){
-        super("system-properties", DEFAULT_ORDINAL);
-        initFromSystemProperties();
-        if(!disabled){
-            cachedProperties = Collections.unmodifiableMap(loadProperties());
-        }
-    }
-
-    /**
-     * Initializes the {@code prefix} and {@code disabled} properties from the system-/
-     * environment properties:
-     * <pre>
-     *     tamaya.envprops.prefix
-     *     tamaya.envprops.disable
-     * </pre>
-     */
-    private void initFromSystemProperties() {
-        String value = System.getProperty("tamaya.sysprops.prefix");
-        if(value==null){
-            prefix = System.getenv("tamaya.sysprops.prefix");
-        }
-        value = System.getProperty("tamaya.sysprops.disable");
-        if(value==null){
-            value = System.getenv("tamaya.sysprops.disable");
-        }
-        if(value==null){
-            value = System.getProperty("tamaya.defaults.disable");
-        }
-        if(value==null){
-            value = System.getenv("tamaya.defaults.disable");
-        }
-        if(value!=null && !value.isEmpty()) {
-            this.disabled = Boolean.parseBoolean(value);
-        }
-    }
-
-    /**
-     * Creates a new instance using a fixed ordinal value.
-     * @param ordinal the ordinal number.
-     */
-    public SystemPropertySource(int ordinal){
-        this(null, ordinal);
-    }
-
-    /**
-     * Creates a new instance.
-     * @param prefix the prefix to be used, or null.
-     * @param ordinal the ordinal to be used.
-     */
-    public SystemPropertySource(String prefix, int ordinal){
-        this.prefix = prefix;
-        setOrdinal(ordinal);
-    }
-
-    /**
-     * Creates a new instance.
-     * @param prefix the prefix to be used, or null.
-     */
-    public SystemPropertySource(String prefix){
-        this.prefix = prefix;
-    }
-
-
-    private Map<String, PropertyValue> loadProperties() {
-        Properties sysProps = System.getProperties();
-        previousHash = System.getProperties().hashCode();
-        final String prefix = this.prefix;
-        Map<String, PropertyValue> entries = new HashMap<>();
-        for (Map.Entry<Object,Object> entry : sysProps.entrySet()) {
-            if(entry.getKey() instanceof String && entry.getValue() instanceof String) {
-                if (prefix == null) {
-                    entries.put((String) entry.getKey(),
-                            PropertyValue.of((String) entry.getKey(),
-                                    (String) entry.getValue(),
-                                    getName()));
-                } else {
-                    entries.put(prefix + entry.getKey(),
-                            PropertyValue.of(prefix + entry.getKey(),
-                                    (String) entry.getValue(),
-                                    getName()));
-                }
-            }
-        }
-        return entries;
-    }
-
-    @Override
-    public String getName() {
-        if(disabled){
-            return super.getName() + "(disabled)";
-        }
-        return super.getName();
-    }
-
-    @Override
-    public PropertyValue get(String key) {
-        if(disabled){
-            return null;
-        }
-        String prefix = this.prefix;
-        if(prefix==null) {
-            return PropertyValue.of(key, System.getProperty(key), getName());
-        }
-        return PropertyValue.of(key, System.getProperty(key.substring(prefix.length())), getName());
-    }
-
-    @Override
-    public Map<String, PropertyValue> getProperties() {
-        if(disabled){
-            return Collections.emptyMap();
-        }
-        // only need to reload and fill our map if something has changed
-        // synchronization was removed, Instance was marked as volatile. In the worst case it
-        // is reloaded twice, but the values will be the same.
-        if (previousHash != System.getProperties().hashCode()) {
-            Map<String, PropertyValue> properties = loadProperties();
-            this.cachedProperties = Collections.unmodifiableMap(properties);
-        }
-        return this.cachedProperties;
-    }
-
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
-
-    @Override
-    protected String toStringValues() {
-        return  super.toStringValues() +
-                "  prefix=" + prefix + '\n' +
-                "  disabled=" + disabled + '\n';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/A.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/A.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/A.java
deleted file mode 100644
index 4101f1e..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/A.java
+++ /dev/null
@@ -1,29 +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.spisupport;
-
-/**
- * Test class for testing transitively evaluated property converters.
- */
-class A implements AutoCloseable{
-    @Override
-    public void close() throws Exception {
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/B.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/B.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/B.java
deleted file mode 100644
index 584b923..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/B.java
+++ /dev/null
@@ -1,29 +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.spisupport;
-
-/**
- * Test class for testing transitively evaluated property converters.
- */
-public class B extends A implements Runnable{
-    @Override
-    public void run() {
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
deleted file mode 100644
index a986b7b..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
+++ /dev/null
@@ -1,88 +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.spisupport;
-
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.*;
-
-public class BasePropertySourceTest {
-
-    @Test
-    public void testGetOrdinal() {
-
-        PropertySource defaultPropertySource = new BasePropertySource("testWithDefault", 56) {
-
-            @Override
-            public PropertyValue get(String key) {
-                return null;
-            }
-
-            @Override
-            public Map<String, PropertyValue> getProperties() {
-                return Collections.emptyMap();
-            }
-        };
-
-        Assert.assertEquals(56, PropertySourceComparator.getOrdinal(defaultPropertySource));
-        Assert.assertEquals(1000, new OverriddenOrdinalPropertySource().getOrdinal());
-
-        // propertySource with invalid ordinal
-        Assert.assertEquals(1, new OverriddenInvalidOrdinalPropertySource().getOrdinal());
-    }
-
-    @Test
-    public void testGet() {
-        Assert.assertEquals(1000, new OverriddenOrdinalPropertySource().getOrdinal());
-    }
-
-    private static class OverriddenOrdinalPropertySource extends BasePropertySource {
-
-        private OverriddenOrdinalPropertySource() {
-            super("overriddenOrdinal", 250);
-        }
-
-        @Override
-        public Map<String, PropertyValue> getProperties() {
-            Map<String,PropertyValue> props = new HashMap<>(1);
-            props.put(PropertySource.TAMAYA_ORDINAL, PropertyValue.of(PropertySource.TAMAYA_ORDINAL, "1000", getName()));
-            return props;
-        }
-    }
-
-    private static class OverriddenInvalidOrdinalPropertySource extends BasePropertySource {
-
-        private OverriddenInvalidOrdinalPropertySource() {
-            super("overriddenInvalidOrdinal", 1);
-        }
-
-        @Override
-        public Map<String, PropertyValue> getProperties() {
-            Map<String,PropertyValue> props = new HashMap<>(1);
-            props.put(PropertySource.TAMAYA_ORDINAL, PropertyValue.of(PropertySource.TAMAYA_ORDINAL, "invalid", getName()));
-            return props;
-        }
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceProviderTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceProviderTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceProviderTest.java
deleted file mode 100644
index cab05d2..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceProviderTest.java
+++ /dev/null
@@ -1,76 +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.spisupport;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class BuildablePropertySourceProviderTest {
-
-    @Test
-    public void getPropertySources() throws Exception {
-        BuildablePropertySource ps = BuildablePropertySource.builder()
-                .withName("test1").build();
-        BuildablePropertySourceProvider prov = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps).build();
-        assertNotNull(prov);
-        assertEquals(prov.getPropertySources().iterator().next(), ps);
-    }
-
-    @Test
-    public void equals() throws Exception {
-        BuildablePropertySource ps = BuildablePropertySource.builder()
-                .withName("test1").build();
-        BuildablePropertySourceProvider prov1 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps).build();
-        BuildablePropertySourceProvider prov2 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps).build();
-        assertEquals(prov1, prov2);
-        BuildablePropertySource ps2 = BuildablePropertySource.builder()
-                .withName("test12").build();
-        prov2 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps2).build();
-        assertNotEquals(prov1, prov2);
-    }
-
-    @Test
-    public void testHashCode() throws Exception {
-        BuildablePropertySource ps = BuildablePropertySource.builder()
-                .withName("test1").build();
-        BuildablePropertySourceProvider prov1 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps).build();
-        BuildablePropertySourceProvider prov2 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps).build();
-        assertEquals(prov1.hashCode(), prov2.hashCode());
-        BuildablePropertySource ps2 = BuildablePropertySource.builder()
-                .withName("test12").build();
-        prov2 = BuildablePropertySourceProvider.builder()
-                .withPropertySourcs(ps2).build();
-        assertNotEquals(prov1.hashCode(), prov2.hashCode());
-    }
-
-
-    @Test
-    public void builder() throws Exception {
-        assertNotNull(BuildablePropertySource.builder());
-        assertNotEquals(BuildablePropertySource.builder(), BuildablePropertySource.builder());
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceTest.java
deleted file mode 100644
index 721216d..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BuildablePropertySourceTest.java
+++ /dev/null
@@ -1,88 +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.spisupport;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class BuildablePropertySourceTest {
-    @Test
-    public void getOrdinal() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withOrdinal(55).build();
-        assertEquals(55, ps1.getOrdinal());
-    }
-
-    @Test
-    public void getName() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withName("test1").build();
-        assertEquals("test1", ps1.getName());
-        ps1 = BuildablePropertySource.builder().build();
-        assertNotNull(ps1.getName());
-    }
-
-    @Test
-    public void get() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withSimpleProperty("a", "b").build();
-        assertEquals("b", ps1.get("a").getValue());
-    }
-
-    @Test
-    public void getProperties() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withSimpleProperty("a", "b").build();
-        assertNotNull(ps1.getProperties());
-        assertEquals(1, ps1.getProperties().size());
-        assertEquals("b", ps1.getProperties().get("a").getValue());
-    }
-
-    @Test
-    public void equals() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withName("test1").build();
-        BuildablePropertySource ps2 = BuildablePropertySource.builder()
-                .withName("test1").build();
-        assertEquals(ps1, ps2);
-        ps2 = BuildablePropertySource.builder()
-                .withName("test2").build();
-        assertNotEquals(ps1, ps2);
-    }
-
-    @Test
-    public void testHashCode() throws Exception {
-        BuildablePropertySource ps1 = BuildablePropertySource.builder()
-                .withName("test1").build();
-        BuildablePropertySource ps2 = BuildablePropertySource.builder()
-                .withName("test1").build();
-        assertEquals(ps1.hashCode(), ps2.hashCode());
-        ps2 = BuildablePropertySource.builder()
-                .withName("test2").build();
-        assertNotEquals(ps1.hashCode(), ps2.hashCode());
-    }
-
-    @Test
-    public void builder() throws Exception {
-        assertNotNull(BuildablePropertySource.builder());
-        assertNotEquals(BuildablePropertySource.builder(), BuildablePropertySource.builder());
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/C.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/C.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/C.java
deleted file mode 100644
index da581e6..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/C.java
+++ /dev/null
@@ -1,56 +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.spisupport;
-
-import java.io.IOException;
-import java.nio.CharBuffer;
-
-/**
- * Test class for testing transitively evaluated property converters.
- */
-public class C extends B implements Readable{
-
-    private final String inValue;
-
-    public C(String inValue){
-        this.inValue = inValue;
-    }
-
-    @Override
-    public int read(CharBuffer cb) throws IOException {
-        return 0;
-    }
-
-    /**
-     * Returns the input value, set on creation. Used for test assertion.
-     * @return the in value.
-     */
-    public String getInValue() {
-        return inValue;
-    }
-
-    @Override
-    public String toString() {
-        return "C{" +
-                "inValue='" + inValue + '\'' +
-                '}';
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CLIPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CLIPropertySourceTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CLIPropertySourceTest.java
deleted file mode 100644
index e08bf80..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CLIPropertySourceTest.java
+++ /dev/null
@@ -1,59 +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.spisupport;
-
-import org.apache.tamaya.core.propertysource.CLIPropertySource;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests for PropertySource for reading main arguments as configuration.
- */
-public class CLIPropertySourceTest {
-
-    @Test
-    public void setCLIProps() throws Exception {
-        System.clearProperty("main.args");
-        CLIPropertySource ps = new CLIPropertySource();
-        assertTrue(ps.getProperties().isEmpty());
-        CLIPropertySource.initMainArgs("-a", "b");
-        assertFalse(ps.getProperties().isEmpty());
-        assertEquals(ps.getProperties().get("a").getValue(), "b");
-        CLIPropertySource.initMainArgs("--c");
-        assertFalse(ps.getProperties().isEmpty());
-        assertEquals(ps.getProperties().get("c").getValue(), "c");
-        CLIPropertySource.initMainArgs("sss");
-        assertFalse(ps.getProperties().isEmpty());
-        assertEquals(ps.getProperties().get("sss").getValue(), "sss");
-        CLIPropertySource.initMainArgs("-a", "b", "--c", "sss", "--val=vvv");
-        assertFalse(ps.getProperties().isEmpty());
-        assertEquals(ps.getProperties().get("a").getValue(), "b");
-        assertEquals(ps.getProperties().get("c").getValue(), "c");
-        assertEquals(ps.getProperties().get("sss").getValue(), "sss");
-    // getProperties() throws Exception {
-        System.setProperty("main.args", "-a b\t--c sss  ");
-        ps = new CLIPropertySource();
-        assertFalse(ps.getProperties().isEmpty());
-        System.clearProperty("main.args");
-        assertEquals(ps.getProperties().get("a").getValue(), "b");
-        assertEquals(ps.getProperties().get("c").getValue(), "c");
-        assertEquals(ps.getProperties().get("sss").getValue(), "sss");
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CTestConverter.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CTestConverter.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CTestConverter.java
deleted file mode 100644
index dce8121..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/CTestConverter.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.spisupport;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-/**
- * Created by Anatole on 13.06.2015.
- */
-public class CTestConverter implements PropertyConverter<C>{
-    @Override
-    public C convert(String value, ConversionContext context) {
-        return new C(value);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/DefaultConfigurationContextTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/DefaultConfigurationContextTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/DefaultConfigurationContextTest.java
deleted file mode 100644
index 5e748ce..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/DefaultConfigurationContextTest.java
+++ /dev/null
@@ -1,177 +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.spisupport;
-
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.*;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Simple tests for {@link DefaultConfigurationContext} by atsticks on 16.08.16.
- */
-public class DefaultConfigurationContextTest {
-
-    @Test
-    public void addPropertySources() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        PropertySource def = new TestPropertyDefaultSource();
-        assertFalse(ctx.getPropertySources().contains(def));
-        ctx.addPropertySources(def);
-        assertTrue(ctx.getPropertySources().contains(def));
-    }
-
-    @Test
-    public void testToString() throws Exception {
-        String toString = ConfigurationProvider.getConfiguration().getContext().toString();
-        System.out.println(toString);
-    }
-
-    @Test
-    public void getPropertySources() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        assertNotNull(ctx.getPropertySources());
-        assertEquals(ctx.getPropertySources().size(), 0);
-        ctx = new DefaultConfigurationContextBuilder().addDefaultPropertySources().build();
-        assertNotNull(ctx.getPropertySources());
-        assertEquals(4, ctx.getPropertySources().size());
-    }
-
-    @Test
-    public void getPropertySource() throws Exception {
-        PropertySource ps = new TestPropertyDefaultSource();
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder()
-                .addPropertySources(ps).build();
-        assertNotNull(ctx.getPropertySources());
-        assertEquals(ctx.getPropertySources().size(), 1);
-        assertNotNull(((DefaultConfigurationContext)ctx).getPropertySource(ps.getName()));
-        assertEquals(ps.getName(), ((DefaultConfigurationContext)ctx).getPropertySource(ps.getName()).getName());
-        assertNull(((DefaultConfigurationContext)ctx).getPropertySource("huhu"));
-
-    }
-
-    @Test
-    public void testHashCode() throws Exception {
-        PropertySource ps = new TestPropertyDefaultSource();
-        ConfigurationContext ctx1 = new DefaultConfigurationContextBuilder()
-                .addPropertySources(ps).build();
-        ConfigurationContext ctx2 = new DefaultConfigurationContextBuilder()
-                .addPropertySources(ps).build();
-        assertEquals(ctx1.hashCode(), ctx2.hashCode());
-        ctx2 = new DefaultConfigurationContextBuilder()
-                .build();
-        assertNotEquals(ctx1.hashCode(), ctx2.hashCode());
-
-    }
-
-    @Test
-    public void addPropertyConverter() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        PropertyConverter testConverter = new PropertyConverter() {
-            @Override
-            public Object convert(String value, ConversionContext context) {
-                return "";
-            }
-        };
-        assertFalse(ctx.getPropertyConverters(TypeLiteral.of(String.class)).contains(testConverter));
-        ctx.addPropertyConverter(TypeLiteral.of(String.class), testConverter);
-        assertTrue(ctx.getPropertyConverters(TypeLiteral.of(String.class)).contains(testConverter));
-    }
-
-    @Test
-    public void getPropertyConverters() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        PropertyConverter testConverter = new PropertyConverter() {
-            @Override
-            public Object convert(String value, ConversionContext context) {
-                return "";
-            }
-        };
-        ctx.addPropertyConverter(TypeLiteral.of(String.class), testConverter);
-        assertNotNull(ctx.getPropertyConverters());
-        assertTrue(ctx.getPropertyConverters().containsKey(TypeLiteral.of(String.class)));
-        assertTrue(ctx.getPropertyConverters().get(TypeLiteral.of(String.class)).contains(testConverter));
-        testConverter = new PropertyConverter() {
-            @Override
-            public Object convert(String value, ConversionContext context) {
-                return Integer.valueOf(5);
-            }
-        };
-        ctx.addPropertyConverter(TypeLiteral.of(Integer.class), testConverter);
-        assertTrue(ctx.getPropertyConverters().containsKey(TypeLiteral.of(Integer.class)));
-        assertTrue(ctx.getPropertyConverters().get(TypeLiteral.of(Integer.class)).contains(testConverter));
-    }
-
-    @Test
-    public void getPropertyConverters1() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        PropertyConverter testConverter = new PropertyConverter() {
-            @Override
-            public Object convert(String value, ConversionContext context) {
-                return "";
-            }
-        };
-        assertNotNull(ctx.getPropertyConverters(TypeLiteral.of(String.class)));
-        assertEquals(ctx.getPropertyConverters(TypeLiteral.of(String.class)).size(),0);
-        ctx.addPropertyConverter(TypeLiteral.of(String.class), testConverter);
-        assertNotNull(ctx.getPropertyConverters(TypeLiteral.of(String.class)));
-        assertEquals(ctx.getPropertyConverters(TypeLiteral.of(String.class)).size(),1);
-        assertTrue(ctx.getPropertyConverters(TypeLiteral.of(String.class)).contains(testConverter));
-
-    }
-
-    @Test
-    public void getPropertyFilters() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        PropertyFilter testFilter = new PropertyFilter() {
-
-            @Override
-            public PropertyValue filterProperty(PropertyValue value, FilterContext context) {
-                return value;
-            }
-        };
-        assertNotNull(ctx.getPropertyFilters());
-        assertFalse(ctx.getPropertyFilters().contains(testFilter));
-        ctx = ctx.toBuilder().addPropertyFilters(testFilter).build();
-        assertTrue(ctx.getPropertyFilters().contains(testFilter));
-    }
-
-    @Test
-    public void getPropertyValueCombinationPolicy() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        assertNotNull(ctx.getPropertyValueCombinationPolicy());
-        assertEquals(ctx.getPropertyValueCombinationPolicy(),
-                PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR);
-    }
-
-    @Test
-    public void toBuilder() throws Exception {
-        assertNotNull(new DefaultConfigurationContextBuilder().build().toBuilder());
-    }
-
-    @Test
-    public void testRoundTrip() throws Exception {
-        ConfigurationContext ctx = new DefaultConfigurationContextBuilder().build();
-        assertEquals(ctx.toBuilder().build(), ctx);
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/2d0ef4b9/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
deleted file mode 100644
index c846e81..0000000
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
+++ /dev/null
@@ -1,60 +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.spisupport;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.junit.Test;
-
-import java.math.RoundingMode;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-/**
- * Test class testing the {@link EnumConverter} class.
- */
-public class EnumConverterTest {
-
-    private final EnumConverter testConverter = new EnumConverter(RoundingMode.class);
-
-    private final ConversionContext DUMMY_CONTEXT = new ConversionContext.Builder("someKey", TypeLiteral.of(Enum.class)).build();
-
-    @Test
-    public void testConvert() {
-        assertEquals(testConverter.convert(RoundingMode.CEILING.toString(),
-                DUMMY_CONTEXT), RoundingMode.CEILING);
-    }
-
-    @Test
-    public void testConvert_LowerCase() {
-        assertEquals(testConverter.convert("ceiling", DUMMY_CONTEXT), RoundingMode.CEILING);
-    }
-
-    @Test
-    public void testConvert_MixedCase()  {
-        assertEquals(testConverter.convert("CeiLinG", DUMMY_CONTEXT), RoundingMode.CEILING);
-    }
-
-    @Test
-    public void testConvert_OtherValue() {
-        assertNull(testConverter.convert("fooBars", DUMMY_CONTEXT));
-    }
-}
\ No newline at end of file