You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2015/09/20 23:13:03 UTC

svn commit: r1704204 - in /aries/trunk/blueprint/blueprint-maven-plugin/src: main/java/org/apache/aries/blueprint/plugin/ main/java/org/apache/aries/blueprint/plugin/model/ test/java/org/apache/aries/blueprint/plugin/model/ test/java/org/apache/aries/b...

Author: cschneider
Date: Sun Sep 20 21:12:58 2015
New Revision: 1704204

URL: http://svn.apache.org/viewvc?rev=1704204&view=rev
Log:
[ARIES-1411] Support service refs with same interface but different filter

Added:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BuiltInBeanRef.java
Modified:
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
    aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java Sun Sep 20 21:12:58 2015
@@ -148,7 +148,7 @@ public class Generator implements Proper
     }
     
     private void writeFactory(ProducedBean bean) throws XMLStreamException {
-        writer.writeAttribute("factory-ref", bean.factoryBeanId);
+        writer.writeAttribute("factory-ref", bean.factoryBean.id);
         writer.writeAttribute("factory-method", bean.factoryMethod);
     }
 

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRef.java Sun Sep 20 21:12:58 2015
@@ -1,15 +1,18 @@
 package org.apache.aries.blueprint.plugin.model;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.inject.Named;
 
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 public class BeanRef implements Comparable<BeanRef> {
     public String id;
     public Class<?> clazz;
+    public Map<Class<? extends Annotation>, Annotation> qualifiers;
     
     /**
      * 
@@ -17,27 +20,25 @@ public class BeanRef implements Comparab
      */
     public BeanRef(Class<?> clazz) {
         this.clazz = clazz;
+        this.qualifiers = new HashMap<Class<? extends Annotation>, Annotation>();
     }
     
-    public BeanRef(Class<?> type, String id) {
-        this.clazz = type;
+    public BeanRef(Class<?> clazz, String id) {
+        this(clazz);
         this.id = id;
     }
 
     public BeanRef(Field field) {
-        this(field.getType(), getDestinationId(field));
+        this(field.getType());
+        for (Annotation ann : field.getAnnotations()) {
+            if (isQualifier(ann) != null) {
+                this.qualifiers.put(ann.annotationType(), ann);
+            }
+        }
     }
 
-    private static String getDestinationId(Field field) {
-        Named named = field.getAnnotation(Named.class);
-        if (named != null) {
-            return named.value();
-        }
-        Qualifier qualifier = field.getAnnotation(Qualifier.class);
-        if (qualifier != null) {
-            return qualifier.value();
-        }
-        return null;
+    private javax.inject.Qualifier isQualifier(Annotation ann) {
+        return ann.annotationType().getAnnotation(javax.inject.Qualifier.class);
     }
 
     public static String getBeanName(Class<?> clazz) {
@@ -59,7 +60,7 @@ public class BeanRef implements Comparab
     
     public boolean matches(BeanRef template) {
         boolean assignable = template.clazz.isAssignableFrom(this.clazz);
-        return assignable && ((template.id == null) || id.equals(template.id));
+        return assignable && qualifiers.values().containsAll(template.qualifiers.values());
     }
 
     @Override

Added: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BuiltInBeanRef.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BuiltInBeanRef.java?rev=1704204&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BuiltInBeanRef.java (added)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BuiltInBeanRef.java Sun Sep 20 21:12:58 2015
@@ -0,0 +1,25 @@
+package org.apache.aries.blueprint.plugin.model;
+
+import com.google.inject.name.Named;
+
+public class BuiltInBeanRef extends BeanRef {
+
+    public BuiltInBeanRef(Class<?> clazz, String id) {
+        super(clazz);
+        this.id = id;
+    }
+
+    @Override
+    public boolean matches(BeanRef template) {
+        if (template.clazz != this.clazz || template.qualifiers.size() > 1) {
+            return false;
+        }
+        if (template.qualifiers.size() == 0) {
+            return true;
+        }
+        Named name = (Named)template.qualifiers.get(Named.class);
+        return name != null && id.equals(name.value());
+    }
+
+    
+}

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java Sun Sep 20 21:12:58 2015
@@ -64,15 +64,15 @@ public class Context implements Matcher
         Bean bean = new Bean(clazz);
         reg.add(bean);
         addServiceRefs(clazz);
-        addProducedBeans(clazz, bean.id);
+        addProducedBeans(clazz, bean);
     }
 
-    private void addProducedBeans(Class<?> clazz, String factoryBeanId) {
+    private void addProducedBeans(Class<?> clazz, BeanRef factoryBean) {
         for (Method method : clazz.getMethods()) {
             Produces produces = method.getAnnotation(Produces.class);
             if (produces != null) {
                 Class<?> producedClass = method.getReturnType();
-                ProducedBean producedBean = new ProducedBean(producedClass, factoryBeanId, method.getName());
+                ProducedBean producedBean = new ProducedBean(producedClass, factoryBean, method.getName());
                 reg.add(producedBean);
             }
         }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/OsgiServiceRef.java Sun Sep 20 21:12:58 2015
@@ -31,11 +31,23 @@ public class OsgiServiceRef extends Bean
 
     public OsgiServiceRef(Field field) {
         super(field);
-        if (id == null) {
-            id = getBeanName(clazz);
-        }
         OsgiService osgiService = field.getAnnotation(OsgiService.class);
         filter = osgiService.filter();
+        id = getBeanName(clazz);
+        if (filter != null) {
+            id = id + "-" + getId(filter);
+        }
+    }
+
+    private String getId(String raw) {
+        StringBuilder builder = new StringBuilder();
+        for (int c = 0; c < raw.length(); c++) {
+            char ch = raw.charAt(c);
+            if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') {
+                builder.append(ch);
+            }
+        }
+        return builder.toString();
     }
 
 }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java Sun Sep 20 21:12:58 2015
@@ -3,11 +3,11 @@ package org.apache.aries.blueprint.plugi
 
 public class ProducedBean extends Bean {
     public String factoryMethod;
-    public String factoryBeanId;
+    public BeanRef factoryBean;
     
-    public ProducedBean(Class<?> clazz, String factoryBeanId, String factoryMethod) {
+    public ProducedBean(Class<?> clazz, BeanRef factoryBean, String factoryMethod) {
         super(clazz);
-        this.factoryBeanId = factoryBeanId;
+        this.factoryBean = factoryBean;
         this.factoryMethod = factoryMethod;
     }
 

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java Sun Sep 20 21:12:58 2015
@@ -60,11 +60,11 @@ public class Property implements Compara
     private static String getRefName(Field field) {
         Named named = field.getAnnotation(Named.class);
         if (named != null) {
-        	return named.value();
+            return named.value();
         }
     	Qualifier qualifier = field.getAnnotation(Qualifier.class);
         if (qualifier != null) {
-        	return qualifier.value();
+            return qualifier.value();
         }
         return Bean.getBeanName(field.getType());
     }

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java Sun Sep 20 21:12:58 2015
@@ -45,16 +45,16 @@ public class ContextTest {
     public void testLists2()  {
         Context context = new Context(ServiceReferences.class);
         Assert.assertEquals(1, context.getBeans().size());
-        Assert.assertEquals(2, context.getServiceRefs().size());
+        Assert.assertEquals(3, context.getServiceRefs().size());
     }
     
     @Test
     public void testMatching() throws NoSuchFieldException, SecurityException  {
         Context context = new Context(ServiceReferences.class);
-        BeanRef matching = context.getMatching(new BeanRef(ServiceB.class));
+        BeanRef matching = context.getMatching(new BeanRef(ServiceReferences.class.getDeclaredField("serviceB")));
         Assert.assertEquals(OsgiServiceRef.class, matching.getClass());
         Assert.assertEquals(ServiceB.class, matching.clazz);
-        Assert.assertEquals("serviceB", matching.id);
+        Assert.assertEquals("serviceB-typeB1", matching.id);
     }
     
     private void assertSpecialRef(String expectedId, Class<?> clazz) {
@@ -74,10 +74,10 @@ public class ContextTest {
     @Test
     public void testProduced() throws NoSuchFieldException, SecurityException  {
         Context context = new Context(MyFactoryBean.class);
-        
+        context.resolve();
         ProducedBean matching = (ProducedBean)context.getMatching(new BeanRef(MyProduced.class));
         Assert.assertEquals(MyProduced.class, matching.clazz);
-        Assert.assertEquals("myFactoryBean", matching.factoryBeanId);
+        Assert.assertEquals("myFactoryBean", matching.factoryBean.id);
         Assert.assertEquals("create", matching.factoryMethod);
     }
     

Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java?rev=1704204&r1=1704203&r2=1704204&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java Sun Sep 20 21:12:58 2015
@@ -30,4 +30,6 @@ public class ServiceReferences {
     @Inject @OsgiService(filter="(type=B1)") ServiceB serviceB;
     
     @Named("serviceB2Id") @Inject @OsgiService(filter="(type=B2)") ServiceB serviceB2;
+    
+    @Inject @OsgiService(filter="(type=B3)") ServiceB serviceB3;
 }