Thanks Mark to have pointed out @ConfigProperty can be put on a TYPE so we can use it to handle prefixes in our proxies
git-svn-id: https://svn.apache.org/repos/asf/geronimo/components/config/trunk@1832036 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/impl/src/main/java/org/apache/geronimo/config/cdi/ConfigurationHandler.java b/impl/src/main/java/org/apache/geronimo/config/cdi/ConfigurationHandler.java
index 0c18f7a..8f0d7ee 100644
--- a/impl/src/main/java/org/apache/geronimo/config/cdi/ConfigurationHandler.java
+++ b/impl/src/main/java/org/apache/geronimo/config/cdi/ConfigurationHandler.java
@@ -16,6 +16,7 @@
*/
package org.apache.geronimo.config.cdi;
+import static java.util.Optional.ofNullable;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
@@ -44,9 +45,13 @@
ConfigurationHandler(final Config config, final Class<?> api) {
this.config = config;
+
+ final String prefix = ofNullable(api.getAnnotation(ConfigProperty.class))
+ .map(ConfigProperty::name)
+ .orElse("");
this.methodMetas = Stream.of(api.getMethods())
.filter(m -> m.isAnnotationPresent(ConfigProperty.class))
- .collect(toMap(identity(), MethodMeta::new));
+ .collect(toMap(identity(), e -> new MethodMeta(e, prefix)));
}
@Override
@@ -75,7 +80,7 @@
private final boolean optional;
- private MethodMeta(final Method m) {
+ private MethodMeta(final Method m, final String prefix) {
final ConfigProperty annotation = m.getAnnotation(ConfigProperty.class);
optional = Optional.class == m.getReturnType();
final Type type = optional ?
@@ -109,7 +114,7 @@
throw new IllegalArgumentException("Unsupported type: " + type);
}
- key = annotation.name().isEmpty() ? m.getDeclaringClass().getName() + "." + m.getName() : annotation.name();
+ key = prefix + (annotation.name().isEmpty() ? m.getDeclaringClass().getName() + "." + m.getName() : annotation.name());
final boolean hasDefault = !annotation.defaultValue().equals(ConfigProperty.UNCONFIGURED_VALUE);
if (lookupType == long.class || lookupType == Long.class) {
defaultValue = hasDefault ? Long.parseLong(annotation.defaultValue()) : 0L;
diff --git a/impl/src/test/java/org/apache/geronimo/config/test/internal/ProxyTest.java b/impl/src/test/java/org/apache/geronimo/config/test/internal/ProxyTest.java
index 7dc7f00..2e1b34a 100644
--- a/impl/src/test/java/org/apache/geronimo/config/test/internal/ProxyTest.java
+++ b/impl/src/test/java/org/apache/geronimo/config/test/internal/ProxyTest.java
@@ -39,12 +39,13 @@
@Deployment
public static WebArchive deploy() {
+ System.setProperty("prefix.val", "yes");
System.setProperty(LIST_KEY, "a,b,1");
System.setProperty(SOME_KEY, "yeah");
System.setProperty(SOME_OTHER_KEY, "123");
JavaArchive testJar = ShrinkWrap
.create(JavaArchive.class, "PoxyTest.jar")
- .addClasses(ProxyTest.class, SomeProxy.class)
+ .addClasses(ProxyTest.class, SomeProxy.class, PrefixedSomeProxy.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
return ShrinkWrap
@@ -53,6 +54,9 @@
}
@Inject
+ private PrefixedSomeProxy prefixed;
+
+ @Inject
private SomeProxy proxy;
@Test
@@ -65,6 +69,17 @@
assertEquals(proxy.listDefaults(), asList(1, 2, 1));
}
+ @Test
+ public void prefix() {
+ assertEquals(prefixed.val(), "yes");
+ }
+
+ @ConfigProperty(name = "prefix.")
+ public interface PrefixedSomeProxy {
+ @ConfigProperty(name = "val")
+ String val();
+ }
+
public interface SomeProxy {
@ConfigProperty
int key2();