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