[jboss-cvs] JBossAS SVN: r67112 - in projects/metadata/trunk/src: test/java/org/jboss/test/metadata/annotation/ejb3 and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 14 21:41:46 EST 2007


Author: scott.stark at jboss.org
Date: 2007-11-14 21:41:46 -0500 (Wed, 14 Nov 2007)
New Revision: 67112

Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractSessionBeanProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java
Log:
Initial working version of the ejb3 annotation unit test

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java	2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java	2007-11-15 02:41:46 UTC (rev 67112)
@@ -29,9 +29,12 @@
 import java.lang.reflect.TypeVariable;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import org.jboss.logging.Logger;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
@@ -47,12 +50,16 @@
 public abstract class AbstractComponentProcessor<MD>
    extends AbstractFinderUser
 {
+   private static Logger log = Logger.getLogger(AbstractComponentProcessor.class);
+
    /** Map<Processor metdata type class, List<Processor for classes>> */
    protected Map<Class<?>, List<Processor<Object, Class<?>>>> typeProcessors;
    /** Map<Processor metdata type class, List<Processor for fields>> */
    protected Map<Class<?>, List<Processor<Object, Field>>> fieldProcessors;
    /** Map<Processor metdata type class, List<Processor for methods>> */
    protected Map<Class<?>, List<Processor<Object, Method>>> methodProcessors;
+   /** */
+   protected Set<Class> boundedTypes = new HashSet<Class>();
 
    /**
     * @param finder
@@ -75,35 +82,38 @@
 
    public void addFieldProcessor(Processor processor)
    {
-      Class t = getProcessorMetaDataType(processor);
-      List<Processor<Object, Field>> processors = fieldProcessors.get(t);
+      Class processorType = getProcessorMetaDataType(processor);
+      log.debug("addFieldProcessor: "+processor+", for type: "+processorType);
+      List<Processor<Object, Field>> processors = fieldProcessors.get(processorType);
       if(processors == null)
       {
          processors = new ArrayList<Processor<Object, Field>>();
-         fieldProcessors.put(t, processors);
+         fieldProcessors.put(processorType, processors);
       }
       processors.add(processor);
    }
 
    public void addMethodProcessor(Processor processor)
    {
-      Class t = getProcessorMetaDataType(processor);
-      List<Processor<Object, Method>> processors = methodProcessors.get(t);
+      Class processorType = getProcessorMetaDataType(processor);
+      log.debug("addMethodProcessor: "+processor+", for type: "+processorType);
+      List<Processor<Object, Method>> processors = methodProcessors.get(processorType);
       if(processors == null)
       {
          processors = new ArrayList<Processor<Object, Method>>();
-         methodProcessors.put(t, processors);
+         methodProcessors.put(processorType, processors);
       }
       processors.add(processor);
    }
    public void addTypeProcessor(Processor processor)
    {
-      Class t = getProcessorMetaDataType(processor);
-      List<Processor<Object, Class<?>>> processors = typeProcessors.get(t);
+      Class processorType = getProcessorMetaDataType(processor);
+      log.debug("addTypeProcessor: "+processor+", for type: "+processorType);
+      List<Processor<Object, Class<?>>> processors = typeProcessors.get(processorType);
       if(processors == null)
       {
          processors = new ArrayList<Processor<Object, Class<?>>>();
-         typeProcessors.put(t, processors);
+         typeProcessors.put(processorType, processors);
       }
       processors.add(processor);
    }
@@ -150,10 +160,37 @@
    protected <T> void processClass(T metaData, Class<?> cls)
    {
       Class<?> type = metaData.getClass();
+      boolean trace = log.isTraceEnabled();
+      int processorCount = processClass(metaData, cls, type);
+      if(trace)
+         log.trace("Found "+processorCount+" processors for type: "+type);
+      // See if metaData has a bounded type
+      type = type.getSuperclass();
+      while(boundedTypes.contains(type) == false && type != Object.class)
+      {
+         type = type.getSuperclass();
+      }
+      // 
+      if(type != Object.class)
+      {
+         if(trace)
+            log.trace("Reprocessing class using bounded processor type: "+type);
+         processClass(metaData, cls, type);
+      }
+   }
+   private <T> int processClass(T metaData, Class<?> cls, Class processorType)
+   {
+      boolean trace = log.isTraceEnabled();
+      int processorCount = 0;
+      if(trace)
+         log.trace("processClass for metaData: "+processorType+", class: "+cls);
 
-      List<Processor<Object, Class<?>>> tps = typeProcessors.get(type);
+      List<Processor<Object, Class<?>>> tps = typeProcessors.get(processorType);
       if(tps != null)
       {
+         processorCount += tps.size();
+         if(trace)
+            log.trace("typeProcessors("+tps.size()+") for metaData: "+tps);
          for(Processor<Object, Class<?>> processor : tps)
          {
             processor.process(metaData, cls);
@@ -168,20 +205,26 @@
          }
       }
       
-      List<Processor<Object, Field>> fps = fieldProcessors.get(type);
+      List<Processor<Object, Field>> fps = fieldProcessors.get(processorType);
       if(fps != null)
       for(Field field : cls.getDeclaredFields())
       {
+         processorCount += fps.size();
+         if(trace)
+            log.trace("fieldProcessors("+fps.size()+") for metaData: "+fps);
          for(Processor<Object, Field> processor : fps)
          {
             processor.process(metaData, field);
          }
       }
 
-      List<Processor<Object, Method>> mps = methodProcessors.get(type);
+      List<Processor<Object, Method>> mps = methodProcessors.get(processorType);
       if(mps != null)
       for(Method method : cls.getDeclaredMethods())
       {
+         processorCount += mps.size();
+         if(trace)
+            log.trace("methodProcessors("+mps.size()+") for metaData: "+fps);
          for(Processor<Object, Method> processor : mps)
          {
             processor.process(metaData, method);
@@ -189,19 +232,37 @@
       }
       
       if(cls.getSuperclass() != null)
-         processClass(metaData, cls.getSuperclass());
+         processorCount += processClass(metaData, cls.getSuperclass(), processorType);
+      return processorCount;
    }
 
    /**
-    * Determine the Processor<T, ?> T generic type class.
+    * Determine the Processor<T, ?> T generic processorType class.
     * 
     * @param processor
-    * @return
+    * @return The Class for the T parameter type. If this was an upper bound,
+    * this will have been added to the boundedTypes set.
     */
    protected Class getProcessorMetaDataType(Processor processor)
    {
-      Type type = processor.getClass().getGenericInterfaces()[0];
-      ParameterizedType pt = (ParameterizedType) type;
+      // Find the Proccessor<T, ?> interface
+      Type[] interfaces = processor.getClass().getGenericInterfaces();
+      Type processorType = null;
+      for(Type t : interfaces)
+      {
+         ParameterizedType pt = (ParameterizedType) t;
+         Type rawType = pt.getRawType();
+         if((rawType instanceof Class) && ((Class)rawType).getName().equals("org.jboss.metadata.annotation.creator.Processor"))
+         {
+            processorType = t;
+            break;
+         }
+      }
+      if(processorType == null)
+         throw new IllegalStateException("No generic Processor interface found on: "+processor);
+
+      // Get the type of the T parameter
+      ParameterizedType pt = (ParameterizedType) processorType;
       Type t0 = pt.getActualTypeArguments()[0];
       Class t = null;
       if(t0 instanceof Class)
@@ -210,6 +271,7 @@
       {
          TypeVariable tv = (TypeVariable) t0;
          t = (Class)tv.getBounds()[0];
+         boundedTypes.add(t);
       }
       return t;
    }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java	2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java	2007-11-15 02:41:46 UTC (rev 67112)
@@ -22,10 +22,6 @@
 package org.jboss.metadata.annotation.creator;
 
 import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
 
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.ejb.spec.EjbJar3xMetaData;

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractSessionBeanProcessor.java
===================================================================

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java	2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java	2007-11-15 02:41:46 UTC (rev 67112)
@@ -48,6 +48,7 @@
       processors = new ArrayList<Processor<EjbJar3xMetaData,Class<?>>>();
       processors.add(new StatefulProcessor(finder));
       processors.add(new StatelessProcessor(finder));
+      processors.add(new ApplicationExceptionProcessor(finder));
    }
    
    public EjbJar30MetaData create(Collection<Class> classes)

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java	2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java	2007-11-15 02:41:46 UTC (rev 67112)
@@ -36,7 +36,8 @@
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
  * @version $Revision: $
  */
