2 Commits

Author SHA1 Message Date
62b1e5a8fd extended interface: added keys() method
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2025-04-16 09:02:32 +02:00
e16bc02400 added method subset(…) to Configuration interface, added implementation in JsonConfig
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2025-04-09 16:56:49 +02:00
6 changed files with 52 additions and 3 deletions

View File

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

View File

@@ -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.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 API"

View File

@@ -2,6 +2,7 @@
package de.srsoftware.configuration;
import java.io.IOException;
import java.util.Collection;
import java.util.Optional;
/**
@@ -35,6 +36,12 @@ public interface Configuration {
*/
<T> T get(String key, T defaultValue);
/**
* Get the configuration`s key set
* @return a collection of strings which are the keys to the configuration
*/
Collection<String> keys();
/**
* Assign a specific key with a new value. If the key was assigned with another value before, the old value is overwritten
* @param key specifies, which value is to be assigned
@@ -44,4 +51,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);
}

View File

@@ -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.3"
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"

View File

@@ -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
@@ -121,6 +130,11 @@ public class JsonConfig implements Configuration {
}
}
@Override
public Collection<String> keys() {
return json.keySet();
}
/**
* updates the storage file with the current json data
* @throws IOException if writing the file does so
@@ -148,6 +162,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>();

View File

@@ -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());
}
}