Author: cschneider
Date: Fri Mar 20 09:00:17 2015
New Revision: 1667955

URL: http://svn.apache.org/r1667955
Log:
[ARIES-1308] Support special blueprint beans like blueprintBundleContext

Added:
    
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
Modified:
    
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.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/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
    
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java

Modified: 
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java?rev=1667955&r1=1667954&r2=1667955&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
 Fri Mar 20 09:00:17 2015
@@ -74,7 +74,7 @@ public class Bean extends BeanRef {
     
     public void resolve(Matcher matcher) {
         Class<?> curClass = this.clazz;
-        while (curClass != Object.class) {
+        while (curClass != null && curClass != Object.class) {
             resolveProperties(matcher, curClass);
             curClass = curClass.getSuperclass();
         }

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=1667955&r1=1667954&r2=1667955&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
 Fri Mar 20 09:00:17 2015
@@ -26,10 +26,12 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 
 import javax.enterprise.inject.Produces;
-import javax.inject.Named;
 
 import org.ops4j.pax.cdi.api.OsgiService;
-import org.springframework.beans.factory.annotation.Qualifier;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.container.Converter;
 
 public class Context implements Matcher {
 
@@ -92,6 +94,19 @@ public class Context implements Matcher
                 return bean;
             }
         }
+        if (template.clazz == BundleContext.class) {
+            return new BeanRef(BundleContext.class, "blueprintBundleContext");
+        }
+        if (template.clazz == Bundle.class) {
+            return new BeanRef(Bundle.class, "blueprintBundle");
+        }
+        if (template.clazz == BlueprintContainer.class) {
+            return new BeanRef(BlueprintContainer.class, "blueprintContainer");
+        }
+        if (template.clazz == Converter.class) {
+            return new BeanRef(Converter.class, "blueprintConverter");
+        }
+        
         return null;
     }
 

Modified: 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java?rev=1667955&r1=1667954&r2=1667955&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java
 Fri Mar 20 09:00:17 2015
@@ -25,6 +25,7 @@ import javax.inject.Named;
 
 import org.apache.aries.blueprint.plugin.test.MyBean1;
 import org.apache.aries.blueprint.plugin.test.MyBean3;
+import org.apache.aries.blueprint.plugin.test.MyBean4;
 import org.apache.aries.blueprint.plugin.test.ServiceAImpl1;
 import org.junit.Assert;
 import org.junit.Test;
@@ -78,5 +79,14 @@ public class BeanTest {
         assertNull("There should be no transaction definition", 
bean.transactionDef);
         assertEquals("There should be no properties", 0, 
bean.properties.size());
     }
+    
+    @Test
+    public void testBlueprintBundleContext() {
+        Bean bean = new Bean(MyBean4.class);
+        bean.resolve(new Context());
+        Property bcProp = bean.properties.iterator().next();
+        assertEquals("bundleContext", bcProp.name);
+        assertEquals("blueprintBundleContext", bcProp.ref);
+    }
 
 }

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=1667955&r1=1667954&r2=1667955&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
 Fri Mar 20 09:00:17 2015
@@ -18,6 +18,8 @@
  */
 package org.apache.aries.blueprint.plugin.model;
 
+import static org.junit.Assert.assertEquals;
+
 import org.apache.aries.blueprint.plugin.test.MyBean3;
 import org.apache.aries.blueprint.plugin.test.MyFactoryBean;
 import org.apache.aries.blueprint.plugin.test.MyProduced;
@@ -25,6 +27,10 @@ import org.apache.aries.blueprint.plugin
 import org.apache.aries.blueprint.plugin.test.ServiceReferences;
 import org.junit.Assert;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.container.Converter;
 
 public class ContextTest {
 
@@ -51,6 +57,20 @@ public class ContextTest {
         Assert.assertEquals("serviceB", matching.id);
     }
     
+    private void assertSpecialRef(String expectedId, Class<?> clazz) {
+        Context context = new Context();
+        BeanRef ref = context.getMatching(new BeanRef(clazz));
+        assertEquals(expectedId, ref.id);
+    }
+    
+    @Test
+    public void testSpecialRefs() {
+        assertSpecialRef("blueprintBundleContext", BundleContext.class);
+        assertSpecialRef("blueprintBundle", Bundle.class);
+        assertSpecialRef("blueprintContainer", BlueprintContainer.class);
+        assertSpecialRef("blueprintConverter", Converter.class);
+    }
+    
     @Test
     public void testProduced() throws NoSuchFieldException, SecurityException  
{
         Context context = new Context(MyFactoryBean.class);

Added: 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java?rev=1667955&view=auto
==============================================================================
--- 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
 (added)
+++ 
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
 Fri Mar 20 09:00:17 2015
@@ -0,0 +1,13 @@
+package org.apache.aries.blueprint.plugin.test;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.osgi.framework.BundleContext;
+
+@Singleton
+public class MyBean4 {
+
+    @Inject
+    BundleContext bundleContext;
+}


Reply via email to