-public class TransactionAttributeClassProcessor<T extends EnterpriseBeanMetaData> extends AbstractTransactionAttributeProcessor<Class<?>, T> implements Processor<T, Class<?>>
+public class TransactionAttributeClassProcessor<T extends EnterpriseBeanMetaData> extends AbstractTransactionAttributeProcessor<Class<?>, T>
+   implements Processor<T, Class<?>>
 {
    private static final Logger log = Logger.getLogger(TransactionAttributeClassProcessor.class);
    

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java	2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java	2007-11-15 02:41:46 UTC (rev 67112)
@@ -43,6 +43,7 @@
 import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.SessionType;
 import org.jboss.metadata.ejb.spec.TransAttributeType;
+import org.jboss.test.BaseTestCase;
 
 /**
  * This tests the annotation translation framework.
@@ -50,8 +51,16 @@
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
  * @version $Revision$
  */
-public class AnnotationEjb3UnitTestCase extends TestCase
+public class AnnotationEjb3UnitTestCase extends BaseTestCase
 {
+   /**
+    * @param name
+    */
+   public AnnotationEjb3UnitTestCase(String name)
+   {
+      super(name);
+   }
+
    private void assertMyStatefulBean(IEnterpriseBeanMetaData enterpriseBean)
    {
       assertTrue(enterpriseBean instanceof SessionBeanMetaData);
@@ -152,7 +161,9 @@
       AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
       
       Collection<Class> classes = loadClassesFromCurrentClassDir();
-      
+      System.out.println("Processing classes: "+classes);
+
+      enableTrace("org.jboss.metadata.annotation.creator");
       EjbJar30Creator creator = new EjbJar30Creator(finder);
       
       EjbJar30MetaData metaData = creator.create(classes);




More information about the jboss-cvs-commits mailing list