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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 11 08:42:15 EDT 2008


Author: alesj
Date: 2008-08-11 08:42:15 -0400 (Mon, 11 Aug 2008)
New Revision: 76911

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java
Removed:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchValueMetaData.java
Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractScopeInfo.java
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/Search.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/policy/AbstractBindingMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchPropertyAnnotationPlugin.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java
   projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd
   projects/microcontainer/trunk/kernel/src/resources/main/schema/jboss-beans-common_2_0.xsd
   projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingOverrideTestCase.xml
Log:
Add @Search as XML notion as well - still experimental.
Change ScopingOverride test to use it.

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractScopeInfo.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractScopeInfo.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractScopeInfo.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -90,8 +90,6 @@
       scopeKey.addScope(CommonLevels.INSTANCE, name.toString());
       if (className != null)
          scopeKey.addScope(CommonLevels.CLASS, className);
-      // todo - some other level
-      scopeKey.addScope(CommonLevels.WORK, String.valueOf(hashCode()));
       setScope(scopeKey);
       setMutableScope(new ScopeKey(CommonLevels.INSTANCE, name.toString()));
    }

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/Search.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/Search.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/graph/Search.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -25,12 +25,14 @@
 
 import org.jboss.dependency.spi.graph.LookupStrategy;
 import org.jboss.dependency.spi.graph.SearchInfo;
