[jboss-cvs] JBossAS SVN: r83805 - in projects/microcontainer/trunk: dependency/src/main/java/org/jboss/dependency/plugins/graph and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Feb 3 05:41:46 EST 2009


Author: alesj
Date: 2009-02-03 05:41:46 -0500 (Tue, 03 Feb 2009)
New Revision: 83805

Added:
   projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java
   projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml
Modified:
   projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
   projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
   projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
   projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
   projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
Log:
[JBMICROCONT-406]; move search into inject.

Modified: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyItem.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -35,12 +35,13 @@
  * A DependencyItem.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision$
  */
 public class AbstractDependencyItem extends JBossObject implements DependencyItem
 {
    /** The log */
-   private static final Logger log = Logger.getLogger(AbstractDependencyItem.class);
+   protected static final Logger log = Logger.getLogger(AbstractDependencyItem.class);
    
    /** What I depend on */
    private Object iDependOn;

Modified: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/Search.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -54,6 +54,22 @@
       this.delegate = delegate;
    }
 
+   /**
+    * Get Search enum instance.
+    *
+    * @param typeString the type string
+    * @return matching instance, default if none found
+    */
+   public static Search getInstance(String typeString)
+   {
+      for(Search search : values())
+      {
+         if (search.getType().equalsIgnoreCase(typeString))
+            return search;
+      }
+      return DEFAULT;
+   }
+
    public String getType()
    {
       return delegate.getType();

Added: projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/java/org/jboss/dependency/plugins/graph/SearchDependencyItem.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -0,0 +1,121 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dependency.plugins.graph;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.graph.GraphController;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+
+/**
+ * Search dependency item.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class SearchDependencyItem extends AbstractDependencyItem
+{
+   private Search search;
+
+   public SearchDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState, Search search)
+   {
+      super(name, iDependOn, whenRequired, dependentState);
+      this.search = search;
+   }
+
+   /**
+    * Get controller context.
+    *
+    * @param controller the controller
+    * @param name the name
+    * @param state the state
+    * @return the controller context
+    */
+   protected ControllerContext getControllerContext(Controller controller, Object name, ControllerState state)
+   {
+      LookupStrategy strategy = search.getStrategy();
+      return strategy.getContext(controller, name, state);
+   }
+
+   public boolean resolve(Controller controller)
+   {
+      if (controller instanceof GraphController)
+      {
+         boolean previous = isResolved();
+         ControllerContext context;
+
+         if (getDependentState() == null)
+         {
+            context = getControllerContext(controller, getIDependOn(), ControllerState.INSTALLED);
+         }
+         else
+         {
+            context = getControllerContext(controller, getIDependOn(), getDependentState());
+         }
+
+         if (context == null)
+         {
+            setResolved(false);
+            ControllerContext unresolvedContext = getControllerContext(controller, getIDependOn(), null);
+            if (unresolvedContext != null && ControllerMode.ON_DEMAND.equals(unresolvedContext.getMode()))
+            {
+               try
+               {
+                  controller.enableOnDemand(unresolvedContext);
+               }
+               catch (Throwable ignored)
+               {
+                  if (log.isTraceEnabled())
+                     log.trace("Unexpected error", ignored);
+               }
+            }
+         }
+         else
+         {
+            addDependsOnMe(controller, context);
+            setResolved(true);
+         }
+
+         if (previous != isResolved())
+         {
+            flushJBossObjectCache();
+            if (log.isTraceEnabled())
+            {
+               if (isResolved())
+                  log.trace("Resolved " + this);
+               else
+                  log.trace("Unresolved " + this);
+            }
+         }
+         return isResolved();
+      }
+      return super.resolve(controller);
+   }
+
+   protected void toHumanReadableString(StringBuilder builder)
+   {
+      super.toHumanReadableString(builder);
+      builder.append("search=").append(search);
+   }
+}

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Inject.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -73,6 +73,13 @@
    String dependentState() default "";
 
    /**
+    * Get search type.
+    *
+    * @return the search type
+    */
+   String search() default "";
+
+   /**
     * Get autowire type.
     * Default is by class.
     *

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/annotations/Search.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -33,6 +33,7 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+ at Deprecated
 public @interface Search
 {
    /**

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractDependencyValueMetaData.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -21,29 +21,33 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlAnyElement;
 
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.dependency.plugins.graph.SearchDependencyItem;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.dependency.spi.graph.LookupStrategy;
 import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 import org.jboss.xb.annotations.JBossXmlAttribute;
-import org.jboss.managed.api.annotation.ManagementProperty;
 
 /**
  * Dependency value.
  *
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @author <a href="ales.justin at jboss.com">Ales Justin</a>
- * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Radim Marek (obrien)
  * @version $Revision$
  */
 @XmlType(name="injectionType")
