Skip to content

Commit 3d8af7a

Browse files
authored
Merge pull request #189 from vnandwana/tech-support-216
Improved config value collection and instance name replacement handling
2 parents 57f8101 + b9f76c7 commit 3d8af7a

2 files changed

Lines changed: 44 additions & 16 deletions

File tree

config-magic/src/main/java/org/skife/config/AugmentedConfigurationObjectFactory.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import java.lang.reflect.InvocationTargetException;
2121
import java.lang.reflect.Method;
22-
import java.util.Arrays;
22+
import java.util.Map;
2323
import java.util.Properties;
2424

2525
import org.slf4j.Logger;
@@ -45,12 +45,23 @@ public AugmentedConfigurationObjectFactory(final ConfigSource configSource) {
4545
public <T> T build(final Class<T> configClass) {
4646
final T instance = super.build(configClass);
4747

48-
collectConfigValues(configClass, instance);
48+
collectConfigValues(configClass, instance, null);
4949

5050
return instance;
5151
}
5252

53-
private <T> void collectConfigValues(final Class<T> configClass, final T instance) {
53+
@Override
54+
public <T> T buildWithReplacements(final Class<T> configClass, final Map<String, String> mappedReplacements) {
55+
final T instance = super.buildWithReplacements(configClass, mappedReplacements);
56+
57+
collectConfigValues(configClass, instance, mappedReplacements);
58+
59+
return instance;
60+
}
61+
62+
private <T> void collectConfigValues(final Class<T> configClass,
63+
final T instance,
64+
final Map<String, String> mappedReplacements) {
5465
final String configSource = configClass.getSimpleName();
5566

5667
for (final Method method : configClass.getMethods()) {
@@ -60,11 +71,14 @@ private <T> void collectConfigValues(final Class<T> configClass, final T instanc
6071
try {
6172
final Object value = method.invoke(instance);
6273
final String[] keys = configAnnotation.value();
63-
Arrays.stream(keys)
64-
.forEach(key -> RuntimeConfigRegistry.put(key, value));
6574

66-
Arrays.stream(keys)
67-
.forEach(key -> RuntimeConfigRegistry.putWithSource(configSource, key, value));
75+
for (String key : keys) {
76+
if (mappedReplacements != null) {
77+
key = applyReplacements(key, mappedReplacements);
78+
}
79+
80+
RuntimeConfigRegistry.putWithSource(configSource, key, value);
81+
}
6882
} catch (final IllegalAccessException | InvocationTargetException e) {
6983
log.warn("Failed to resolve config method: {}", method.getName(), e);
7084
}
@@ -73,4 +87,14 @@ private <T> void collectConfigValues(final Class<T> configClass, final T instanc
7387
}
7488
}
7589
}
90+
91+
private String applyReplacements(String propertyName, final Map<String, String> mappedReplacements) {
92+
for (final Map.Entry<String, String> entry : mappedReplacements.entrySet()) {
93+
final String token = "${" + entry.getKey() + "}";
94+
final String replacement = entry.getValue();
95+
propertyName = propertyName.replace(token, replacement);
96+
}
97+
98+
return propertyName;
99+
}
76100
}

config-magic/src/main/java/org/skife/config/RuntimeConfigRegistry.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.skife.config;
1919

2020
import java.util.Collections;
21+
import java.util.LinkedHashMap;
2122
import java.util.Map;
2223
import java.util.concurrent.ConcurrentHashMap;
2324
import java.util.stream.Collectors;
@@ -27,14 +28,8 @@
2728
*/
2829
public class RuntimeConfigRegistry {
2930

30-
private static final Map<String, String> RUNTIME_CONFIGS = new ConcurrentHashMap<>();
31-
3231
private static final Map<String, Map<String, String>> RUNTIME_CONFIGS_BY_SOURCE = new ConcurrentHashMap<>();
3332

34-
public static void put(final String key, final Object value) {
35-
RUNTIME_CONFIGS.put(key, value == null ? "" : value.toString());
36-
}
37-
3833
public static void putWithSource(final String configSource, final String key, final Object value) {
3934
RUNTIME_CONFIGS_BY_SOURCE
4035
.computeIfAbsent(configSource, k -> new ConcurrentHashMap<>())
@@ -55,23 +50,32 @@ public static void putAllWithSource(final String configSource, final Map<String,
5550
}
5651

5752
public static String get(final String key) {
58-
return RUNTIME_CONFIGS.getOrDefault(key, "");
53+
for (final Map<String, String> sourceMap : RUNTIME_CONFIGS_BY_SOURCE.values()) {
54+
final String value = sourceMap.get(key);
55+
if (value != null) {
56+
return value;
57+
}
58+
}
59+
60+
return "";
5961
}
6062

6163
public static Map<String, String> getBySource(final String source) {
6264
return Collections.unmodifiableMap(RUNTIME_CONFIGS_BY_SOURCE.getOrDefault(source, Map.of()));
6365
}
6466

6567
public static Map<String, String> getAll() {
66-
return Collections.unmodifiableMap(RUNTIME_CONFIGS);
68+
final Map<String, String> allConfigs = new LinkedHashMap<>();
69+
RUNTIME_CONFIGS_BY_SOURCE.values().forEach(allConfigs::putAll);
70+
71+
return Collections.unmodifiableMap(allConfigs);
6772
}
6873

6974
public static Map<String, Map<String, String>> getAllBySource() {
7075
return Collections.unmodifiableMap(RUNTIME_CONFIGS_BY_SOURCE);
7176
}
7277

7378
public static void clear() {
74-
RUNTIME_CONFIGS.clear();
7579
RUNTIME_CONFIGS_BY_SOURCE.clear();
7680
}
7781
}

0 commit comments

Comments
 (0)