[jboss-cvs] JBossAS SVN: r96942 - in projects/kernel/trunk/kernel: src/main/java/org/jboss/beans/metadata/plugins and 11 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 25 05:36:04 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-11-25 05:36:03 -0500 (Wed, 25 Nov 2009)
New Revision: 96942

Added:
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/QualifierType.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiedClassDependencyItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchQualifiedClassDependencyItem.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierCloneTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Bean.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Target.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetBean.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetConstructorBean.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetMethodBean.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetPropertyBean.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/AbstractQualifiersTest.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersTestSuite.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnabled.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnableds.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithNameFails.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithSuppliedType.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWrongTypeFails.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierConstructorParameterInjectWithEnabled.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierMethodParameterInjectWithEnabled.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithEnableds.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithNameFail.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeConstructorQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeMethodQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositePropertyQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleConstructorQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleMethodQualifiers.xml
   projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimplePropertyQualifiers.xml
Modified:
   projects/kernel/trunk/kernel/pom.xml
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/InstantiateAction.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PreInstallAction.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/KernelTestSuite.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/XMLTestSuite.java
Log:
[JBKERNEL-63] Initial qualifiers support

Modified: projects/kernel/trunk/kernel/pom.xml
===================================================================
--- projects/kernel/trunk/kernel/pom.xml	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/pom.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -124,6 +124,10 @@
       <artifactId>jbossxb</artifactId>
     </dependency>
     <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.jboss.test</groupId>
       <artifactId>jboss-test</artifactId>
       <optional>true</optional>

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanMetaData.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -21,22 +21,25 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import static org.jboss.beans.metadata.plugins.CloneUtil.cloneList;
+import static org.jboss.beans.metadata.plugins.CloneUtil.cloneObject;
+import static org.jboss.beans.metadata.plugins.CloneUtil.cloneSet;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
 import org.jboss.beans.info.spi.BeanAccessMode;
 import org.jboss.beans.metadata.api.model.AutowireType;
-import static org.jboss.beans.metadata.plugins.CloneUtil.cloneList;
-import static org.jboss.beans.metadata.plugins.CloneUtil.cloneObject;
-import static org.jboss.beans.metadata.plugins.CloneUtil.cloneSet;
 import org.jboss.beans.metadata.spi.AliasMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
@@ -50,8 +53,8 @@
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
 import org.jboss.beans.metadata.spi.SupplyMetaData;
-import org.jboss.beans.metadata.spi.RelatedClassMetaData;
 import org.jboss.dependency.plugins.AbstractDependencyItem;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
@@ -359,7 +362,9 @@
       return related;
    }
 