+import org.jboss.xb.annotations.JBossXmlEnum;
 
 /**
  * Search enum.
  * 
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
+ at JBossXmlEnum(ignoreCase = true)
 public enum Search implements SearchInfo
 {
    DEFAULT(new DefaultSearchInfoWrapper()),

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -81,6 +81,7 @@
    ({
       @XmlElement(name="bean", type=AbstractBeanMetaData.class),
       @XmlElement(name="inject", type=AbstractDependencyValueMetaData.class),
+      @XmlElement(name="search", type= AbstractSearchValueMetaData.class),
       @XmlElement(name="null", type=AbstractValueMetaData.class)
    })
    public void setClassLoader(ValueMetaData classloader)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractConstructorMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -123,6 +123,7 @@
       @XmlElement(name="set", type=AbstractSetMetaData.class),
       @XmlElement(name="value", type=StringValueMetaData.class),
       @XmlElement(name="inject", type=AbstractInjectionValueMetaData.class),
+      @XmlElement(name="search", type= AbstractSearchValueMetaData.class),
       @XmlElement(name="value-factory", type=AbstractValueFactoryMetaData.class)
    })
    public void setValue(ValueMetaData value)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractParameterMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -174,6 +174,7 @@
       @XmlElement(name="array", type=AbstractArrayMetaData.class),
       @XmlElement(name="collection", type=AbstractCollectionMetaData.class),
       @XmlElement(name="inject", type=AbstractInjectionValueMetaData.class),
+      @XmlElement(name="search", type= AbstractSearchValueMetaData.class),
       @XmlElement(name="list", type=AbstractListMetaData.class),
       @XmlElement(name="map", type=AbstractMapMetaData.class),
       @XmlElement(name="null", type=AbstractValueMetaData.class),

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -186,6 +186,7 @@
       @XmlElement(name="array", type=AbstractArrayMetaData.class),
       @XmlElement(name="collection", type=AbstractCollectionMetaData.class),
       @XmlElement(name="inject", type=AbstractInjectionValueMetaData.class),
+      @XmlElement(name="search", type= AbstractSearchValueMetaData.class),
       @XmlElement(name="list", type=AbstractListMetaData.class),
       @XmlElement(name="map", type=AbstractMapMetaData.class),
       @XmlElement(name="set", type=AbstractSetMetaData.class),

Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java (from rev 76841, projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchValueMetaData.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSearchValueMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -0,0 +1,214 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, 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.beans.metadata.plugins;
+
+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.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.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
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+ at XmlType(name="searchType")
+public class AbstractSearchValueMetaData extends AbstractValueMetaData
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1L;
+   
+   private ControllerState state;
+   private org.jboss.dependency.plugins.graph.Search search;
+   private String property;
+
+   private ControllerContext context;
+
+   // Used in JBossXB
+   public AbstractSearchValueMetaData()
+   {
+   }
+
+   public AbstractSearchValueMetaData(Object value, ControllerState state, Search search, String property)
+   {
+      super(value);
+      if (search == null)
+         throw new IllegalArgumentException("Null search type");
+      
+      this.state = state;
+      this.search = search;
+      this.property = property;
+   }
+
+   public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
+   {
+      // we're here, so it must be GraphController instance
+      Controller controller = context.getController();
+      GraphController gc = (GraphController)controller;
+
+      ControllerState dependentState = state;
+      if (dependentState == null)
+         dependentState = ControllerState.INSTALLED;
+      ControllerContext context = gc.getContext(getUnderlyingValue(), dependentState, search);
+
+      Object result;
+      if (property != null && property.length() > 0)
+      {
+         if (context instanceof AttributeDispatchContext)
+         {
+            AttributeDispatchContext adc = (AttributeDispatchContext)context;
+            result = adc.get(property);
+         }
+         else
+            throw new IllegalArgumentException(
+                  "Cannot use property attribute, context is not AttributeDispatchContext: " + context +
+                  ", metadata: " + this);
+      }
+      else
+      {
+         result = context.getTarget();
+      }
+
+      return info != null ? info.convertValue(result) : result;
+   }
+
+   public void initialVisit(MetaDataVisitor visitor)
+   {
+      context = visitor.getControllerContext();
+
+      super.initialVisit(visitor);
+   }
+
+   public void describeVisit(MetaDataVisitor visitor)
+   {
+      Object name = context.getName();
+      Object iDependOn = getUnderlyingValue();
+
+      ControllerState whenRequired = visitor.getContextState();
+      ControllerState dependentState = state;
+      if (dependentState == null)
+         dependentState = ControllerState.INSTALLED;
+
+      DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState);
+      visitor.addDependency(item);
+
+      super.describeVisit(visitor);
+   }
+
+   @XmlAttribute(name="bean")
+   @JBossXmlAttribute(type=String.class)
+   public void setValue(Object value)
+   {
+      super.setValue(value);
+   }
+
+   @XmlAnyElement
+   @ManagementProperty(ignored = true)
+   public void setValueObject(Object value)
+   {
+      if (value == null)
+         setValue(null);
+      else if (value instanceof ValueMetaData)
+         setValue(value);
+      else
+         setValue(new AbstractValueMetaData(value));
+   }
+
+   @XmlAttribute
+   public void setState(ControllerState state)
+   {
+      this.state = state;
+   }
+
+   @XmlAttribute(name = "type")
+   public void setSearch(Search search)
+   {
+      this.search = search;
+   }
+
+   @XmlAttribute
+   public void setProperty(String property)
+   {
+      this.property = property;
+   }
+
+   public void toString(JBossStringBuilder buffer)
+   {
+      super.toString(buffer);
+      buffer.append("search=").append(search);
+   }
+
+   public void toShortString(JBossStringBuilder buffer)
+   {
+      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/org/jboss/beans/metadata/plugins/policy/AbstractBindingMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/policy/AbstractBindingMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/policy/AbstractBindingMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -22,7 +22,6 @@
 package org.jboss.beans.metadata.plugins.policy;
 
 import java.io.Serializable;
-
 import javax.xml.bind.annotation.XmlAnyElement;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
@@ -39,6 +38,7 @@
 import org.jboss.beans.metadata.plugins.AbstractSetMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractSearchValueMetaData;
 import org.jboss.beans.metadata.plugins.StringValueMetaData;
 import org.jboss.beans.metadata.plugins.ThisValueMetaData;
 import org.jboss.beans.metadata.plugins.ValueMetaDataAware;
@@ -94,6 +94,7 @@
       @XmlElement(name="array", type=AbstractArrayMetaData.class),
       @XmlElement(name="collection", type=AbstractCollectionMetaData.class),
       @XmlElement(name="inject", type=AbstractInjectionValueMetaData.class),
+      @XmlElement(name="search", type= AbstractSearchValueMetaData.class),
       @XmlElement(name="list", type=AbstractListMetaData.class),
       @XmlElement(name="map", type=AbstractMapMetaData.class),
       @XmlElement(name="null", type=AbstractValueMetaData.class),

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchPropertyAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchPropertyAnnotationPlugin.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchPropertyAnnotationPlugin.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -21,13 +21,8 @@
 */
 package org.jboss.kernel.plugins.annotations;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Arrays;
