[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