-   @XmlElement(name="related-class", type=AbstractRelatedClassMetaData.class)
+   @XmlElements({
+      @XmlElement(name="related-class", type=AbstractRelatedClassMetaData.class),
+      @XmlElement(name="qualifier", type=AbstractBeanQualifierMetaData.class)})
    public void setRelated(Set<RelatedClassMetaData> related)
    {
       this.related = related;

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractBeanQualifierMetaData.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,60 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.beans.metadata.plugins;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.beans.metadata.spi.QualifierType;
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at XmlType(name="qualifierType")
+public class AbstractBeanQualifierMetaData extends AbstractInjectQualifierMetaData
+{
+   private static final long serialVersionUID = 1L;
+   
+   protected QualifierType type = QualifierType.SUPPLIED;
+
+   @Override
+   public String getClassName()
+   {
+      if (type == QualifierType.SUPPLIED)
+         return QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY;
+      return QualifiersMdrUtil.WANTED_QUALIFIER_KEY;
+   }
+
+   public QualifierType getType()
+   {
+      return type;
+   }
+
+   @XmlAttribute(name="type")
+   public void setType(QualifierType type)
+   {
+      this.type = type;
+   }
+}

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectQualifierMetaData.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.beans.metadata.plugins;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at XmlType(name="qualifierType")
+public class AbstractInjectQualifierMetaData extends AbstractRelatedClassMetaData
+{
+   private static final long serialVersionUID = 1L;
+   
+   @Override
+   public String getClassName()
+   {
+      return QualifiersMdrUtil.WANTED_QUALIFIER_KEY;
+   }
+
+   @Override
+   @XmlAttribute(name="name")
+   public void setClassName(String classname)
+   {
+      throw new IllegalStateException("Class name can not be set for qualifiers");
+   }
+}

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractInjectionValueMetaData.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -21,7 +21,11 @@
 */
 package org.jboss.beans.metadata.plugins;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
@@ -30,11 +34,15 @@
 import org.jboss.beans.metadata.api.model.InjectOption;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
 import org.jboss.dependency.plugins.AttributeCallbackItem;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.kernel.plugins.dependency.ClassAndQualifierKey;
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
 import org.jboss.kernel.plugins.dependency.SearchClassContextDependencyItem;
+import org.jboss.kernel.plugins.dependency.SearchQualifiedClassDependencyItem;
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
@@ -43,7 +51,7 @@
  *
  * @author <a href="ales.justin at gmail.com">Ales Justin</a>
  */
- at XmlType(name="injectionType")
+ at XmlType(name="injectionType", propOrder="injectionPointQualifiers")
 public class AbstractInjectionValueMetaData extends AbstractDependencyValueMetaData
 {
    private static final long serialVersionUID = 3L;
@@ -53,6 +61,16 @@
    protected InjectOption injectionOption = InjectOption.STRICT;
 
    protected FromContext fromContext;
+   
+   /** Used as the key to get the injected context when qualifiers are present */
+   protected ClassAndQualifierKey classAndQualifierMatcher;
+   
+//   protected Set<RelatedClassMetaData> injectionPointQualifierMetaData;
+   
+//   protected Set<Object> injectionPointQualifiers;
+  
+   /** Qualifiers specified on the injection point. If not present the context's wanted qualifiers from the MDR metadata is used */
+   protected Set<RelatedClassMetaData> injectionPointQualifiers;
 
    /**
     * Simplyifies things with AutowireType.BY_NAME
@@ -130,8 +148,28 @@
    {
       this.propertyMetaData = propertyMetaData;
    }
+   
+   /**
+    * Get the injectionPointQualifiers
+    * @return the injectionPointQualifiers
+    */
+   @XmlElement(name="qualifier", type=AbstractInjectQualifierMetaData.class)
+   public Set<RelatedClassMetaData> getInjectionPointQualifiers()
+   {
+      return injectionPointQualifiers;
+   }
 
    /**
+    * Set the injectionPointQualifiers
+    * @param injectionPointQualifiers the injectionPointQualifiers to set
+    */
+   @XmlElement(name="qualifier", type=AbstractInjectQualifierMetaData.class)
+   public void setInjectionPointQualifiers(Set<RelatedClassMetaData> injectionPointQualifiers)
+   {
+      this.injectionPointQualifiers = injectionPointQualifiers;
+   }
+
+   /**
     * Add install/callback item.
     *
     * @param name the callback name
@@ -180,7 +218,8 @@
       // by class type
       if (getUnderlyingValue() == null)
       {
-         ControllerContext lookup = getControllerContext(info.getType(), ControllerState.INSTALLED);
+         Object key = classAndQualifierMatcher == null ? info.getType() : classAndQualifierMatcher;
+         ControllerContext lookup = getControllerContext(key, ControllerState.INSTALLED);
          if (lookup == null)
          {
             if (InjectOption.STRICT.equals(injectionOption))
@@ -207,7 +246,8 @@
    {
       if (getUnderlyingValue() == null)
       {
-         ControllerContext lookup = getControllerContext(info.getType(), ControllerState.INSTALLED);
+         Object key = classAndQualifierMatcher == null ? info.getType() : classAndQualifierMatcher;
+         ControllerContext lookup = getControllerContext(key, ControllerState.INSTALLED);
          if (lookup != null)
          {
             ungetTarget(context, lookup);
@@ -307,12 +347,7 @@
                      {
                         whenRequired = visitor.getContextState();
                      }
-                     DependencyItem item = new SearchClassContextDependencyItem(
-                           context.getName(),
-                           injectionClass,
-                           whenRequired,
-                           dependentState,
-                           search);
+                     DependencyItem item = createDependencyItem(injectionClass, whenRequired);
                      visitor.addDependency(item);
                   }
                   else
@@ -342,6 +377,37 @@
       super.describeVisit(visitor);
    }
 
+   private DependencyItem createDependencyItem(Class<?> injectionClass, ControllerState whenRequired)
+   {
+      boolean hasQualifiers = injectionPointQualifiers != null && injectionPointQualifiers.size() > 0;
+      if (!hasQualifiers)
+         hasQualifiers = QualifiersMdrUtil.hasWantedQualifiersInParentMdrOrBeanMetaData(context);
+      
+      if (!hasQualifiers)
+         return new SearchClassContextDependencyItem(
+               context.getName(),
+               injectionClass,
+               whenRequired,
+               dependentState,
+               search);
+      else
+      {
+         Set<Object> qualifiers = null;
+         if (injectionPointQualifiers != null && injectionPointQualifiers.size() > 0)
+         {
+            qualifiers = new HashSet<Object>(injectionPointQualifiers.size());
+            for (RelatedClassMetaData rcmd : injectionPointQualifiers)
+               qualifiers.addAll(rcmd.getEnabled());
+         }
+         classAndQualifierMatcher = new ClassAndQualifierKey(dependentState, context, qualifiers, injectionClass);
+         return new SearchQualifiedClassDependencyItem(context.getName(), 
+               classAndQualifierMatcher,
+               whenRequired, 
+               dependentState, 
+               search);
+      }
+   }
+   
    public void toString(JBossStringBuilder buffer)
    {
       super.toString(buffer);

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/QualifierType.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/QualifierType.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/spi/QualifierType.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,34 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.beans.metadata.spi;
+
+import javax.xml.bind.annotation.XmlEnumValue;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public enum QualifierType {
+   @XmlEnumValue("Supplied") SUPPLIED, 
+   @XmlEnumValue("Wanted") WANTED
+}

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -107,7 +107,9 @@
    public KernelRegistryEntry getEntry(Object name)
    {
       List<KernelControllerContext> list;
-      if (name instanceof Matcher)
+      if (name instanceof ClassAndQualifierKey)
+         return ((ClassAndQualifierKey)name).search(this);
+      else if (name instanceof Matcher)
          list = matchSupplies((Matcher)name);
       else
          list = suppliers.get(name);

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAndQualifierKey.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,220 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.kernel.plugins.dependency;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.util.JBossObject;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassAndQualifierKey extends JBossObject
+{
+   /** The type of class we are looking for */
+   private final Class<?> type;
+   
+   /** The state of the dependency */
+   private final ControllerState dependentState;
+   
+   /** The context containing the wanted qualifiers */
+   private final KernelControllerContext context;
+   
+   private final Set<Object> injectionPointQualifiers;
+   
+   public ClassAndQualifierKey(ControllerState dependentState, KernelControllerContext context, Set<Object> injectionPointQualifiers, Class<?> type)
+   {
+      this.dependentState = dependentState == null ? ControllerState.INSTALLED : dependentState;
+      this.context = context;
+      this.injectionPointQualifiers = injectionPointQualifiers != null && injectionPointQualifiers.size() > 0 ? injectionPointQualifiers : null;
+      this.type = type;
+   }
+   
+   /**
+    * Look for a context in the controller.
+    */
+   public KernelControllerContext search(KernelController controller)
+   {
+      Set<ControllerContext> contexts = controller.getContexts(type, dependentState);
+      
+      if (contexts == null || contexts.size() == 0)
+         return null;
+
+      List<ControllerContext> found;
+      if (injectionPointQualifiers != null)
+         found = getContextsWithAllQualifiers(injectionPointQualifiers, contexts);
+      else
+      {
+         Set<Object> qualifiers = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(context);
+         if (qualifiers == null || qualifiers.size() == 0)
+            return getFirstContext(contexts);
+         
+         found = getContextsWithMostQualifiers(qualifiers, contexts);
+      }
+      return getFirstContext(found);
+   }
+   
+   private KernelControllerContext getFirstContext(Collection<? extends ControllerContext> contexts)
+   {
+      if (contexts.size() == 0)
+         return null;
+      
+      KernelControllerContext found = null;
+      if (contexts.size() > 0)
+      {
+         for (ControllerContext context : contexts)
+         {
+            if (context instanceof KernelControllerContext)
+            {
+               if (found != null)
+               {
+                  log.warn("Multiple beans match qualifiers and class [enable trace log for details]: " + type);
+                  if (log.isTraceEnabled())
+                  {
+                     log.trace(this + ". Matching contexts: " + contexts);
+                  }
+                  return null;
+               }
+               found = (KernelControllerContext)context;
+            }
+         }
+      }
+      
+      return found;
+   }
+   
+   private List<ControllerContext> getContextsWithAllQualifiers(Set<Object> qualifiers, Set<ControllerContext> contexts)
+   {
+      List<ControllerContext> found = new ArrayList<ControllerContext>();
+      
+      for (ControllerContext context : contexts)
+      {
+         Set<Object> suppliedQualifiers = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(context);
+         if (suppliedQualifiers == null || suppliedQualifiers.size() == 0)
+            continue;
+         
+         boolean hasAllQualifiers = true;
+         for (Object wanted : qualifiers)
+         {
+            boolean matched = false;
+            for (Object supplied : suppliedQualifiers)
+            {
+               if (equals(supplied, wanted))
+               {
+                  matched = true;
+                  break;
+               }
+            }
+            if (!matched)
+            {
+               hasAllQualifiers = false;
+               break;
+            }
+         }
+         
+         if (hasAllQualifiers)
+            found.add(context);
+      }
+      return found;
+   }
+   
+   private List<ControllerContext> getContextsWithMostQualifiers(Set<Object> qualifiers, Set<ControllerContext> contexts)
+   {
+      int max = 0;
+      List<ControllerContext> found = new ArrayList<ControllerContext>();
+      
+      for (ControllerContext context : contexts)
+      {
+         Set<Object> suppliedQualifiers = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(context);
+         if (suppliedQualifiers == null || suppliedQualifiers.size() == 0)
+            continue;
+         
+         
+         int matches = 0;
+         boolean allTargetQualifiersMatched = true;
+         for (Object supplied : suppliedQualifiers)
+         {
+            boolean matched = false;
+            for (Object wanted : qualifiers)
+            {
+               if (equals(supplied, wanted))
+               {
+                  matched = true;
+                  break;
+               }
+            }
+            if (matched)
+               matches++;
+            else
+            {
+               allTargetQualifiersMatched = false;
+               break;
+            }
+         }
+         
+         if (allTargetQualifiersMatched)
+         {
+            if (matches > max)
+            {
+               found.clear();
+               found.add(context);
+               max = matches;
+            }
+            else if (matches == max)
+            {
+               found.add(context);
+            }
+         }
+      }
+      return found;
+   }
+
+
+   @Override
+   protected void toString(JBossStringBuilder buffer)
+   {
+      buffer.append("class=");
+      buffer.append(type);
+      buffer.append(" qualifiers=");
+      buffer.append(QualifiersMdrUtil.mergeWantedQualifiersFromMdr(context));
+   }
+
+   @Override
+   public void toShortString(JBossStringBuilder buffer)
+   {
+      toString(buffer);
+   }
+   
+   
+   
+   
+}

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/InstantiateAction.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/InstantiateAction.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/InstantiateAction.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -91,6 +91,8 @@
             // re-register
             repository.addMetaData(context);
 
+            QualifiersMdrUtil.addQualifiersToMdr(context);
+            
             // handle custom annotations
             applyAnnotations(context);
          }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PreInstallAction.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PreInstallAction.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/PreInstallAction.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -107,6 +107,7 @@
             removeMetaData(context);
             throw t;
          }