@@ -77,6 +81,12 @@
    protected ControllerState dependentState;
 
    /**
+    * The search type
+    */
+   protected Search search = Search.DEFAULT;
+
+
+   /**
     * Create a new dependency value
     */
    public AbstractDependencyValueMetaData()
@@ -138,6 +148,11 @@
       flushJBossObjectCache();
    }
 
+   /**
+    * Get when required state.
+    *
+    * @return the when required state
+    */
    public ControllerState getWhenRequiredState()
    {
       return whenRequiredState;
@@ -155,6 +170,11 @@
       flushJBossObjectCache();
    }
 
+   /**
+    * Get the required state of dependency.
+    *
+    * @return the required dependency state
+    */
    public ControllerState getDependentState()
    {
       return dependentState;
@@ -179,6 +199,37 @@
          setValue(new AbstractValueMetaData(value));
    }
 
+   /**
+    * Set search type.
+    *
+    * @param search the search type
+    */
+   @XmlAttribute(name = "search")
+   public void setSearch(Search search)
+   {
+      this.search = search;
+   }
+
+   /**
+    * Get search type.
+    *
+    * @return the search type
+    */
+   public Search getSearch()
+   {
+      return search;
+   }
+
+   /**
+    * Is search applied.
+    *
+    * @return true if search is applied
+    */
+   protected boolean isSearchApplied()
+   {
+      return (search != Search.DEFAULT);
+   }
+
    protected boolean isLookupValid(ControllerContext lookup)
    {
       return (lookup != null);
@@ -189,6 +240,12 @@
       return false;
    }
 
+   /**
+    * Add optional dependency.
+    *
+    * @param controller the controller
+    * @param lookup the lookup context
+    */
    protected void addOptionalDependency(Controller controller, ControllerContext lookup)
    {
       OptionalDependencyItem dependency = new OptionalDependencyItem(context.getName(), lookup.getName(), lookup.getState());
@@ -196,6 +253,20 @@
       lookup.getDependencyInfo().addDependsOnMe(dependency);
    }
 
+   /**
+    * Get controller context.
+    *
+    * @param name the name
+    * @param state the state
+    * @return the controller context
+    */
+   protected ControllerContext getControllerContext(Object name, ControllerState state)
+   {
+      Controller controller = context.getController();
+      LookupStrategy strategy = search.getStrategy();
+      return strategy.getContext(controller, name, state);
+   }
+
    public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
    {
       ControllerState state = dependentState;
@@ -203,16 +274,21 @@
          state = ControllerState.INSTALLED;
       if (context == null)
          throw new IllegalStateException("No context for " + this);
-      Controller controller = context.getController();
-      ControllerContext lookup = controller.getContext(getUnderlyingValue(), state);
 
+      ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
+
       if (isLookupValid(lookup) == false)
          throw new Error("Should not be here - dependency failed - " + this);
 
       if (lookup == null)
+      {
          return null;
+      }
       else if (isOptional())
+      {
+         Controller controller = context.getController();
          addOptionalDependency(controller, lookup);
+      }
 
       Object result;
       if (property != null && property.length() > 0)
@@ -259,7 +335,15 @@
          Object name = context.getName();
          Object iDependOn = getUnderlyingValue();
 
-         DependencyItem item = new AbstractDependencyItem(name, iDependOn, whenRequired, dependentState);
+         DependencyItem item;
+         if (isSearchApplied())
+         {
+            item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState, search);
+         }
+         else
+         {
+            item = new AbstractDependencyItem(name, iDependOn, whenRequired, dependentState);
+         }
          visitor.addDependency(item);
       }
       super.initialVisit(visitor);
@@ -274,6 +358,8 @@
          buffer.append(" whenRequiredState=").append(whenRequiredState.getStateString());
       if (dependentState != null)
          buffer.append(" dependentState=").append(dependentState.getStateString());
+      if (isSearchApplied())
+         buffer.append(" search=").append(search);
    }
 
    public AbstractDependencyValueMetaData clone()
@@ -284,11 +370,11 @@
    /**
     * Optional depedency item.
     */
-   protected class OptionalDependencyItem extends AbstractDependencyItem
+   protected class OptionalDependencyItem extends SearchDependencyItem
    {
       public OptionalDependencyItem(Object name, Object iDependOn, ControllerState dependentState)
       {
-         super(name, iDependOn, optionalWhenRequired, dependentState);
+         super(name, iDependOn, optionalWhenRequired, dependentState, search);
          setResolved(true);
       }
    }

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -31,11 +31,10 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.dependency.plugins.AttributeCallbackItem;
-import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
-import org.jboss.kernel.plugins.dependency.ClassContextDependencyItem;
+import org.jboss.kernel.plugins.dependency.SearchClassContextDependencyItem;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
@@ -132,6 +131,11 @@
       this.propertyMetaData = propertyMetaData;
    }
 
