You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by dk...@apache.org on 2011/11/23 19:10:50 UTC

svn commit: r1205518 - in /aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint: container/BlueprintContainerImpl.java services/ExtendedBlueprintContainer.java

Author: dkulp
Date: Wed Nov 23 18:10:50 2011
New Revision: 1205518

URL: http://svn.apache.org/viewvc?rev=1205518&view=rev
Log:
[ARIES-790] Add API specifically for injecting properties into an object

Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1205518&r1=1205517&r2=1205518&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Wed Nov 23 18:10:50 2011
@@ -53,6 +53,7 @@ import org.apache.aries.blueprint.Extend
 import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
 import org.apache.aries.blueprint.NamespaceHandler;
 import org.apache.aries.blueprint.Processor;
+import org.apache.aries.blueprint.di.ExecutionContext;
 import org.apache.aries.blueprint.di.Recipe;
 import org.apache.aries.blueprint.di.Repository;
 import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
@@ -883,4 +884,29 @@ public class BlueprintContainerImpl 
       destroyComponents();
       untrackServiceReferences();
     }
+
+    public void injectBeanInstance(BeanMetadata bmd, Object o) 
+        throws IllegalArgumentException, ComponentDefinitionException {
+        ExecutionContext origContext 
+            = ExecutionContext.Holder.setContext((ExecutionContext)getRepository());
+        try {
+            ComponentMetadata cmd = componentDefinitionRegistry.getComponentDefinition(bmd.getId());
+            if (cmd == null || cmd != bmd) {
+                throw new IllegalArgumentException(bmd.getId() + " not found in blueprint container");
+            }
+            Recipe r = this.getRepository().getRecipe(bmd.getId());
+            if (r instanceof BeanRecipe) {
+                BeanRecipe br = (BeanRecipe)r;
+                if (!br.getType().isInstance(o)) {
+                    throw new IllegalArgumentException("Instance class " + o.getClass().getName() 
+                                                       + " is not an instance of " + br.getClass());
+                }
+                br.setProperties(o);
+            } else {
+                throw new IllegalArgumentException(bmd.getId() + " does not refer to a BeanRecipe");
+            }
+        } finally {
+            ExecutionContext.Holder.setContext(origContext);
+        }
+    }
 }

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java?rev=1205518&r1=1205517&r2=1205518&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/services/ExtendedBlueprintContainer.java Wed Nov 23 18:10:50 2011
@@ -30,7 +30,9 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.osgi.service.blueprint.container.BlueprintListener;
+import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.container.Converter;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
 
 /**
  * TODO: javadoc
@@ -68,5 +70,15 @@ public interface ExtendedBlueprintContai
     void reload();
 
     ProxyManager getProxyManager();
-            
+    
+
+    /**
+     * Inject (or reinject) an Object instance with the blueprint properties defined by a BeanMetadata
+     * 
+     * Throws IllegalArgumentException if the bean metadata does not exist in this blueprint container
+     * Throws ComponentDefinitionException if the injection process fails - this may have rendered the supplied Object unusable by partially completing the injection process
+     */
+    void injectBeanInstance(BeanMetadata bmd, Object o) 
+        throws IllegalArgumentException, ComponentDefinitionException;
+        
 }