+         QualifiersMdrUtil.addQualifiersToMdr(context);
       }
    }
 
@@ -183,6 +184,7 @@
 
    protected void uninstallActionInternal(KernelControllerContext context)
    {
+      QualifiersMdrUtil.removeQualifiersFromMdr(context);
       try
       {
          removeScoping(context);

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiedClassDependencyItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiedClassDependencyItem.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiedClassDependencyItem.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,72 @@
+/*
+* 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.dependency;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * A qualified class dependant dependencyItem.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ */
+public abstract class QualifiedClassDependencyItem extends AbstractDependencyItem
+{
+   public QualifiedClassDependencyItem(Object name, ClassAndQualifierKey classAndQualifierMatcher, ControllerState whenRequired, ControllerState dependentState)
+   {
+      super(name, classAndQualifierMatcher, whenRequired, dependentState);
+   }
+
+   @SuppressWarnings("unchecked")
+   protected Class<?> getDemandClass()
+   {
+      return (Class)getIDependOn();
+   }
+
+   /**
+    * Clear the class reference.
+    *  
+    * @param controller the controller
+    */
+   public void clear(Controller controller)
+   {
+      setIDependOn(null);
+   }
+
+   public void toString(JBossStringBuilder buffer)
+   {
+      super.toString(buffer);
+      buffer.append(" demandClassQualifier=").append(getIDependOn());
+   }
+
+   public void toShortString(JBossStringBuilder buffer)
+   {
+      buffer.append(getName()).append(" demandClassQualifier ").append(getIDependOn());
+   }
+
+   public String toHumanReadableString()
+   {
+      return getIDependOn() + " (NOTE: using autowiring to resolve this dependency)";
+   }
+}

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,266 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.kernel.plugins.dependency;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metadata.spi.MutableMetaData;
+import org.jboss.metadata.spi.repository.MetaDataRepository;
+import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
+import org.jboss.metadata.spi.retrieval.MetaDataItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.util.collection.ConcurrentSet;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class QualifiersMdrUtil
+{
+   private final static Logger log = Logger.getLogger(QualifiersMdrUtil.class);
+
+   /** The key under which we will store a contexts supplied qualifier metadata */
+   public final static String SUPPLIED_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#SUPPLIED_QUALIFIERS";
+
+   /** The key under which we will store a contexts wanted qualifier metadata */
+   public final static String WANTED_QUALIFIER_KEY = QualifiersMdrUtil.class.getSimpleName() + "#WANTED_QUALIFIERS";
+
+   /**
+    * Get the wanted qualifiers defined from the bean's metadata or in the Mdr.
+    * This method is used when creating dependency items, which is before the Mdr
+    * has been set up for a context.
+    * 
+    * @return a set of related class metadata, where RelatedClassMetaData.getEnabled() contains the qualifiers
+    */
+   public static boolean hasWantedQualifiersInParentMdrOrBeanMetaData(KernelControllerContext context)
+   {
+      Set<RelatedClassMetaData> md = getQualifiersMetaData(context, WANTED_QUALIFIER_KEY);
+      if (md != null && md.size() > 0)
+         return true;
+
+      MetaDataRepository repository = context.getKernel().getMetaDataRepository().getMetaDataRepository();
+      ScopeKey key = context.getScopeInfo().getScope();
+      while (key != null)
+      {
+         MetaData metaData = repository.getMetaData(key);
+         if (metaData != null)
+         {
+            if (metaData.getMetaData(WANTED_QUALIFIER_KEY) != null)
+               return true;
+         }
+         key = key.getParent();
+      }
+      
+      return false;
+   }
+   
+   /**
+    * Adds the qualifiers for a context's bean metadata to the context's MDR metadata. 
+    * 
+    * @param context the context 
+    */
+   public static void addQualifiersToMdr(KernelControllerContext context)
+   {
+      Set<RelatedClassMetaData> qualifiers = context.getBeanMetaData().getRelated();
+      
+      if (qualifiers != null && qualifiers.size() > 0)
+      {
+         MetaDataRetrieval retrieval = context.getKernel().getMetaDataRepository().getMetaDataRepository().getMetaDataRetrieval(context.getScopeInfo().getMutableScope());
+         if (retrieval instanceof MutableMetaData == false)
+         {
+            log.warn("Can not add qualifier to non mutable metadata" + context +  ":" + retrieval);
+            return;
+         }
+
+         Set<Object> suppliedSet = null;
+         Set<Object> wantedSet = null;
+         for (RelatedClassMetaData rcmd : qualifiers)
+         {
+            if (rcmd.getClassName().equals(SUPPLIED_QUALIFIER_KEY))
+            {
+               if (suppliedSet == null)
+                  suppliedSet = getQualifiersSet(retrieval, SUPPLIED_QUALIFIER_KEY, true); 
+               for (Object qualifier : rcmd.getEnabled())
+                  suppliedSet.add(qualifier);
+            }
+            else if (rcmd.getClassName().equals(WANTED_QUALIFIER_KEY))
+            {
+               if (wantedSet == null)
+                  wantedSet = getQualifiersSet(retrieval, WANTED_QUALIFIER_KEY, true);
+               for (Object qualifier : rcmd.getEnabled())
+                  wantedSet.add(qualifier);
+            }
+         }
+      }
+   }
+   
+   /**
+    * Removes the qualifiers for a context's bean metadata from the context's MDR metadata. 
+    * 
+    * @param context the context 
+    */
+   public static void removeQualifiersFromMdr(KernelControllerContext context)
+   {
+      Set<RelatedClassMetaData> qualifiers =  context.getBeanMetaData().getRelated();
+      
+      if (qualifiers != null && qualifiers.size() > 0)
+      {
+         MetaDataRetrieval retrieval = context.getKernel().getMetaDataRepository().getMetaDataRepository().getMetaDataRetrieval(context.getScopeInfo().getMutableScope());
+         if (retrieval instanceof MutableMetaData == false)
+         {
+            log.warn("Can not remove qualifier from non mutable metadata" + context +  ":" + retrieval);
+            return;
+         }
+         
+         Set<Object> suppliedSet = getQualifiersSet(retrieval, SUPPLIED_QUALIFIER_KEY, false);
+         Set<Object> wantedSet = getQualifiersSet(retrieval, WANTED_QUALIFIER_KEY, false);
+         for (RelatedClassMetaData rcmd : qualifiers)
+         {
+            Set<Object> targetSet = null;
+            if (rcmd.getClassName().equals(SUPPLIED_QUALIFIER_KEY) && suppliedSet != null)
+               targetSet = suppliedSet;
+            else if (rcmd.getClassName().equals(WANTED_QUALIFIER_KEY) && wantedSet != null)
+               targetSet = wantedSet;
+            
+            if (targetSet != null)
+            {
+               for (Object qualifier : rcmd.getEnabled())
+                  targetSet.remove(qualifier);
+            }
+         }
+         if (suppliedSet != null && suppliedSet.size() == 0)
+            ((MutableMetaData)retrieval).removeMetaData(SUPPLIED_QUALIFIER_KEY, Set.class);
+         if (wantedSet != null && wantedSet.size() == 0)
+            ((MutableMetaData)retrieval).removeMetaData(WANTED_QUALIFIER_KEY, Set.class);
+      }
+   }
+   
+   /**
+    * Gets all the supplied qualifiers for the context from the MDR. The returned set combines the qualifiers 
+    * found at all scope levels
+    * 
+    * @param context the context 
+    * @return the found qualifiers
+    */
+   public static Set<Object> mergeSuppliedQualifiersFromMdr(ControllerContext context)
+   {
+      return mergeQualifiersFromMdr(context, SUPPLIED_QUALIFIER_KEY);
+   }
+   
+   /**
+    * Gets all the wanted qualifiers for the context from the MDR. The returned set combines the qualifiers 
+    * found at all scope levels
+    * 
+    * @param context the context 
+    * @return the found qualifiers
+    */
+   public static Set<Object> mergeWantedQualifiersFromMdr(ControllerContext context)
+   {
+      return mergeQualifiersFromMdr(context, WANTED_QUALIFIER_KEY);
+   }
+   
+   
+   private static Set<RelatedClassMetaData> getQualifiersMetaData(KernelControllerContext context, String key)
+   {
+      Set<RelatedClassMetaData> related = context.getBeanMetaData().getRelated();
+      if (related == null)
+         return null;
+      if (related.size() == 0)
+         return null;
+      
+      Set<RelatedClassMetaData> qualifiers = null; 
+      for (RelatedClassMetaData rcmd : related)
+      {
+         if (rcmd.getClassName().equals(key))
+         {
+            if (qualifiers == null)
+               qualifiers = new HashSet<RelatedClassMetaData>();
+            qualifiers.add(rcmd);
+         }
+      }
+      
+      return qualifiers;
+   }
+   
+   private static Set<Object> getQualifiersSet(MetaDataRetrieval retrieval, String key, boolean create)
+   {
+      MetaDataItem<?> item = retrieval.retrieveMetaData(key);
+      //TODO - The following is not threadsafe
+      Set<Object> set = null;
+      if (item == null)
+      {
+         if (create)
+         {
+            set = new ConcurrentSet<Object>();
+            ((MutableMetaData)retrieval).addMetaData(key, set, Set.class);
+         }
+         else
+         {
+            return null;
+         }
+      }
+      else
+      {
+         set = (Set<Object>)item.getValue();
+      }
+      return set;
+   }
+   
+   private static Set<Object> mergeQualifiersFromMdr(ControllerContext context, String key)
+   {
+      if (context instanceof KernelControllerContext == false)
+         return null;
+      
+      MutableMetaDataRepository repository = ((KernelControllerContext)context).getKernel().getMetaDataRepository().getMetaDataRepository();
+      ScopeKey scope = context.getScopeInfo().getScope();
+
+      Set<Object> set = null;
+      while (scope != null)
+      {
+         MetaData metaData = repository.getMetaData(scope);
+         if (metaData != null)
+         {
+            Set<Object> entry = metaData.getMetaData(key, Set.class);
+            if (entry != null)
+            {
+               if (set == null)
+                  set = entry;
+               else
+               {
+                  set = new HashSet<Object>(set);
+                  set.addAll(entry);
+               }
+            }
+         }         
+         scope = scope.getParent();
+      }
+      return set;
+   }
+}

Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchQualifiedClassDependencyItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchQualifiedClassDependencyItem.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/SearchQualifiedClassDependencyItem.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,57 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.kernel.plugins.dependency;
+
+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;
+import org.jboss.dependency.spi.graph.SearchInfo;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SearchQualifiedClassDependencyItem extends QualifiedClassDependencyItem
+{
+   private SearchInfo search;
+
+   public SearchQualifiedClassDependencyItem(Object name, ClassAndQualifierKey classAndQualifierMatcher,
+         ControllerState whenRequired, ControllerState dependentState, SearchInfo search)
+   {
+      super(name, classAndQualifierMatcher, whenRequired, dependentState);
+      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);
+   }
+}

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/KernelTestSuite.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/KernelTestSuite.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/KernelTestSuite.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -25,19 +25,19 @@
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 
+import org.jboss.test.kernel.annotations.test.AnnotationsTestSuite;
 import org.jboss.test.kernel.bootstrap.test.BootstrapTestSuite;
 import org.jboss.test.kernel.config.test.ConfigTestSuite;
 import org.jboss.test.kernel.controller.test.ControllerTestSuite;
 import org.jboss.test.kernel.dependency.test.DependencyTestSuite;
+import org.jboss.test.kernel.deployment.props.test.PropsTestSuite;
 import org.jboss.test.kernel.deployment.test.DeploymentTestSuite;
 import org.jboss.test.kernel.deployment.xml.test.XMLTestSuite;
-import org.jboss.test.kernel.deployment.props.test.PropsTestSuite;
 import org.jboss.test.kernel.event.test.EventTestSuite;
-import org.jboss.test.kernel.registry.test.RegistryTestSuite;
 import org.jboss.test.kernel.inject.test.ContextualInjectionTestSuite;
+import org.jboss.test.kernel.lazy.test.LazyTestSuite;
 import org.jboss.test.kernel.metadata.test.MetaDataTestSuite;
-import org.jboss.test.kernel.annotations.test.AnnotationsTestSuite;
-import org.jboss.test.kernel.lazy.test.LazyTestSuite;
+import org.jboss.test.kernel.registry.test.RegistryTestSuite;
 
 /**
  * Kernel Test Suite.

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierCloneTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierCloneTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierCloneTestCase.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,44 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.deployment.xml.test;
+
+import junit.framework.Test;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class QualifierCloneTestCase extends QualifierTestCase
+{
+
+   public QualifierCloneTestCase(String name)
+   {
+      super(name, true);
+   }
+
+   
+   public static Test suite()
+   {
+      return suite(QualifierCloneTestCase.class);
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,212 @@
+/*
+* 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.test.kernel.deployment.xml.test;
+
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Test;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.ConstructorMetaData;
+import org.jboss.beans.metadata.spi.InstallMetaData;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
+
+/**
+ * QualifierTestCase.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ */
+public class QualifierTestCase extends AbstractXMLTest
+{
+   
+   public static Test suite()
+   {
+      return suite(QualifierTestCase.class);
+   }
+
+   public QualifierTestCase(String name)
+   {
+      super(name);
+   }
+
+   protected QualifierTestCase(String name, boolean useClone)
+   {
+      super(name, useClone);
+   }
+
+   protected RelatedClassMetaData getRelated(String name) throws Exception
+   {
+      AbstractBeanMetaData bean = unmarshalBean(name);
+      return checkRelated(bean.getRelated());
+   }
+   
+   protected RelatedClassMetaData checkRelated(Set<RelatedClassMetaData> related)
+   {
+      assertNotNull(related);
+      assertEquals(1, related.size());
+      RelatedClassMetaData rcmd = related.iterator().next();
+      assertNotNull(rcmd);
+      return rcmd;
+   }
+
+   public void testBeanQualifierWithEnabled() throws Exception
+   {
+      RelatedClassMetaData related = getRelated("QualifierBeanWithEnabled.xml");
+      assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+
+   public void testBeanQualifierWithEnableds() throws Exception
+   {
+      RelatedClassMetaData related = getRelated("QualifierBeanWithEnableds.xml");
+      assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(2, enabled.size());
+      assertTrue(enabled.contains("123"));
+      assertTrue(enabled.contains("abc"));
+      
+      System.out.println(enabled);
+   }
+   
+   public void testBeanQualifierWithClassNameFails() throws Exception
+   {
+      try
+      {
+         getRelated("QualifierBeanWithNameFails.xml");
+         fail("Should not have accepted the 'name' attribute");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+
+   public void testBeanQualifierWithWantedType() throws Exception
+   {
+      RelatedClassMetaData related = getRelated("QualifierBeanWithWantedType.xml");
+      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+   
+   public void testBeanQualifierWithSuppliedType() throws Exception
+   {
+      RelatedClassMetaData related = getRelated("QualifierBeanWithSuppliedType.xml");
+      assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+   
+   public void testBeanQualifierWithWrongTypeFails() throws Exception
+   {
+      try
+      {
+         getRelated("QualifierBeanWithWrongTypeFails.xml");
+         fail("Should not have accepted the 'name' attribute");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+   
+   public void testInjectPropertyQualifierWithEnableds() throws Exception
+   {
+      AbstractBeanMetaData bean = unmarshalBean("QualifierPropertyInjectWithEnableds.xml");
+      boolean found = false;
+      for (PropertyMetaData property : bean.getProperties())
+      {  
+         found = true;
+         if (property.getName().equals("test"))
+         {
+            ValueMetaData valueMetaData = property.getValue();
+            assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
+            RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getInjectionPointQualifiers());
+            assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+            Set<Object> enabled = related.getEnabled();
+            assertNotNull(enabled);
+            assertEquals(2, enabled.size());
+        }
+      }
+      assertTrue(found);
+   }
+   
+   public void testInjectConstructorParameterWithEnabled() throws Exception
+   {
+      AbstractBeanMetaData bean = unmarshalBean("QualifierConstructorParameterInjectWithEnabled.xml");
+
+      ConstructorMetaData cmd = bean.getConstructor();
+      assertNotNull(cmd);
+      List<ParameterMetaData> params = cmd.getParameters();
+      assertNotNull(params);
+      assertEquals(1, params.size());
+      ValueMetaData valueMetaData = params.get(0).getValue();
+      assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
+      RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getInjectionPointQualifiers());
+      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+   
+   public void testInjectMethodParameterWithEnabled() throws Exception
+   {
+      AbstractBeanMetaData bean = unmarshalBean("QualifierMethodParameterInjectWithEnabled.xml");
+      List<InstallMetaData> installs = bean.getInstalls();
+      assertEquals(1, installs.size());
+      List<ParameterMetaData> params = installs.get(0).getParameters();
+      assertNotNull(params);
+      assertEquals(1, params.size());
+      ValueMetaData valueMetaData = params.get(0).getValue();
+      assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
+      RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getInjectionPointQualifiers());
+      assertEquals(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, related.getClassName());
+      Set<Object> enabled = related.getEnabled();
+      assertNotNull(enabled);
+      assertEquals(1, enabled.size());
+      assertEquals("aop", enabled.iterator().next());
+   }
+
+   public void testInjectPropertyQualifierWithClassNameFails() throws Exception
+   {
+      try
+      {
+         unmarshalBean("QualifierPropertyInjectWithNameFail.xml");
+         fail("Should not have accepted the 'name' attribute");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+}
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/XMLTestSuite.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/XMLTestSuite.java	2009-11-25 10:21:35 UTC (rev 96941)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/XMLTestSuite.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -51,6 +51,7 @@
       suite.addTest(ParameterTestCase.suite());
       suite.addTest(PropertyTestCase.suite());
       suite.addTest(RelatedClassTestCase.suite());
+      suite.addTest(QualifierTestCase.suite());
       suite.addTest(LifecycleTestCase.suite());
       suite.addTest(DependencyTestCase.suite());
       suite.addTest(DemandTestCase.suite());
@@ -106,6 +107,7 @@
       suite.addTest(ParameterCloneTestCase.suite());
       suite.addTest(PropertyCloneTestCase.suite());
       suite.addTest(RelatedClassCloneTestCase.suite());
+      suite.addTest(QualifierCloneTestCase.suite());
       suite.addTest(LifecycleCloneTestCase.suite());
       suite.addTest(DependencyCloneTestCase.suite());
       suite.addTest(DemandCloneTestCase.suite());

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Bean.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Bean.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Bean.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Bean
+{
+
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Target.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Target.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/Target.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface Target
+{
+   Bean getBean();
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetBean.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetBean.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetBean.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,46 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+import org.jboss.beans.metadata.api.annotations.Inject;
+
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TargetBean
+{
+   Bean bean;
+
+   public Bean getBean()
+   {
+      return bean;
+   }
+
+   @Inject
+   public void setBean(Bean bean)
+   {
+      this.bean = bean;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetConstructorBean.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetConstructorBean.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetConstructorBean.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,42 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TargetConstructorBean implements Target
+{
+   Bean bean;
+
+   public TargetConstructorBean(Bean bean)
+   {
+      this.bean = bean;
+   }
+   
+   public Bean getBean()
+   {
+      return bean;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetMethodBean.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetMethodBean.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetMethodBean.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,42 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TargetMethodBean implements Target
+{
+   Bean bean;
+
+   public void installBean(Bean bean)
+   {
+      this.bean = bean;
+   }
+   
+   public Bean getBean()
+   {
+      return bean;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetPropertyBean.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetPropertyBean.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/support/TargetPropertyBean.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,42 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TargetPropertyBean implements Target
+{
+   Bean bean;
+
+   public Bean getBean()
+   {
+      return bean;
+   }
+
+   public void setBean(Bean bean)
+   {
+      this.bean = bean;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/AbstractQualifiersTest.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/AbstractQualifiersTest.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/AbstractQualifiersTest.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,71 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.test;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractRelatedClassMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
+import org.jboss.test.kernel.junit.MicrocontainerTest;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AbstractQualifiersTest extends MicrocontainerTest
+{
+   public AbstractQualifiersTest(String name)
+   {
+      super(name);
+   }
+
+   protected void addSuppliedQualifiers(BeanMetaDataBuilder builder, Object...qualifiers)
+   {
+      addQualifiers(builder, QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, qualifiers);
+   }
+   
+   protected void addWantedQualifiers(BeanMetaDataBuilder builder, Object...qualifiers)
+   {
+      addQualifiers(builder, QualifiersMdrUtil.WANTED_QUALIFIER_KEY, qualifiers);      
+   }
+   
+   protected void addQualifiers(BeanMetaDataBuilder builder, String name, Object...qualifiers)
+   {
+      AbstractBeanMetaData bmd = (AbstractBeanMetaData)builder.getBeanMetaData();
+      Set<RelatedClassMetaData> relatedClassMetaDatas = bmd.getRelated();
+      if (relatedClassMetaDatas == null)
+      {
+         relatedClassMetaDatas = new HashSet<RelatedClassMetaData>();
+         bmd.setRelated(relatedClassMetaDatas);
+      }
+      AbstractRelatedClassMetaData metaData = new AbstractRelatedClassMetaData();
+      metaData.setClassName(name);
+      metaData.setEnabled(new HashSet<Object>(Arrays.asList(qualifiers)));
+      relatedClassMetaDatas.add(metaData);
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,476 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.test;
+
+import java.util.Collections;
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.jboss.beans.metadata.api.model.AutowireType;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.plugins.dependency.QualifiersMdrUtil;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.test.kernel.qualifiers.support.Bean;
+import org.jboss.test.kernel.qualifiers.support.TargetBean;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BeanQualifiersTestCase extends AbstractQualifiersTest
+{
+   public BeanQualifiersTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(BeanQualifiersTestCase.class);
+   }
+
+   public void testContextsMDRHasQualifiers() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other", "other2");
+      addWantedQualifiers(bean2Builder, "wanted1");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         
+         Set<Object> set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean1Context);         
+         assertNull(set);
+       
+         set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("other"));
+         assertTrue(set.contains("other2"));
+         assertEquals(2, set.size());
+         
+         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean1Context);         
+         assertNull(set);
+         
+         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("wanted1"));
+         assertEquals(1, set.size());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+   
+   public void testContextsMDRHasQualifiersFromAllLevels() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("wanted1"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      addWantedQualifiers(bean2Builder, "wanted2");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         Set<Object> set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean1Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("test"));
+         assertEquals(1, set.size());
+       
+         set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("other"));
+         assertTrue(set.contains("test"));
+         assertEquals(2, set.size());
+         
+         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean1Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("wanted1"));
+         assertEquals(1, set.size());
+         
+         set = QualifiersMdrUtil.mergeWantedQualifiersFromMdr(bean2Context);         
+         assertNotNull(set);
+         assertTrue(set.contains("wanted1"));
+         assertTrue(set.contains("wanted2"));
+         assertEquals(2, set.size());
+
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+   
+   public void testSimpleQualifier() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testAmbiguousQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+
+   public void testWantedQualifiersNotIncludingAllBeanQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test", "other");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreWantedQualifiersThanBeanQualifiers() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreWantedQualifiersThanBeanQualifiersMostSelected() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test", "other");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test", "other", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreWantedQualifiersThanBeanQualifiersMostSelected2() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test", "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test", "other", "mock");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         Bean bean2 = assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean2, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testMoreWantedQualifiersThanBeanQualifiersAmbiguity() throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test", "other");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testSuppliedQualifiersFromHigherLevel() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(targetContext);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+   
+   public void testSuppliedQualifiersFromHigherLevelAndInstance() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "other");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "else");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "test", "other");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+
+   public void testWantedQualifiersFromHigherLevel() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(targetContext);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+   
+   public void testWantedQualifiersFromHigherLevelAndInstance() throws Throwable
+   {
+      MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
+      loader.addMetaData(QualifiersMdrUtil.WANTED_QUALIFIER_KEY, Collections.singleton("test"), Set.class);
+      getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
+
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "other");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "else");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+      addWantedQualifiers(targetBuilder, "other");
+      KernelControllerContext targetContext = deploy(targetBuilder.getBeanMetaData());
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         TargetBean target = assertBean("target", TargetBean.class);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+         getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
+      }
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,396 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.test;
+
+import java.util.Collections;
+import java.util.HashSet;
+
+import junit.framework.Test;
+
+import org.jboss.beans.metadata.api.model.AutowireType;
+import org.jboss.beans.metadata.plugins.AbstractInjectQualifierMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.kernel.qualifiers.support.Bean;
+import org.jboss.test.kernel.qualifiers.support.Target;
+import org.jboss.test.kernel.qualifiers.support.TargetConstructorBean;
+import org.jboss.test.kernel.qualifiers.support.TargetMethodBean;
+import org.jboss.test.kernel.qualifiers.support.TargetPropertyBean;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class InjectionPointQualifiersTestCase extends AbstractQualifiersTest
+{
+   public InjectionPointQualifiersTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(InjectionPointQualifiersTestCase.class);
+   }
+
+   public void testSimplePropertyQualifiers() throws Throwable
+   {
+      testSimpleQualifiers(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+   
+   public void testSimpleConstructorParameterQualifiers() throws Throwable
+   {
+      testSimpleQualifiers(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+   
+   public void testSimpleInstallMethodParameterQualifiers() throws Throwable
+   {
+      testSimpleQualifiers(TargetMethodBean.class, TargetType.METHOD);
+   }
+   
+   private <T extends Target> void testSimpleQualifiers(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test"));
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         T target = assertBean("target", targetClass);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testNeedsAllPropertyQualifiers() throws Throwable
+   {
+      testNeedsAllQualifiers(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testNeedsAllConstructorQualifiers() throws Throwable
+   {
+      testNeedsAllQualifiers(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testNeedsAllMethodParameterQualifiers() throws Throwable
+   {
+      testNeedsAllQualifiers(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testNeedsAllQualifiers(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test1", "test2");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test1", "test3", "test2");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean3Builder = BeanMetaDataBuilder.createBuilder("bean3", Bean.class.getName());
+      addSuppliedQualifiers(bean3Builder, "test2", "test3");
+      KernelControllerContext bean3Context = deploy(bean3Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2", "test3"));
+      try
+      {
+         assertBean("bean1", Bean.class);
+         Bean bean2 = assertBean("bean2", Bean.class);
+         assertBean("bean3", Bean.class);
+         T target = assertBean("target", targetClass);
+         assertNotNull(target.getBean());
+         assertSame(bean2, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(bean3Context);
+         undeploy(targetContext);
+      }
+   }
+
+   public void testNoContextHasAllPropertyQualifiers() throws Throwable
+   {
+      testNoContextHasAllQualifiers(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testNoContextHasAllConstructorQualifiers() throws Throwable
+   {
+      testNoContextHasAllQualifiers(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testNoContextHasAllMethodParameterQualifiers() throws Throwable
+   {
+      testNoContextHasAllQualifiers(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testNoContextHasAllQualifiers(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test", "other"));
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testTwoContextsHaveAllRequiredPropertyQualifiers() throws Throwable
+   {
+      testTwoContextsHaveAllRequiredQualifiers(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testTwoContextsHaveAllRequiredConstructorQualifiers() throws Throwable
+   {
+      testTwoContextsHaveAllRequiredQualifiers(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testTwoContextsHaveAllRequiredMethodParameterQualifiers() throws Throwable
+   {
+      testTwoContextsHaveAllRequiredQualifiers(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testTwoContextsHaveAllRequiredQualifiers(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test1", "test2");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test1", "test2");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2"));
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+
+   public void testTwoContextsHaveMoreThanRequiredPropertyQualifiers() throws Throwable
+   {
+      testTwoContextsHaveMoreThanRequiredQualifiers(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testTwoContextsHaveMoreThanRequiredConstructorQualifiers() throws Throwable
+   {
+      testTwoContextsHaveMoreThanRequiredQualifiers(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testTwoContextsHaveMoreThanRequiredMethodParameterQualifiers() throws Throwable
+   {
+      testTwoContextsHaveMoreThanRequiredQualifiers(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testTwoContextsHaveMoreThanRequiredQualifiers(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test1", "test2", "extra1");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "test1", "test2", "extra2");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(createTargetMetaData(type, "test1", "test2"));
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+   
+   public void testWantedBeanQualifiersIgnoredWhenPropertyQualifiersPresent() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testWantedQualifiersIgnoredWhenConstructorQualifiersPresent() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testWantedBeanQualifiersIgnoredWhenMethodQualifiersPresent() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testBeanQualifiersIgnoredWhenQualifiersPresent(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(addWantedQualifiers(createTargetMetaData(type, "test"), "ignored"));
+      try
+      {
+         Bean bean1 = assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         T target = assertBean("target", targetClass);
+         assertNotNull(target.getBean());
+         assertSame(bean1, target.getBean());
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+
+   public void testWantedBeanQualifiersIgnoredWhenPropertyQualifiersPresent2() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent2(TargetPropertyBean.class, TargetType.PROPERTY);
+   }
+
+   public void testWantedQualifiersIgnoredWhenConstructorQualifiersPresent2() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent2(TargetConstructorBean.class, TargetType.CONSTRUCTOR);
+   }
+
+   public void testWantedBeanQualifiersIgnoredWhenMethodQualifiersPresent2() throws Throwable
+   {
+      testBeanQualifiersIgnoredWhenQualifiersPresent2(TargetMethodBean.class, TargetType.METHOD);
+   }
+
+   private <T extends Target> void testBeanQualifiersIgnoredWhenQualifiersPresent2(Class<T> targetClass, TargetType type) throws Throwable
+   {
+      BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+      addSuppliedQualifiers(bean1Builder, "test");
+      KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+      BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+      addSuppliedQualifiers(bean2Builder, "other");
+      KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+      KernelControllerContext targetContext = deploy(addWantedQualifiers(createTargetMetaData(type, "injectionpoint"), "test"));
+      try
+      {
+         assertBean("bean1", Bean.class);
+         assertBean("bean2", Bean.class);
+         assertNoBean("target");
+      }
+      finally
+      {
+         undeploy(bean1Context);
+         undeploy(bean2Context);
+         undeploy(targetContext);
+      }
+   }
+
+   private BeanMetaData addWantedQualifiers(BeanMetaData bmd, Object...qualifiers)
+   {
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(bmd);
+      addWantedQualifiers(builder, qualifiers);
+      return builder.getBeanMetaData();
+   }
+
+   private BeanMetaData createTargetMetaData(TargetType type, Object...qualifiers)
+   {
+      AbstractInjectionValueMetaData inject = new AbstractInjectionValueMetaData();
+      HashSet<RelatedClassMetaData> qualifierSet = new HashSet<RelatedClassMetaData>();
+      
+      for (Object qualifier : qualifiers)
+      {
+         AbstractInjectQualifierMetaData qmd = new AbstractInjectQualifierMetaData();
+         qmd.setEnabled(Collections.singleton(qualifier));
+         qualifierSet.add(qmd);
+      }
+      inject.setInjectionPointQualifiers(qualifierSet);
+      
+      BeanMetaDataBuilder targetBuilder = null;
+      if (type == TargetType.PROPERTY)
+      {
+         targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetPropertyBean.class.getName());
+         targetBuilder.addPropertyMetaData("bean", inject);
+         
+      }
+      else if (type == TargetType.CONSTRUCTOR)
+      {
+         targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetConstructorBean.class.getName());
+         targetBuilder.addConstructorParameter(Bean.class.getName(), inject);
+      }
+      else
+      {
+         targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetMethodBean.class.getName());
+         targetBuilder.addInstall("installBean", Bean.class.getName(), inject);
+      }
+      targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+
+      return targetBuilder.getBeanMetaData();
+   }
+   
+   private enum TargetType
+   {
+      PROPERTY, CONSTRUCTOR, METHOD;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersTestSuite.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersTestSuite.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersTestSuite.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,47 @@
+/*
+* 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.test.kernel.qualifiers.test;
+
+import junit.framework.TestSuite;
+import junit.framework.Test;
+import junit.textui.TestRunner;
+
+/**
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ */
+public class QualifiersTestSuite extends TestSuite
+{
+   public static void main(String[] args)
+   {
+      TestRunner.run(QualifiersTestSuite.suite());
+   }
+
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("Qualifier Tests");
+
+      suite.addTest(BeanQualifiersTestCase.suite());
+      suite.addTest(InjectionPointQualifiersTestCase.suite());
+
+      return suite;
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,137 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.qualifiers.test;
+
+import junit.framework.Test;
+
+import org.jboss.test.kernel.qualifiers.support.Bean;
+import org.jboss.test.kernel.qualifiers.support.TargetBean;
+import org.jboss.test.kernel.qualifiers.support.TargetConstructorBean;
+import org.jboss.test.kernel.qualifiers.support.TargetMethodBean;
+import org.jboss.test.kernel.qualifiers.support.TargetPropertyBean;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class QualifiersXmlTestCase extends AbstractQualifiersTest
+{
+   public QualifiersXmlTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(QualifiersXmlTestCase.class);
+   }
+
+   public void testSimpleBeanQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      assertBean("bean3", Bean.class);
+      
+      TargetBean target = assertBean("target", TargetBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testCompositeBeanQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      assertBean("bean3", Bean.class);
+      
+      TargetBean target = assertBean("target", TargetBean.class);
+      assertEquals(bean, target.getBean());
+   }
+
+   public void testPropertyAndSimpleBeanQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      
+      TargetPropertyBean target = assertBean("target", TargetPropertyBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testPropertyAndCompositeBeanQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      
+      TargetPropertyBean target = assertBean("target", TargetPropertyBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testSimplePropertyQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      
+      TargetPropertyBean target = assertBean("target", TargetPropertyBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testCompositePropertyQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      TargetPropertyBean target = assertBean("target", TargetPropertyBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testSimpleConstructorQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      
+      TargetConstructorBean target = assertBean("target", TargetConstructorBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testCompositeConstructorQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      TargetConstructorBean target = assertBean("target", TargetConstructorBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testSimpleMethodQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      
+      TargetMethodBean target = assertBean("target", TargetMethodBean.class);
+      assertEquals(bean, target.getBean());
+   }
+   
+   public void testCompositeMethodQualifiers()
+   {
+      assertBean("bean1", Bean.class);
+      Bean bean = assertBean("bean2", Bean.class);
+      TargetMethodBean target = assertBean("target", TargetMethodBean.class);
+      assertEquals(bean, target.getBean());
+   }
+}

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnabled.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnabled.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnabled.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier>aop</qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnableds.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnableds.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithEnableds.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier>
+      <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+         <constructor>
+            <parameter>123</parameter>
+         </constructor>
+      </javabean>     
+      <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+         <constructor>
+            <parameter>abc</parameter>
+         </constructor>
+      </javabean>     
+   </qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithNameFails.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithNameFails.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithNameFails.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier name="java.lang.Object">aop</qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithSuppliedType.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithSuppliedType.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithSuppliedType.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier type="Supplied">aop</qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWantedType.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier type="Wanted">aop</qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWrongTypeFails.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWrongTypeFails.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanWithWrongTypeFails.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <qualifier type="Wrong!!!">aop</qualifier>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierConstructorParameterInjectWithEnabled.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierConstructorParameterInjectWithEnabled.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierConstructorParameterInjectWithEnabled.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0">
+   <constructor>
+      <parameter>
+         <inject bean="Dummy">
+            <qualifier>aop</qualifier>
+         </inject>
+      </parameter>
+   </constructor>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierMethodParameterInjectWithEnabled.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierMethodParameterInjectWithEnabled.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierMethodParameterInjectWithEnabled.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0">
+   <install>
+      <parameter>
+         <inject bean="Dummy">
+            <qualifier>aop</qualifier>
+         </inject>
+      </parameter>
+   </install>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithEnableds.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithEnableds.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithEnableds.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <property name="test">
+      <inject>
+         <qualifier>
+            <javabean xmlns="urn:jboss:javabean:1.0" class="java.util.Date"/>
+            <javabean xmlns="urn:jboss:javabean:1.0" class="java.lang.String"/>
+         </qualifier>
+      </inject>
+   </property>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithNameFail.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithNameFail.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectWithNameFail.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+   <property name="test">
+      <inject>
+         <qualifier name="abc">123</qualifier>
+      </inject>
+   </property>
+</bean>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeBeanQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test3</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="bean3" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
+      <qualifier type="Wanted">
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test3</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeConstructorQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeConstructorQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeConstructorQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetConstructorBean">
+      <constructor>
+         <parameter>
+            <inject>
+               <qualifier>
+                  <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+                     <constructor>
+                        <parameter>test1</parameter>
+                     </constructor>
+                  </javabean>     
+                  <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+                     <constructor>
+                        <parameter>test2</parameter>
+                     </constructor>
+                  </javabean>     
+               </qualifier>
+            </inject>
+         </parameter>
+      </constructor>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeMethodQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeMethodQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositeMethodQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetMethodBean">
+      <install method="installBean">
+         <parameter>
+            <inject>
+               <qualifier>
+                  <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+                     <constructor>
+                        <parameter>test1</parameter>
+                     </constructor>
+                  </javabean>     
+                  <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+                     <constructor>
+                        <parameter>test2</parameter>
+                     </constructor>
+                  </javabean>     
+               </qualifier>
+            </inject>
+         </parameter>
+      </install>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositePropertyQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositePropertyQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testCompositePropertyQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
+      <property name="bean">
+         <inject>
+            <qualifier>
+               <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+                  <constructor>
+                     <parameter>test1</parameter>
+                  </constructor>
+               </javabean>     
+               <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+                  <constructor>
+                     <parameter>test2</parameter>
+                  </constructor>
+               </javabean>     
+            </qualifier>
+         </inject>
+      </property>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndCompositeBeanQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
+      <qualifier  type="Wanted">
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String">
+            <constructor>
+               <parameter>test1</parameter>
+            </constructor>
+         </javabean>     
+         <javabean xmlns="urn:jboss:javabean:2.0" class="java.lang.String"> 
+            <constructor>
+               <parameter>test2</parameter>
+            </constructor>
+         </javabean>     
+      </qualifier>
+      <property name="bean"><inject/></property>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testPropertyAndSimpleBeanQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
+      <qualifier type="Wanted">test1</qualifier>
+      <qualifier type="Wanted">test2</qualifier>
+      <property name="bean"><inject/></property>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleBeanQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+      <qualifier>test2</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test3</qualifier>
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="bean3" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetBean">
+      <qualifier type="Wanted">test1</qualifier>
+      <qualifier type="Wanted">test2</qualifier>
+      <qualifier type="Wanted">test3</qualifier>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleConstructorQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleConstructorQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleConstructorQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetConstructorBean">
+      <constructor>
+         <parameter>
+            <inject>
+               <qualifier>test1</qualifier>
+               <qualifier>test2</qualifier>
+            </inject>
+         </parameter>
+      </constructor>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleMethodQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleMethodQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimpleMethodQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetMethodBean">
+      <install method="installBean">
+         <parameter>
+            <inject>
+               <qualifier>test1</qualifier>
+               <qualifier>test2</qualifier>
+            </inject>
+         </parameter>
+      </install>
+   </bean>
+   
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimplePropertyQualifiers.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimplePropertyQualifiers.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testSimplePropertyQualifiers.xml	2009-11-25 10:36:03 UTC (rev 96942)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+   
+   <bean name="bean1" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test1</qualifier>
+   </bean>
+
+   <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+      <qualifier>test2</qualifier>
+      <qualifier>test1</qualifier>
+   </bean>
+   
+   <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetPropertyBean">
+      <property name="bean">
+         <inject>
+            <qualifier>test1</qualifier>
+            <qualifier>test2</qualifier>
+         </inject>
+      </property>
+   </bean>
+   
+</deployment>




More information about the jboss-cvs-commits mailing list