Browse Source

added method subset(…) to Configuration interface, added implementation in JsonConfig

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
main
Stephan Richter 2 months ago
parent
commit
e16bc02400
  1. 1
      build.gradle.kts
  2. 2
      de.srsoftware.configuration.api/build.gradle.kts
  3. 8
      de.srsoftware.configuration.api/src/main/java/de/srsoftware/configuration/Configuration.java
  4. 2
      de.srsoftware.configuration.json/build.gradle.kts
  5. 15
      de.srsoftware.configuration.json/src/main/java/de/srsoftware/configuration/JsonConfig.java
  6. 15
      de.srsoftware.configuration.json/src/test/java/de/srsoftware/configuration/JsonConfigTest.java

1
build.gradle.kts

@ -11,7 +11,6 @@ spotless { @@ -11,7 +11,6 @@ spotless {
target("**/src/**/java/**/*.java")
removeUnusedImports()
importOrder()
clangFormat("18.1.8").style("file:config/clang-format")
licenseHeader("/* © SRSoftware 2024 */")
}
}

2
de.srsoftware.configuration.api/build.gradle.kts

@ -9,7 +9,7 @@ object Meta { @@ -9,7 +9,7 @@ object Meta {
val COMPONENT_TYPE = "java" // "java" or "versionCatalog"
val GROUP = "de.srsoftware"
val ARTIFACT_ID = "configuration.api"
val VERSION = "1.0.0"
val VERSION = "1.0.1"
val PUBLISHING_TYPE = "AUTOMATIC" // USER_MANAGED or AUTOMATIC
val SHA_ALGORITHMS = listOf("SHA-256", "SHA-512") // sha256 and sha512 are supported but not mandatory. Only sha1 is mandatory but it is supported by default.
val DESC = "SRSoftware Configuration API"

8
de.srsoftware.configuration.api/src/main/java/de/srsoftware/configuration/Configuration.java

@ -44,4 +44,12 @@ public interface Configuration { @@ -44,4 +44,12 @@ public interface Configuration {
* @throws IOException if altering the configuration fails
*/
<C extends Configuration> C set(String key, Object value) throws IOException;
/**
* get a subset of this configuration
*
* @param key specifies, which subset is requested
* @return the part of the Configuration which is located at the key
*/
Optional<? extends Configuration> subset(String key);
}

2
de.srsoftware.configuration.json/build.gradle.kts

@ -14,7 +14,7 @@ object Meta { @@ -14,7 +14,7 @@ object Meta {
val COMPONENT_TYPE = "java" // "java" or "versionCatalog"
val GROUP = "de.srsoftware"
val ARTIFACT_ID = "configuration.json"
val VERSION = "1.0.1"
val VERSION = "1.0.2"
val PUBLISHING_TYPE = "AUTOMATIC" // USER_MANAGED or AUTOMATIC
val SHA_ALGORITHMS = listOf("SHA-256", "SHA-512") // sha256 and sha512 are supported but not mandatory. Only sha1 is mandatory but it is supported by default.
val DESC = "SRSoftware Configuration: Json-based Implementation"

15
de.srsoftware.configuration.json/src/main/java/de/srsoftware/configuration/JsonConfig.java

@ -36,6 +36,15 @@ public class JsonConfig implements Configuration { @@ -36,6 +36,15 @@ public class JsonConfig implements Configuration {
json = new JSONObject(Files.readString(file.toPath()));
}
/**
* create a JsonConfig instance from a Json object
* @param json the data to use
*/
public JsonConfig(JSONObject json){
file = null;
this.json = json;
}
/**
* Create a new JsonConfig using the passed applicationName
* @param applicationName this determines the name of the file, to which data are stored
@ -148,6 +157,12 @@ public class JsonConfig implements Configuration { @@ -148,6 +157,12 @@ public class JsonConfig implements Configuration {
}
}
@Override
public Optional<JsonConfig> subset(String key) {
Optional<JSONObject> json = get(key);
return json.map(JsonConfig::new);
}
private Stack<String> toPath(String key) {
var parts = key.split("\\.");
var path = new Stack<String>();

15
de.srsoftware.configuration.json/src/test/java/de/srsoftware/configuration/JsonConfigTest.java

@ -117,4 +117,19 @@ public class JsonConfigTest { @@ -117,4 +117,19 @@ public class JsonConfigTest {
config.drop("hello");
assertEquals("{}", config.flat());
}
@Test
public void testSubset() throws IOException {
config.set("a.a.a", "aaa");
config.set("a.a.b", "aab");
config.set("a.b.a", "aba");
config.set("a.b.b", "abb");
assertEquals("{\"a\":{\"a\":{\"a\":\"aaa\",\"b\":\"aab\"},\"b\":{\"a\":\"aba\",\"b\":\"abb\"}}}",config.flat());
var subset = config.subset("a");
assertTrue(subset.isPresent());
assertEquals("{\"a\":{\"a\":\"aaa\",\"b\":\"aab\"},\"b\":{\"a\":\"aba\",\"b\":\"abb\"}}",subset.get().flat());
subset = config.subset("a.b");
assertTrue(subset.isPresent());
assertEquals("{\"a\":\"aba\",\"b\":\"abb\"}",subset.get().flat());
}
}

Loading…
Cancel
Save