branch feature/4059 updated (20927f6 -> 471d063)
This is an automated email from the git hooks/post-receive script. New change to branch feature/4059 in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git from 20927f6 Add ini io implementation new a6a03da Add tests + renames some classes new 471d063 Add ini io implementation The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 471d063dac03fefe3fa64de1a0d03f1a36aeaaf8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Oct 7 14:15:31 2016 +0200 Add ini io implementation commit a6a03daea8a4a16e4633c62c77ba4eb0d4fe8478 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Oct 7 14:15:09 2016 +0200 Add tests + renames some classes Summary of changes: nuiton-config-io-ini/pom.xml | 5 ++ .../config/io/ini/ApplicationConfigIOIni.java | 37 ++++++++- .../org.nuiton.config.io.ApplicationConfigIO | 0 .../config/io/ini/ApplicationConfigIOIniTest.java | 93 +++++++++++++++++++++ .../src/test/resources/NuitonConfigExample.ini | 5 ++ .../java/org/nuiton/config/ApplicationConfig.java | 6 +- ...OHelper.java => ApplicationConfigIOHelper.java} | 4 +- .../ApplicationConfigIOProperties.java | 7 +- .../org.nuiton.config.io.ApplicationConfigIO | 2 +- .../ApplicationConfigIOPropertiesTest.java | 96 ++++++++++++++++++++++ .../test/resources/NuitonConfigExample.properties | 4 + 11 files changed, 250 insertions(+), 9 deletions(-) rename nuiton-config-io-ini/src/main/resources/{ => META-INF}/services/org.nuiton.config.io.ApplicationConfigIO (100%) create mode 100644 nuiton-config-io-ini/src/test/java/org/nuiton/config/io/ini/ApplicationConfigIOIniTest.java create mode 100644 nuiton-config-io-ini/src/test/resources/NuitonConfigExample.ini rename nuiton-config/src/main/java/org/nuiton/config/io/{ApplicationIOHelper.java => ApplicationConfigIOHelper.java} (90%) rename nuiton-config/src/main/java/org/nuiton/config/io/{ => properties}/ApplicationConfigIOProperties.java (84%) create mode 100644 nuiton-config/src/test/java/org/nuiton/config/io/properties/ApplicationConfigIOPropertiesTest.java create mode 100644 nuiton-config/src/test/resources/NuitonConfigExample.properties -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/4059 in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git commit a6a03daea8a4a16e4633c62c77ba4eb0d4fe8478 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Oct 7 14:15:09 2016 +0200 Add tests + renames some classes --- .../java/org/nuiton/config/ApplicationConfig.java | 6 +- ...OHelper.java => ApplicationConfigIOHelper.java} | 4 +- .../ApplicationConfigIOProperties.java | 7 +- .../org.nuiton.config.io.ApplicationConfigIO | 2 +- .../ApplicationConfigIOPropertiesTest.java | 96 ++++++++++++++++++++++ .../test/resources/NuitonConfigExample.properties | 4 + 6 files changed, 112 insertions(+), 7 deletions(-) diff --git a/nuiton-config/src/main/java/org/nuiton/config/ApplicationConfig.java b/nuiton-config/src/main/java/org/nuiton/config/ApplicationConfig.java index 2431f10..86411da 100644 --- a/nuiton-config/src/main/java/org/nuiton/config/ApplicationConfig.java +++ b/nuiton-config/src/main/java/org/nuiton/config/ApplicationConfig.java @@ -30,7 +30,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.config.io.ApplicationIOHelper; +import org.nuiton.config.io.ApplicationConfigIOHelper; import org.nuiton.converter.ConverterUtil; import org.nuiton.util.ObjectUtil; import org.nuiton.util.RecursiveProperties; @@ -417,7 +417,7 @@ public class ApplicationConfig { * Pour gérer la lecture/écriture des properties. * @since 3.1 */ - protected ApplicationIOHelper applicationIOHelper; + protected ApplicationConfigIOHelper applicationIOHelper; /** * Init ApplicationConfig with current simple class name as config file. @@ -486,7 +486,7 @@ public class ApplicationConfig { Preconditions.checkNotNull(init,"Can't init ApplicationConfig without an init paramter"); Preconditions.checkNotNull(init.getReadFormat(), "Can't init Application without an init.readFormat parameter"); - applicationIOHelper = new ApplicationIOHelper(init.getReadFormat()); + applicationIOHelper = new ApplicationConfigIOHelper(init.getReadFormat()); Set<ApplicationConfigScope> scopes = init.getScopes(); diff --git a/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationIOHelper.java b/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOHelper.java similarity index 90% rename from nuiton-config/src/main/java/org/nuiton/config/io/ApplicationIOHelper.java rename to nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOHelper.java index f8a8be0..ade5445 100644 --- a/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationIOHelper.java +++ b/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOHelper.java @@ -13,11 +13,11 @@ import java.util.ServiceLoader; * @author Tony Chemit - chemit@codelutin.com * @since 3.1 */ -public class ApplicationIOHelper implements ApplicationConfigIO { +public class ApplicationConfigIOHelper implements ApplicationConfigIO { private final ApplicationConfigIO delegate; - public ApplicationIOHelper(ApplicationConfigReadFormat readFormat) { + public ApplicationConfigIOHelper(ApplicationConfigReadFormat readFormat) { Preconditions.checkNotNull(readFormat, "Can't init with null readFormat"); ServiceLoader<ApplicationConfigIO> loader = ServiceLoader.load(ApplicationConfigIO.class); ApplicationConfigIO delegate = null; diff --git a/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOProperties.java b/nuiton-config/src/main/java/org/nuiton/config/io/properties/ApplicationConfigIOProperties.java similarity index 84% rename from nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOProperties.java rename to nuiton-config/src/main/java/org/nuiton/config/io/properties/ApplicationConfigIOProperties.java index c07f871..b0d6127 100644 --- a/nuiton-config/src/main/java/org/nuiton/config/io/ApplicationConfigIOProperties.java +++ b/nuiton-config/src/main/java/org/nuiton/config/io/properties/ApplicationConfigIOProperties.java @@ -1,4 +1,9 @@ -package org.nuiton.config.io; +package org.nuiton.config.io.properties; + +import org.nuiton.config.io.ApplicationConfigIO; +import org.nuiton.config.io.ApplicationConfigReadFormat; +import org.nuiton.config.io.ApplicationConfigReadPropertiesException; +import org.nuiton.config.io.ApplicationConfigWritePropertiesException; import java.io.BufferedReader; import java.io.BufferedWriter; diff --git a/nuiton-config/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO b/nuiton-config/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO index 258636d..14be5df 100644 --- a/nuiton-config/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO +++ b/nuiton-config/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO @@ -1 +1 @@ -org.nuiton.config.io.ApplicationConfigIOProperties \ No newline at end of file +org.nuiton.config.io.properties.ApplicationConfigIOProperties \ No newline at end of file diff --git a/nuiton-config/src/test/java/org/nuiton/config/io/properties/ApplicationConfigIOPropertiesTest.java b/nuiton-config/src/test/java/org/nuiton/config/io/properties/ApplicationConfigIOPropertiesTest.java new file mode 100644 index 0000000..94436d7 --- /dev/null +++ b/nuiton-config/src/test/java/org/nuiton/config/io/properties/ApplicationConfigIOPropertiesTest.java @@ -0,0 +1,96 @@ +package org.nuiton.config.io.properties; + +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.config.io.ApplicationConfigIO; +import org.nuiton.config.io.ApplicationConfigIOHelper; +import org.nuiton.config.io.ApplicationConfigReadFormat; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.Properties; + +import static org.junit.Assert.*; + +/** + * Created by tchemit on 07/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ApplicationConfigIOPropertiesTest { + + + @Test + public void readProperties() throws Exception { + + ApplicationConfigIO io = new ApplicationConfigIOProperties(); + + File file = Paths.get(new File("").getAbsolutePath(), "src", "test", "resources", "NuitonConfigExample.properties").toFile(); + + Properties properties = io.readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties); + + } + + @Test + public void readPropertiesFromHelper() throws Exception { + + File file = Paths.get(new File("").getAbsolutePath(), "src", "test", "resources", "NuitonConfigExample.properties").toFile(); + + Properties properties = new ApplicationConfigIOHelper(ApplicationConfigReadFormat.properties).readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties); + + } + + @Test + public void writeProperties() throws Exception { + + ApplicationConfigIO io = new ApplicationConfigIOProperties(); + + Properties properties = new Properties(); + properties.put("identity.firstName", "Joshua"); + properties.put("identity.lastName", "Bloch"); + properties.put("identity.age", "56"); + properties.put("identity.twitter", "jbloch"); + + File file = Paths.get(new File("").getAbsolutePath(), "target", "surefire-workdir", "NuitonConfigExample" + System.currentTimeMillis() + ".properties").toFile(); + + io.writeProperties(properties, file, StandardCharsets.UTF_8.name(), null); + + Properties properties2 = io.readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties2); + + } + + @Test + public void writePropertiesFromHelper() throws Exception { + + Properties properties = new Properties(); + properties.put("identity.firstName", "Joshua"); + properties.put("identity.lastName", "Bloch"); + properties.put("identity.age", "56"); + properties.put("identity.twitter", "jbloch"); + + File file = Paths.get(new File("").getAbsolutePath(), "target", "surefire-workdir", "NuitonConfigExample" + System.currentTimeMillis() + ".properties").toFile(); + new ApplicationConfigIOHelper(ApplicationConfigReadFormat.properties).writeProperties(properties, file, StandardCharsets.UTF_8.name(), null); + + Properties properties2 = new ApplicationConfigIOHelper(ApplicationConfigReadFormat.properties).readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties2); + + } + + private void assertProperties(Properties properties) { + Assert.assertNotNull(properties); + Assert.assertNotNull(properties.getProperty("identity.firstName")); + Assert.assertEquals("Joshua", properties.getProperty("identity.firstName")); + Assert.assertEquals("Bloch", properties.getProperty("identity.lastName")); + Assert.assertEquals("56", properties.getProperty("identity.age")); + Assert.assertEquals("jbloch", properties.getProperty("identity.twitter")); + } + +} \ No newline at end of file diff --git a/nuiton-config/src/test/resources/NuitonConfigExample.properties b/nuiton-config/src/test/resources/NuitonConfigExample.properties new file mode 100644 index 0000000..3161b89 --- /dev/null +++ b/nuiton-config/src/test/resources/NuitonConfigExample.properties @@ -0,0 +1,4 @@ +identity.firstName=Joshua +identity.lastName=Bloch +identity.age=56 +identity.twitter=jbloch -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/4059 in repository nuiton-config. See https://gitlab.nuiton.org/nuiton/nuiton-config.git commit 471d063dac03fefe3fa64de1a0d03f1a36aeaaf8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Oct 7 14:15:31 2016 +0200 Add ini io implementation --- nuiton-config-io-ini/pom.xml | 5 ++ .../config/io/ini/ApplicationConfigIOIni.java | 37 ++++++++- .../org.nuiton.config.io.ApplicationConfigIO | 0 .../config/io/ini/ApplicationConfigIOIniTest.java | 93 ++++++++++++++++++++++ .../src/test/resources/NuitonConfigExample.ini | 5 ++ 5 files changed, 138 insertions(+), 2 deletions(-) diff --git a/nuiton-config-io-ini/pom.xml b/nuiton-config-io-ini/pom.xml index 7a13c3e..ee920a3 100644 --- a/nuiton-config-io-ini/pom.xml +++ b/nuiton-config-io-ini/pom.xml @@ -32,6 +32,11 @@ <artifactId>commons-configuration2</artifactId> </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> </project> diff --git a/nuiton-config-io-ini/src/main/java/org/nuiton/config/io/ini/ApplicationConfigIOIni.java b/nuiton-config-io-ini/src/main/java/org/nuiton/config/io/ini/ApplicationConfigIOIni.java index bfadbc3..fd0ed9e 100644 --- a/nuiton-config-io-ini/src/main/java/org/nuiton/config/io/ini/ApplicationConfigIOIni.java +++ b/nuiton-config-io-ini/src/main/java/org/nuiton/config/io/ini/ApplicationConfigIOIni.java @@ -1,5 +1,8 @@ package org.nuiton.config.io.ini; +import com.google.common.base.Joiner; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import com.google.common.io.Files; import org.apache.commons.configuration2.INIConfiguration; import org.apache.commons.configuration2.SubnodeConfiguration; @@ -15,7 +18,11 @@ import java.io.Reader; import java.io.Writer; import java.net.URL; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Iterator; +import java.util.List; import java.util.Properties; /** @@ -70,9 +77,35 @@ public class ApplicationConfigIOIni implements ApplicationConfigIO { INIConfiguration iniConfiguration = new INIConfiguration(); - //FIXME See how to manage sections ? guess them from keys ? + Multimap<String, String> splits = ArrayListMultimap.create(); + for (String key : properties.stringPropertyNames()) { - iniConfiguration.addProperty(key, properties.getProperty(key, null)); + List<String> split = new ArrayList<>(Arrays.asList(key.split("\\."))); + if (split.size() == 1) { + // simple property + iniConfiguration.addProperty(key, properties.getProperty(key)); + } else { + String lastKey = split.remove(split.size() - 1); + splits.put(Joiner.on(".").join(split), lastKey); + } + } + + for (String sectionName : splits.keySet()) { + Collection<String> keyNames = splits.get(sectionName); + if (keyNames.size() > 1) { + + // use section + SubnodeConfiguration section = iniConfiguration.getSection(sectionName); + for (String keyName : keyNames) { + section.addProperty(keyName, properties.getProperty(sectionName + "." + keyName)); + } + + } else { + + // simple property + String keyName = keyNames.iterator().next(); + iniConfiguration.addProperty(sectionName + "." + keyName, properties.getProperty(sectionName + "." + keyName)); + } } try (Writer writer = Files.newWriter(file, Charset.forName(encoding))) { diff --git a/nuiton-config-io-ini/src/main/resources/services/org.nuiton.config.io.ApplicationConfigIO b/nuiton-config-io-ini/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO similarity index 100% rename from nuiton-config-io-ini/src/main/resources/services/org.nuiton.config.io.ApplicationConfigIO rename to nuiton-config-io-ini/src/main/resources/META-INF/services/org.nuiton.config.io.ApplicationConfigIO diff --git a/nuiton-config-io-ini/src/test/java/org/nuiton/config/io/ini/ApplicationConfigIOIniTest.java b/nuiton-config-io-ini/src/test/java/org/nuiton/config/io/ini/ApplicationConfigIOIniTest.java new file mode 100644 index 0000000..024311c --- /dev/null +++ b/nuiton-config-io-ini/src/test/java/org/nuiton/config/io/ini/ApplicationConfigIOIniTest.java @@ -0,0 +1,93 @@ +package org.nuiton.config.io.ini; + +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.config.io.ApplicationConfigIO; +import org.nuiton.config.io.ApplicationConfigIOHelper; +import org.nuiton.config.io.ApplicationConfigReadFormat; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.Properties; + +/** + * Created by tchemit on 07/10/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ApplicationConfigIOIniTest { + + @Test + public void readProperties() throws Exception { + + ApplicationConfigIO io = new ApplicationConfigIOIni(); + + File file = Paths.get(new File("").getAbsolutePath(), "src", "test", "resources", "NuitonConfigExample.ini").toFile(); + + Properties properties = io.readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties); + + } + + @Test + public void readPropertiesFromHelper() throws Exception { + + File file = Paths.get(new File("").getAbsolutePath(), "src", "test", "resources", "NuitonConfigExample.ini").toFile(); + + Properties properties = new ApplicationConfigIOHelper(ApplicationConfigReadFormat.ini).readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties); + + } + + @Test + public void writeProperties() throws Exception { + + ApplicationConfigIO io = new ApplicationConfigIOIni(); + + Properties properties = new Properties(); + properties.put("identity.firstName", "Joshua"); + properties.put("identity.lastName", "Bloch"); + properties.put("identity.age", "56"); + properties.put("identity.twitter", "jbloch"); + + File file = Paths.get(new File("").getAbsolutePath(), "target", "surefire-workdir", "NuitonConfigExample" + System.currentTimeMillis() + ".ini").toFile(); + + io.writeProperties(properties, file, StandardCharsets.UTF_8.name(), null); + + Properties properties2 = io.readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties2); + + } + + @Test + public void writePropertiesFromHelper() throws Exception { + + Properties properties = new Properties(); + properties.put("identity.firstName", "Joshua"); + properties.put("identity.lastName", "Bloch"); + properties.put("identity.age", "56"); + properties.put("identity.twitter", "jbloch"); + + File file = Paths.get(new File("").getAbsolutePath(), "target", "surefire-workdir", "NuitonConfigExample" + System.currentTimeMillis() + ".ini").toFile(); + new ApplicationConfigIOHelper(ApplicationConfigReadFormat.ini).writeProperties(properties, file, StandardCharsets.UTF_8.name(), null); + + Properties properties2 = new ApplicationConfigIOHelper(ApplicationConfigReadFormat.ini).readProperties(file.toURI().toURL(), StandardCharsets.UTF_8.name()); + + assertProperties(properties2); + + } + + private void assertProperties(Properties properties) { + Assert.assertNotNull(properties); + Assert.assertNotNull(properties.getProperty("identity.firstName")); + Assert.assertEquals("Joshua", properties.getProperty("identity.firstName")); + Assert.assertEquals("Bloch", properties.getProperty("identity.lastName")); + Assert.assertEquals("56", properties.getProperty("identity.age")); + Assert.assertEquals("jbloch", properties.getProperty("identity.twitter")); + } + +} \ No newline at end of file diff --git a/nuiton-config-io-ini/src/test/resources/NuitonConfigExample.ini b/nuiton-config-io-ini/src/test/resources/NuitonConfigExample.ini new file mode 100644 index 0000000..cee47b5 --- /dev/null +++ b/nuiton-config-io-ini/src/test/resources/NuitonConfigExample.ini @@ -0,0 +1,5 @@ +[identity] +firstName = Joshua +lastName = Bloch +age = 56 +twitter = jbloch -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm