[jboss-cvs] JBossAS SVN: r97900 - in projects/kernel/trunk/kernel/src: main/java/org/jboss/beans/metadata/plugins and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Dec 16 11:18:34 EST 2009
Author: kabir.khan at jboss.com
Date: 2009-12-16 11:18:34 -0500 (Wed, 16 Dec 2009)
New Revision: 97900
Added:
projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/model/QualifierContent.java
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanAnnotation.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanString.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectAnnotation.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testQualifierAnnotationContent.xml
Modified:
projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractQualifierMetaData.java
projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.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/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/QualifiersXmlTestCase.java
Log:
[JBKERNEL-63] Make it possible to choose to parse qualifiers as annotations
Added: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/model/QualifierContent.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/model/QualifierContent.java (rev 0)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/api/model/QualifierContent.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -0,0 +1,39 @@
+/*
+* 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.api.model;
+
+import org.jboss.xb.annotations.JBossXmlEnum;
+
+/**
+ * How a qualifier should be parsed
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at JBossXmlEnum(ignoreCase=true)
+public enum QualifierContent
+{
+ /** The qualifier is a simple string */
+ STRING,
+ /** The qualifier is an annotation */
+ ANNOTATION
+}
Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractQualifierMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractQualifierMetaData.java 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/beans/metadata/plugins/AbstractQualifierMetaData.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -21,10 +21,18 @@
*/
package org.jboss.beans.metadata.plugins;
+import java.lang.annotation.Annotation;
+import java.util.HashSet;
+import java.util.Set;
+
import javax.xml.bind.annotation.XmlAttribute;
+import org.jboss.annotation.factory.AnnotationCreator;
+import org.jboss.beans.metadata.api.model.QualifierContent;
+
/**
- * Abstract Qualifier MetaData.
+ * Abstract Qualifier MetaData. Qualifiers are used to narrow down what is injected
+ * when doing contextul injection (by bean type)
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
@@ -33,6 +41,10 @@
{
private static final long serialVersionUID = 1L;
+ private volatile QualifierContent content = QualifierContent.STRING;
+
+ private volatile Set<Object> annotations;
+
public AbstractQualifierMetaData()
{
}
@@ -49,4 +61,74 @@
super.setClassName(classname);
}
+ /**
+ * Get how the qualifier content should be parsed. The default is STRING
+ *
+ * @return the content
+ */
+ public QualifierContent getContent()
+ {
+ return content;
+ }
+
+ /**
+ * Set how the qualifier content should be parsed. If not set, the default is STRING
+ *
+ * @param content the content to set
+ */
+ @XmlAttribute(name="content")
+ public void setContent(QualifierContent content)
+ {
+ this.content = content;
+ }
+
+ @Override
+ public Set<Object> getEnabled()
+ {
+ return getEnabled((ClassLoader)null);
+ }
+
+ public Set<Object> getEnabled(ClassLoader cl)
+ {
+ if (content == QualifierContent.STRING)
+ return super.getEnabled();
+
+ if (content == QualifierContent.ANNOTATION)
+ {
+ if (annotations == null)
+ {
+ Set<Object> anns = new HashSet<Object>();
+ for (Object enabled : super.getEnabled())
+ {
+ anns.add(parseAnnotation(cl, enabled));
+ }
+ annotations = anns;
+ }
+ return annotations;
+ }
+
+ throw new IllegalStateException("Unknown content type " + content);
+ }
+
+ private Annotation parseAnnotation(ClassLoader cl, Object enabled)
+ {
+ if (enabled instanceof Annotation)
+ return (Annotation)enabled;
+ if (enabled instanceof String == false)
+ throw new IllegalStateException(enabled + " is neither an annotation nor a string");
+
+ String annString = (String)enabled;
+ try
+ {
+ if (cl == null)
+ {
+ cl = Thread.currentThread().getContextClassLoader();
+ }
+ return (Annotation)AnnotationCreator.createAnnotation(annString, cl);
+ }
+ catch (Throwable e)
+ {
+ throw new RuntimeException("Error creating annotation for " + enabled, e);
+ }
+ }
}
Modified: 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 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/QualifiersMdrUtil.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -518,7 +518,9 @@
if (qualifierSet == null)
qualifierSet = getQualifiersSetInMdr(retrieval, key, true);
for (Object qualifier : qualifiersToAdd)
+ {
qualifierSet.add(qualifier);
+ }
return qualifierSet;
}
Modified: 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 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/QualifierTestCase.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -26,10 +26,13 @@
import junit.framework.Test;
+import org.jboss.annotation.factory.AnnotationCreator;
+import org.jboss.beans.metadata.api.model.QualifierContent;
import org.jboss.beans.metadata.api.model.QualifierPoint;
import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
import org.jboss.beans.metadata.plugins.AbstractBeanQualifierMetaData;
import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractQualifierMetaData;
import org.jboss.beans.metadata.spi.ConstructorMetaData;
import org.jboss.beans.metadata.spi.InstallMetaData;
import org.jboss.beans.metadata.spi.ParameterMetaData;
@@ -80,11 +83,38 @@
{
RelatedClassMetaData related = getRelated("QualifierBeanWithEnabled.xml");
assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(1, enabled.size());
assertEquals("aop", enabled.iterator().next());
}
+
+ public void testBeanStringQualifier() throws Exception
+ {
+ RelatedClassMetaData related = getRelated("QualifierBeanString.xml");
+ assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
+ Set<Object> enabled = related.getEnabled();
+ assertNotNull(enabled);
+ assertEquals(1, enabled.size());
+ assertEquals("aop", enabled.iterator().next());
+ }
+
+ public void testBeanAnnotationQualifier() throws Exception
+ {
+ RelatedClassMetaData related = getRelated("QualifierBeanAnnotation.xml");
+ assertEquals(QualifiersMdrUtil.SUPPLIED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.ANNOTATION, ((AbstractQualifierMetaData)related).getContent());
+ Set<Object> enabled = related.getEnabled();
+ assertNotNull(enabled);
+ assertEquals(1, enabled.size());
+ assertEquals(AnnotationCreator.createAnnotation("@java.lang.Override", Override.class), enabled.iterator().next());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ }
public void testBeanQualifierWithEnableds() throws Exception
{
@@ -157,6 +187,8 @@
{
RelatedClassMetaData related = getRelated("QualifierBeanWithSinglePoint.xml");
assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(1, enabled.size());
@@ -172,6 +204,8 @@
{
RelatedClassMetaData related = getRelated("QualifierBeanWithPoints.xml");
assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(1, enabled.size());
@@ -197,6 +231,8 @@
assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(2, enabled.size());
@@ -205,6 +241,30 @@
assertTrue(found);
}
+ public void testInjectPropertyAnnotationQualifier() throws Exception
+ {
+ AbstractBeanMetaData bean = unmarshalBean("QualifierPropertyInjectAnnotation.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).getQualifiers());
+ assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.ANNOTATION, ((AbstractQualifierMetaData)related).getContent());
+ Set<Object> enabled = related.getEnabled();
+ assertNotNull(enabled);
+ assertEquals(1, enabled.size());
+ assertEquals(AnnotationCreator.createAnnotation("@java.lang.Override", Override.class), enabled.iterator().next());
+ }
+ }
+ assertTrue(found);
+ }
+
public void testInjectConstructorParameterWithEnabled() throws Exception
{
AbstractBeanMetaData bean = unmarshalBean("QualifierConstructorParameterInjectWithEnabled.xml");
@@ -218,6 +278,8 @@
assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(1, enabled.size());
@@ -236,6 +298,8 @@
assertInstanceOf(valueMetaData, AbstractInjectionValueMetaData.class);
RelatedClassMetaData related = checkRelated(((AbstractInjectionValueMetaData)valueMetaData).getQualifiers());
assertEquals(QualifiersMdrUtil.REQUIRED_QUALIFIER_KEY, related.getClassName());
+ assertInstanceOf(related, AbstractQualifierMetaData.class);
+ assertEquals(QualifierContent.STRING, ((AbstractQualifierMetaData)related).getContent());
Set<Object> enabled = related.getEnabled();
assertNotNull(enabled);
assertEquals(1, enabled.size());
Modified: 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 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/BeanQualifiersTestCase.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -21,15 +21,23 @@
*/
package org.jboss.test.kernel.qualifiers.test;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Documented;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
import junit.framework.Test;
+import org.jboss.annotation.factory.AnnotationCreator;
import org.jboss.beans.metadata.api.model.AutowireType;
+import org.jboss.beans.metadata.api.model.QualifierContent;
import org.jboss.beans.metadata.api.model.QualifierPoint;
import org.jboss.beans.metadata.api.model.QualifierType;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractBeanQualifierMetaData;
+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.kernel.spi.dependency.KernelControllerContext;
@@ -63,8 +71,11 @@
BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
bean2Builder.addQualifiers(QualifierType.SUPPLIED, "supplied1", "supplied2");
+ bean2Builder.addQualifiers(QualifierType.SUPPLIED, getAnnotation(Override.class));
bean2Builder.addQualifiers(QualifierType.REQUIRED, "required1");
+ bean2Builder.addQualifiers(QualifierType.REQUIRED, getAnnotation(Documented.class));
bean2Builder.addQualifiers(QualifierType.OPTIONAL, "optional1", "optional2", "optional3");
+ bean2Builder.addQualifiers(QualifierType.OPTIONAL, getAnnotation(Deprecated.class));
KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
try
@@ -83,21 +94,24 @@
set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);
assertNotNull(set);
+ assertEquals(3, set.size());
assertTrue(set.contains("supplied1"));
assertTrue(set.contains("supplied2"));
- assertEquals(2, set.size());
+ assertTrue(set.contains(getAnnotation(Override.class)));
set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean2Context, QualifierPoint.CONSTRUCTOR);
assertNotNull(set);
+ assertEquals(2, set.size());
assertTrue(set.contains("required1"));
- assertEquals(1, set.size());
+ assertTrue(set.contains(getAnnotation(Documented.class)));
set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean2Context, QualifierPoint.PROPERTY);
assertNotNull(set);
+ assertEquals(4, set.size());
assertTrue(set.contains("optional1"));
assertTrue(set.contains("optional2"));
assertTrue(set.contains("optional3"));
- assertEquals(3, set.size());
+ assertTrue(set.contains(getAnnotation(Deprecated.class)));
}
finally
{
@@ -106,12 +120,50 @@
}
}
+ public void testContextsMDRHasQualifiersUsingAnnotationContentType() throws Throwable
+ {
+ BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+ KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+ BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+ AbstractBeanQualifierMetaData beanQualifier = new AbstractBeanQualifierMetaData();
+ beanQualifier.setType(QualifierType.SUPPLIED);
+ beanQualifier.setContent(QualifierContent.ANNOTATION);
+ Set<Object> enableds = new HashSet<Object>();
+ enableds.add("@" + Override.class.getName());
+ beanQualifier.setEnabled(enableds);
+ Set<RelatedClassMetaData> qualifiers = new HashSet<RelatedClassMetaData>();
+ qualifiers.add(beanQualifier);
+ ((AbstractBeanMetaData)bean2Builder.getBeanMetaData()).setRelated(qualifiers);
+ 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);
+ assertEquals(1, set.size());
+ assertTrue(set.contains(getAnnotation(Override.class)));
+ }
+ finally
+ {
+ undeploy(bean1Context);
+ undeploy(bean2Context);
+ }
+ }
+
public void testContextsMDRHasQualifiersFromAllLevels() throws Throwable
{
MemoryMetaDataLoader loader = new MemoryMetaDataLoader(ScopeKey.DEFAULT_SCOPE);
- QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.SUPPLIED, null, "supplied1");
- QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.REQUIRED, null, "wanted1");
- QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.OPTIONAL, null, "optional1");
+ QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.SUPPLIED, null, "supplied1", getAnnotation(Override.class));
+ QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.REQUIRED, null, "wanted1", getAnnotation(Documented.class));
+ QualifiersMdrUtil.addQualifiersToMdrRetrieval(loader, QualifierType.OPTIONAL, null, "optional1", getAnnotation(Deprecated.class));
getMetaDataRepository().getMetaDataRepository().addMetaDataRetrieval(loader);
@@ -130,37 +182,42 @@
assertBean("bean2", Bean.class);
Set<Object> set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean1Context);
assertNotNull(set);
+ assertEquals(2, set.size());
assertTrue(set.contains("supplied1"));
- assertEquals(1, set.size());
+ assertTrue(set.contains(getAnnotation(Override.class)));
set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean1Context, QualifierPoint.PROPERTY);
assertNotNull(set);
+ assertEquals(2, set.size());
assertTrue(set.contains("wanted1"));
- assertEquals(1, set.size());
+ assertTrue(set.contains(getAnnotation(Documented.class)));
set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean1Context, QualifierPoint.PROPERTY);
assertNotNull(set);
+ assertEquals(2, set.size());
assertTrue(set.contains("optional1"));
- assertEquals(1, set.size());
+ assertTrue(set.contains(getAnnotation(Deprecated.class)));
set = QualifiersMdrUtil.mergeSuppliedQualifiersFromMdr(bean2Context);
assertNotNull(set);
+ assertEquals(3, set.size());
assertTrue(set.contains("supplied1"));
assertTrue(set.contains("supplied2"));
- assertEquals(2, set.size());
+ assertTrue(set.contains(getAnnotation(Override.class)));
-
set = QualifiersMdrUtil.mergeRequiredQualifiersFromMdr(bean2Context, QualifierPoint.PROPERTY);
assertNotNull(set);
+ assertEquals(3, set.size());
assertTrue(set.contains("wanted1"));
assertTrue(set.contains("wanted2"));
- assertEquals(2, set.size());
+ assertTrue(set.contains(getAnnotation(Documented.class)));
set = QualifiersMdrUtil.mergeOptionalQualifiersFromMdr(bean2Context, QualifierPoint.PROPERTY);
assertNotNull(set);
+ assertEquals(3, set.size());
assertTrue(set.contains("optional1"));
assertTrue(set.contains("optional2"));
- assertEquals(2, set.size());
+ assertTrue(set.contains(getAnnotation(Deprecated.class)));
}
finally
{
@@ -329,6 +386,35 @@
}
}
+ public void testAnnotationQualifier() throws Throwable
+ {
+ BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+ bean1Builder.addQualifiers(QualifierType.SUPPLIED, getAnnotation(Override.class));
+ 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);
+ targetBuilder.addQualifiers(QualifierType.REQUIRED, getAnnotation(Override.class));
+ 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());
@@ -357,6 +443,34 @@
}
}
+ public void testAmbiguousAnnotationQualifiers() throws Throwable
+ {
+ BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+ bean1Builder.addQualifiers(QualifierType.SUPPLIED, getAnnotation(Override.class));
+ KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+ BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+ bean2Builder.addQualifiers(QualifierType.SUPPLIED, getAnnotation(Override.class));
+ KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+ BeanMetaDataBuilder targetBuilder = BeanMetaDataBuilder.createBuilder("target", TargetBean.class.getName());
+ targetBuilder.setAutowireType(AutowireType.BY_CLASS);
+ targetBuilder.addQualifiers(QualifierType.REQUIRED, getAnnotation(Override.class));
+ 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 testRequiredQualifiersNotIncludingAllBeanQualifiers() throws Throwable
{
BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
@@ -831,4 +945,9 @@
getMetaDataRepository().getMetaDataRepository().removeMetaDataRetrieval(ScopeKey.DEFAULT_SCOPE);
}
}
+
+ private Annotation getAnnotation(Class<? extends Annotation> clazz) throws Exception
+ {
+ return (Annotation)AnnotationCreator.createAnnotation("@" + clazz.getName(), clazz);
+ }
}
Modified: 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 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/InjectionPointQualifiersTestCase.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -21,14 +21,26 @@
*/
package org.jboss.test.kernel.qualifiers.test;
+import java.lang.annotation.Annotation;
import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
import junit.framework.Test;
+import org.jboss.annotation.factory.AnnotationCreator;
import org.jboss.beans.info.spi.BeanAccessMode;
+import org.jboss.beans.metadata.api.model.QualifierContent;
import org.jboss.beans.metadata.api.model.QualifierPoint;
import org.jboss.beans.metadata.api.model.QualifierType;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractBeanQualifierMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractQualifierMetaData;
+import org.jboss.beans.metadata.plugins.AbstractRelatedClassMetaData;
import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.RelatedClassMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
import org.jboss.test.kernel.junit.MicrocontainerTest;
@@ -104,6 +116,106 @@
}
}
+ public void testAnnotationObjectPropertyQualifiers() throws Throwable
+ {
+ testAnnotationObjectQualifiers(TargetPropertyBean.class);
+ }
+
+ public void testAnnotationObjectFieldQualifiers() throws Throwable
+ {
+ testAnnotationObjectQualifiers(TargetFieldBean.class);
+ }
+
+ public void testAnnotationObjectConstructorParameterQualifiers() throws Throwable
+ {
+ testAnnotationObjectQualifiers(TargetConstructorBean.class);
+ }
+
+ public void testAnnotationObjectInstallMethodParameterQualifiers() throws Throwable
+ {
+ testAnnotationObjectQualifiers(TargetMethodBean.class);
+ }
+
+ private <T extends Target> void testAnnotationObjectQualifiers(Class<T> targetClass) throws Throwable
+ {
+ BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+ bean1Builder.addQualifiers(QualifierType.SUPPLIED, getAnnotation(Override.class));
+ KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+ BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+ KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+ KernelControllerContext targetContext = deploy(createTargetMetaData(targetClass, getAnnotation(Override.class)));
+ 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 testAnnotationContentPropertyQualifiers() throws Throwable
+ {
+ testAnnotationContentQualifiers(TargetPropertyBean.class);
+ }
+
+ public void testAnnotationContentFieldQualifiers() throws Throwable
+ {
+ testAnnotationContentQualifiers(TargetFieldBean.class);
+ }
+
+ public void testAnnotationContentConstructorParameterQualifiers() throws Throwable
+ {
+ testAnnotationContentQualifiers(TargetConstructorBean.class);
+ }
+
+ public void testAnnotationContentInstallMethodParameterQualifiers() throws Throwable
+ {
+ testAnnotationContentQualifiers(TargetMethodBean.class);
+ }
+
+ private <T extends Target> void testAnnotationContentQualifiers(Class<T> targetClass) throws Throwable
+ {
+ BeanMetaDataBuilder bean1Builder = BeanMetaDataBuilder.createBuilder("bean1", Bean.class.getName());
+ AbstractBeanQualifierMetaData beanQualifier = new AbstractBeanQualifierMetaData();
+ beanQualifier.setType(QualifierType.SUPPLIED);
+ beanQualifier.setContent(QualifierContent.ANNOTATION);
+ Set<Object> enableds = new HashSet<Object>();
+ enableds.add("@" + Override.class.getName());
+ beanQualifier.setEnabled(enableds);
+ Set<RelatedClassMetaData> qualifiers = new HashSet<RelatedClassMetaData>();
+ qualifiers.add(beanQualifier);
+ ((AbstractBeanMetaData)bean1Builder.getBeanMetaData()).setRelated(qualifiers);
+ KernelControllerContext bean1Context = deploy(bean1Builder.getBeanMetaData());
+
+ BeanMetaDataBuilder bean2Builder = BeanMetaDataBuilder.createBuilder("bean2", Bean.class.getName());
+ KernelControllerContext bean2Context = deploy(bean2Builder.getBeanMetaData());
+
+ KernelControllerContext targetContext = deploy(createTargetMetaData(targetClass, false, QualifierContent.ANNOTATION, "@" + Override.class.getName()));
+ 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);
@@ -696,33 +808,55 @@
{
return createTargetMetaData(targetClass, false, qualifiers);
}
-
private BeanMetaData createTargetMetaData(Class<?> targetClass, boolean ignoreBeanQualifiers, Object...qualifiers)
{
+ return createTargetMetaData(targetClass, ignoreBeanQualifiers, QualifierContent.STRING, qualifiers);
+ }
+ private BeanMetaData createTargetMetaData(Class<?> targetClass, boolean ignoreBeanQualifiers, QualifierContent content, Object...qualifiers)
+ {
BeanMetaDataBuilder targetBuilder = null;
+ ValueMetaData value = null;
if (targetClass == TargetPropertyBean.class || targetClass == TargetFieldBean.class)
{
targetBuilder = BeanMetaDataBuilder.createBuilder("target", targetClass.getName());
if (targetClass == TargetFieldBean.class)
targetBuilder.setAccessMode(BeanAccessMode.ALL);
- targetBuilder.addPropertyMetaData("bean", targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers));
+ value = targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers);
+ targetBuilder.addPropertyMetaData("bean", value);
}
else if (targetClass == TargetConstructorBean.class)
{
targetBuilder = BeanMetaDataBuilder.createBuilder("target", targetClass.getName());
- targetBuilder.addConstructorParameter(Bean.class.getName(), targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers));
+ value = targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers);
+ targetBuilder.addConstructorParameter(Bean.class.getName(), value);
}
else
{
targetBuilder = BeanMetaDataBuilder.createBuilder("target", targetClass.getName());
- targetBuilder.addInstall("installBean", Bean.class.getName(), targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers));
+ value = targetBuilder.createContextualInject(ignoreBeanQualifiers, qualifiers);
+ targetBuilder.addInstall("installBean", Bean.class.getName(), value);
}
+ if (content == QualifierContent.ANNOTATION)
+ {
+ AbstractInjectionValueMetaData inject = (AbstractInjectionValueMetaData)value;
+ for (RelatedClassMetaData qualifier : inject.getQualifiers())
+ {
+ assertInstanceOf(qualifier, AbstractQualifierMetaData.class);
+ ((AbstractQualifierMetaData)qualifier).setContent(QualifierContent.ANNOTATION);
+ }
+ }
+
return targetBuilder.getBeanMetaData();
}
+ private Annotation getAnnotation(Class<? extends Annotation> clazz) throws Exception
+ {
+ return (Annotation)AnnotationCreator.createAnnotation("@" + clazz.getName(), clazz);
+ }
+
private enum TargetType
{
PROPERTY, CONSTRUCTOR, METHOD;
Modified: 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 2009-12-16 16:17:41 UTC (rev 97899)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase.java 2009-12-16 16:18:34 UTC (rev 97900)
@@ -179,4 +179,21 @@
assertNotNull(target.getFieldBean());
assertEquals(bean3, target.getFieldBean());
}
+
+ public void testQualifierAnnotationContent()
+ {
+ assertBean("bean1", Bean.class);
+ Bean bean2 = assertBean("bean2", Bean.class);
+ assertBean("bean3", Bean.class);
+
+ TargetAllBean target = assertBean("target", TargetAllBean.class);
+ assertNotNull(target.getConstructorBean());
+ assertEquals(bean2, target.getConstructorBean());
+
+ assertNotNull(target.getMethodBean());
+ assertEquals(bean2, target.getMethodBean());
+
+ assertNotNull(target.getFieldBean());
+ assertEquals(bean2, target.getFieldBean());
+ }
}
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanAnnotation.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanAnnotation.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanAnnotation.xml 2009-12-16 16:18:34 UTC (rev 97900)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+ <qualifier content="Annotation">@java.lang.Override</qualifier>
+</bean>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanString.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanString.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierBeanString.xml 2009-12-16 16:18:34 UTC (rev 97900)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+ <qualifier content="String">aop</qualifier>
+</bean>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectAnnotation.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectAnnotation.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/QualifierPropertyInjectAnnotation.xml 2009-12-16 16:18:34 UTC (rev 97900)
@@ -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 content="annotation">@java.lang.Override</qualifier>
+ </inject>
+ </property>
+</bean>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testQualifierAnnotationContent.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testQualifierAnnotationContent.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/qualifiers/test/QualifiersXmlTestCase#testQualifierAnnotationContent.xml 2009-12-16 16:18:34 UTC (rev 97900)
@@ -0,0 +1,45 @@
+<?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 content="Annotation">@java.lang.Override</qualifier>
+ <qualifier content="Annotation">@java.lang.Deprecated</qualifier>
+ </bean>
+
+ <bean name="bean2" class="org.jboss.test.kernel.qualifiers.support.Bean">
+ <qualifier content="Annotation">@java.lang.Deprecated</qualifier>
+ <qualifier content="Annotation">@java.lang.Override</qualifier>
+ <qualifier content="Annotation">@java.lang.annotation.Documented</qualifier>
+ </bean>
+
+ <bean name="bean3" class="org.jboss.test.kernel.qualifiers.support.Bean">
+ <qualifier content="Annotation">@java.lang.annotation.Documented</qualifier>
+ </bean>
+
+ <bean name="target" class="org.jboss.test.kernel.qualifiers.support.TargetAllBean">
+ <qualifier content="Annotation" type="Required">@java.lang.Deprecated</qualifier>
+ <qualifier content="Annotation" type="Required">@java.lang.Override</qualifier>
+ <constructor>
+ <parameter>
+ <inject>
+ <qualifier content="Annotation" type="Required">@java.lang.annotation.Documented</qualifier>
+ </inject>
+ </parameter>
+ </constructor>
+ <property name="fieldBean">
+ <inject>
+ <qualifier content="Annotation" type="Required">@java.lang.annotation.Documented</qualifier>
+ </inject>
+ </property>
+ <install method="installBean">
+ <parameter>
+ <inject>
+ <qualifier content="Annotation" type="Required">@java.lang.annotation.Documented</qualifier>
+ </inject>
+ </parameter>
+ </install>
+ </bean>
+
+
+</deployment>
More information about the jboss-cvs-commits
mailing list