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

[3/5] incubator-tamaya git commit: TAMAYA-60 Property sources can now also added via URL (String/URL).

TAMAYA-60 Property sources can now also added via URL (String/URL).


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

Branch: refs/heads/master
Commit: 51d893a480c3f0cc9d036285946974d575dc70a3
Parents: a5420d6
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Wed Mar 4 19:45:34 2015 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Thu Mar 5 19:19:49 2015 +0100

----------------------------------------------------------------------
 modules/builder/pom.xml                         |  14 +++
 .../modules/builder/ConfigurationBuilder.java   |  61 ++++++++++-
 .../builder/ConfigurationBuilderTest.java       | 106 +++++++++++++++++++
 .../test/resources/configfiles/json/first.json  |   4 +
 .../test/resources/configfiles/json/second.json |   4 +
 .../test/resources/configfiles/json/simple.json |   4 +
 .../test/resources/configfiles/json/third.json  |   4 +
 7 files changed, 196 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/pom.xml
----------------------------------------------------------------------
diff --git a/modules/builder/pom.xml b/modules/builder/pom.xml
index 6ec1891..97d42b7 100644
--- a/modules/builder/pom.xml
+++ b/modules/builder/pom.xml
@@ -42,12 +42,26 @@ under the License.
         </dependency>
 
         <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-formats</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.tamaya</groupId>
             <artifactId>tamaya-core</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-json</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>hamcrest-library</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java b/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
index c9a8fed..465b180 100644
--- a/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
+++ b/modules/builder/src/main/java/org/apache/tamaya/modules/builder/ConfigurationBuilder.java
@@ -18,17 +18,30 @@
  */
 package org.apache.tamaya.modules.builder;
 
