[jboss-cvs] JBossAS SVN: r70991 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/kernel/plugins/annotations and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 19 07:42:36 EDT 2008
Author: alesj
Date: 2008-03-19 07:42:35 -0400 (Wed, 19 Mar 2008)
New Revision: 70991
Added:
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectFieldAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectableMemberAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InstallFieldCallbackAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/UninstallFieldCallbackAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryFieldAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/CallbacksTester.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/InjectTester.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/ValueFactoryTester.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstallVerifier.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/BasicFieldAnnotationSupportTestCase.java
Modified:
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Inject.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Install.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Uninstall.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/ValueFactory.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AbstractAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/BasicBeanAnnotationAdapter.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/FieldAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/PropertyAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryAnnotationPlugin.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockFieldTester.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockInjectPlugin.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractRunAnnotationsTest.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/AnnotationFieldTestSuite.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/inheritance/AbstractAnnotationInheritanceTest.java
Log:
Field annotation IoC support.
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Inject.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Inject.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Inject.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -38,7 +38,7 @@
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
@Retention(RetentionPolicy.RUNTIME)
- at Target({ElementType.METHOD, ElementType.PARAMETER})
+ at Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
public @interface Inject
{
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Install.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Install.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Install.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -32,7 +32,7 @@
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
@Retention(RetentionPolicy.RUNTIME)
- at Target({ElementType.METHOD})
+ at Target({ElementType.METHOD, ElementType.FIELD})
public @interface Install
{
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Uninstall.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Uninstall.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/Uninstall.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -32,7 +32,7 @@
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
@Retention(RetentionPolicy.RUNTIME)
- at Target({ElementType.METHOD})
+ at Target({ElementType.METHOD, ElementType.FIELD})
public @interface Uninstall
{
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/ValueFactory.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/ValueFactory.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/api/annotations/ValueFactory.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -32,7 +32,7 @@
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
@Retention(RetentionPolicy.RUNTIME)
- at Target({ElementType.METHOD, ElementType.PARAMETER})
+ at Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
public @interface ValueFactory
{
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AbstractAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AbstractAnnotationPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AbstractAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -71,8 +71,6 @@
{
types.add(type);
}
- else
- log.warn("Unsupported type " + type + " on annotation " + annotation);
}
}
isCleanupOnly = annotation.isAnnotationPresent(CleanupOnly.class);
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/BasicBeanAnnotationAdapter.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/BasicBeanAnnotationAdapter.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/BasicBeanAnnotationAdapter.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -93,5 +93,9 @@
addAnnotationPlugin(new InstallMethodParameterAnnotationPlugin(adapters));
addAnnotationPlugin(new UninstallMethodParameterAnnotationPlugin(adapters));
// field
+ addAnnotationPlugin(new InjectFieldAnnotationPlugin());
+ addAnnotationPlugin(new ValueFactoryFieldAnnotationPlugin());
+ addAnnotationPlugin(new InstallFieldCallbackAnnotationPlugin());
+ addAnnotationPlugin(new UninstallFieldCallbackAnnotationPlugin());
}
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/FieldAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/FieldAnnotationPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/FieldAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -32,7 +32,7 @@
* @param <C> annotation type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public abstract class FieldAnnotationPlugin<C extends Annotation> extends AbstractAnnotationPlugin<FieldInfo, C>
+public abstract class FieldAnnotationPlugin<C extends Annotation> extends InjectableMemberAnnotationPlugin<FieldInfo, C>
{
protected FieldAnnotationPlugin(Class<C> annotation)
{
@@ -43,4 +43,9 @@
{
return ElementType.FIELD == type;
}
+
+ protected String getName(FieldInfo info)
+ {
+ return info.getName();
+ }
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectAnnotationPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -22,10 +22,7 @@
package org.jboss.kernel.plugins.annotations;
import org.jboss.beans.metadata.api.annotations.Inject;
-import org.jboss.beans.metadata.api.model.FromContext;
-import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.dependency.spi.ControllerState;
/**
* Inject value annotation plugin.
@@ -43,18 +40,6 @@
public ValueMetaData createValueMetaData(Inject annotation)
{
- AbstractInjectionValueMetaData injection = new AbstractInjectionValueMetaData();
- if (isAttributePresent(annotation.bean()))
- injection.setValue(annotation.bean());
- if (isAttributePresent(annotation.property()))
- injection.setProperty(annotation.property());
- injection.setDependentState(new ControllerState(annotation.dependentState()));
- if (isAttributePresent(annotation.whenRequired()))
- injection.setWhenRequiredState(new ControllerState(annotation.whenRequired()));
- injection.setInjectionOption(annotation.option());
- injection.setInjectionType(annotation.type());
- if (FromContext.NOOP.equals(annotation.fromContext()) == false)
- injection.setFromContext(annotation.fromContext());
- return injection;
+ return ValueUtil.createValueMetaData(annotation);
}
}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectFieldAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectFieldAnnotationPlugin.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectFieldAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,43 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.annotations;
+
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+
+/**
+ * Value factory field annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class InjectFieldAnnotationPlugin extends FieldAnnotationPlugin<Inject>
+{
+ public InjectFieldAnnotationPlugin()
+ {
+ super(Inject.class);
+ }
+
+ public ValueMetaData createValueMetaData(Inject annotation)
+ {
+ return ValueUtil.createValueMetaData(annotation);
+ }
+}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectableMemberAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectableMemberAnnotationPlugin.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InjectableMemberAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,141 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.annotations;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.reflect.spi.AnnotatedInfo;
+
+/**
+ * Injectable member annotation plugin.
+ *
+ * @param <C> annotation type
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class InjectableMemberAnnotationPlugin<T extends AnnotatedInfo, C extends Annotation> extends AbstractAnnotationPlugin<T, C>
+{
+ protected InjectableMemberAnnotationPlugin(Class<C> annotation)
+ {
+ super(annotation);
+ }
+
+ protected boolean isElementTypeSupported(ElementType type)
+ {
+ return ElementType.METHOD == type || ElementType.PARAMETER == type;
+ }
+
+ /**
+ * Get the annotated info name.
+ *
+ * @param info the info
+ * @return info's name
+ */
+ protected abstract String getName(T info);
+
+ protected boolean isMetaDataAlreadyPresent(T info, C annotation, BeanMetaData beanMetaData)
+ {
+ Set<PropertyMetaData> properties = beanMetaData.getProperties();
+ if (properties != null && properties.isEmpty() == false)
+ {
+ for(PropertyMetaData pmd : properties)
+ {
+ if (pmd.getName().equals(getName(info)))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(T info, C annotation, BeanMetaData beanMetaData) throws Throwable
+ {
+ Set<PropertyMetaData> properties = getProperties(beanMetaData);
+ PropertyMetaData property = getPropertyMetaData(info, annotation, beanMetaData);
+ properties.add(property);
+ return Collections.singletonList(property);
+ }
+
+ /**
+ * Get PropertyMetaData instance.
+ *
+ * @param info the info
+ * @param annotation the annotation
+ * @param beanMetaData the bean metadata
+ * @return get new PropertyMetaData instance
+ */
+ protected PropertyMetaData getPropertyMetaData(T info, C annotation, BeanMetaData beanMetaData)
+ {
+ return getPropertyMetaData(info, annotation);
+ }
+
+ /**
+ * Get PropertyMetaData instance.
+ *
+ * @param info the info
+ * @param annotation the annotation
+ * @return get new PropertyMetaData instance
+ */
+ protected PropertyMetaData getPropertyMetaData(T info, C annotation)
+ {
+ ValueMetaData value = createValueMetaData(annotation);
+ if (value == null)
+ throw new IllegalArgumentException("Should not return null value, " + this);
+
+ return new AbstractPropertyMetaData(getName(info), value);
+ }
+
+ /**
+ * Get the PropertyMetaData set.
+ *
+ * @param beanMetaData the bean meta data
+ * @return set of existing PropertyMetaData
+ */
+ protected Set<PropertyMetaData> getProperties(BeanMetaData beanMetaData)
+ {
+ Set<PropertyMetaData> properties = beanMetaData.getProperties();
+ if (properties == null)
+ {
+ properties = new HashSet<PropertyMetaData>();
+ AbstractBeanMetaData bean = (AbstractBeanMetaData)beanMetaData;
+ bean.setProperties(properties);
+ }
+ return properties;
+ }
+
+ /**
+ * Create value meta data.
+ *
+ * @param annotation the annotation
+ * @return value meta data
+ */
+ public abstract ValueMetaData createValueMetaData(C annotation);
+}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InstallFieldCallbackAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InstallFieldCallbackAnnotationPlugin.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/InstallFieldCallbackAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,93 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.annotations;
+
+import java.lang.annotation.ElementType;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractCallbackMetaData;
+import org.jboss.beans.metadata.plugins.InstallCallbackMetaData;
+import org.jboss.beans.metadata.spi.CallbackMetaData;
+import org.jboss.dependency.spi.CallbackItem;
+import org.jboss.dependency.spi.Cardinality;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.reflect.spi.FieldInfo;
+
+/**
+ * Install field callback annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class InstallFieldCallbackAnnotationPlugin extends CallbackAnnotationPlugin<FieldInfo, Install>
+{
+ protected InstallFieldCallbackAnnotationPlugin()
+ {
+ super(Install.class);
+ }
+
+ protected boolean isElementTypeSupported(ElementType type)
+ {
+ return ElementType.FIELD == type;
+ }
+
+ protected boolean isEqual(FieldInfo info, CallbackItem<?> ci)
+ {
+ return info.getName().equals(ci.getAttributeName());
+ }
+
+ protected void applyInfo(AbstractCallbackMetaData callback, FieldInfo info)
+ {
+ callback.setProperty(info.getName());
+ }
+
+ protected Set<CallbackItem<?>> getCallbacks(DependencyInfo dependency)
+ {
+ return dependency.getInstallItems();
+ }
+
+ protected AbstractCallbackMetaData createCallback(FieldInfo info, Install annotation)
+ {
+ InstallCallbackMetaData callback = new InstallCallbackMetaData();
+ callback.setState(new ControllerState(annotation.whenRequired()));
+ callback.setDependentState(new ControllerState(annotation.dependentState()));
+ if (isAttributePresent(annotation.cardinality()))
+ callback.setCardinality(Cardinality.fromString(annotation.cardinality()));
+ applyInfo(callback, info);
+ return callback;
+ }
+
+ protected List<CallbackMetaData> getCallbacks(AbstractBeanMetaData beanMetaData)
+ {
+ List<CallbackMetaData> callbacks = beanMetaData.getInstallCallbacks();
+ if (callbacks == null)
+ {
+ callbacks = new ArrayList<CallbackMetaData>();
+ beanMetaData.setInstallCallbacks(callbacks);
+ }
+ return callbacks;
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/PropertyAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/PropertyAnnotationPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/PropertyAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -23,19 +23,8 @@
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
import org.jboss.beans.info.spi.PropertyInfo;
-import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
-import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.beans.metadata.spi.PropertyMetaData;
-import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
/**
* Abstract property annotation plugin.
@@ -43,7 +32,7 @@
* @param <C> annotation type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
-public abstract class PropertyAnnotationPlugin<C extends Annotation> extends AbstractAnnotationPlugin<PropertyInfo, C>
+public abstract class PropertyAnnotationPlugin<C extends Annotation> extends InjectableMemberAnnotationPlugin<PropertyInfo, C>
implements PropertyAware, Annotation2ValueMetaDataAdapter<C>
{
protected PropertyAnnotationPlugin(Class<C> annotation)
@@ -56,83 +45,8 @@
return ElementType.METHOD == type || ElementType.PARAMETER == type;
}
- protected boolean isMetaDataAlreadyPresent(PropertyInfo info, C annotation, BeanMetaData beanMetaData)
+ protected String getName(PropertyInfo info)
{
- Set<PropertyMetaData> properties = beanMetaData.getProperties();
- if (properties != null && properties.isEmpty() == false)
- {
- for(PropertyMetaData pmd : properties)
- {
- if (pmd.getName().equals(info.getName()))
- return true;
- }
- }
- return false;
+ return info.getName();
}
-
- protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(PropertyInfo info, C annotation, KernelControllerContext context)
- {
- Set<PropertyMetaData> properties = getProperties(context);
- PropertyMetaData property = getPropertyMetaData(info, annotation, context);
- properties.add(property);
- return Collections.singletonList(property);
- }
-
- /**
- * Get PropertyMetaData instance.
- *
- * @param info the info
- * @param annotation the annotation
- * @param context the context
- * @return get new PropertyMetaData instance
- */
- protected PropertyMetaData getPropertyMetaData(PropertyInfo info, C annotation, KernelControllerContext context)
- {
- return getPropertyMetaData(info, annotation, context.getBeanMetaData());
- }
-
- /**
- * Get PropertyMetaData instance.
- *
- * @param info the info
- * @param annotation the annotation
- * @param beanMetaData the bean metadata
- * @return get new PropertyMetaData instance
- */
- protected PropertyMetaData getPropertyMetaData(PropertyInfo info, C annotation, BeanMetaData beanMetaData)
- {
- return getPropertyMetaData(info, annotation);
- }
-
- /**
- * Get PropertyMetaData instance.
- *
- * @param info the info
- * @param annotation the annotation
- * @return get new PropertyMetaData instance
- */
- protected PropertyMetaData getPropertyMetaData(PropertyInfo info, C annotation)
- {
- ValueMetaData value = createValueMetaData(annotation);
- return new AbstractPropertyMetaData(info.getName(), value);
- }
-
- /**
- * Get the PropertyMetaData set.
- *
- * @param context the context
- * @return set of existing PropertyMetaData
- */
- protected Set<PropertyMetaData> getProperties(KernelControllerContext context)
- {
- BeanMetaData beanMetaData = context.getBeanMetaData();
- Set<PropertyMetaData> properties = beanMetaData.getProperties();
- if (properties == null)
- {
- properties = new HashSet<PropertyMetaData>();
- AbstractBeanMetaData bean = (AbstractBeanMetaData)beanMetaData;
- bean.setProperties(properties);
- }
- return properties;
- }
}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/UninstallFieldCallbackAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/UninstallFieldCallbackAnnotationPlugin.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/UninstallFieldCallbackAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,93 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.annotations;
+
+import java.lang.annotation.ElementType;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractCallbackMetaData;
+import org.jboss.beans.metadata.plugins.UninstallCallbackMetaData;
+import org.jboss.beans.metadata.spi.CallbackMetaData;
+import org.jboss.dependency.spi.CallbackItem;
+import org.jboss.dependency.spi.Cardinality;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.reflect.spi.FieldInfo;
+
+/**
+ * Uninstall field callback annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class UninstallFieldCallbackAnnotationPlugin extends CallbackAnnotationPlugin<FieldInfo, Uninstall>
+{
+ protected UninstallFieldCallbackAnnotationPlugin()
+ {
+ super(Uninstall.class);
+ }
+
+ protected boolean isElementTypeSupported(ElementType type)
+ {
+ return ElementType.FIELD == type;
+ }
+
+ protected boolean isEqual(FieldInfo info, CallbackItem<?> ci)
+ {
+ return info.getName().equals(ci.getAttributeName());
+ }
+
+ protected void applyInfo(AbstractCallbackMetaData callback, FieldInfo info)
+ {
+ callback.setProperty(info.getName());
+ }
+
+ protected Set<CallbackItem<?>> getCallbacks(DependencyInfo dependency)
+ {
+ return dependency.getUninstallItems();
+ }
+
+ protected AbstractCallbackMetaData createCallback(FieldInfo info, Uninstall annotation)
+ {
+ UninstallCallbackMetaData callback = new UninstallCallbackMetaData();
+ callback.setState(new ControllerState(annotation.whenRequired()));
+ callback.setDependentState(new ControllerState(annotation.dependentState()));
+ if (isAttributePresent(annotation.cardinality()))
+ callback.setCardinality(Cardinality.fromString(annotation.cardinality()));
+ applyInfo(callback, info);
+ return callback;
+ }
+
+ protected List<CallbackMetaData> getCallbacks(AbstractBeanMetaData beanMetaData)
+ {
+ List<CallbackMetaData> callbacks = beanMetaData.getUninstallCallbacks();
+ if (callbacks == null)
+ {
+ callbacks = new ArrayList<CallbackMetaData>();
+ beanMetaData.setUninstallCallbacks(callbacks);
+ }
+ return callbacks;
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryAnnotationPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -21,16 +21,8 @@
*/
package org.jboss.kernel.plugins.annotations;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
-import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
-import org.jboss.beans.metadata.api.annotations.Parameter;
import org.jboss.beans.metadata.api.annotations.ValueFactory;
-import org.jboss.beans.metadata.spi.ParameterMetaData;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.dependency.spi.ControllerState;
/**
* Value factory annotation plugin.
@@ -48,27 +40,6 @@
public ValueMetaData createValueMetaData(ValueFactory annotation)
{
- AbstractValueFactoryMetaData factory = new AbstractValueFactoryMetaData(annotation.bean(), annotation.method());
- if (isAttributePresent(annotation.defaultValue()))
- factory.setDefaultValue(annotation.defaultValue());
- List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>();
- if (isAttributePresent(annotation.parameter()))
- parameters.add(new AbstractParameterMetaData(String.class.getName(), annotation.parameter()));
- if (annotation.parameters().length > 0)
- {
- if (parameters.size() > 0)
- throw new IllegalArgumentException("Cannot set both parameter and parameters!");
- for(Parameter parameter : annotation.parameters())
- {
- AbstractParameterMetaData apmd = new AbstractParameterMetaData(ValueUtil.createValueMetaData(parameter));
- if (isAttributePresent(parameter.type()))
- apmd.setType(parameter.type().getName());
- parameters.add(apmd);
- }
- }
- factory.setParameters(parameters);
- factory.setDependentState(new ControllerState(annotation.dependantState()));
- factory.setWhenRequiredState(new ControllerState(annotation.whenRequiredState()));
- return factory;
+ return ValueUtil.createValueMetaData(annotation);
}
}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryFieldAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryFieldAnnotationPlugin.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueFactoryFieldAnnotationPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,43 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.kernel.plugins.annotations;
+
+import org.jboss.beans.metadata.api.annotations.ValueFactory;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+
+/**
+ * Value factory field annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ValueFactoryFieldAnnotationPlugin extends FieldAnnotationPlugin<ValueFactory>
+{
+ public ValueFactoryFieldAnnotationPlugin()
+ {
+ super(ValueFactory.class);
+ }
+
+ public ValueMetaData createValueMetaData(ValueFactory annotation)
+ {
+ return ValueUtil.createValueMetaData(annotation);
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/ValueUtil.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -21,6 +21,9 @@
*/
package org.jboss.kernel.plugins.annotations;
+import java.util.List;
+import java.util.ArrayList;
+
import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.beans.metadata.api.annotations.NullValue;
import org.jboss.beans.metadata.api.annotations.Parameter;
@@ -29,7 +32,13 @@
import org.jboss.beans.metadata.api.annotations.Value;
import org.jboss.beans.metadata.api.annotations.ValueFactory;
import org.jboss.beans.metadata.api.annotations.JavaBeanValue;
+import org.jboss.beans.metadata.api.model.FromContext;
import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueFactoryMetaData;
+import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
+import org.jboss.dependency.spi.ControllerState;
/**
* Simple util class.
@@ -177,4 +186,59 @@
return vmd;
}
+
+ /**
+ * Create injection value meta data.
+ *
+ * @param annotation the annotation
+ * @return injection value meta data
+ */
+ static ValueMetaData createValueMetaData(Inject annotation)
+ {
+ AbstractInjectionValueMetaData injection = new AbstractInjectionValueMetaData();
+ if (isAttributePresent(annotation.bean()))
+ injection.setValue(annotation.bean());
+ if (isAttributePresent(annotation.property()))
+ injection.setProperty(annotation.property());
+ injection.setDependentState(new ControllerState(annotation.dependentState()));
+ if (isAttributePresent(annotation.whenRequired()))
+ injection.setWhenRequiredState(new ControllerState(annotation.whenRequired()));
+ injection.setInjectionOption(annotation.option());
+ injection.setInjectionType(annotation.type());
+ if (FromContext.NOOP.equals(annotation.fromContext()) == false)
+ injection.setFromContext(annotation.fromContext());
+ return injection;
+ }
+
+ /**
+ * Create value factory value meta data.
+ *
+ * @param annotation the annotation
+ * @return value factory meta data
+ */
+ static ValueMetaData createValueMetaData(ValueFactory annotation)
+ {
+ AbstractValueFactoryMetaData factory = new AbstractValueFactoryMetaData(annotation.bean(), annotation.method());
+ if (isAttributePresent(annotation.defaultValue()))
+ factory.setDefaultValue(annotation.defaultValue());
+ List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>();
+ if (isAttributePresent(annotation.parameter()))
+ parameters.add(new AbstractParameterMetaData(String.class.getName(), annotation.parameter()));
+ if (annotation.parameters().length > 0)
+ {
+ if (parameters.size() > 0)
+ throw new IllegalArgumentException("Cannot set both parameter and parameters!");
+ for(Parameter parameter : annotation.parameters())
+ {
+ AbstractParameterMetaData apmd = new AbstractParameterMetaData(createValueMetaData(parameter));
+ if (isAttributePresent(parameter.type()))
+ apmd.setType(parameter.type().getName());
+ parameters.add(apmd);
+ }
+ }
+ factory.setParameters(parameters);
+ factory.setDependentState(new ControllerState(annotation.dependantState()));
+ factory.setWhenRequiredState(new ControllerState(annotation.whenRequiredState()));
+ return factory;
+ }
}
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/CallbacksTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/CallbacksTester.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/CallbacksTester.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,54 @@
+/*
+* 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.annotations.support;
+
+import java.util.Set;
+
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class CallbacksTester
+{
+ @SuppressWarnings("unused")
+ @Install
+ @Uninstall
+ private Set<TestBean> privateBeans;
+ @Install
+ @Uninstall
+ protected Set<TestBean> protectedBeans;
+ @Install
+ @Uninstall
+ public Set<TestBean> publicBeans;
+
+ public Set<TestBean> getPrivateBeans()
+ {
+ return privateBeans;
+ }
+
+ public Set<TestBean> getProtectedBeans()
+ {
+ return protectedBeans;
+ }
+}
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/InjectTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/InjectTester.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/InjectTester.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,66 @@
+/*
+* 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.annotations.support;
+
+import org.jboss.beans.metadata.api.annotations.Inject;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class InjectTester
+{
+ @SuppressWarnings("unused")
+ @Inject(bean = "pb1")
+ private TestBean privateBean;
+ @Inject(bean = "pb2")
+ protected TestBean protectedBean;
+ @Inject(bean = "pb3")
+ public TestBean publicBean;
+
+ @SuppressWarnings("unused")
+ @Inject
+ private MyDeployer privateDeployer;
+ @Inject
+ protected MyDeployer protectedDeployer;
+ @Inject
+ public MyDeployer publicDeployer;
+
+ public TestBean getPrivateBean()
+ {
+ return privateBean;
+ }
+
+ public TestBean getProtectedBean()
+ {
+ return protectedBean;
+ }
+
+ public MyDeployer getPrivateDeployer()
+ {
+ return privateDeployer;
+ }
+
+ public MyDeployer getProtectedDeployer()
+ {
+ return protectedDeployer;
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockFieldTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockFieldTester.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockFieldTester.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -33,7 +33,7 @@
private String string;
@MockInject
- protected long time;
+ protected Long time;
@MockInject
public Date date;
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockInjectPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockInjectPlugin.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/MockInjectPlugin.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -27,6 +27,8 @@
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
import org.jboss.kernel.plugins.annotations.FieldAnnotationPlugin;
import org.jboss.reflect.spi.FieldInfo;
@@ -44,6 +46,11 @@
super(MockInject.class);
}
+ public ValueMetaData createValueMetaData(MockInject annotation)
+ {
+ return new AbstractValueMetaData();
+ }
+
protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(FieldInfo info, MockInject annotation, BeanMetaData beanMetaData) throws Throwable
{
fieldNames.add(info.getName());
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/ValueFactoryTester.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/ValueFactoryTester.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/support/ValueFactoryTester.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,48 @@
+/*
+* 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.annotations.support;
+
+import org.jboss.beans.metadata.api.annotations.ValueFactory;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ValueFactoryTester
+{
+ @SuppressWarnings("unused")
+ @ValueFactory(bean = "pb1", method = "getValue", parameter = "pb1")
+ private String privateBean;
+ @ValueFactory(bean = "pb2", method = "getValue", parameter = "pb2")
+ protected String protectedBean;
+ @ValueFactory(bean = "pb3", method = "getValue", parameter = "pb3")
+ public String publicBean;
+
+ public String getPrivateBean()
+ {
+ return privateBean;
+ }
+
+ public String getProtectedBean()
+ {
+ return protectedBean;
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractRunAnnotationsTest.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractRunAnnotationsTest.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AbstractRunAnnotationsTest.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -21,6 +21,9 @@
*/
package org.jboss.test.kernel.annotations.test;
+import java.util.Map;
+import java.util.HashMap;
+
import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
import org.jboss.beans.info.spi.BeanAccessMode;
import org.jboss.kernel.Kernel;
@@ -39,7 +42,8 @@
public abstract class AbstractRunAnnotationsTest extends BaseTestCase
{
private KernelController controller;
-
+ private Map<Class<?>, AfterInstallVerifier> verifiers = new HashMap<Class<?>, AfterInstallVerifier>();
+
protected AbstractRunAnnotationsTest(String name)
{
super(name);
@@ -66,10 +70,12 @@
runAnnotationsOnTarget(target, BeanAccessMode.STANDARD);
}
+ @SuppressWarnings("unchecked")
protected void runAnnotationsOnTarget(Object target, BeanAccessMode mode) throws Throwable
{
assertNotNull("Target is null", target);
- runAnnotations(target.getClass(), target, mode);
+ Class clazz = target.getClass();
+ runAnnotations(clazz, target, mode);
}
protected void runAnnotationsOnClass(Class<?> clazz) throws Throwable
@@ -82,12 +88,12 @@
runAnnotations(clazz, null);
}
- protected void runAnnotations(Class<?> clazz, Object target) throws Throwable
+ protected <T> void runAnnotations(Class<T> clazz, T target) throws Throwable
{
runAnnotations(clazz, target, BeanAccessMode.STANDARD);
}
- protected void runAnnotations(Class<?> clazz, Object target, BeanAccessMode mode) throws Throwable
+ protected <T> void runAnnotations(Class<T> clazz, T target, BeanAccessMode mode) throws Throwable
{
KernelController controller = getController();
String className = clazz.getName();
@@ -111,6 +117,16 @@
assertEquals(ControllerState.INSTALLED, context.getState());
}
+ protected <T> void addVerifier(AfterInstallVerifier<T> verifier)
+ {
+ verifiers.put(verifier.getTargetClass(), verifier);
+ }
+
+ protected void removeVerifier(Class<?> clazz)
+ {
+ verifiers.remove(clazz);
+ }
+
/**
* Useful for single tests.
* Else determine the test by parameters.
@@ -118,10 +134,25 @@
* @param clazz the class
* @param target the target
*/
- protected void doTestAfterInstall(Class<?> clazz, Object target)
+ @SuppressWarnings("unchecked")
+ protected <T> void doTestAfterInstall(Class<T> clazz, T target)
{
+ AfterInstallVerifier<T> verifier = verifiers.get(clazz);
+ if (verifier != null)
+ verifier.verify(target);
+ else
+ doTestAfterInstall(target);
}
+ protected void doTestAfterInstall(Object target)
+ {
+ doTestAfterInstall();
+ }
+
+ protected void doTestAfterInstall()
+ {
+ }
+
protected KernelController createController() throws Exception
{
// bootstrap
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstallVerifier.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstallVerifier.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/AfterInstallVerifier.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,35 @@
+/*
+* 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.annotations.test;
+
+/**
+ * Abstract annotation runner test.
+ *
+ * @param <T> exact type
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public interface AfterInstallVerifier<T>
+{
+ void verify(T target);
+
+ Class<T> getTargetClass();
+}
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/AnnotationFieldTestSuite.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/AnnotationFieldTestSuite.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/AnnotationFieldTestSuite.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -42,6 +42,7 @@
TestSuite suite = new TestSuite("Fields Tests");
suite.addTest(SimpleFieldTestCase.suite());
+ suite.addTest(BasicFieldAnnotationSupportTestCase.suite());
return suite;
}
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/BasicFieldAnnotationSupportTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/BasicFieldAnnotationSupportTestCase.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/field/BasicFieldAnnotationSupportTestCase.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -0,0 +1,181 @@
+/*
+* 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.annotations.test.field;
+
+import org.jboss.test.kernel.annotations.test.AbstractBeanAnnotationAdapterTest;
+import org.jboss.test.kernel.annotations.test.AfterInstallVerifier;
+import org.jboss.test.kernel.annotations.support.TestBean;
+import org.jboss.test.kernel.annotations.support.MyDeployer;
+import org.jboss.test.kernel.annotations.support.InjectTester;
+import org.jboss.test.kernel.annotations.support.ValueFactoryTester;
+import org.jboss.test.kernel.annotations.support.CallbacksTester;
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapter;
+import org.jboss.kernel.plugins.annotations.BeanAnnotationAdapterFactory;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.info.spi.BeanAccessMode;
+import junit.framework.Test;
+
+/**
+ * Basic field annotation IoC support
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class BasicFieldAnnotationSupportTestCase extends AbstractBeanAnnotationAdapterTest
+{
+ public BasicFieldAnnotationSupportTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return suite(BasicFieldAnnotationSupportTestCase.class);
+ }
+
+ protected BeanAnnotationAdapter getBeanAnnotationAdapterClass()
+ {
+ return BeanAnnotationAdapterFactory.getInstance().getBeanAnnotationAdapter();
+ }
+
+ protected <T> void testFields(T target, AfterInstallVerifier<T> verifier, BeanAccessMode mode) throws Throwable
+ {
+ addVerifier(verifier);
+ try
+ {
+ runAnnotationsOnTarget(target, mode);
+ }
+ finally
+ {
+ removeVerifier(target.getClass());
+ }
+ }
+
+ public void testInjection() throws Throwable
+ {
+ KernelController controller = getController();
+ controller.install(new AbstractBeanMetaData("pb1", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb2", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb3", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("deployer", MyDeployer.class.getName()));
+ InjectTester tester = new InjectTester();
+ testFields(tester, new InjectTesterVerifier(), BeanAccessMode.FIELDS);
+ testFields(tester, new AllInjectTesterVerifier(), BeanAccessMode.ALL);
+ }
+
+ public void testValueFactory() throws Throwable
+ {
+ KernelController controller = getController();
+ controller.install(new AbstractBeanMetaData("pb1", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb2", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb3", TestBean.class.getName()));
+ ValueFactoryTester tester = new ValueFactoryTester();
+ testFields(tester, new VFTesterVerifier(), BeanAccessMode.FIELDS);
+ testFields(tester, new AllVFTesterVerifier(), BeanAccessMode.ALL);
+ }
+
+ public void testInstalls() throws Throwable
+ {
+ KernelController controller = getController();
+ controller.install(new AbstractBeanMetaData("pb1", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb2", TestBean.class.getName()));
+ controller.install(new AbstractBeanMetaData("pb3", TestBean.class.getName()));
+ CallbacksTester tester = new CallbacksTester();
+ testFields(tester, new CallbacksTesterVerifier(), BeanAccessMode.FIELDS);
+ testFields(tester, new AllCallbacksTesterVerifier(), BeanAccessMode.ALL);
+ }
+
+ private class InjectTesterVerifier implements AfterInstallVerifier<InjectTester>
+ {
+ public void verify(InjectTester target)
+ {
+ assertNotNull(target.publicBean);
+ assertNotNull(target.publicDeployer);
+ }
+
+ public Class<InjectTester> getTargetClass()
+ {
+ return InjectTester.class;
+ }
+ }
+
+ private class AllInjectTesterVerifier extends InjectTesterVerifier
+ {
+ public void verify(InjectTester target)
+ {
+ super.verify(target);
+ assertNotNull(target.getPrivateBean());
+ assertNotNull(target.getProtectedBean());
+ assertNotNull(target.getPrivateDeployer());
+ assertNotNull(target.getProtectedDeployer());
+ }
+ }
+
+ private class VFTesterVerifier implements AfterInstallVerifier<ValueFactoryTester>
+ {
+ public void verify(ValueFactoryTester target)
+ {
+ assertEquals("PB3", target.publicBean);
+ }
+
+ public Class<ValueFactoryTester> getTargetClass()
+ {
+ return ValueFactoryTester.class;
+ }
+ }
+
+ private class AllVFTesterVerifier extends VFTesterVerifier
+ {
+ public void verify(ValueFactoryTester target)
+ {
+ super.verify(target);
+ assertEquals("PB1", target.getPrivateBean());
+ assertEquals("PB2", target.getProtectedBean());
+ }
+ }
+
+ private class CallbacksTesterVerifier implements AfterInstallVerifier<CallbacksTester>
+ {
+ public void verify(CallbacksTester target)
+ {
+ assertNotNull(target.publicBeans);
+ assertEquals(3, target.publicBeans.size());
+ }
+
+ public Class<CallbacksTester> getTargetClass()
+ {
+ return CallbacksTester.class;
+ }
+ }
+
+ private class AllCallbacksTesterVerifier extends CallbacksTesterVerifier
+ {
+ public void verify(CallbacksTester target)
+ {
+ super.verify(target);
+ assertNotNull(target.getProtectedBeans());
+ assertEquals(3, target.getProtectedBeans().size());
+ assertNotNull(target.getPrivateBeans());
+ assertEquals(3, target.getPrivateBeans().size());
+ }
+ }
+}
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/inheritance/AbstractAnnotationInheritanceTest.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/inheritance/AbstractAnnotationInheritanceTest.java 2008-03-19 11:18:09 UTC (rev 70990)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/annotations/test/inheritance/AbstractAnnotationInheritanceTest.java 2008-03-19 11:42:35 UTC (rev 70991)
@@ -43,19 +43,4 @@
KernelController controller = getController();
return controller.install(new AbstractBeanMetaData(name, clazz.getName()));
}
-
- protected void doTestAfterInstall(Class<?> clazz, Object target)
- {
- assertInstanceOf(target, clazz);
- doTestAfterInstall(clazz.cast(target));
- }
-
- protected void doTestAfterInstall(Object target)
- {
- doTestAfterInstall();
- }
-
- protected void doTestAfterInstall()
- {
- }
}
More information about the jboss-cvs-commits
mailing list