-
 import org.jboss.beans.metadata.api.annotations.Search;
 import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.dependency.spi.ControllerState;
 
 /**
  * Search value annotation plugin.
@@ -38,17 +33,6 @@
 {
    public final static SearchPropertyAnnotationPlugin INSTANCE = new SearchPropertyAnnotationPlugin();
 
-   private static final Map<String, org.jboss.dependency.plugins.graph.Search> types;
-
-   static
-   {
-      types = new HashMap<String,org.jboss.dependency.plugins.graph.Search>();
-      for (org.jboss.dependency.plugins.graph.Search search : org.jboss.dependency.plugins.graph.Search.values())
-      {
-         types.put(search.getType().toUpperCase(), search);
-      }
-   }
-
    protected SearchPropertyAnnotationPlugin()
    {
       super(Search.class);
@@ -56,23 +40,6 @@
 
    public ValueMetaData createValueMetaData(Search search)
    {
-      String searchType = search.type();
-      org.jboss.dependency.plugins.graph.Search type = types.get(searchType.toUpperCase());
-      if (type == null)
-         throw new IllegalArgumentException("No such search type: " + searchType + ", available: " + Arrays.toString(org.jboss.dependency.plugins.graph.Search.values()));
-
-      ControllerState state = null;
-      if (isAttributePresent(search.dependentState()))
-         state = new ControllerState(search.dependentState());
-      String property= null;
-      if (isAttributePresent(search.property()))
-         property = search.property();
-
-      return new SearchValueMetaData(
-            search.bean(),
-            state,
-            type,
-            property
-      );
+      return ValueUtil.createValueMetaData(search);
    }
 }
\ No newline at end of file

Deleted: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchValueMetaData.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/SearchValueMetaData.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -1,165 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2006, 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.annotations;
-
-import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitor;
-import org.jboss.dependency.plugins.AbstractDependencyItem;
-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.DependencyItem;
-import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
-import org.jboss.dependency.spi.graph.GraphController;
-import org.jboss.reflect.spi.TypeInfo;
-import org.jboss.util.JBossStringBuilder;
-
-/**
- * Search value metadata.
- *
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class SearchValueMetaData extends AbstractValueMetaData
-{
-   /** The serialVersionUID */
-   private static final long serialVersionUID = 1L;
-   
-   private ControllerState state;
-   private org.jboss.dependency.plugins.graph.Search search;
-   private String property;
-
-   private ControllerContext context;
-
-   public SearchValueMetaData(Object value, ControllerState state, Search search, String property)
-   {
-      super(value);
-      if (search == null)
-         throw new IllegalArgumentException("Null search type");
-      
-      this.state = state;
-      this.search = search;
-      this.property = property;
-   }
-
-   public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
-   {
-      // we're here, so it must be GraphController instance
-      Controller controller = context.getController();
-      GraphController gc = (GraphController)controller;
-
-      ControllerState dependentState = state;
-      if (dependentState == null)
-         dependentState = ControllerState.INSTALLED;
-      ControllerContext context = gc.getContext(getUnderlyingValue(), dependentState, search);
-
-      Object result;
-      if (property != null && property.length() > 0)
-      {
-         if (context instanceof AttributeDispatchContext)
-         {
-            AttributeDispatchContext adc = (AttributeDispatchContext)context;
-            result = adc.get(property);
-         }
-         else
-            throw new IllegalArgumentException(
-                  "Cannot use property attribute, context is not AttributeDispatchContext: " + context +
-                  ", metadata: " + this);
-      }
-      else
-      {
-         result = context.getTarget();
-      }
-
-      return info != null ? info.convertValue(result) : result;
-   }
-
-   public void initialVisit(MetaDataVisitor visitor)
-   {
-      context = visitor.getControllerContext();
-
-      super.initialVisit(visitor);
-   }
-
-   public void describeVisit(MetaDataVisitor visitor)
-   {
-      Object name = context.getName();
-      Object iDependOn = getUnderlyingValue();
-
-      ControllerState whenRequired = visitor.getContextState();
-      ControllerState dependentState = state;
-      if (dependentState == null)
-         dependentState = ControllerState.INSTALLED;
-
-      DependencyItem item = new SearchDependencyItem(name, iDependOn, whenRequired, dependentState);
-      visitor.addDependency(item);
-
-      super.describeVisit(visitor);
-   }
-
-   public void toString(JBossStringBuilder buffer)
-   {
-      super.toString(buffer);
-      buffer.append("search=").append(search);
-   }
-
-   public void toShortString(JBossStringBuilder buffer)
-   {
-      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/org/jboss/kernel/plugins/annotations/ValueUtil.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java	2008-08-11 12:42:15 UTC (rev 76911)
@@ -23,6 +23,9 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.jboss.beans.metadata.api.annotations.Inject;
 import org.jboss.beans.metadata.api.annotations.NullValue;
@@ -32,12 +35,14 @@
 import org.jboss.beans.metadata.api.annotations.Value;
 import org.jboss.beans.metadata.api.annotations.ValueFactory;
 import org.jboss.beans.metadata.api.annotations.JavaBeanValue;
+import org.jboss.beans.metadata.api.annotations.Search;
 import org.jboss.beans.metadata.api.model.FromContext;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.beans.metadata.spi.ParameterMetaData;
 import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
 import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
+import org.jboss.beans.metadata.plugins.AbstractSearchValueMetaData;
 import org.jboss.dependency.spi.ControllerState;
 
 /**
@@ -47,6 +52,18 @@
  */
 final class ValueUtil
 {
+   /** The search types */
+   private static final Map<String, org.jboss.dependency.plugins.graph.Search> types;
+
+   static
+   {
+      types = new HashMap<String,org.jboss.dependency.plugins.graph.Search>();
+      for (org.jboss.dependency.plugins.graph.Search search : org.jboss.dependency.plugins.graph.Search.values())
+      {
+         types.put(search.getType().toUpperCase(), search);
+      }
+   }
+
    /**
     * Does value already exist.
     *
@@ -242,4 +259,32 @@
       factory.setWhenRequiredState(new ControllerState(annotation.whenRequiredState()));
       return factory;
    }
+
+   /**
+    * Create search value meta data.
+    *
+    * @param annotation the annotation
+    * @return search meta data
+    */
+   static ValueMetaData createValueMetaData(Search annotation)
+   {
+      String searchType = annotation.type();
+      org.jboss.dependency.plugins.graph.Search type = types.get(searchType.toUpperCase());
+      if (type == null)
+         throw new IllegalArgumentException("No such search type: " + searchType + ", available: " + Arrays.toString(org.jboss.dependency.plugins.graph.Search.values()));
+
+      ControllerState state = null;
+      if (isAttributePresent(annotation.dependentState()))
+         state = new ControllerState(annotation.dependentState());
+      String property = null;
+      if (isAttributePresent(annotation.property()))
+         property = annotation.property();
+
+      return new AbstractSearchValueMetaData(
+            annotation.bean(),
+            state,
+            type,
+            property
+      );
+   }
 }

Modified: projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd	2008-08-11 12:42:15 UTC (rev 76911)
@@ -83,6 +83,11 @@
             <xsd:extension base="injectionType"/>
          </xsd:complexContent>
       </xsd:complexType>
+      <xsd:complexType name="searchType">
+         <xsd:complexContent>
+            <xsd:extension base="searchType"/>
+         </xsd:complexContent>
+      </xsd:complexType>
       <xsd:complexType name="valueFactoryType">
          <xsd:complexContent>
             <xsd:extension base="valueFactoryType"/>

Modified: projects/microcontainer/trunk/kernel/src/resources/main/schema/jboss-beans-common_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/main/schema/jboss-beans-common_2_0.xsd	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/resources/main/schema/jboss-beans-common_2_0.xsd	2008-08-11 12:42:15 UTC (rev 76911)
@@ -411,6 +411,23 @@
       <xsd:attribute name="fromContext" type="contextType" use="optional"/>
    </xsd:complexType>
 
+   <xsd:complexType name="searchType">
+      <xsd:annotation>
+         <xsd:documentation>
+           <![CDATA[
+           e.g. Search injection - by scope.
+           <bean name="InjectedIntoMe" ...>
+              <property name="transactionManager"><search bean="someTMbean" type="top"/></property>
+           </bean>
+           ]]>
+         </xsd:documentation>
+      </xsd:annotation>
+      <xsd:attribute name="bean" type="xsd:string" use="required"/>
+      <xsd:attribute name="property" type="xsd:string" use="optional"/>
+      <xsd:attribute name="state" type="controllerStateType" use="optional"/>
+      <xsd:attribute name="type" type="searchTypeType" use="required"/>
+   </xsd:complexType>
+
    <xsd:complexType name="valueFactoryType">
       <xsd:annotation>
          <xsd:documentation>
@@ -1068,6 +1085,31 @@
       </xsd:restriction>
    </xsd:simpleType>
 
+   <xsd:simpleType name="searchTypeType">
+      <xsd:annotation>
+         <xsd:documentation>
+            <![CDATA[
+            You can set the search lookup by type:
+            Valid values include:
+             DEFAULT,
+             LOCAL,
+             TOP,
+             PARENT_ONLY,
+             PARENT,
+             DEPTH,
+             LEAVES,
+             WIDTH,
+             CHILD_ONLY_DEPTH,
+             CHILD_ONLY_LEAVES,
+             CHILD_ONLY_WIDTH
+            ]]>
+         </xsd:documentation>
+      </xsd:annotation>
+      <xsd:restriction base="xsd:string">
+         <xsd:whiteSpace value="collapse"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+
    <xsd:simpleType name="optionType">
       <xsd:annotation>
          <xsd:documentation>

Modified: projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingOverrideTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingOverrideTestCase.xml	2008-08-11 07:33:40 UTC (rev 76910)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingOverrideTestCase.xml	2008-08-11 12:42:15 UTC (rev 76911)
@@ -6,7 +6,7 @@
    <bean name="deploy1" class="org.jboss.test.kernel.deployment.support.SimpleObjectWithBean">
       <annotation>@org.jboss.metadata.plugins.scope.ApplicationScope("testApp")</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.DeploymentScope("deployment1")</annotation>
-      <property name="simpleBean"><inject bean="simple"/></property>
+      <property name="simpleBean"><search bean="simple" type="local"/></property>
    </bean>
 
    <bean name="deploy2" class="org.jboss.test.kernel.deployment.support.SimpleObjectWithBean">
@@ -15,8 +15,15 @@
       <property name="simpleBean"><inject bean="simple"/></property>
    </bean>
 
+  <bean name="simple2" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
+    <annotation>@org.jboss.beans.metadata.api.annotations.Aliases({"simple"})</annotation>
+     <constructor>
+        <parameter>main</parameter>
+     </constructor>
+  </bean>
 
-   <bean name="simple" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
+   <bean name="simple1" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
+      <annotation>@org.jboss.beans.metadata.api.annotations.Aliases({"simple"})</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.ApplicationScope("testApp")</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.DeploymentScope("deployment1")</annotation>
       <constructor>
@@ -24,10 +31,4 @@
       </constructor>
    </bean>
 
-   <bean name="simple" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
-      <constructor>
-         <parameter>main</parameter>
-      </constructor>
-   </bean>
-
 </deployment>




More information about the jboss-cvs-commits mailing list