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 >
