[jboss-cvs] JBossAS SVN: r60367 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/kernel/plugins/deployment/xml and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Feb 7 05:27:39 EST 2007
Author: alesj
Date: 2007-02-07 05:27:39 -0500 (Wed, 07 Feb 2007)
New Revision: 60367
Added:
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationCharactersHandler.java
projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testAnnotationPropertyReplace.xml
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleAnnotation.java
Modified:
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationHandler.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBindingHelper.java
projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceXMLTestCase.java
Log:
Added (temp) annotation system property replace.
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractAnnotationMetaData.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -32,6 +32,7 @@
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
import org.jboss.util.JBossObject;
import org.jboss.util.JBossStringBuilder;
+import org.jboss.util.StringPropertyReplacer;
/**
* Metadata for an annotation.
@@ -83,13 +84,11 @@
try
{
String annString = annotation;
-/*
- // TODO - JBMICROCONT-143 + tests
+ // TODO - JBMICROCONT-143 + any better way?
if (replace)
{
annString = StringPropertyReplacer.replaceProperties(annString);
}
-*/
//FIXME [JBMICROCONT-99] [JBAOP-278] Use the loader for the bean?
ann = (Annotation)AnnotationCreator.createAnnotation(annString, Thread.currentThread().getContextClassLoader());
}
Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationCharactersHandler.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationCharactersHandler.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationCharactersHandler.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -0,0 +1,53 @@
+/*
+* 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.deployment.xml;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+
+import org.jboss.beans.metadata.plugins.AbstractAnnotationMetaData;
+import org.jboss.xb.binding.sunday.unmarshalling.CharactersHandler;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+
+/**
+ * AnnotationCharactersHandler.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public class AnnotationCharactersHandler extends CharactersHandler
+{
+ /** The interceptor */
+ public static final AnnotationCharactersHandler HANDLER = new AnnotationCharactersHandler();
+
+ public Object unmarshal(QName qName, TypeBinding typeBinding, NamespaceContext nsCtx, org.jboss.xb.binding.metadata.ValueMetaData valueMetaData, String value)
+ {
+ return value;
+ }
+
+ public void setValue(QName qname, ElementBinding element, Object owner, Object value)
+ {
+ AbstractAnnotationMetaData annotation = (AbstractAnnotationMetaData) owner;
+ annotation.setAnnotation((String)value);
+ }
+
+}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationHandler.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationHandler.java 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/AnnotationHandler.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -21,11 +21,13 @@
*/
package org.jboss.kernel.plugins.deployment.xml;
+import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import org.jboss.beans.metadata.plugins.AbstractAnnotationMetaData;
import org.jboss.xb.binding.sunday.unmarshalling.DefaultElementHandler;
import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.xml.sax.Attributes;
/**
* AnnotationHandler.
@@ -43,6 +45,18 @@
return new AbstractAnnotationMetaData();
}
+ public void attributes(Object o, QName elementName, ElementBinding element, Attributes attrs, NamespaceContext nsCtx)
+ {
+ AbstractAnnotationMetaData annotation = (AbstractAnnotationMetaData) o;
+ for (int i = 0; i < attrs.getLength(); ++i)
+ {
+ String localName = attrs.getLocalName(i);
+ if ("replace".equals(localName))
+ annotation.setReplace(Boolean.parseBoolean(attrs.getValue(i)));
+ }
+
+ }
+
public Object endElement(Object o, QName qName, ElementBinding element)
{
AbstractAnnotationMetaData annotation = (AbstractAnnotationMetaData) o;
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBindingHelper.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBindingHelper.java 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBindingHelper.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -260,6 +260,9 @@
public static void initAnnotationHandlers(TypeBinding annotationType)
{
annotationType.setHandler(AnnotationHandler.HANDLER);
+
+ // annotation can take characters
+ annotationType.setSimpleType(AnnotationCharactersHandler.HANDLER);
}
/**
Modified: projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/resources/schema/bean-deployer_2_0.xsd 2007-02-07 10:27:39 UTC (rev 60367)
@@ -451,7 +451,7 @@
</xsd:complexContent>
</xsd:complexType>
- <xsd:simpleType name="annotationType">
+ <xsd:complexType name="annotationType">
<xsd:annotation>
<xsd:documentation>
<![CDATA[
@@ -459,10 +459,12 @@
]]>
</xsd:documentation>
</xsd:annotation>
- <xsd:restriction base="xsd:string">
- <xsd:whiteSpace value="collapse"/>
- </xsd:restriction>
- </xsd:simpleType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="replace" type="xsd:boolean"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
<xsd:simpleType name="classNameType">
<xsd:annotation>
Added: projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testAnnotationPropertyReplace.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testAnnotationPropertyReplace.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testAnnotationPropertyReplace.xml 2007-02-07 10:27:39 UTC (rev 60367)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+
+ <bean name="MyBeanReplace" class="org.jboss.test.kernel.config.support.MyObject">
+ <annotation>@org.jboss.test.kernel.config.support.SimpleAnnotation(name = "test.${test.property.value}.Name")</annotation>
+ </bean>
+
+ <bean name="MyBeanIgnore" class="org.jboss.test.kernel.config.support.MyObject">
+ <annotation replace="false">@org.jboss.test.kernel.config.support.SimpleAnnotation(name = "test.${test.property.value}.Name")</annotation>
+ </bean>
+
+</deployment>
+
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleAnnotation.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleAnnotation.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleAnnotation.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -0,0 +1,16 @@
+package org.jboss.test.kernel.config.support;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.METHOD, ElementType.TYPE})
+public @interface SimpleAnnotation
+{
+ String name();
+}
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceTestCase.java 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceTestCase.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -25,9 +25,11 @@
import java.util.List;
import junit.framework.Test;
+import org.jboss.beans.metadata.plugins.AbstractAnnotationMetaData;
import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
import org.jboss.beans.metadata.plugins.StringValueMetaData;
import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.test.kernel.config.support.SimpleAnnotation;
/**
* Property replace test cases: ${x} - looking for System property named x.
@@ -36,6 +38,10 @@
*/
public class PropertyReplaceTestCase extends AbstractKernelConfigTest
{
+ private static final String PROP_NAME = "test.property.value";
+ private static final String BRACKET_PROP_NAME = "${" + PROP_NAME + "}";
+ private static final String CONST = "PropertyReplaceTestCase";
+
public PropertyReplaceTestCase(String name)
{
super(name);
@@ -73,6 +79,31 @@
doTestProperty(false, createCreators());
}
+ public void testAnnotationPropertyReplace() throws Throwable
+ {
+ SecurityManager sm = suspendSecurity();
+ try
+ {
+ SimpleAnnotation replAnn = instantiateAnnotation(true);
+ assertEquals("test." + CONST + ".Name", replAnn.name());
+
+ SimpleAnnotation ignAnn = instantiateAnnotation(false);
+ assertEquals("test." + BRACKET_PROP_NAME + ".Name", ignAnn.name());
+ }
+ finally
+ {
+ resumeSecurity(sm);
+ }
+ }
+
+ protected SimpleAnnotation instantiateAnnotation(boolean replace) throws Throwable
+ {
+ AbstractAnnotationMetaData annotation = new AbstractAnnotationMetaData();
+ annotation.setAnnotation("@org.jboss.test.kernel.config.support.SimpleAnnotation(name = \"test." + BRACKET_PROP_NAME + ".Name\")");
+ annotation.setReplace(replace);
+ return (SimpleAnnotation)annotation.getAnnotationInstance();
+ }
+
protected List<PropertyReplaceTestCase.ObjectCreator> createCreators()
{
return singlePropertyCreator(false);
@@ -84,8 +115,6 @@
try
{
// set property to be replaced
- String PROP_NAME = "test.property.value";
- String CONST = "PropertyReplaceTestCase";
System.setProperty(PROP_NAME, CONST);
for(PropertyReplaceTestCase.ObjectCreator oc : ocs)
{
@@ -93,7 +122,7 @@
Object value = oc.createObject();
assertNotNull(value);
assertEquals(String.class, value.getClass());
- String checkValue = replace ? CONST : "${" + PROP_NAME + "}";
+ String checkValue = replace ? CONST : BRACKET_PROP_NAME;
assertEquals(checkValue, value);
}
}
@@ -105,7 +134,7 @@
protected Object instantiateReplacePropertyValue(boolean replace) throws Throwable
{
- PropertyMetaData property = new AbstractPropertyMetaData("key", "${test.property.value}", String.class.getName());
+ PropertyMetaData property = new AbstractPropertyMetaData("key", BRACKET_PROP_NAME, String.class.getName());
StringValueMetaData svmd = assertInstanceOf(property.getValue(), StringValueMetaData.class, false);
svmd.setReplace(replace);
svmd.setConfigurator(bootstrap().getConfigurator());
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceXMLTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceXMLTestCase.java 2007-02-07 07:21:21 UTC (rev 60366)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/PropertyReplaceXMLTestCase.java 2007-02-07 10:27:39 UTC (rev 60367)
@@ -23,9 +23,15 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import junit.framework.Test;
+import org.jboss.beans.metadata.spi.AnnotationMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
import org.jboss.test.kernel.config.support.MyObject;
+import org.jboss.test.kernel.config.support.SimpleAnnotation;
import org.jboss.test.kernel.config.support.XMLUtil;
/**
@@ -100,4 +106,16 @@
return result;
}
+ protected SimpleAnnotation instantiateAnnotation(boolean replace) throws Throwable
+ {
+ XMLUtil util = bootstrapXML(true);
+ KernelController controller = util.getKernel().getController();
+ KernelControllerContext context = (KernelControllerContext)controller.getInstalledContext("MyBean" + (replace ? "Replace" : "Ignore"));
+ BeanMetaData beanMetaData = context.getBeanMetaData();
+ Set<AnnotationMetaData> annotations = beanMetaData.getAnnotations();
+ assertNotNull(annotations);
+ assertFalse(annotations.isEmpty());
+ assertEquals(1, annotations.size());
+ return (SimpleAnnotation)annotations.iterator().next().getAnnotationInstance();
+ }
}
More information about the jboss-cvs-commits
mailing list