+1
Am 08.01.15 um 09:27 schrieb Reinhard Sandtner:
hey oliver

there is already a constant TAMAYA_ORDINAL in the interface PropertySource - 
imo its better to use this one and have only one constant

lg
reini

Am 07.01.2015 um 21:56 schrieb [email protected]:

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master 5f109da47 -> 7985c039c


TAMAYA-39 Added support for a configuration specific priority.


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

Branch: refs/heads/master
Commit: 7985c039ca7dec7e4b5a75057b4ea3d6e40e9262
Parents: 5f109da
Author: Oliver B. Fischer <[email protected]>
Authored: Wed Jan 7 21:48:47 2015 +0100
Committer: Oliver B. Fischer <[email protected]>
Committed: Wed Jan 7 21:48:47 2015 +0100

----------------------------------------------------------------------
.../tamaya/modules/json/JSONPropertySource.java | 32 +++++++++++---
.../modules/json/JSONPropertySourceTest.java    | 44 ++++++++++++++++++++
.../configs/valid/with-explicit-priority.json   |  4 ++
3 files changed, 75 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7985c039/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java
----------------------------------------------------------------------
diff --git 
a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java
 
b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java
index 54b8e4c..bff8004 100644
--- 
a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java
+++ 
b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONPropertySource.java
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.core.propertysource.DefaultOrdinal;
import org.apache.tamaya.spi.PropertySource;

import java.io.File;
@@ -36,10 +37,21 @@ import static java.lang.String.format;

public class JSONPropertySource
     implements PropertySource {
-    private int priority = 0;
+
+    /**
+     * Constant for the key which could be used to specify the priority
+     * of a property source in the JSON object directly.
+     */
+    public final static CharSequence TAMAYA_ORDINAL = "tamaya.ordinal";
+
+    private int priority = DefaultOrdinal.FILE_PROPERTIES;
     private InputResource source;
     private HashMap<String, String> values;

+    public JSONPropertySource(File file) {
+        this(file, 0);
+    }
+
     public JSONPropertySource(File file, int priority) {
         this.priority = priority;
         source = new FileBasedResource(file);
@@ -47,13 +59,18 @@ public class JSONPropertySource

     @Override
     public int getOrdinal() {
+        synchronized (this) {
+            if (values == null) {
+                readSource();
+            }
+        }
+
         return priority;
     }

     @Override
     public String getName() {
-        // @todo Implement me
-        throw new RuntimeException("Not implemented yet.");
+        return "json-properties";
     }

     @Override
@@ -89,6 +106,12 @@ public class JSONPropertySource
             visitor.run();

             this.values = values;
+
+            if (this.values.containsKey(TAMAYA_ORDINAL)) {
+                int newPriority = 
Integer.valueOf(this.values.get(TAMAYA_ORDINAL)).intValue();
+                priority = newPriority;
+                this.values.remove(TAMAYA_ORDINAL);
+            }
         }
         catch (Throwable t) {
             throw new ConfigException(format("Failed to read properties from 
%s", source.getDescription()), t);
@@ -98,7 +121,6 @@ public class JSONPropertySource

     @Override
     public boolean isScannable() {
-        // @todo Implement me
-        throw new RuntimeException("Not implemented yet.");
+        return true;
     }
}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7985c039/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
----------------------------------------------------------------------
diff --git 
a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
 
b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
index ecf7784..87a9ff2 100644
--- 
a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
+++ 
b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
@@ -19,10 +19,13 @@
package org.apache.tamaya.modules.json;

import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.core.propertysource.DefaultOrdinal;
+import org.apache.tamaya.spi.PropertySource;
import org.hamcrest.CoreMatchers;
import org.junit.Test;

import java.io.File;
+import java.net.URISyntaxException;
import java.net.URL;
import java.util.Optional;

@@ -30,6 +33,7 @@ import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
+import static org.junit.Assert.fail;

public class JSONPropertySourceTest {

@@ -134,4 +138,44 @@ public class JSONPropertySourceTest {
         assertThat(keyDP.isPresent(), is(true));
         assertThat(keyDP.get(), is("P"));
     }
+
+    @Test
+    public void tamayaOrdinalKeywordIsNotPropagatedAsNormalProperty() throws 
Exception {
+        URL configURL = 
JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        File configFile = new File(configURL.toURI());
+
+        JSONPropertySource source = new JSONPropertySource(configFile, 10);
+
+        assertThat(source.get(PropertySource.TAMAYA_ORDINAL).isPresent(), 
is(false));
+    }
+
+    @Test
+    public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws 
URISyntaxException {
+        URL configURL = 
JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        File configFile = new File(configURL.toURI());
+
+        JSONPropertySource source = new JSONPropertySource(configFile, 10);
+
+        assertThat(source.getOrdinal(), is(16784));
+    }
+
+    @Test
+    public void priorityInConfigFileIsReturnedPriority() throws 
URISyntaxException {
+        URL configURL = 
JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        File configFile = new File(configURL.toURI());
+
+        JSONPropertySource source = new JSONPropertySource(configFile);
+
+        assertThat(source.getOrdinal(), is(16784));
+
+    }
}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/7985c039/modules/json/src/test/resources/configs/valid/with-explicit-priority.json
----------------------------------------------------------------------
diff --git 
a/modules/json/src/test/resources/configs/valid/with-explicit-priority.json 
b/modules/json/src/test/resources/configs/valid/with-explicit-priority.json
new file mode 100644
index 0000000..9e34151
--- /dev/null
+++ b/modules/json/src/test/resources/configs/valid/with-explicit-priority.json
@@ -0,0 +1,4 @@
+{
+  "tamaya.ordinal" : 16784,
+  "a" : "A"
+}
\ No newline at end of file


--
N Oliver B. Fischer
A Schönhauser Allee 64, 10437 Berlin, Deutschland/Germany
P +49 30 44793251
M +49 178 7903538
E [email protected]
S oliver.b.fischer
J [email protected]
X http://xing.to/obf

Reply via email to