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 2018/01/03 00:08:58 UTC

[02/18] incubator-tamaya-extensions git commit: Added full JSR support.

Added full JSR support.

Signed-off-by: Anatole Tresch <an...@apache.org>


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

Branch: refs/heads/configjsr
Commit: 06f29e1a51a4b11d8eb7e2dcdaae3611951bcba6
Parents: 4af5f5f
Author: Anatole Tresch <an...@apache.org>
Authored: Wed Dec 13 22:44:40 2017 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Wed Dec 13 22:44:40 2017 +0100

----------------------------------------------------------------------
 modules/resources/pom.xml                       |   2 +-
 .../AbstractPathConfigSourceProvider.java       | 206 +++++++++++++++++++
 .../AbstractPathPropertySourceProvider.java     | 205 ------------------
 .../apache/tamaya/resource/ConfigResources.java |   7 +-
 .../AbstractPathPropertySourceProviderTest.java |  31 ++-
 .../internal/PathBasedConfigSourceProvider.java |  87 ++++++++
 .../PathBasedPropertySourceProvider.java        |  94 ---------
 7 files changed, 310 insertions(+), 322 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/pom.xml
----------------------------------------------------------------------
diff --git a/modules/resources/pom.xml b/modules/resources/pom.xml
index e482618..f0aa1c2 100644
--- a/modules/resources/pom.xml
+++ b/modules/resources/pom.xml
@@ -34,7 +34,7 @@ under the License.
     <dependencies>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
+            <artifactId>tamaya-base</artifactId>
             <version>${tamaya-apicore.version}</version>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathConfigSourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathConfigSourceProvider.java b/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathConfigSourceProvider.java
