diff --git a/content-api/src/main/java/module-info.java b/content-api/src/main/java/module-info.java index cfa7d30..2e44896 100644 --- a/content-api/src/main/java/module-info.java +++ b/content-api/src/main/java/module-info.java @@ -1,8 +1,3 @@ -import org.xbib.content.SettingsBuilder; - module org.xbib.content.api { exports org.xbib.content; - requires transitive org.xbib.datastructures.api; - requires java.sql; - uses SettingsBuilder; } diff --git a/content-config/build.gradle b/content-config/build.gradle index d3cea2e..7e4a80d 100644 --- a/content-config/build.gradle +++ b/content-config/build.gradle @@ -1,5 +1,5 @@ dependencies { - api project(':content-settings-datastructures') - testImplementation project(':content-settings-datastructures-json') - testImplementation project(':content-settings-datastructures-yaml') + api project(':settings-datastructures') + testImplementation project(':settings-datastructures-json') + testImplementation project(':settings-datastructures-yaml') } diff --git a/content-config/src/main/java/module-info.java b/content-config/src/main/java/module-info.java index 0e1b527..554a363 100644 --- a/content-config/src/main/java/module-info.java +++ b/content-config/src/main/java/module-info.java @@ -1,11 +1,11 @@ import org.xbib.content.config.ConfigLogger; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; module org.xbib.content.config { exports org.xbib.content.config; uses ConfigLogger; uses SettingsLoader; provides ConfigLogger with org.xbib.content.config.SystemConfigLogger; - requires org.xbib.content.api; - requires transitive org.xbib.content.settings.datastructures; + requires org.xbib.settings.api; + requires transitive org.xbib.settings.datastructures; } diff --git a/content-config/src/main/java/org/xbib/content/config/ConfigLoader.java b/content-config/src/main/java/org/xbib/content/config/ConfigLoader.java index 2844ac3..6a411bf 100644 --- a/content-config/src/main/java/org/xbib/content/config/ConfigLoader.java +++ b/content-config/src/main/java/org/xbib/content/config/ConfigLoader.java @@ -1,9 +1,9 @@ package org.xbib.content.config; -import org.xbib.content.Settings; -import org.xbib.content.SettingsBuilder; -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.SettingsLoaderService; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.SettingsLoaderService; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -14,6 +14,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -137,6 +138,15 @@ public class ConfigLoader { } } } + if (!params.jdbcLookups.isEmpty()) { + for (ConfigParams.JdbcLookup jdbcLookup : params.jdbcLookups) { + try { + settings.fromJdbc(jdbcLookup.connection, jdbcLookup.statement, jdbcLookup.params); + } catch (SQLException sqlException) { + throw new ConfigException(sqlException); + } + } + } if (params.includeAll) { return overrideFromProperties(params, settings); } @@ -263,15 +273,15 @@ public class ConfigLoader { return null; } - private SettingsBuilder overrideFromProperties(ConfigParams params, - SettingsBuilder settings) { - for (String key : settings.map().keySet()) { - String value = System.getProperty(params.directoryName != null ? params.directoryName + '.' + key : key); - if (value != null) { - settings.put(key, value); - } + private SettingsBuilder overrideFromProperties(ConfigParams params, SettingsBuilder settingsBuilder) { + if (params.withSystemPropertiesOverride) { + settingsBuilder.map(e -> { + String key = e.getKey(); + String value = System.getProperty(params.directoryName != null ? params.directoryName + '.' + key : key); + return value != null ? Map.entry(key, value) : Map.entry(key, e.getValue()); + }); } - return settings; + return settingsBuilder; } private List createListOfLocations(ConfigParams params, diff --git a/content-config/src/main/java/org/xbib/content/config/ConfigParams.java b/content-config/src/main/java/org/xbib/content/config/ConfigParams.java index 8b5ce77..fc3a797 100644 --- a/content-config/src/main/java/org/xbib/content/config/ConfigParams.java +++ b/content-config/src/main/java/org/xbib/content/config/ConfigParams.java @@ -1,8 +1,9 @@ package org.xbib.content.config; -import org.xbib.content.settings.datastructures.DatastructureSettings; +import org.xbib.settings.datastructures.DatastructureSettings; import java.io.IOException; import java.io.Reader; +import java.sql.Connection; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -21,10 +22,14 @@ public class ConfigParams implements Comparable { boolean withStdin = false; + boolean withSystemPropertiesOverride = false; + List classLoaders = null; final List reader = new ArrayList<>(); + final List jdbcLookups = new ArrayList<>(); + final List settings = new ArrayList<>(); List args = null; @@ -48,6 +53,11 @@ public class ConfigParams implements Comparable { return this; } + public ConfigParams withSystemPropertiesOverride() { + this.withSystemPropertiesOverride = true; + return this; + } + public ConfigParams includeAll() { this.includeAll = true; return this; @@ -102,6 +112,15 @@ public class ConfigParams implements Comparable { return this; } + public ConfigParams withJdbc(Connection connection, String statement, String[] params) { + JdbcLookup jdbcLookup = new JdbcLookup(); + jdbcLookup.connection = connection; + jdbcLookup.statement = statement; + jdbcLookup.params = params; + jdbcLookups.add(jdbcLookup); + return this; + } + @Override public int compareTo(ConfigParams o) { return COMPARATOR.compare(this, o); @@ -125,4 +144,10 @@ public class ConfigParams implements Comparable { Reader reader; String suffix; } + + public static class JdbcLookup { + Connection connection; + String statement; + String[] params; + } } diff --git a/content-config/src/test/java/org/xbib/content/config/test/ConfigLoaderTest.java b/content-config/src/test/java/org/xbib/content/config/test/ConfigLoaderTest.java index 4ea27f4..9e1182a 100644 --- a/content-config/src/test/java/org/xbib/content/config/test/ConfigLoaderTest.java +++ b/content-config/src/test/java/org/xbib/content/config/test/ConfigLoaderTest.java @@ -2,7 +2,7 @@ package org.xbib.content.config.test; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.xbib.content.Settings; +import org.xbib.settings.Settings; import org.xbib.content.config.ConfigLoader; import org.xbib.content.config.ConfigParams; import java.io.IOException; @@ -29,4 +29,17 @@ public class ConfigLoaderTest { assertEquals("world2", settings.get("hello2")); } + @Test + public void testOverride() throws IOException { + System.setProperty("hello", "override"); + Settings settings = ConfigLoader.getInstance() + .load(new ConfigParams() + .withPath(null, null, "src/test/resources", "config.*")); + assertEquals("world", settings.get("hello")); + settings = ConfigLoader.getInstance() + .load(new ConfigParams() + .withSystemPropertiesOverride() + .withPath(null, null, "src/test/resources", "config.*")); + assertEquals("override", settings.get("hello")); + } } diff --git a/content-config/src/test/resources/META-INF/services/org.xbib.content.SettingsLoader b/content-config/src/test/resources/META-INF/services/org.xbib.content.SettingsLoader deleted file mode 100644 index 76ef2b0..0000000 --- a/content-config/src/test/resources/META-INF/services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1,3 +0,0 @@ -org.xbib.content.settings.datastructures.PropertiesSettingsLoader -org.xbib.content.settings.datastructures.json.JsonSettingsLoader -org.xbib.content.settings.datastructures.yaml.YamlSettingsLoader diff --git a/content-config/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader b/content-config/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..c25e931 --- /dev/null +++ b/content-config/src/test/resources/META-INF/services/org.xbib.settings.SettingsLoader @@ -0,0 +1,3 @@ +org.xbib.settings.datastructures.PropertiesSettingsLoader +org.xbib.settings.datastructures.json.JsonSettingsLoader +org.xbib.settings.datastructures.yaml.YamlSettingsLoader diff --git a/content-json/build.gradle b/content-json/build.gradle index f198df2..1f48e0d 100644 --- a/content-json/build.gradle +++ b/content-json/build.gradle @@ -1,6 +1,5 @@ dependencies { api project(':content-core') - api project(':content-settings') api "com.fasterxml.jackson.core:jackson-databind:${project.property('jackson.version')}" testImplementation("org.mockito:mockito-core:${project.property('mockito.version')}") { exclude group: 'org.hamcrest' diff --git a/content-json/src/main/java/module-info.java b/content-json/src/main/java/module-info.java index e186c21..faff327 100644 --- a/content-json/src/main/java/module-info.java +++ b/content-json/src/main/java/module-info.java @@ -1,5 +1,4 @@ import org.xbib.content.XContent; -import org.xbib.content.SettingsLoader; module org.xbib.content.json { exports org.xbib.content.json; @@ -9,8 +8,6 @@ module org.xbib.content.json { exports org.xbib.content.json.patch; exports org.xbib.content.json.pointer; requires org.xbib.content.core; - requires org.xbib.content.settings; requires com.fasterxml.jackson.databind; provides XContent with org.xbib.content.json.JsonXContent; - provides SettingsLoader with org.xbib.content.json.JsonSettingsLoader; } diff --git a/content-json/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader b/content-json/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader deleted file mode 100644 index 9fdac42..0000000 --- a/content-json/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.json.JsonSettingsLoader diff --git a/content-settings-datastructures-json/src/main/java/module-info.java b/content-settings-datastructures-json/src/main/java/module-info.java deleted file mode 100644 index 9f4ee0e..0000000 --- a/content-settings-datastructures-json/src/main/java/module-info.java +++ /dev/null @@ -1,10 +0,0 @@ -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.json.JsonSettingsLoader; - -module org.xbib.content.settings.datastructures.json { - exports org.xbib.content.settings.datastructures.json; - requires transitive org.xbib.content.settings.datastructures; - requires org.xbib.datastructures.json.tiny; - uses SettingsLoader; - provides SettingsLoader with JsonSettingsLoader; -} diff --git a/content-settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.content.SettingsLoader b/content-settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.content.SettingsLoader deleted file mode 100644 index 6107384..0000000 --- a/content-settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.datastructures.json.JsonSettingsLoader diff --git a/content-settings-datastructures-yaml/src/main/java/module-info.java b/content-settings-datastructures-yaml/src/main/java/module-info.java deleted file mode 100644 index b274ea4..0000000 --- a/content-settings-datastructures-yaml/src/main/java/module-info.java +++ /dev/null @@ -1,10 +0,0 @@ -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.yaml.YamlSettingsLoader; - -module org.xbib.content.settings.datastructures.yaml { - exports org.xbib.content.settings.datastructures.yaml; - requires transitive org.xbib.content.settings.datastructures; - requires org.xbib.datastructures.yaml.tiny; - uses SettingsLoader; - provides SettingsLoader with YamlSettingsLoader; -} diff --git a/content-settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader b/content-settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader deleted file mode 100644 index df7530c..0000000 --- a/content-settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.datastructures.yaml.YamlSettingsLoader diff --git a/content-settings-datastructures/src/main/java/module-info.java b/content-settings-datastructures/src/main/java/module-info.java deleted file mode 100644 index b03f0d5..0000000 --- a/content-settings-datastructures/src/main/java/module-info.java +++ /dev/null @@ -1,15 +0,0 @@ -import org.xbib.content.SettingsBuilder; -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.DatastructureSettingsBuilder; -import org.xbib.content.settings.datastructures.PropertiesSettingsLoader; - -module org.xbib.content.settings.datastructures { - uses SettingsLoader; - provides SettingsLoader with PropertiesSettingsLoader; - uses SettingsBuilder; - provides SettingsBuilder with DatastructureSettingsBuilder; - exports org.xbib.content.settings.datastructures; - requires transitive org.xbib.content.api; - requires org.xbib.datastructures.tiny; - requires transitive org.xbib.datastructures.api; -} diff --git a/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder b/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder deleted file mode 100644 index 354f4a3..0000000 --- a/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.datastructures.DatastructureSettingsBuilder \ No newline at end of file diff --git a/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader b/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader deleted file mode 100644 index 0a2c1e8..0000000 --- a/content-settings-datastructures/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.datastructures.PropertiesSettingsLoader diff --git a/content-settings/src/main/java/module-info.java b/content-settings/src/main/java/module-info.java deleted file mode 100644 index 620620f..0000000 --- a/content-settings/src/main/java/module-info.java +++ /dev/null @@ -1,15 +0,0 @@ -import org.xbib.content.SettingsBuilder; -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.ContentSettingsBuilder; -import org.xbib.content.settings.PropertiesSettingsLoader; - -module org.xbib.content.settings { - uses SettingsLoader; - provides SettingsLoader with PropertiesSettingsLoader; - uses SettingsBuilder; - provides SettingsBuilder with ContentSettingsBuilder; - exports org.xbib.content.settings; - requires org.xbib.content.core; - requires org.xbib.datastructures.api; - requires transitive org.xbib.datastructures.tiny; -} diff --git a/content-settings/src/main/java/org/xbib/content/settings/package-info.java b/content-settings/src/main/java/org/xbib/content/settings/package-info.java deleted file mode 100644 index 233e353..0000000 --- a/content-settings/src/main/java/org/xbib/content/settings/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Classes for settings. - */ -package org.xbib.content.settings; diff --git a/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder b/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder deleted file mode 100644 index 9e0a5f8..0000000 --- a/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsBuilder +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.ContentSettingsBuilder \ No newline at end of file diff --git a/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader b/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader deleted file mode 100644 index 2ccefbb..0000000 --- a/content-settings/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.settings.PropertiesSettingsLoader \ No newline at end of file diff --git a/content-yaml/build.gradle b/content-yaml/build.gradle index de14a44..0b3f852 100644 --- a/content-yaml/build.gradle +++ b/content-yaml/build.gradle @@ -1,6 +1,5 @@ dependencies { api project(':content-core') - api project(':content-settings') api "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${project.property('jackson.version')}" implementation "org.yaml:snakeyaml:${project.property('snakeyaml.version')}" } diff --git a/content-yaml/src/main/java/module-info.java b/content-yaml/src/main/java/module-info.java index 3146424..e0fb027 100644 --- a/content-yaml/src/main/java/module-info.java +++ b/content-yaml/src/main/java/module-info.java @@ -1,12 +1,9 @@ -import org.xbib.content.SettingsLoader; import org.xbib.content.XContent; module org.xbib.content.yaml { exports org.xbib.content.yaml; requires transitive org.xbib.content.core; - requires transitive org.xbib.content.settings; requires transitive com.fasterxml.jackson.dataformat.yaml; requires com.fasterxml.jackson.core; provides XContent with org.xbib.content.yaml.YamlXContent; - provides SettingsLoader with org.xbib.content.yaml.YamlSettingsLoader; } diff --git a/content-yaml/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader b/content-yaml/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader deleted file mode 100644 index 5c5c1e4..0000000 --- a/content-yaml/src/main/resources/META-INF/services/org.xbib.content.SettingsLoader +++ /dev/null @@ -1 +0,0 @@ -org.xbib.content.yaml.YamlSettingsLoader \ No newline at end of file diff --git a/content-api/build.gradle b/settings-api/build.gradle similarity index 100% rename from content-api/build.gradle rename to settings-api/build.gradle diff --git a/settings-api/src/main/java/module-info.java b/settings-api/src/main/java/module-info.java new file mode 100644 index 0000000..3996b9d --- /dev/null +++ b/settings-api/src/main/java/module-info.java @@ -0,0 +1,10 @@ +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsLoader; + +module org.xbib.settings.api { + exports org.xbib.settings; + uses SettingsBuilder; + uses SettingsLoader; + requires transitive org.xbib.datastructures.api; + requires transitive java.sql; +} diff --git a/content-api/src/main/java/org/xbib/content/PlaceholderResolver.java b/settings-api/src/main/java/org/xbib/settings/PlaceholderResolver.java similarity index 94% rename from content-api/src/main/java/org/xbib/content/PlaceholderResolver.java rename to settings-api/src/main/java/org/xbib/settings/PlaceholderResolver.java index 1f68071..4523194 100644 --- a/content-api/src/main/java/org/xbib/content/PlaceholderResolver.java +++ b/settings-api/src/main/java/org/xbib/settings/PlaceholderResolver.java @@ -1,4 +1,4 @@ -package org.xbib.content; +package org.xbib.settings; /** * Strategy interface used to resolve replacement values for placeholders contained in Strings. diff --git a/content-api/src/main/java/org/xbib/content/PropertyPlaceholder.java b/settings-api/src/main/java/org/xbib/settings/PropertyPlaceholder.java similarity index 99% rename from content-api/src/main/java/org/xbib/content/PropertyPlaceholder.java rename to settings-api/src/main/java/org/xbib/settings/PropertyPlaceholder.java index 83a977c..3a6898e 100644 --- a/content-api/src/main/java/org/xbib/content/PropertyPlaceholder.java +++ b/settings-api/src/main/java/org/xbib/settings/PropertyPlaceholder.java @@ -1,4 +1,4 @@ -package org.xbib.content; +package org.xbib.settings; import java.util.HashSet; import java.util.Set; diff --git a/content-api/src/main/java/org/xbib/content/Settings.java b/settings-api/src/main/java/org/xbib/settings/Settings.java similarity index 95% rename from content-api/src/main/java/org/xbib/content/Settings.java rename to settings-api/src/main/java/org/xbib/settings/Settings.java index 9e9d489..bdc64b5 100644 --- a/content-api/src/main/java/org/xbib/content/Settings.java +++ b/settings-api/src/main/java/org/xbib/settings/Settings.java @@ -1,7 +1,8 @@ -package org.xbib.content; +package org.xbib.settings; import org.xbib.datastructures.api.ByteSizeValue; import org.xbib.datastructures.api.TimeValue; +import java.io.IOException; import java.util.Map; import java.util.Optional; import java.util.ServiceLoader; @@ -62,4 +63,6 @@ public interface Settings extends AutoCloseable { Settings getByPrefix(String prefix); boolean containsSetting(String setting); + + void close() throws IOException; } diff --git a/content-api/src/main/java/org/xbib/content/SettingsBuilder.java b/settings-api/src/main/java/org/xbib/settings/SettingsBuilder.java similarity index 51% rename from content-api/src/main/java/org/xbib/content/SettingsBuilder.java rename to settings-api/src/main/java/org/xbib/settings/SettingsBuilder.java index ac52c42..8c97ad8 100644 --- a/content-api/src/main/java/org/xbib/content/SettingsBuilder.java +++ b/settings-api/src/main/java/org/xbib/settings/SettingsBuilder.java @@ -1,4 +1,4 @@ -package org.xbib.content; +package org.xbib.settings; import java.io.InputStream; import java.nio.file.Path; @@ -9,13 +9,12 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.function.Function; public interface SettingsBuilder { SettingsBuilder put(String setting, String value); - SettingsBuilder put(String setting, Class clazz); - SettingsBuilder put(String setting, boolean value); SettingsBuilder put(String setting, int value); @@ -41,9 +40,9 @@ public interface SettingsBuilder { SettingsBuilder loadFromResource(String resourceName, InputStream inputStream) throws SettingsException; - default SettingsBuilder fromJdbcConfTable(Connection connection, String id, String type) throws SQLException { - try (PreparedStatement statement = connection.prepareStatement("select key, value from conf where id = ? and type = ?", - new String[]{id, type}); ResultSet resultSet = statement.executeQuery()) { + default SettingsBuilder fromJdbc(Connection connection, String statement, String[] params) throws SQLException { + try (PreparedStatement preparedStatement = connection.prepareStatement(statement, params); + ResultSet resultSet = preparedStatement.executeQuery()) { while (resultSet.next()) { String key = resultSet.getString("key"); String value = resultSet.getString("value"); @@ -57,17 +56,49 @@ public interface SettingsBuilder { SettingsBuilder loadFromSystemEnvironment(); + /** + * Runs across all the settings set on this builder and replaces {@code ${...}} elements in the + * each setting value according to the following logic: + * First, tries to resolve it against a System property ({@link System#getProperty(String)}), next, + * tries and resolve it against an environment variable ({@link System#getenv(String)}), next, + * tries and resolve it against a date pattern to resolve the current date, + * and last, tries and replace it with another setting already set on this builder. + * @param propertyPlaceholder the property place holder + * @param placeholderResolver the place holder resolver + * @return this builder + */ SettingsBuilder replacePropertyPlaceholders(PropertyPlaceholder propertyPlaceholder, PlaceholderResolver placeholderResolver); + /** + * A default method to replace property placeholders. + * @return this builder + */ SettingsBuilder replacePropertyPlaceholders(); + /** + * Optional settings refresh mechanism, using reloading from a path after a give time period. + * May not be implemented at all. + */ SettingsBuilder setRefresh(Path path, long initialDelay, long period, TimeUnit timeUnit); + /** + * Map all settings keys and values to other keys and values. + * Example usage is to override settings from another priority source. + * @return this builder + */ + SettingsBuilder map(Function, Map.Entry> function); + + /** + * Return the Settings from this SettingsBuilder. + * @return the settings + */ Settings build(); + /** + * Returns true if the settings builder is empty. + * @return true if empty + */ boolean isEmpty(); - Map map(); - } diff --git a/content-api/src/main/java/org/xbib/content/SettingsException.java b/settings-api/src/main/java/org/xbib/settings/SettingsException.java similarity index 92% rename from content-api/src/main/java/org/xbib/content/SettingsException.java rename to settings-api/src/main/java/org/xbib/settings/SettingsException.java index f5c70c6..77f46cb 100644 --- a/content-api/src/main/java/org/xbib/content/SettingsException.java +++ b/settings-api/src/main/java/org/xbib/settings/SettingsException.java @@ -1,4 +1,4 @@ -package org.xbib.content; +package org.xbib.settings; /** * A generic failure to handle settings. diff --git a/content-api/src/main/java/org/xbib/content/SettingsLoader.java b/settings-api/src/main/java/org/xbib/settings/SettingsLoader.java similarity index 96% rename from content-api/src/main/java/org/xbib/content/SettingsLoader.java rename to settings-api/src/main/java/org/xbib/settings/SettingsLoader.java index 9687d6c..dbbe866 100644 --- a/content-api/src/main/java/org/xbib/content/SettingsLoader.java +++ b/settings-api/src/main/java/org/xbib/settings/SettingsLoader.java @@ -1,4 +1,4 @@ -package org.xbib.content; +package org.xbib.settings; import java.io.IOException; import java.util.Map; diff --git a/content-api/src/main/java/org/xbib/content/SettingsLoaderService.java b/settings-api/src/main/java/org/xbib/settings/SettingsLoaderService.java similarity index 96% rename from content-api/src/main/java/org/xbib/content/SettingsLoaderService.java rename to settings-api/src/main/java/org/xbib/settings/SettingsLoaderService.java index 7535914..bb23481 100644 --- a/content-api/src/main/java/org/xbib/content/SettingsLoaderService.java +++ b/settings-api/src/main/java/org/xbib/settings/SettingsLoaderService.java @@ -1,6 +1,4 @@ -package org.xbib.content.settings.datastructures; - -import org.xbib.content.SettingsLoader; +package org.xbib.settings; import java.util.HashMap; import java.util.HashSet; diff --git a/settings-api/src/main/java/org/xbib/settings/package-info.java b/settings-api/src/main/java/org/xbib/settings/package-info.java new file mode 100644 index 0000000..ecce19c --- /dev/null +++ b/settings-api/src/main/java/org/xbib/settings/package-info.java @@ -0,0 +1,4 @@ +/** + * Settings API. + */ +package org.xbib.settings; diff --git a/settings-content-json/build.gradle b/settings-content-json/build.gradle new file mode 100644 index 0000000..9eb314d --- /dev/null +++ b/settings-content-json/build.gradle @@ -0,0 +1,4 @@ +dependencies { + api project(':settings-content') + api project(':content-json') +} diff --git a/settings-content-json/src/main/java/module-info.java b/settings-content-json/src/main/java/module-info.java new file mode 100644 index 0000000..d70cab8 --- /dev/null +++ b/settings-content-json/src/main/java/module-info.java @@ -0,0 +1,12 @@ +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.content.json.JsonSettingsLoader; + +module org.xbib.settings.content.json { + exports org.xbib.settings.content.json; + requires transitive org.xbib.settings.content; + requires org.xbib.content.api; + requires org.xbib.content.json; + requires org.xbib.settings.api; + uses SettingsLoader; + provides SettingsLoader with JsonSettingsLoader; +} diff --git a/content-json/src/main/java/org/xbib/content/json/JsonSettingsLoader.java b/settings-content-json/src/main/java/org/xbib/settings/content/json/JsonSettingsLoader.java similarity index 79% rename from content-json/src/main/java/org/xbib/content/json/JsonSettingsLoader.java rename to settings-content-json/src/main/java/org/xbib/settings/content/json/JsonSettingsLoader.java index c021ec6..712773d 100644 --- a/content-json/src/main/java/org/xbib/content/json/JsonSettingsLoader.java +++ b/settings-content-json/src/main/java/org/xbib/settings/content/json/JsonSettingsLoader.java @@ -1,7 +1,8 @@ -package org.xbib.content.json; +package org.xbib.settings.content.json; import org.xbib.content.XContent; -import org.xbib.content.settings.AbstractSettingsLoader; +import org.xbib.content.json.JsonXContent; +import org.xbib.settings.content.AbstractSettingsLoader; import java.util.Set; /** diff --git a/settings-content-json/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader b/settings-content-json/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..bb1bb6e --- /dev/null +++ b/settings-content-json/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.content.json.JsonSettingsLoader \ No newline at end of file diff --git a/settings-content-yaml/build.gradle b/settings-content-yaml/build.gradle new file mode 100644 index 0000000..5288b9b --- /dev/null +++ b/settings-content-yaml/build.gradle @@ -0,0 +1,4 @@ +dependencies { + api project(':settings-content') + api project(':content-yaml') +} diff --git a/settings-content-yaml/src/main/java/module-info.java b/settings-content-yaml/src/main/java/module-info.java new file mode 100644 index 0000000..e0ba9df --- /dev/null +++ b/settings-content-yaml/src/main/java/module-info.java @@ -0,0 +1,12 @@ +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.content.yaml.YamlSettingsLoader; + +module org.xbib.settings.content.yaml { + exports org.xbib.settings.content.yaml; + requires transitive org.xbib.settings.content; + requires org.xbib.content.api; + requires org.xbib.content.yaml; + requires org.xbib.settings.api; + uses SettingsLoader; + provides SettingsLoader with YamlSettingsLoader; +} diff --git a/content-yaml/src/main/java/org/xbib/content/yaml/YamlSettingsLoader.java b/settings-content-yaml/src/main/java/org/xbib/settings/content/yaml/YamlSettingsLoader.java similarity index 86% rename from content-yaml/src/main/java/org/xbib/content/yaml/YamlSettingsLoader.java rename to settings-content-yaml/src/main/java/org/xbib/settings/content/yaml/YamlSettingsLoader.java index 78d4f64..500c3f8 100644 --- a/content-yaml/src/main/java/org/xbib/content/yaml/YamlSettingsLoader.java +++ b/settings-content-yaml/src/main/java/org/xbib/settings/content/yaml/YamlSettingsLoader.java @@ -1,7 +1,8 @@ -package org.xbib.content.yaml; +package org.xbib.settings.content.yaml; import org.xbib.content.XContent; -import org.xbib.content.settings.AbstractSettingsLoader; +import org.xbib.content.yaml.YamlXContent; +import org.xbib.settings.content.AbstractSettingsLoader; import java.io.IOException; import java.util.Map; import java.util.Set; diff --git a/settings-content-yaml/src/main/resources/META-INF/resources/org.xbib.settings.SettingsLoader b/settings-content-yaml/src/main/resources/META-INF/resources/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..438404a --- /dev/null +++ b/settings-content-yaml/src/main/resources/META-INF/resources/org.xbib.settings.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.content.yaml.YamlSettingsLoader \ No newline at end of file diff --git a/content-settings/build.gradle b/settings-content/build.gradle similarity index 60% rename from content-settings/build.gradle rename to settings-content/build.gradle index b3118db..80c36e4 100644 --- a/content-settings/build.gradle +++ b/settings-content/build.gradle @@ -1,5 +1,6 @@ dependencies { + api project(':settings-api') api project(':content-core') api "org.xbib:datastructures-tiny:${project.property('xbib-datastructures.version')}" - testImplementation project(":content-json") + testImplementation project(":settings-content-json") } diff --git a/settings-content/src/main/java/module-info.java b/settings-content/src/main/java/module-info.java new file mode 100644 index 0000000..cef58ab --- /dev/null +++ b/settings-content/src/main/java/module-info.java @@ -0,0 +1,16 @@ +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.content.ContentSettingsBuilder; +import org.xbib.settings.content.PropertiesSettingsLoader; + +module org.xbib.settings.content { + uses SettingsLoader; + provides SettingsLoader with PropertiesSettingsLoader; + uses SettingsBuilder; + provides SettingsBuilder with ContentSettingsBuilder; + exports org.xbib.settings.content; + requires org.xbib.settings.api; + requires org.xbib.content.core; + requires org.xbib.datastructures.api; + requires transitive org.xbib.datastructures.tiny; +} diff --git a/content-settings/src/main/java/org/xbib/content/settings/AbstractSettingsLoader.java b/settings-content/src/main/java/org/xbib/settings/content/AbstractSettingsLoader.java similarity index 98% rename from content-settings/src/main/java/org/xbib/content/settings/AbstractSettingsLoader.java rename to settings-content/src/main/java/org/xbib/settings/content/AbstractSettingsLoader.java index f20cdfc..139d217 100644 --- a/content-settings/src/main/java/org/xbib/content/settings/AbstractSettingsLoader.java +++ b/settings-content/src/main/java/org/xbib/settings/content/AbstractSettingsLoader.java @@ -1,6 +1,6 @@ -package org.xbib.content.settings; +package org.xbib.settings.content; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; import org.xbib.content.XContent; import org.xbib.content.XContentBuilder; import org.xbib.content.core.DefaultXContentBuilder; diff --git a/content-settings/src/main/java/org/xbib/content/settings/ContentSettings.java b/settings-content/src/main/java/org/xbib/settings/content/ContentSettings.java similarity index 96% rename from content-settings/src/main/java/org/xbib/content/settings/ContentSettings.java rename to settings-content/src/main/java/org/xbib/settings/content/ContentSettings.java index de5435d..d945f24 100644 --- a/content-settings/src/main/java/org/xbib/content/settings/ContentSettings.java +++ b/settings-content/src/main/java/org/xbib/settings/content/ContentSettings.java @@ -1,7 +1,9 @@ -package org.xbib.content.settings; +package org.xbib.settings.content; -import org.xbib.content.Settings; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsException; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.SettingsLoaderService; import org.xbib.datastructures.api.ByteSizeValue; import org.xbib.datastructures.api.TimeValue; import org.xbib.datastructures.tiny.TinyMap; @@ -21,8 +23,6 @@ import java.util.concurrent.atomic.AtomicBoolean; public class ContentSettings implements Settings, AutoCloseable { - public static final ContentSettings EMPTY_SETTINGS = new ContentSettingsBuilder().build(); - public static final String[] EMPTY_ARRAY = new String[0]; public static final int BUFFER_SIZE = 1024 * 4; @@ -44,6 +44,10 @@ public class ContentSettings implements Settings, AutoCloseable { } } + public static ContentSettingsBuilder builder() { + return new ContentSettingsBuilder(); + } + public static ContentSettings readSettingsFromMap(Map map) { ContentSettingsBuilder builder = new ContentSettingsBuilder(); for (Map.Entry entry : map.entrySet()) { @@ -290,7 +294,7 @@ public class ContentSettings implements Settings, AutoCloseable { } @Override - public Map getGroups(String prefix) { + public Map getGroups(String prefix) { String settingPrefix = prefix; if (settingPrefix.charAt(settingPrefix.length() - 1) != '.') { settingPrefix = settingPrefix + "."; @@ -313,7 +317,7 @@ public class ContentSettings implements Settings, AutoCloseable { groupSettings.put(value, get(setting)); } } - TinyMap.Builder retVal = TinyMap.builder(); + TinyMap.Builder retVal = TinyMap.builder(); for (Map.Entry> entry : hashMap.entrySet()) { retVal.put(entry.getKey(), new ContentSettings(entry.getValue())); } @@ -416,14 +420,11 @@ public class ContentSettings implements Settings, AutoCloseable { private final AtomicBoolean closed; - private final SettingsLoaderService settingsLoaderService; - DefaultSettingsRefresher(Path path, long initialDelay, long period, TimeUnit timeUnit) { this.path = path; this.executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleAtFixedRate(this, initialDelay, period, timeUnit); this.closed = new AtomicBoolean(); - this.settingsLoaderService = new SettingsLoaderService(); } @Override @@ -431,7 +432,7 @@ public class ContentSettings implements Settings, AutoCloseable { try { if (!closed.get()) { String settingsSource = Files.readString(path); - SettingsLoader settingsLoader = settingsLoaderService.loaderFromResource(path.toString()); + SettingsLoader settingsLoader = SettingsLoaderService.getInstance().loaderFromResource(path.toString()); map = settingsLoader.load(settingsSource); } } catch (IOException e) { diff --git a/content-settings/src/main/java/org/xbib/content/settings/ContentSettingsBuilder.java b/settings-content/src/main/java/org/xbib/settings/content/ContentSettingsBuilder.java similarity index 93% rename from content-settings/src/main/java/org/xbib/content/settings/ContentSettingsBuilder.java rename to settings-content/src/main/java/org/xbib/settings/content/ContentSettingsBuilder.java index 1951b66..4057bb8 100644 --- a/content-settings/src/main/java/org/xbib/content/settings/ContentSettingsBuilder.java +++ b/settings-content/src/main/java/org/xbib/settings/content/ContentSettingsBuilder.java @@ -1,10 +1,12 @@ -package org.xbib.content.settings; +package org.xbib.settings.content; -import org.xbib.content.PlaceholderResolver; -import org.xbib.content.PropertyPlaceholder; -import org.xbib.content.Settings; -import org.xbib.content.SettingsBuilder; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.PlaceholderResolver; +import org.xbib.settings.PropertyPlaceholder; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsException; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.SettingsLoaderService; import org.xbib.datastructures.tiny.TinyMap; import java.io.IOException; @@ -19,12 +21,15 @@ import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.function.Function; /** * */ public class ContentSettingsBuilder implements SettingsBuilder { + private final SettingsLoaderService settingsLoaderService = SettingsLoaderService.getInstance(); + private final Map map; private Path path; @@ -39,18 +44,10 @@ public class ContentSettingsBuilder implements SettingsBuilder { map = TinyMap.builder(); } - public Map map() { - return map; - } - public String remove(String key) { return map.remove(key); } - public String get(String key) { - return map.get(key); - } - @Override public boolean isEmpty() { return map.isEmpty(); @@ -238,7 +235,6 @@ public class ContentSettingsBuilder implements SettingsBuilder { * @return builder */ public ContentSettingsBuilder loadFromString(String source) { - SettingsLoaderService settingsLoaderService = new SettingsLoaderService(); SettingsLoader settingsLoader = settingsLoaderService.loaderFromString(source); try { Map loadedSettings = settingsLoader.load(source); @@ -272,7 +268,6 @@ public class ContentSettingsBuilder implements SettingsBuilder { */ @Override public ContentSettingsBuilder loadFromResource(String resourceName, InputStream inputStream) throws SettingsException { - SettingsLoaderService settingsLoaderService = new SettingsLoaderService(); SettingsLoader settingsLoader = settingsLoaderService.loaderFromResource(resourceName); try { Map loadedSettings = settingsLoader @@ -357,6 +352,12 @@ public class ContentSettingsBuilder implements SettingsBuilder { return this; } + @Override + public SettingsBuilder map(Function, Map.Entry> function) { + map.entrySet().stream().map(function).forEach(e -> put(e.getKey(), e.getValue())); + return this; + } + public ContentSettings build() { return new ContentSettings(map, path, initialDelay, period, timeUnit); } diff --git a/content-settings/src/main/java/org/xbib/content/settings/PropertiesSettingsLoader.java b/settings-content/src/main/java/org/xbib/settings/content/PropertiesSettingsLoader.java similarity index 96% rename from content-settings/src/main/java/org/xbib/content/settings/PropertiesSettingsLoader.java rename to settings-content/src/main/java/org/xbib/settings/content/PropertiesSettingsLoader.java index 367f40c..54476d4 100644 --- a/content-settings/src/main/java/org/xbib/content/settings/PropertiesSettingsLoader.java +++ b/settings-content/src/main/java/org/xbib/settings/content/PropertiesSettingsLoader.java @@ -1,7 +1,7 @@ -package org.xbib.content.settings; +package org.xbib.settings.content; import org.xbib.content.io.BytesReference; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; diff --git a/settings-content/src/main/java/org/xbib/settings/content/package-info.java b/settings-content/src/main/java/org/xbib/settings/content/package-info.java new file mode 100644 index 0000000..6ceb235 --- /dev/null +++ b/settings-content/src/main/java/org/xbib/settings/content/package-info.java @@ -0,0 +1,4 @@ +/** + * Classes for settings. + */ +package org.xbib.settings.content; diff --git a/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder b/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder new file mode 100644 index 0000000..fbd2d9f --- /dev/null +++ b/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder @@ -0,0 +1 @@ +org.xbib.settings.content.ContentSettingsBuilder \ No newline at end of file diff --git a/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader b/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..9307b19 --- /dev/null +++ b/settings-content/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.content.PropertiesSettingsLoader \ No newline at end of file diff --git a/content-settings/src/test/java/org/xbib/content/settings/test/SettingsTest.java b/settings-content/src/test/java/org/xbib/settings/content/test/SettingsTest.java similarity index 97% rename from content-settings/src/test/java/org/xbib/content/settings/test/SettingsTest.java rename to settings-content/src/test/java/org/xbib/settings/content/test/SettingsTest.java index 6a5d9c7..643347f 100644 --- a/content-settings/src/test/java/org/xbib/content/settings/test/SettingsTest.java +++ b/settings-content/src/test/java/org/xbib/settings/content/test/SettingsTest.java @@ -1,16 +1,16 @@ -package org.xbib.content.settings.test; +package org.xbib.settings.content.test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; import org.xbib.content.core.XContentHelper; import org.xbib.content.io.BytesArray; import org.xbib.content.io.BytesReference; -import org.xbib.content.json.JsonSettingsLoader; +import org.xbib.settings.content.json.JsonSettingsLoader; import org.xbib.content.json.JsonXContent; -import org.xbib.content.Settings; +import org.xbib.settings.Settings; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringReader; diff --git a/content-settings/src/test/resources/settings.json b/settings-content/src/test/resources/settings.json similarity index 100% rename from content-settings/src/test/resources/settings.json rename to settings-content/src/test/resources/settings.json diff --git a/content-settings-datastructures-json/build.gradle b/settings-datastructures-json/build.gradle similarity index 68% rename from content-settings-datastructures-json/build.gradle rename to settings-datastructures-json/build.gradle index b7a1b35..6382f07 100644 --- a/content-settings-datastructures-json/build.gradle +++ b/settings-datastructures-json/build.gradle @@ -1,4 +1,4 @@ dependencies { - api project(':content-settings-datastructures') + api project(':settings-datastructures') api "org.xbib:datastructures-json-tiny:${project.property('xbib-datastructures.version')}" } diff --git a/settings-datastructures-json/src/main/java/module-info.java b/settings-datastructures-json/src/main/java/module-info.java new file mode 100644 index 0000000..418127f --- /dev/null +++ b/settings-datastructures-json/src/main/java/module-info.java @@ -0,0 +1,10 @@ +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.datastructures.json.JsonSettingsLoader; + +module org.xbib.settings.datastructures.json { + exports org.xbib.settings.datastructures.json; + requires transitive org.xbib.settings.datastructures; + requires org.xbib.datastructures.json.tiny; + uses SettingsLoader; + provides SettingsLoader with JsonSettingsLoader; +} diff --git a/content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/JsonSettingsLoader.java b/settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/JsonSettingsLoader.java similarity index 79% rename from content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/JsonSettingsLoader.java rename to settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/JsonSettingsLoader.java index 8503c1c..eb12297 100644 --- a/content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/JsonSettingsLoader.java +++ b/settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/JsonSettingsLoader.java @@ -1,6 +1,6 @@ -package org.xbib.content.settings.datastructures.json; +package org.xbib.settings.datastructures.json; -import org.xbib.content.settings.datastructures.AbstractSettingsLoader; +import org.xbib.settings.datastructures.AbstractSettingsLoader; import org.xbib.datastructures.api.DataStructure; import org.xbib.datastructures.json.tiny.Json; import java.util.Set; diff --git a/content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/package-info.java b/settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/package-info.java similarity index 51% rename from content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/package-info.java rename to settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/package-info.java index 7611111..615dd6e 100644 --- a/content-settings-datastructures-json/src/main/java/org/xbib/content/settings/datastructures/json/package-info.java +++ b/settings-datastructures-json/src/main/java/org/xbib/settings/datastructures/json/package-info.java @@ -1,4 +1,4 @@ /** * JSON settings with the datastructures package. */ -package org.xbib.content.settings.datastructures.json; +package org.xbib.settings.datastructures.json; diff --git a/settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.settings.SettingsLoader b/settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..7d341dc --- /dev/null +++ b/settings-datastructures-json/src/main/resources/META-INF.services/org.xbib.settings.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.datastructures.json.JsonSettingsLoader diff --git a/content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/JsonSettingsTest.java b/settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/JsonSettingsTest.java similarity index 91% rename from content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/JsonSettingsTest.java rename to settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/JsonSettingsTest.java index 0b8efe4..d967bd2 100644 --- a/content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/JsonSettingsTest.java +++ b/settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/JsonSettingsTest.java @@ -1,9 +1,9 @@ -package org.xbib.content.settings.datastructures.json.test; +package org.xbib.settings.datastructures.json.test; import org.junit.jupiter.api.Test; -import org.xbib.content.Settings; -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.json.JsonSettingsLoader; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.datastructures.json.JsonSettingsLoader; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; diff --git a/content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/package-info.java b/settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/package-info.java similarity index 52% rename from content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/package-info.java rename to settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/package-info.java index b7705d9..0ffad2a 100644 --- a/content-settings-datastructures-json/src/test/java/org/xbib/content/settings/datastructures/json/test/package-info.java +++ b/settings-datastructures-json/src/test/java/org/xbib/settings/datastructures/json/test/package-info.java @@ -1,4 +1,4 @@ /** * Testing JSON settings with the datastructures package. */ -package org.xbib.content.settings.datastructures.json.test; +package org.xbib.settings.datastructures.json.test; diff --git a/content-settings-datastructures-json/src/test/resources/org/xbib/content/settings/datastructures/json/test/test-settings.json b/settings-datastructures-json/src/test/resources/org/xbib/settings/datastructures/json/test/test-settings.json similarity index 100% rename from content-settings-datastructures-json/src/test/resources/org/xbib/content/settings/datastructures/json/test/test-settings.json rename to settings-datastructures-json/src/test/resources/org/xbib/settings/datastructures/json/test/test-settings.json diff --git a/content-settings-datastructures-yaml/build.gradle b/settings-datastructures-yaml/build.gradle similarity index 68% rename from content-settings-datastructures-yaml/build.gradle rename to settings-datastructures-yaml/build.gradle index 237a0b9..79a0278 100644 --- a/content-settings-datastructures-yaml/build.gradle +++ b/settings-datastructures-yaml/build.gradle @@ -1,4 +1,4 @@ dependencies { - api project(':content-settings-datastructures') + api project(':settings-datastructures') api "org.xbib:datastructures-yaml-tiny:${project.property('xbib-datastructures.version')}" } diff --git a/settings-datastructures-yaml/src/main/java/module-info.java b/settings-datastructures-yaml/src/main/java/module-info.java new file mode 100644 index 0000000..5310e4c --- /dev/null +++ b/settings-datastructures-yaml/src/main/java/module-info.java @@ -0,0 +1,10 @@ +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.datastructures.yaml.YamlSettingsLoader; + +module org.xbib.settings.datastructures.yaml { + exports org.xbib.settings.datastructures.yaml; + requires transitive org.xbib.settings.datastructures; + requires org.xbib.datastructures.yaml.tiny; + uses SettingsLoader; + provides SettingsLoader with YamlSettingsLoader; +} diff --git a/content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/YamlSettingsLoader.java b/settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/YamlSettingsLoader.java similarity index 86% rename from content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/YamlSettingsLoader.java rename to settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/YamlSettingsLoader.java index 254a5c8..d96ca84 100644 --- a/content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/YamlSettingsLoader.java +++ b/settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/YamlSettingsLoader.java @@ -1,6 +1,6 @@ -package org.xbib.content.settings.datastructures.yaml; +package org.xbib.settings.datastructures.yaml; -import org.xbib.content.settings.datastructures.AbstractSettingsLoader; +import org.xbib.settings.datastructures.AbstractSettingsLoader; import org.xbib.datastructures.api.DataStructure; import org.xbib.datastructures.yaml.tiny.Yaml; diff --git a/content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/package-info.java b/settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/package-info.java similarity index 51% rename from content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/package-info.java rename to settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/package-info.java index b73226e..78f0f18 100644 --- a/content-settings-datastructures-yaml/src/main/java/org/xbib/content/settings/datastructures/yaml/package-info.java +++ b/settings-datastructures-yaml/src/main/java/org/xbib/settings/datastructures/yaml/package-info.java @@ -1,4 +1,4 @@ /** * YAML settings with the datastructures package. */ -package org.xbib.content.settings.datastructures.yaml; +package org.xbib.settings.datastructures.yaml; diff --git a/settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader b/settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader new file mode 100644 index 0000000..3ab4266 --- /dev/null +++ b/settings-datastructures-yaml/src/main/resources/META-INF/services/org.xbib.content.settings.datastructures.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.datastructures.yaml.YamlSettingsLoader diff --git a/content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/YamlSettingsTest.java b/settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/YamlSettingsTest.java similarity index 91% rename from content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/YamlSettingsTest.java rename to settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/YamlSettingsTest.java index 1996fb3..d154c43 100644 --- a/content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/YamlSettingsTest.java +++ b/settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/YamlSettingsTest.java @@ -1,11 +1,11 @@ -package org.xbib.content.settings.datastructures.yaml.test; +package org.xbib.settings.datastructures.yaml.test; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.xbib.content.Settings; -import org.xbib.content.SettingsLoader; -import org.xbib.content.settings.datastructures.yaml.YamlSettingsLoader; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.datastructures.yaml.YamlSettingsLoader; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; diff --git a/content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/package-info.java b/settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/package-info.java similarity index 52% rename from content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/package-info.java rename to settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/package-info.java index f31ba1a..9233c9e 100644 --- a/content-settings-datastructures-yaml/src/test/java/org/xbib/content/settings/datastructures/yaml/test/package-info.java +++ b/settings-datastructures-yaml/src/test/java/org/xbib/settings/datastructures/yaml/test/package-info.java @@ -1,4 +1,4 @@ /** * Testing YAML settings with the datastructures package. */ -package org.xbib.content.settings.datastructures.yaml.test; +package org.xbib.settings.datastructures.yaml.test; diff --git a/content-settings-datastructures/build.gradle b/settings-datastructures/build.gradle similarity index 76% rename from content-settings-datastructures/build.gradle rename to settings-datastructures/build.gradle index 3b92ad5..a5efeea 100644 --- a/content-settings-datastructures/build.gradle +++ b/settings-datastructures/build.gradle @@ -1,4 +1,4 @@ dependencies { - api project(':content-api') + api project(':settings-api') api "org.xbib:datastructures-tiny:${project.property('xbib-datastructures.version')}" } diff --git a/settings-datastructures/src/main/java/module-info.java b/settings-datastructures/src/main/java/module-info.java new file mode 100644 index 0000000..6bacf68 --- /dev/null +++ b/settings-datastructures/src/main/java/module-info.java @@ -0,0 +1,15 @@ +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.datastructures.DatastructureSettingsBuilder; +import org.xbib.settings.datastructures.PropertiesSettingsLoader; + +module org.xbib.settings.datastructures { + uses SettingsLoader; + provides SettingsLoader with PropertiesSettingsLoader; + uses SettingsBuilder; + provides SettingsBuilder with DatastructureSettingsBuilder; + exports org.xbib.settings.datastructures; + requires transitive org.xbib.settings.api; + requires org.xbib.datastructures.tiny; + requires transitive org.xbib.datastructures.api; +} diff --git a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/AbstractSettingsLoader.java b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/AbstractSettingsLoader.java similarity index 96% rename from content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/AbstractSettingsLoader.java rename to settings-datastructures/src/main/java/org/xbib/settings/datastructures/AbstractSettingsLoader.java index 6759389..0149290 100644 --- a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/AbstractSettingsLoader.java +++ b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/AbstractSettingsLoader.java @@ -1,6 +1,6 @@ -package org.xbib.content.settings.datastructures; +package org.xbib.settings.datastructures; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; import org.xbib.datastructures.api.Builder; import org.xbib.datastructures.api.DataStructure; import org.xbib.datastructures.api.ListNode; diff --git a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettings.java b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettings.java similarity index 97% rename from content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettings.java rename to settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettings.java index 63793bf..5b53813 100644 --- a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettings.java +++ b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettings.java @@ -1,7 +1,7 @@ -package org.xbib.content.settings.datastructures; +package org.xbib.settings.datastructures; -import org.xbib.content.Settings; -import org.xbib.content.SettingsException; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsException; import org.xbib.datastructures.api.ByteSizeValue; import org.xbib.datastructures.api.TimeValue; import org.xbib.datastructures.tiny.TinyMap; @@ -21,6 +21,10 @@ public class DatastructureSettings implements Settings { this.map = map; } + public static DatastructureSettingsBuilder builder() { + return new DatastructureSettingsBuilder(); + } + public static DatastructureSettings fromMap(Map map) { DatastructureSettingsBuilder builder = new DatastructureSettingsBuilder(); for (Map.Entry entry : map.entrySet()) { @@ -233,7 +237,7 @@ public class DatastructureSettings implements Settings { } @Override - public Map getGroups(String prefix) { + public Map getGroups(String prefix) { String settingPrefix = prefix; if (settingPrefix.charAt(settingPrefix.length() - 1) != '.') { settingPrefix = settingPrefix + "."; @@ -255,7 +259,7 @@ public class DatastructureSettings implements Settings { groupSettings.put(value, get(o)); } } - TinyMap.Builder retVal = TinyMap.builder(); + TinyMap.Builder retVal = TinyMap.builder(); for (String key : hashMap.keySet()) { TinyMap.Builder value = hashMap.get(key); retVal.put(key, new DatastructureSettings(value.build())); diff --git a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettingsBuilder.java b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettingsBuilder.java similarity index 87% rename from content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettingsBuilder.java rename to settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettingsBuilder.java index b57c265..4ab669e 100644 --- a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/DatastructureSettingsBuilder.java +++ b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/DatastructureSettingsBuilder.java @@ -1,11 +1,12 @@ -package org.xbib.content.settings.datastructures; +package org.xbib.settings.datastructures; -import org.xbib.content.PlaceholderResolver; -import org.xbib.content.PropertyPlaceholder; -import org.xbib.content.Settings; -import org.xbib.content.SettingsBuilder; -import org.xbib.content.SettingsException; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.PlaceholderResolver; +import org.xbib.settings.PropertyPlaceholder; +import org.xbib.settings.Settings; +import org.xbib.settings.SettingsBuilder; +import org.xbib.settings.SettingsException; +import org.xbib.settings.SettingsLoader; +import org.xbib.settings.SettingsLoaderService; import org.xbib.datastructures.tiny.TinyMap; import java.io.BufferedReader; @@ -19,6 +20,7 @@ import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -34,18 +36,10 @@ public class DatastructureSettingsBuilder implements SettingsBuilder { map = TinyMap.builder(); } - public Map map() { - return map; - } - public String remove(String key) { return map.remove(key); } - public String get(String key) { - return map.get(key); - } - @Override public boolean isEmpty() { return map.isEmpty(); @@ -64,19 +58,6 @@ public class DatastructureSettingsBuilder implements SettingsBuilder { return this; } - /** - * Sets a setting with the provided setting key and class as value. - * - * @param key The setting key - * @param clazz The setting class value - * @return The builder - */ - @Override - public DatastructureSettingsBuilder put(String key, Class clazz) { - map.put(key, clazz.getName()); - return this; - } - /** * Sets the setting with the provided setting key and the boolean value. * @@ -308,17 +289,6 @@ public class DatastructureSettingsBuilder implements SettingsBuilder { return this; } - /** - * Runs across all the settings set on this builder and replaces {@code ${...}} elements in the - * each setting value according to the following logic: - *

- * First, tries to resolve it against a System property ({@link System#getProperty(String)}), next, - * tries and resolve it against an environment variable ({@link System#getenv(String)}), next, - * tries and resolve it against a date pattern to resolve the current date, - * and last, tries and replace it with another setting already set on this builder. - * - * @return builder - */ @Override public DatastructureSettingsBuilder replacePropertyPlaceholders() { return replacePropertyPlaceholders(new PropertyPlaceholder("${", "}", false), @@ -348,6 +318,12 @@ public class DatastructureSettingsBuilder implements SettingsBuilder { return this; } + @Override + public SettingsBuilder map(Function, Map.Entry> function) { + map.entrySet().stream().map(function).forEach(e -> put(e.getKey(), e.getValue())); + return this; + } + @Override public DatastructureSettings build() { return new DatastructureSettings(map.build()); diff --git a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/PropertiesSettingsLoader.java b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/PropertiesSettingsLoader.java similarity index 94% rename from content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/PropertiesSettingsLoader.java rename to settings-datastructures/src/main/java/org/xbib/settings/datastructures/PropertiesSettingsLoader.java index 4aa4f32..f6df055 100644 --- a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/PropertiesSettingsLoader.java +++ b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/PropertiesSettingsLoader.java @@ -1,6 +1,6 @@ -package org.xbib.content.settings.datastructures; +package org.xbib.settings.datastructures; -import org.xbib.content.SettingsLoader; +import org.xbib.settings.SettingsLoader; import org.xbib.datastructures.tiny.TinyMap; import java.io.IOException; import java.io.StringReader; diff --git a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/package-info.java b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/package-info.java similarity index 55% rename from content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/package-info.java rename to settings-datastructures/src/main/java/org/xbib/settings/datastructures/package-info.java index e16581a..52b8711 100644 --- a/content-settings-datastructures/src/main/java/org/xbib/content/settings/datastructures/package-info.java +++ b/settings-datastructures/src/main/java/org/xbib/settings/datastructures/package-info.java @@ -1,4 +1,4 @@ /** * Classes for settings using the datastructures API. */ -package org.xbib.content.settings.datastructures; +package org.xbib.settings.datastructures; diff --git a/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder b/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder new file mode 100644 index 0000000..872ade2 --- /dev/null +++ b/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsBuilder @@ -0,0 +1 @@ +org.xbib.settings.datastructures.DatastructureSettingsBuilder \ No newline at end of file diff --git a/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader b/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader new file mode 100644 index 0000000..d3ebb87 --- /dev/null +++ b/settings-datastructures/src/main/resources/META-INF/services/org.xbib.settings.SettingsLoader @@ -0,0 +1 @@ +org.xbib.settings.datastructures.PropertiesSettingsLoader diff --git a/content-settings-datastructures/src/test/java/org/xbib/content/settings/datastructures/test/SettingsTest.java b/settings-datastructures/src/test/java/org/xbib/settings/datastructures/test/SettingsTest.java similarity index 97% rename from content-settings-datastructures/src/test/java/org/xbib/content/settings/datastructures/test/SettingsTest.java rename to settings-datastructures/src/test/java/org/xbib/settings/datastructures/test/SettingsTest.java index ee75865..c68bdd0 100644 --- a/content-settings-datastructures/src/test/java/org/xbib/content/settings/datastructures/test/SettingsTest.java +++ b/settings-datastructures/src/test/java/org/xbib/settings/datastructures/test/SettingsTest.java @@ -1,7 +1,7 @@ -package org.xbib.content.settings.datastructures.test; +package org.xbib.settings.datastructures.test; import org.junit.jupiter.api.Test; -import org.xbib.content.Settings; +import org.xbib.settings.Settings; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; diff --git a/settings.gradle b/settings.gradle index b0896af..aaeaae9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,10 +6,13 @@ include 'content-language' include 'content-json' include 'content-rdf' include 'content-resource' -include 'content-settings' include 'content-smile' include 'content-xml' include 'content-yaml' -include 'content-settings-datastructures' -include 'content-settings-datastructures-json' -include 'content-settings-datastructures-yaml' +include 'settings-api' +include 'settings-content' +include 'settings-content-json' +include 'settings-content-yaml' +include 'settings-datastructures' +include 'settings-datastructures-json' +include 'settings-datastructures-yaml'