+   /**
+    * Add install/callback item.
+    *
+    * @param name the callback name
+    */
    protected void addInstallItem(Object name)
    {
       if (propertyMetaData == null)
@@ -165,18 +169,18 @@
          ControllerState state = dependentState;
          if (state == null)
             state = ControllerState.INSTANTIATED;
-         Controller controller = context.getController();
-         ControllerContext lookup = controller.getContext(getUnderlyingValue(), state);
+
+         ControllerContext lookup = getControllerContext(getUnderlyingValue(), state);
          if (lookup == null)
             throw new Error("Should not be here - dependency failed - " + this);
+
          return fromContext.executeLookup(lookup);
       }
 
       // by class type
       if (getUnderlyingValue() == null)
       {
-         Controller controller = context.getController();
-         ControllerContext lookup = controller.getInstalledContext(info.getType());
+         ControllerContext lookup = getControllerContext(info.getType(), ControllerState.INSTALLED);
          if (lookup == null)
          {
             if (InjectOption.STRICT.equals(injectionOption))
@@ -216,7 +220,9 @@
       {
          // check if dependent is not set when used on itself
          if (super.getUnderlyingValue() == null && dependentState == null)
-               dependentState = fromContext.getWhenValid();
+         {
+            dependentState = fromContext.getWhenValid();
+         }
 
          super.initialVisit(visitor);
          return;
@@ -284,11 +290,12 @@
                      {
                         whenRequired = visitor.getContextState();
                      }
-                     DependencyItem item = new ClassContextDependencyItem(
+                     DependencyItem item = new SearchClassContextDependencyItem(
                            context.getName(),
                            injectionClass,
                            whenRequired,
-                           dependentState);
+                           dependentState,
+                           search);
                      visitor.addDependency(item);
                   }
                   else

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -21,30 +21,32 @@
 */
 package org.jboss.beans.metadata.plugins;
 
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
 
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.dependency.plugins.AbstractDependencyItem;
 import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.dependency.plugins.graph.SearchDependencyItem;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
 import org.jboss.dependency.spi.graph.GraphController;
+import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 import org.jboss.xb.annotations.JBossXmlAttribute;
-import org.jboss.managed.api.annotation.ManagementProperty;
 
 /**
- * Search value metadata - TODO - still experimental
+ * Search value metadata.
  *
+ * @deprecated use <inject search="search-type"/> 
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
+ at Deprecated
 @XmlType(name="searchType")
 public class AbstractSearchValueMetaData extends AbstractValueMetaData
 {
@@ -122,7 +124,7 @@
       if (dependentState == null)
          dependentState = ControllerState.INSTALLED;
 
-      DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState);
+      DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState, search);
       visitor.addDependency(item);
 
       super.describeVisit(visitor);
@@ -176,39 +178,4 @@
       super.toShortString(buffer);
       buffer.append("search=").append(search);
    }
-
-   private class SearchDependencyItem extends AbstractDependencyItem
-   {
-      private SearchDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState)
-      {
-         super(name, iDependOn, whenRequired, dependentState);
-      }
-
-      public boolean resolve(Controller controller)
-      {
-         if (controller instanceof GraphController)
-         {
-            GraphController gc = (GraphController)controller;
-            ControllerContext context = gc.getContext(getIDependOn(), getDependentState(), search);
-            if (context != null)
-            {
-               setIDependOn(context.getName());
-               addDependsOnMe(controller, context);
-               setResolved(true);
-            }
-            else
-            {
-               setResolved(false);
-            }
-            return isResolved();
-         }
-         return false;
-      }
-
-      protected void toHumanReadableString(StringBuilder builder)
-      {
-         super.toHumanReadableString(builder);
-         builder.append("search=").append(search);
-      }
-   }
 }

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/ValueUtil.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -221,6 +221,8 @@
          injection.setDependentState(new ControllerState(annotation.dependentState()));
       if (isAttributePresent(annotation.whenRequired()))
          injection.setWhenRequiredState(new ControllerState(annotation.whenRequired()));
+      if (isAttributePresent(annotation.search()))
+         injection.setSearch(org.jboss.dependency.plugins.graph.Search.getInstance(annotation.search()));
       injection.setInjectionOption(annotation.option());
       injection.setInjectionType(annotation.type());
       if (FromContext.NOOP.equals(annotation.fromContext()) == false)
@@ -266,6 +268,7 @@
     * @param annotation the annotation
     * @return search meta data
     */
+   @SuppressWarnings("deprecation")
    static ValueMetaData createValueMetaData(Search annotation)
    {
       String searchType = annotation.type();

Modified: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -39,7 +39,7 @@
 
    public boolean resolve(Controller controller)
    {
-      ControllerContext context = controller.getInstalledContext(getIDependOn());
+      ControllerContext context = getControllerContext(controller);
       if (context != null)
       {
          setIDependOn(context.getName());
@@ -52,6 +52,25 @@
       }
       return isResolved();
    }
+
+   /**
+    * Get controller context.
+    *
+    * @param controller the controller
+    * @return controller context
+    */
+   protected ControllerContext getControllerContext(Controller controller)
+   {
+      ControllerState state = getDependentState();
+      if (state == null)
+      {
+         return controller.getInstalledContext(getIDependOn());
+      }
+      else
+      {
+         return controller.getContext(getIDependOn(), state);
+      }
+   }
 }
 
 

Copied: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java (from rev 83617, projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextDependencyItem.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -0,0 +1,59 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.dependency;
+
+import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.graph.LookupStrategy;
+
+/**
+ * A search Class context dependencyItem.
+ *
+ * @author <a href="ales.justin at gmail.com">Ales Justin</a>
+ */
+public class SearchClassContextDependencyItem extends ClassDependencyItem
+{
+   private Search search;
+
+   public SearchClassContextDependencyItem(Object name, Class<?> demandClass, ControllerState whenRequired, ControllerState dependentState, Search search)
+   {
+      super(name, demandClass, whenRequired, dependentState);
+      if (search == null)
+         throw new IllegalArgumentException("Null search.");
+
+      this.search = search;
+   }
+
+   /**
+    * Get controller context.
+    *
+    * @param controller the controller
+    * @return controller context
+    */
+   protected ControllerContext getControllerContext(Controller controller)
+   {
+      LookupStrategy strategy = search.getStrategy();
+      return strategy.getContext(controller, getIDependOn(), ControllerState.INSTALLED);
+   }
+}
\ No newline at end of file


Property changes on: projects/microcontainer/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchClassContextDependencyItem.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/main/resources/schema/jboss-beans-common_2_0.xsd	2009-02-03 10:41:46 UTC (rev 83805)
@@ -409,6 +409,7 @@
       <xsd:attribute name="type" type="autowireTypeType" use="optional" default="ByClass"/>
       <xsd:attribute name="option" type="optionType" use="optional" default="Strict"/>
       <xsd:attribute name="fromContext" type="contextType" use="optional"/>
+      <xsd:attribute name="search" type="searchTypeType" use="optional" default="default"/>
    </xsd:complexType>
 
    <xsd:complexType name="searchType">

Modified: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionJaxbTestCase.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -28,6 +28,7 @@
 import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.dependency.plugins.graph.Search;
 import org.jboss.dependency.spi.ControllerState;
 
 /**
@@ -76,6 +77,13 @@
       assertEquals(ControllerState.CONFIGURED, dependency.getDependentState());
    }
 
+   public void testInjectionWithSearch() throws Exception
+   {
+      AbstractDependencyValueMetaData dependency = getInjection();
+      assertEquals("Dummy", dependency.getValue());
+      assertEquals(Search.LEAVES, dependency.getSearch());
+   }
+
    /* TODO
    public void testInjectionBadNoBean() throws Exception
    {

Modified: projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java	2009-02-03 09:22:08 UTC (rev 83804)
+++ projects/microcontainer/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/InjectionTestCase.java	2009-02-03 10:41:46 UTC (rev 83805)
@@ -24,13 +24,13 @@
 import java.util.Set;
 
 import junit.framework.Test;
-
+import org.jboss.beans.metadata.api.model.FromContext;
 import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
-import org.jboss.beans.metadata.api.model.FromContext;
 import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.dependency.plugins.graph.Search;
 import org.jboss.dependency.spi.ControllerState;
 
 /**
@@ -100,6 +100,13 @@
       assertEquals(FromContext.getInstance("name"), dependency.getFromContext());
    }
 
+   public void testInjectionWithSearch() throws Exception
+   {
+      AbstractInjectionValueMetaData dependency = getInjection("InjectionWithSearch.xml");
+      assertEquals("Dummy", dependency.getValue());
+      assertEquals(Search.LEAVES, dependency.getSearch());
+   }
+
    public static Test suite()
    {
       return suite(InjectionTestCase.class);

Copied: projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml (from rev 83617, projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithState.xml)
===================================================================
--- projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml	2009-02-03 10:41:46 UTC (rev 83805)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <property name="Dummy">
+      <inject bean="Dummy" search="Leaves"/>
+   </property>
+</bean>


Property changes on: projects/microcontainer/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/InjectionWithSearch.xml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list