Author: rotty3000 Date: Sat May 5 02:32:15 2018 New Revision: 1830947 URL: http://svn.apache.org/viewvc?rev=1830947&view=rev Log: [CDI] fix missing PREFIX_ handling
Signed-off-by: Raymond Auge <[email protected]> Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java?rev=1830947&r1=1830946&r2=1830947&view=diff ============================================================================== --- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java (original) +++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/util/Maps.java Sat May 5 02:32:15 2018 @@ -15,6 +15,8 @@ package org.apache.aries.cdi.container.internal.util; import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -41,6 +43,8 @@ import org.osgi.util.converter.TypeRefer public class Maps { + private static final String PREFIX_CONSTANT = "PREFIX_"; + private Maps() { // no instances } @@ -130,7 +134,14 @@ public class Maps { return annotations.stream().filter( ann -> Objects.nonNull(ann.annotationType().getAnnotation(BeanPropertyType.class)) ).map( - ann -> Conversions.convert(ann).sourceAs(ann.annotationType()).to(new TypeReference<Map<String, Object>>() {}) + ann -> { + Map<String, Object> map = Conversions.convert(ann).sourceAs(ann.annotationType()).to(new TypeReference<Map<String, Object>>() {}); + String prefix = getPrefix(ann); + if (prefix != null) { + return addPrefix(map, prefix); + } + return map; + } ).map(Map::entrySet).flatMap(Collection::stream).collect( Collectors.toMap( Map.Entry::getKey, @@ -140,6 +151,37 @@ public class Maps { ); } + static Map<String, Object> addPrefix(Map<String, Object> map, String prefix) { + return map.entrySet().stream().collect( + Collectors.toMap( + e -> prefix + e.getKey(), + Map.Entry::getValue + ) + ); + } + + static String getPrefix(Annotation ann) { + try { + Class<?> clazz = ann.annotationType(); + final Field f = clazz.getField(PREFIX_CONSTANT); + if (Modifier.isStatic(f.getModifiers()) && + Modifier.isPublic(f.getModifiers()) && + Modifier.isFinal(f.getModifiers()) && + String.class.isAssignableFrom(f.getType())) { + + final Object value = f.get(null); + + if ( value != null ) { + return value.toString(); + } + } + } + catch ( final Exception ignore) { + // ignore + } + return null; + } + @SuppressWarnings({ "rawtypes", "unchecked" }) public static List<?> merge(Object a, Object b) { List<?> aList = Conversions.convert(a).to(new TypeReference<List<?>>() {});
