1919
2020import java .lang .reflect .InvocationTargetException ;
2121import java .lang .reflect .Method ;
22- import java .util .Arrays ;
22+ import java .util .Map ;
2323import java .util .Properties ;
2424
2525import 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}
0 commit comments