summaryrefslogtreecommitdiff
path: root/eaaf_core_utils/src/main
diff options
context:
space:
mode:
authorThomas <>2022-04-12 17:28:16 +0200
committerThomas <>2022-04-12 17:28:16 +0200
commit154f1609f8825a09f569b7187acca8cdb42732c3 (patch)
tree8a3e438a899fb6261f3722e8ab81f92411acc824 /eaaf_core_utils/src/main
parent8e6cff434f4e4321bead9114e8b84fcfff9cd30c (diff)
downloadEAAF-Components-154f1609f8825a09f569b7187acca8cdb42732c3.tar.gz
EAAF-Components-154f1609f8825a09f569b7187acca8cdb42732c3.tar.bz2
EAAF-Components-154f1609f8825a09f569b7187acca8cdb42732c3.zip
refact(config): split IConfigurationWithSP into two interfaces
Diffstat (limited to 'eaaf_core_utils/src/main')
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/config/BasicSpringBootConfigurationImpl.java174
1 files changed, 174 insertions, 0 deletions
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/config/BasicSpringBootConfigurationImpl.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/config/BasicSpringBootConfigurationImpl.java
new file mode 100644
index 00000000..8f3c558c
--- /dev/null
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/config/BasicSpringBootConfigurationImpl.java
@@ -0,0 +1,174 @@
+package at.gv.egiz.eaaf.core.impl.config;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.CompositePropertySource;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.EnumerablePropertySource;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertySource;
+
+import at.gv.egiz.eaaf.core.api.idp.IExtendedConfiguration;
+import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Basic Spring based configuration implementation.
+ *
+ * @author tlenz
+ *
+ */
+@Slf4j
+public abstract class BasicSpringBootConfigurationImpl implements IExtendedConfiguration {
+
+ public static final String PROP_CONFIG_ROOT_DIR = "core.configRootDir";
+
+ @Autowired
+ private Environment env;
+
+ @Override
+ public String getBasicConfiguration(final String key) {
+ if (StringUtils.isNotEmpty(key)) {
+ final String value = env.getProperty(addPrefixToKey(key));
+ if (value != null) {
+ return value.trim();
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getBasicConfiguration(final String key, final String defaultValue) {
+ if (StringUtils.isNotEmpty(key)) {
+ final String value = env.getProperty(addPrefixToKey(key), defaultValue);
+ if (value != null) {
+ return value.trim();
+ }
+ }
+
+ return defaultValue;
+ }
+
+ @Override
+ public Map<String, String> getBasicConfigurationWithPrefix(final String prefix) {
+ final Map<String, String> configProps = getPropertiesStartingWith((ConfigurableEnvironment) env,
+ addPrefixToKey(prefix));
+ return KeyValueUtils.removePrefixFromKeys(configProps, addPrefixToKey(prefix) + ".");
+
+ }
+
+ @Override
+ public boolean getBasicConfigurationBoolean(final String key) {
+ return getBasicConfigurationBoolean(key, false);
+
+ }
+
+ @Override
+ public boolean getBasicConfigurationBoolean(final String key, final boolean defaultValue) {
+ final String value = getBasicConfiguration(key);
+ if (StringUtils.isNotEmpty(value)) {
+ return Boolean.valueOf(value.trim());
+ } else {
+ return defaultValue;
+ }
+ }
+
+ @Override
+ public URI getConfigurationRootDirectory() {
+ try {
+ return new URI(env.getRequiredProperty(addPrefixToKey(PROP_CONFIG_ROOT_DIR)));
+
+ } catch (IllegalStateException | URISyntaxException e) {
+ log.warn("ConfigRootDirectory is NOT set", e);
+ return null;
+
+ }
+ }
+
+ /**
+ * Get a specific configuration-key prefix for this software implementation.
+ *
+ * @return
+ */
+ public abstract String getApplicationSpecificKeyPrefix();
+
+ protected String addPrefixToKey(final String key) {
+ if (StringUtils.isNotEmpty(getApplicationSpecificKeyPrefix())) {
+ if (getApplicationSpecificKeyPrefix().endsWith(KeyValueUtils.KEY_DELIMITER)) {
+ return getApplicationSpecificKeyPrefix() + key;
+ } else {
+ return getApplicationSpecificKeyPrefix() + KeyValueUtils.KEY_DELIMITER + key;
+ }
+
+ }
+
+ return key;
+ }
+
+ private static Map<String, String> getPropertiesStartingWith(final ConfigurableEnvironment aenv,
+ final String akeyPrefix) {
+ final Map<String, String> result = new HashMap<>();
+ final Map<String, Object> map = getAllProperties(aenv);
+
+ for (final Entry<String, Object> entry : map.entrySet()) {
+ final String key = entry.getKey();
+
+ if (key.startsWith(akeyPrefix)) {
+ result.put(key, (String) entry.getValue());
+ }
+ }
+
+ return result;
+ }
+
+ private static Map<String, Object> getAllProperties(final ConfigurableEnvironment aenv) {
+ final Map<String, Object> result = new HashMap<>();
+ aenv.getPropertySources().forEach(ps -> addAll(result, getAllProperties(ps)));
+ return result;
+
+ }
+
+ private static Map<String, Object> getAllProperties(final PropertySource<?> apropSource) {
+ final Map<String, Object> result = new HashMap<>();
+
+ if (apropSource instanceof CompositePropertySource) {
+ final CompositePropertySource cps = (CompositePropertySource) apropSource;
+ cps.getPropertySources().forEach(ps -> addAll(result, getAllProperties(ps)));
+ return result;
+ }
+
+ if (apropSource instanceof EnumerablePropertySource<?>) {
+ final EnumerablePropertySource<?> ps = (EnumerablePropertySource<?>) apropSource;
+ Arrays.asList(ps.getPropertyNames()).forEach(key -> result.put(key, ps.getProperty(key)));
+ return result;
+ }
+
+ // note: Most descendants of PropertySource are EnumerablePropertySource. There
+ // are some
+ // few others like JndiPropertySource or StubPropertySource
+ log.trace("Given PropertySource is instanceof " + apropSource.getClass().getName()
+ + " and cannot be iterated");
+
+ return result;
+
+ }
+
+ private static void addAll(final Map<String, Object> abase, final Map<String, Object> atoBeAdded) {
+ for (final Entry<String, Object> entry : atoBeAdded.entrySet()) {
+ if (abase.containsKey(entry.getKey())) {
+ continue;
+ }
+
+ abase.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+}