new file mode 100644
index 0000000..a536be9
--- /dev/null
+++ b/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathConfigSourceProvider.java
@@ -0,0 +1,206 @@
+/*
+ * 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.resource;
+
+import org.apache.tamaya.spi.ServiceContext;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+import javax.config.spi.ConfigSource;
+import javax.config.spi.ConfigSourceProvider;
+
+/**
+ * Abstract base class that uses a descriptive resource path to define the locations of configuration files to be
+ * included into the configuration. This is especially useful, when the current configuration policy in place
+ * does not define the exact file names, but the file locations, where configuration can be provided.
+ */
+public abstract class AbstractPathConfigSourceProvider implements ConfigSourceProvider{
+    /** The log used. */
+    private static final Logger LOG = Logger.getLogger(AbstractPathConfigSourceProvider.class.getName());
+    /** The resource paths. */
+    private String[] resourcePaths;
+
+
+    /**
+     * Creates a new instance using the given resource paths.
+     * @param resourcePaths the resource paths, not null, not empty.
+     */
+    public AbstractPathConfigSourceProvider(String... resourcePaths){
+        if(resourcePaths.length==0){
+            throw new IllegalArgumentException("At least one resource path should be configured.");
+        }
+
+        setResourcePaths(resourcePaths);
+    }
+
+    @Override
+    public Collection<ConfigSource> getConfigSources(ClassLoader classLoader) {
+        List<ConfigSource> propertySources = new ArrayList<>();
+        if(classLoader == null){
+            classLoader = ServiceContext.defaultClassLoader();
+        }
+        for (String resource : getResourcePaths()) {
+            try {
+                // TODO Get a resource resolver for a certain classloader
+                Collection<URL> resources = ConfigResources.getResourceResolver().getResources(resource);
+                for (URL url : resources) {
+                    try {
+                        Collection<ConfigSource>  propertySourcesToInclude = getConfigSources(url);
+                        if(propertySourcesToInclude!=null){
+                            propertySources.addAll(propertySourcesToInclude);
+                        }
+                    } catch (Exception e) {
+                        LOG.log(Level.WARNING, "Failed to read configuration from " + url, e);
+                    }
+                }
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Invalid resource path: " + resource, e);
+            }
+        }
+        return propertySources;
+    }
+
+    protected String[] getResourcePaths() {
+        return resourcePaths;
+    }
+
+    protected void setResourcePaths(String[] paths) {
+        resourcePaths = paths.clone();
+    }
+
+    /**
+     * Factory method that creates a {@link ConfigSource} based on the URL found by
+     * the resource locator.
+     * @param url the URL, not null.
+     * @return the {@link ConfigSource}s to be included into the current provider's sources
+     * list. It is safe to return {@code null} here, in case the content of the URL has shown to be not relevant
+     * as configuration input. In case the input is not valid or accessible an exception can be thrown or logged.
+     */
+    protected abstract Collection<ConfigSource> getConfigSources(URL url);
+
+    /**
+     * Utility method that reads a .properties file from the given url and creates a corresponding
+     * {@link ConfigSource}.
+     * @param url the url to read, not null.
+     * @return the corresponding PropertySource, or null.
+     */
+    public static ConfigSource createConfigSource(URL url) {
+        Properties props = new Properties();
+        try (InputStream is = url.openStream()){
+            props.load(is);
+            return new PropertiesBasedConfigSource(url.toString(), props);
+        }
+        catch (Exception e){
+            LOG.log(Level.WARNING, "Failed to read properties from " + url, e);
+            return null;
+        }
+    }
+
+    /**
+     * Minimal {@link ConfigSource} implementation based on {@link Properties} or
+     * {@link Map}.
+     */
+    private final static class PropertiesBasedConfigSource implements ConfigSource{
+        /** The property source's name. */
+        private final String name;
+        /** The properties. */
+        private final Map<String,String> properties = new HashMap<>();
+
+        /**
+         * Constructor for a simple properties configuration.
+         * @param name the source's name, not null
+         * @param props the properties, not null
+         */
+        public PropertiesBasedConfigSource(String name, Properties props) {
+            this.name = Objects.requireNonNull(name);
+            for (Entry<Object, Object> en : props.entrySet()) {
+                this.properties.put(en.getKey().toString(),
+                        String.valueOf(en.getValue()));
+            }
+        }
+
+        /**
+         * Constructor for a simple properties configuration.
+         * @param name the source's name, not null
+         * @param props the properties, not null
+         */
+        public PropertiesBasedConfigSource(String name, Map<String,String> props) {
+            this.name = Objects.requireNonNull(name);
+            for (Entry<String, String> en : props.entrySet()) {
+                this.properties.put(en.getKey(),
+                        en.getValue());
+            }
+        }
+
+        public int getOrdinal() {
+            String configuredOrdinal = getValue(CONFIG_ORDINAL);
+            if (configuredOrdinal != null) {
+                try {
+                    return Integer.parseInt(configuredOrdinal);
+                } catch (Exception e) {
+                    Logger.getLogger(getClass().getName()).log(Level.WARNING,
+                            "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+                }
+            }
+            return getDefaultOrdinal();
+        }
+
+        /**
+         * Returns the  default ordinal used, when no ordinal is set, or the ordinal was not parseable to an int value.
+         *
+         * @return the  default ordinal used, by default 0.
+         */
+        public int getDefaultOrdinal() {
+            return 0;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public String getValue(String key) {
+            return this.properties.get(key);
+        }
+
+        @Override
+        public Map<String, String> getProperties() {
+            return properties;
+        }
+
+        @Override
+        public String toString(){
+            return "PropertiesBasedConfigSource["+name+']';
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java b/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
deleted file mode 100644
index 760e688..0000000
--- a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
+++ /dev/null
@@ -1,205 +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.resource;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.PropertyValue;
-
-/**
- * Abstract base class that uses a descriptive resource path to define the locations of configuration files to be
- * included into the configuration. This is especially useful, when the current configuration policy in place
- * does not define the exact file names, but the file locations, where configuration can be provided.
- */
-public abstract class AbstractPathPropertySourceProvider implements PropertySourceProvider{
-    /** The log used. */
-    private static final Logger LOG = Logger.getLogger(AbstractPathPropertySourceProvider.class.getName());
-    /** The resource paths. */
-    private String[] resourcePaths;
-
-
-    /**
-     * Creates a new instance using the given resource paths.
-     * @param resourcePaths the resource paths, not null, not empty.
-     */
-    public AbstractPathPropertySourceProvider(String... resourcePaths){
-        if(resourcePaths.length==0){
-            throw new IllegalArgumentException("At least one resource path should be configured.");
-        }
-
-        setResourcePaths(resourcePaths);
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        List<PropertySource> propertySources = new ArrayList<>();
-        for (String resource : getResourcePaths()) {
-            try {
-                Collection<URL> resources = ConfigResources.getResourceResolver().getResources(resource);
-                for (URL url : resources) {
-                    try {
-                        Collection<PropertySource>  propertySourcesToInclude = getPropertySources(url);
-                        if(propertySourcesToInclude!=null){
-                            propertySources.addAll(propertySourcesToInclude);
-                        }
-                    } catch (Exception e) {
-                        LOG.log(Level.WARNING, "Failed to read configuration from " + url, e);
-                    }
-                }
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Invalid resource path: " + resource, e);
-            }
-        }
-        return propertySources;
-    }
-
-    protected String[] getResourcePaths() {
-        return resourcePaths;
-    }
-
-    protected void setResourcePaths(String[] paths) {
-        resourcePaths = paths.clone();
-    }
-
-    /**
-     * Factory method that creates a {@link org.apache.tamaya.spi.PropertySource} based on the URL found by
-     * the resource locator.
-     * @param url the URL, not null.
-     * @return the {@link org.apache.tamaya.spi.PropertySource}s to be included into the current provider's sources
-     * list. It is safe to return {@code null} here, in case the content of the URL has shown to be not relevant
-     * as configuration input. In case the input is not valid or accessible an exception can be thrown or logged.
-     */
-    protected abstract Collection<PropertySource> getPropertySources(URL url);
-
-    /**
-     * Utility method that reads a .properties file from the given url and creates a corresponding
-     * {@link org.apache.tamaya.spi.PropertySource}.
-     * @param url the url to read, not null.
-     * @return the corresponding PropertySource, or null.
-     */
-    public static PropertySource createPropertiesPropertySource(URL url) {
-        Properties props = new Properties();
-        try (InputStream is = url.openStream()){
-            props.load(is);
-            return new PropertiesBasedPropertySource(url.toString(), props);
-        }
-        catch (Exception e){
-            LOG.log(Level.WARNING, "Failed to read properties from " + url, e);
-            return null;
-        }
-    }
-
-    /**
-     * Minimal {@link PropertySource} implementation based on {@link Properties} or
-     * {@link Map}.
-     */
-    private final static class PropertiesBasedPropertySource implements PropertySource{
-        /** The property source's name. */
-        private final String name;
-        /** The properties. */
-        private final Map<String,PropertyValue> properties = new HashMap<>();
-
-        /**
-         * Constructor for a simple properties configuration.
-         * @param name the source's name, not null
-         * @param props the properties, not null
-         */
-        public PropertiesBasedPropertySource(String name, Properties props) {
-            this.name = Objects.requireNonNull(name);
-            for (Entry<Object, Object> en : props.entrySet()) {
-                this.properties.put(en.getKey().toString(),
-                        PropertyValue.of(en.getKey().toString(), String.valueOf(en.getValue()), name));
-            }
-        }
-
-        /**
-         * Constructor for a simple properties configuration.
-         * @param name the source's name, not null
-         * @param props the properties, not null
-         */
-        public PropertiesBasedPropertySource(String name, Map<String,String> props) {
-            this.name = Objects.requireNonNull(name);
-            for (Entry<String, String> en : props.entrySet()) {
-                this.properties.put(en.getKey(),
-                        PropertyValue.of(en.getKey(), en.getValue(), name));
-            }
-        }
-
-        public int getOrdinal() {
-            PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
-            if (configuredOrdinal != null) {
-                try {
-                    return Integer.parseInt(configuredOrdinal.getValue());
-                } catch (Exception e) {
-                    Logger.getLogger(getClass().getName()).log(Level.WARNING,
-                            "Configured Ordinal is not an int number: " + configuredOrdinal, e);
-                }
-            }
-            return getDefaultOrdinal();
-        }
-
-        /**
-         * Returns the  default ordinal used, when no ordinal is set, or the ordinal was not parseable to an int value.
-         *
-         * @return the  default ordinal used, by default 0.
-         */
-        public int getDefaultOrdinal() {
-            return 0;
-        }
-
-        @Override
-        public String getName() {
-            return name;
-        }
-
-        @Override
-        public PropertyValue get(String key) {
-            return this.properties.get(key);
-        }
-
-        @Override
-        public Map<String, PropertyValue> getProperties() {
-            return properties;
-        }
-
-        @Override
-        public boolean isScannable() {
-            return false;
-        }
-
-        @Override
-        public String toString(){
-            return "PropertiesBasedPropertySource["+name+']';
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/main/java/org/apache/tamaya/resource/ConfigResources.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/ConfigResources.java b/modules/resources/src/main/java/org/apache/tamaya/resource/ConfigResources.java
index ae08148..fc40260 100644
--- a/modules/resources/src/main/java/org/apache/tamaya/resource/ConfigResources.java
+++ b/modules/resources/src/main/java/org/apache/tamaya/resource/ConfigResources.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tamaya.resource;
 
-import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.ServiceContextManager;
 
 
@@ -35,14 +34,14 @@ public final class ConfigResources {
     /**
      * <p>Access the current ResourceResolver.</p>
      *
-     * @throws ConfigException if no ResourceResolver is available (should not happen).
+     * @throws IllegalStateException if no ResourceResolver is available (should not happen).
      *
      * @return the current ResourceResolver instance, never null.
      */
-    public static ResourceResolver getResourceResolver() throws ConfigException {
+    public static ResourceResolver getResourceResolver() {
         ResourceResolver resolver = ServiceContextManager.getServiceContext().getService(ResourceResolver.class);
         if (resolver == null) {
-            throw new ConfigException("ResourceResolver not available.");
+            throw new IllegalStateException("ResourceResolver not available.");
         }
         return resolver;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java b/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
index 0dc6c91..3ad3e93 100644
--- a/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
+++ b/modules/resources/src/test/java/org/apache/tamaya/resource/AbstractPathPropertySourceProviderTest.java
@@ -18,10 +18,9 @@
  */
 package org.apache.tamaya.resource;
 
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
 import org.junit.Test;
 
+import javax.config.spi.ConfigSource;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -36,30 +35,30 @@ import static org.junit.Assert.assertTrue;
 
 public class AbstractPathPropertySourceProviderTest {
 
-    private final AbstractPathPropertySourceProvider myProvider = new AbstractPathPropertySourceProvider("*.properties") {
+    private final AbstractPathConfigSourceProvider myProvider = new AbstractPathConfigSourceProvider("*.properties") {
         @Override
-        protected Collection<PropertySource> getPropertySources(URL url) {
-            List<PropertySource> result = new ArrayList<>();
-            result.add(new EmptyPropertySource());
+        protected Collection<ConfigSource> getConfigSources(URL url) {
+            List<ConfigSource> result = new ArrayList<>();
+            result.add(new EmptyConfigSource());
             return result;
         }
     };
 
     @Test
-    public void testGetPropertySources() throws Exception {
-        assertNotNull(myProvider.getPropertySources());
+    public void testGetConfigSources() throws Exception {
+        assertNotNull(myProvider.getConfigSources((ClassLoader)null));
     }
 
     @Test
     public void testCreatePropertiesPropertySource() throws Exception {
-        PropertySource ps = AbstractPathPropertySourceProvider.createPropertiesPropertySource(
+        ConfigSource ps = AbstractPathConfigSourceProvider.createConfigSource(
                 ClassLoader.getSystemClassLoader().getResource("test.properties")
         );
         assertNotNull(ps);
         assertTrue(ps.getProperties().isEmpty());
     }
 
-    private static final class EmptyPropertySource implements PropertySource {
+    private static final class EmptyConfigSource implements ConfigSource {
         /**
          * Lookup order:
          * TODO rethink whole default PropertySources and ordering:
@@ -88,10 +87,10 @@ public class AbstractPathPropertySourceProviderTest {
          * @return the 'importance' aka ordinal of the configured values. The higher, the more important.
          */
         public int getOrdinal() {
-            PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
+            String configuredOrdinal = getValue(CONFIG_ORDINAL);
             if (configuredOrdinal != null) {
                 try {
-                    return Integer.parseInt(configuredOrdinal.getValue());
+                    return Integer.parseInt(configuredOrdinal);
                 } catch (Exception e) {
                     Logger.getLogger(getClass().getName()).log(Level.WARNING,
                             "Configured Ordinal is not an int number: " + configuredOrdinal, e);
@@ -115,18 +114,14 @@ public class AbstractPathPropertySourceProviderTest {
         }
 
         @Override
-        public PropertyValue get(String key) {
+        public String getValue(String key) {
             return null;
         }
 
         @Override
-        public Map<String, PropertyValue> getProperties() {
+        public Map<String, String> getProperties() {
             return Collections.emptyMap();
         }
 
-        @Override
-        public boolean isScannable() {
-            return true;
-        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedConfigSourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedConfigSourceProvider.java b/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedConfigSourceProvider.java
new file mode 100644
index 0000000..db1c72a
--- /dev/null
+++ b/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedConfigSourceProvider.java
@@ -0,0 +1,87 @@
+/*
+ * 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.resource.internal;
+
+import org.apache.tamaya.resource.AbstractPathConfigSourceProvider;
+
+import javax.config.spi.ConfigSource;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.*;
+
+/**
+ * Created by Anatole on 03.03.2015.
+ */
+public class PathBasedConfigSourceProvider extends AbstractPathConfigSourceProvider {
+
+    public PathBasedConfigSourceProvider() {
+        super("META-INF/cfg/**/*.properties");
+    }
+
+    @Override
+    protected Collection<ConfigSource> getConfigSources(URL url) {
+        List<ConfigSource> list = new ArrayList<>();
+        Properties props = new Properties();
+        try(InputStream is = url.openStream()){
+            props.load(is);
+            list.add(new PropertiesBasedConfigSource(url.toString(), props));
+        }
+        catch(Exception e){
+            e.printStackTrace();
+            return null;
+        }
+        return list;
+    }
+
+
+    private final static class PropertiesBasedConfigSource implements ConfigSource{
+
+        private final String name;
+        private final Map<String,String> properties = new HashMap<>();
+
+        public PropertiesBasedConfigSource(String name, Properties props) {
+            this.name = Objects.requireNonNull(name);
+            for (Map.Entry en : props.entrySet()) {
+                this.properties.put(en.getKey().toString(),
+                        String.valueOf(en.getValue()));
+            }
+        }
+
+        @Override
+        public int getOrdinal() {
+            return 0;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public String getValue(String key) {
+            return properties.get(key);
+        }
+
+        @Override
+        public Map<String, String> getProperties() {
+            return properties;
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/06f29e1a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java b/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
deleted file mode 100644
index 7e2f622..0000000
--- a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
+++ /dev/null
@@ -1,94 +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.resource.internal;
-
-import org.apache.tamaya.resource.AbstractPathPropertySourceProvider;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
-
-/**
- * Created by Anatole on 03.03.2015.
- */
-public class PathBasedPropertySourceProvider extends AbstractPathPropertySourceProvider{
-
-    public PathBasedPropertySourceProvider() {
-        super("META-INF/cfg/**/*.properties");
-    }
-
-    @Override
-    protected Collection<PropertySource> getPropertySources(URL url) {
-        List<PropertySource> list = new ArrayList<>();
-        Properties props = new Properties();
-        try(InputStream is = url.openStream()){
-            props.load(is);
-            list.add(new PropertiesBasedPropertySource(url.toString(), props));
-        }
-        catch(Exception e){
-            e.printStackTrace();
-            return null;
-        }
-        return list;
-    }
-
-
-    private final static class PropertiesBasedPropertySource implements PropertySource{
-
-        private final String name;
-        private final Map<String,PropertyValue> properties = new HashMap<>();
-
-        public PropertiesBasedPropertySource(String name, Properties props) {
-            this.name = Objects.requireNonNull(name);
-            for (Map.Entry en : props.entrySet()) {
-                this.properties.put(en.getKey().toString(),
-                        PropertyValue.of(en.getKey().toString(),
-                                String.valueOf(en.getValue()),
-                                name));
-            }
-        }
-
-        @Override
-        public int getOrdinal() {
-            return 0;
-        }
-
-        @Override
-        public String getName() {
-            return name;
-        }
-
-        @Override
-        public PropertyValue get(String key) {
-            return properties.get(key);
-        }
-
-        @Override
-        public Map<String, PropertyValue> getProperties() {
-            return properties;
-        }
-
-        @Override
-        public boolean isScannable() {
-            return false;
-        }
-    }
-}