From b047f0fcf2767432ebca3db44b6d64c0508d9e84 Mon Sep 17 00:00:00 2001 From: Vijay N Date: Mon, 10 Nov 2025 23:11:15 +0530 Subject: [PATCH 1/3] * Overrode buildWithReplacements() to collect configuration values. * Added applyReplacements() helper to resolve ${instanceName} placeholders. --- .../AugmentedConfigurationObjectFactory.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java index f63b4c06..9b35cc34 100644 --- a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java +++ b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java @@ -19,7 +19,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Arrays; +import java.util.Map; import java.util.Properties; import org.slf4j.Logger; @@ -45,12 +45,21 @@ public AugmentedConfigurationObjectFactory(final ConfigSource configSource) { public T build(final Class configClass) { final T instance = super.build(configClass); - collectConfigValues(configClass, instance); + collectConfigValues(configClass, instance, null); return instance; } - private void collectConfigValues(final Class configClass, final T instance) { + @Override + public T buildWithReplacements(final Class configClass, final Map mappedReplacements) { + final T instance = super.buildWithReplacements(configClass, mappedReplacements); + + collectConfigValues(configClass, instance, mappedReplacements); + + return instance; + } + + private void collectConfigValues(final Class configClass, final T instance, final Map mappedReplacements) { final String configSource = configClass.getSimpleName(); for (final Method method : configClass.getMethods()) { @@ -60,11 +69,15 @@ private void collectConfigValues(final Class configClass, final T instanc try { final Object value = method.invoke(instance); final String[] keys = configAnnotation.value(); - Arrays.stream(keys) - .forEach(key -> RuntimeConfigRegistry.put(key, value)); - Arrays.stream(keys) - .forEach(key -> RuntimeConfigRegistry.putWithSource(configSource, key, value)); + for (String key : keys) { + if (mappedReplacements != null) { + key = applyReplacements(key, mappedReplacements); + } + + RuntimeConfigRegistry.put(key, value); + RuntimeConfigRegistry.putWithSource(configSource, key, value); + } } catch (final IllegalAccessException | InvocationTargetException e) { log.warn("Failed to resolve config method: {}", method.getName(), e); } @@ -73,4 +86,14 @@ private void collectConfigValues(final Class configClass, final T instanc } } } + + private String applyReplacements(String propertyName, final Map mappedReplacements) { + for (final Map.Entry entry : mappedReplacements.entrySet()) { + final String token = "${" + entry.getKey() + "}"; + final String replacement = entry.getValue(); + propertyName = propertyName.replace(token, replacement); + } + + return propertyName; + } } From 62395f9756e721d6393d9aa03d6f1d304bffda7e Mon Sep 17 00:00:00 2001 From: Vijay N Date: Tue, 11 Nov 2025 00:12:57 +0530 Subject: [PATCH 2/3] * Fixed formatting --- .../org/skife/config/AugmentedConfigurationObjectFactory.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java index 9b35cc34..5a94753b 100644 --- a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java +++ b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java @@ -59,7 +59,9 @@ public T buildWithReplacements(final Class configClass, final Map void collectConfigValues(final Class configClass, final T instance, final Map mappedReplacements) { + private void collectConfigValues(final Class configClass, + final T instance, + final Map mappedReplacements) { final String configSource = configClass.getSimpleName(); for (final Method method : configClass.getMethods()) { From b9f76c76e558c42fc23be1f5822ffb21dad6b2f6 Mon Sep 17 00:00:00 2001 From: Vijay N Date: Thu, 20 Nov 2025 19:54:33 +0530 Subject: [PATCH 3/3] Removed RUNTIME_CONFIGS from RuntimeConfigRegistry. --- .../AugmentedConfigurationObjectFactory.java | 1 - .../skife/config/RuntimeConfigRegistry.java | 22 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java index 5a94753b..63d5dc05 100644 --- a/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java +++ b/config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java @@ -77,7 +77,6 @@ private void collectConfigValues(final Class configClass, key = applyReplacements(key, mappedReplacements); } - RuntimeConfigRegistry.put(key, value); RuntimeConfigRegistry.putWithSource(configSource, key, value); } } catch (final IllegalAccessException | InvocationTargetException e) { diff --git a/config-magic/src/main/java/org/skife/config/RuntimeConfigRegistry.java b/config-magic/src/main/java/org/skife/config/RuntimeConfigRegistry.java index 65a546f7..18cb2496 100644 --- a/config-magic/src/main/java/org/skife/config/RuntimeConfigRegistry.java +++ b/config-magic/src/main/java/org/skife/config/RuntimeConfigRegistry.java @@ -18,6 +18,7 @@ package org.skife.config; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -27,14 +28,8 @@ */ public class RuntimeConfigRegistry { - private static final Map RUNTIME_CONFIGS = new ConcurrentHashMap<>(); - private static final Map> RUNTIME_CONFIGS_BY_SOURCE = new ConcurrentHashMap<>(); - public static void put(final String key, final Object value) { - RUNTIME_CONFIGS.put(key, value == null ? "" : value.toString()); - } - public static void putWithSource(final String configSource, final String key, final Object value) { RUNTIME_CONFIGS_BY_SOURCE .computeIfAbsent(configSource, k -> new ConcurrentHashMap<>()) @@ -55,7 +50,14 @@ public static void putAllWithSource(final String configSource, final Map sourceMap : RUNTIME_CONFIGS_BY_SOURCE.values()) { + final String value = sourceMap.get(key); + if (value != null) { + return value; + } + } + + return ""; } public static Map getBySource(final String source) { @@ -63,7 +65,10 @@ public static Map getBySource(final String source) { } public static Map getAll() { - return Collections.unmodifiableMap(RUNTIME_CONFIGS); + final Map allConfigs = new LinkedHashMap<>(); + RUNTIME_CONFIGS_BY_SOURCE.values().forEach(allConfigs::putAll); + + return Collections.unmodifiableMap(allConfigs); } public static Map> getAllBySource() { @@ -71,7 +76,6 @@ public static Map> getAllBySource() { } public static void clear() { - RUNTIME_CONFIGS.clear(); RUNTIME_CONFIGS_BY_SOURCE.clear(); } }