+import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.PropertyConverter;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.core.internal.DefaultConfiguration;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.format.FlattenedDefaultPropertySource;
 import org.apache.tamaya.spi.ConfigurationContext;
 import org.apache.tamaya.spi.PropertyFilter;
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertySourceProvider;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /* TODO LIST FOR TAMAYA-60
  *
@@ -40,7 +53,7 @@ import java.util.Objects;
  * - Rethink the default behaviour for SPI loading
  * - Work on all TODOs for TAMAYA-60
  * - Write JavaDoc
- * - adding sources via URL
+ * - adding sources via URL IN PROGRESS
  *
  *
  *
@@ -84,6 +97,39 @@ public class ConfigurationBuilder {
         return this;
     }
 
+    public ConfigurationBuilder addPropertySource(URL url) {
+        try {
+            ConfigurationData data = ConfigurationFormats.readConfigurationData(url);
+            FlattenedDefaultPropertySource propertySource = new FlattenedDefaultPropertySource(data);
+            addPropertySources(propertySource);
+        } catch (IOException e) {
+            throw new ConfigException("Failed to read " + url.toString(), e);
+        }
+
+        return this;
+    }
+
+    public ConfigurationBuilder addPropertySource(URL url, URL... urls) {
+        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
+              .flatMap(Collection::stream)
+              .filter(entry -> entry != null)
+              .collect(Collectors.toList())
+              .forEach(this::addPropertySource);
+
+        return this;
+    }
+
+    public ConfigurationBuilder addPropertySource(String url, String... urls) {
+        Stream.of(Collections.singletonList(url), Arrays.asList(urls))
+              .flatMap(Collection::stream)
+              .filter(entry -> entry != null)
+              .map(new StringToURLMapper())
+              .collect(Collectors.toList())
+              .forEach(this::addPropertySource);
+
+        return this;
+    }
+
     public ConfigurationBuilder addPropertySources(PropertySource... sources){
         checkBuilderState();
 
@@ -248,4 +294,17 @@ public class ConfigurationBuilder {
         return new DefaultConfiguration(contextBuilder.build());
     }
 
+    /**
+     * Mapper to map a URL given as string to an URL instance.
+     */
+    private static class StringToURLMapper implements Function<String, URL> {
+        @Override
+        public URL apply(String u) {
+            try {
+                return new URL(u);
+            } catch (MalformedURLException e) {
+                throw new ConfigException(u + " is not a valid URL", e);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/test/java/org/apache/tamaya/modules/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/java/org/apache/tamaya/modules/builder/ConfigurationBuilderTest.java b/modules/builder/src/test/java/org/apache/tamaya/modules/builder/ConfigurationBuilderTest.java
index fa134e5..5997aeb 100644
--- a/modules/builder/src/test/java/org/apache/tamaya/modules/builder/ConfigurationBuilderTest.java
+++ b/modules/builder/src/test/java/org/apache/tamaya/modules/builder/ConfigurationBuilderTest.java
@@ -33,6 +33,8 @@ import org.junit.Ignore;
 import org.junit.Test;
 
 
+import java.net.URL;
+
 import static java.util.Arrays.asList;
 import static org.apache.tamaya.modules.builder.util.mockito.NotMockedAnswer.NOT_MOCKED_ANSWER;
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -759,4 +761,108 @@ public class ConfigurationBuilderTest {
         assertThat(config.get("tpsp_x"), nullValue());
         assertThat(config.get("tpsp_x"), nullValue());
     }
+
+    /*********************************************************************
+     * Tests for loading resources via URL (as String)
+     */
+
+    @Test
+    public void loadOneJSONPropertySourceViaStringURL() {
+        URL resource = this.getClass().getResource("/configfiles/json/simple.json");
+
+        assertThat(resource, CoreMatchers.notNullValue());
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.addPropertySource(resource.toString())
+                                      .build();
+
+        assertThat(config, CoreMatchers.notNullValue());
+        assertThat(config.get("a"), equalTo("A"));
+        assertThat(config.get("b"), equalTo("B"));
+    }
+
+    @Test
+    public void loadMultipleJSONPropertySourceViaStringURL() {
+        URL first = this.getClass().getResource("/configfiles/json/first.json");
+        URL second = this.getClass().getResource("/configfiles/json/second.json");
+        URL third = this.getClass().getResource("/configfiles/json/third.json");
+
+        assertThat(first, CoreMatchers.notNullValue());
+        assertThat(second, CoreMatchers.notNullValue());
+        assertThat(third, CoreMatchers.notNullValue());
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.addPropertySource(first.toString(), second.toString(),
+                                                         null, third.toString())
+                                      .build();
+
+        assertThat(config, CoreMatchers.notNullValue());
+
+        // from first.json
+        assertThat(config.get("d"), equalTo("D"));
+        assertThat(config.get("e"), equalTo("E"));
+
+        // from second.json
+        assertThat(config.get("m"), equalTo("M"));
+        assertThat(config.get("n"), equalTo("N"));
+
+        // from thrid.json
+        assertThat(config.get("p"), equalTo("P"));
+        assertThat(config.get("q"), equalTo("Q"));
+    }
+
+    /**
+     * ******************************************************************
+     * Tests for loading resources via URL (as URL object)
+     */
+
+    @Test
+    public void loadOneJSONPropertySourceViaURL() {
+        URL resource = this.getClass().getResource("/configfiles/json/simple.json");
+
+        assertThat(resource, CoreMatchers.notNullValue());
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.addPropertySource(resource)
+                                      .build();
+
+        assertThat(config, CoreMatchers.notNullValue());
+        assertThat(config.get("a"), equalTo("A"));
+        assertThat(config.get("b"), equalTo("B"));
+    }
+
+    @Test
+    public void loadMultipleJSONPropertySourceViaURL() {
+        URL first = this.getClass().getResource("/configfiles/json/first.json");
+        URL second = this.getClass().getResource("/configfiles/json/second.json");
+        URL third = this.getClass().getResource("/configfiles/json/third.json");
+
+        assertThat(first, CoreMatchers.notNullValue());
+        assertThat(second, CoreMatchers.notNullValue());
+        assertThat(third, CoreMatchers.notNullValue());
+
+        ConfigurationBuilder builder = new ConfigurationBuilder();
+
+        Configuration config = builder.addPropertySource(first, second,
+                                                         null, third)
+                                      .build();
+
+        assertThat(config, CoreMatchers.notNullValue());
+
+        // from first.json
+        assertThat(config.get("d"), equalTo("D"));
+        assertThat(config.get("e"), equalTo("E"));
+
+        // from second.json
+        assertThat(config.get("m"), equalTo("M"));
+        assertThat(config.get("n"), equalTo("N"));
+
+        // from thrid.json
+        assertThat(config.get("p"), equalTo("P"));
+        assertThat(config.get("q"), equalTo("Q"));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/test/resources/configfiles/json/first.json
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/resources/configfiles/json/first.json b/modules/builder/src/test/resources/configfiles/json/first.json
new file mode 100644
index 0000000..822cf6e
--- /dev/null
+++ b/modules/builder/src/test/resources/configfiles/json/first.json
@@ -0,0 +1,4 @@
+{
+  "d": "D",
+  "e": "E"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/test/resources/configfiles/json/second.json
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/resources/configfiles/json/second.json b/modules/builder/src/test/resources/configfiles/json/second.json
new file mode 100644
index 0000000..e2c7778
--- /dev/null
+++ b/modules/builder/src/test/resources/configfiles/json/second.json
@@ -0,0 +1,4 @@
+{
+  "m": "M",
+  "n": "N"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/test/resources/configfiles/json/simple.json
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/resources/configfiles/json/simple.json b/modules/builder/src/test/resources/configfiles/json/simple.json
new file mode 100644
index 0000000..0cab2ae
--- /dev/null
+++ b/modules/builder/src/test/resources/configfiles/json/simple.json
@@ -0,0 +1,4 @@
+{
+  "a": "A",
+  "b": "B"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/51d893a4/modules/builder/src/test/resources/configfiles/json/third.json
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/resources/configfiles/json/third.json b/modules/builder/src/test/resources/configfiles/json/third.json
new file mode 100644
index 0000000..6b62b96
--- /dev/null
+++ b/modules/builder/src/test/resources/configfiles/json/third.json
@@ -0,0 +1,4 @@
+{
+  "p": "P",
+  "q": "Q"
+}
\ No newline at end of file