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<?>>() {});


Reply via email to