[jboss-cvs] JBossAS SVN: r66917 - projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 9 10:43:20 EST 2007


Author: scott.stark at jboss.org
Date: 2007-11-09 10:43:20 -0500 (Fri, 09 Nov 2007)
New Revision: 66917

Added:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceClassProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourcesClassProcessor.java
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/AbstractResourceProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceFieldProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceMethodProcessor.java
Log:
Add @Resources and update @Resource to create env-entry, resource-env-ref, resource-ref, and service-ref metadata based on the resource type.

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-09 15:42:17 UTC (rev 66916)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -33,10 +33,8 @@
 import java.util.Map;
 
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData;
 import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
-import org.jboss.metadata.javaee.spec.MutableEnvironment;
-import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
 
 /**
  * A base javaee component processor.
@@ -46,7 +44,7 @@
  * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
-public abstract class AbstractComponentProcessor<MD, E extends MutableEnvironment>
+public abstract class AbstractComponentProcessor<MD>
    extends AbstractFinderUser
 {
    /** Map<Processor metdata type class, List<Processor for classes>> */
@@ -69,6 +67,8 @@
       // Add component environment processors
       addMethodProcessor(new ResourceMethodProcessor(finder));
       addFieldProcessor(new ResourceFieldProcessor(finder));
+      addTypeProcessor(new ResourceClassProcessor(finder));
+      addTypeProcessor(new ResourcesClassProcessor(finder));
       addMethodProcessor(new EJBMethodProcessor(finder));
       addFieldProcessor(new EJBFieldProcessor(finder));
    }
@@ -113,16 +113,12 @@
     * @param metaData
     * @param type
     */
-   public void process(E metaData, Class<?> type)
+   public void process(EnvironmentRefsGroupMetaData metaData, Class<?> type)
    {
-      ResourceReferencesMetaData resRefs = metaData.getResourceReferences();
-      if(resRefs == null)
-      {
-         resRefs = new ResourceReferencesMetaData();
-         metaData.setResourceReferences(resRefs);
-      }
-      processClass(resRefs, type);
+      // For Resources/Resource
+      processClass(metaData, type);
 
+      // @EJB
       AnnotatedEJBReferencesMetaData aejbRefs = metaData.getAnnotatedEjbReferences();
       if(aejbRefs == null)
       {

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-09 15:42:17 UTC (rev 66916)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -40,7 +40,7 @@
  * @version $Revision: $
  */
 public abstract class AbstractEnterpriseBeanProcessor<MD extends EnterpriseBeanMetaData>
-   extends AbstractComponentProcessor<MD, EnvironmentRefsGroupMetaData>
+   extends AbstractComponentProcessor<MD>
    implements Processor<EjbJar3xMetaData, Class<?>>
 {
    protected abstract MD create(Class<?> beanClass);

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java	2007-11-09 15:42:17 UTC (rev 66916)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -23,43 +23,217 @@
 
 import java.lang.reflect.AnnotatedElement;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
 
 import javax.annotation.Resource;
 import javax.annotation.Resource.AuthenticationType;
 
+import org.jboss.annotation.javaee.Descriptions;
+import org.jboss.logging.Logger;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.DescriptionGroupMetaData;
 import org.jboss.metadata.javaee.spec.DescriptionImpl;
 import org.jboss.metadata.javaee.spec.DescriptionsImpl;
+import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferenceMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
 import org.jboss.metadata.javaee.spec.ResourceAuthorityType;
+import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferenceMetaData;
+import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferencesMetaData;
 import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
 import org.jboss.metadata.javaee.spec.ResourceReferenceMetaData;
 import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
 
 /**
- * E defines the actual annotated element we're working for.
- *
+ * Base processor for @Resource annotations. This works on the
+ * MutableRemoteEnvironment since a @Resource produces several different types
+ * of metadata based on the java type of the annotated element. From the common
+ * annotations 1.0 spec, table 2-4
+ * 
+java type            metadata type
+java.lang.String     env-entry
+java.lang.Character  env-entry
+java.lang.Integer    env-entry
+java.lang.Boolean    env-entry
+java.lang.Double     env-entry
+java.lang.Byte       env-entry
+java.lang.Short      env-entry
+java.lang.Long       env-entry
+java.lang.Float      env-entry
+javax.xml.rpc.Service service-ref
+javax.xml.ws.Service service-ref
+javax.jws.WebService service-ref
+javax.sql.DataSource resource-ref
+javax.jms.ConnectionFactory   resource-ref
+javax.jms.QueueConnectionFactory resource-ref
+javax.jms.TopicConnectionFactory resource-ref
+javax.mail.Session   resource-ref
+java.net.URL         resource-ref
+javax.resource.cci.ConnectionFactory   resource-ref
+org.omg.CORBA_2_3.ORB   resource-ref
+Any CF resource adapter resource-ref
+javax.jms.Queue      message-destination-ref
+javax.jms.Topic      message-destination-ref
+javax.resource.cci.InteractionSpec  resource-env-ref
+javax.transaction.UserTransaction   resource-env-ref
+Everything else      resource-env-ref
+
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
-public abstract class AbstractResourceProcessor<E extends AnnotatedElement, T extends ResourceReferencesMetaData>
+public abstract class AbstractResourceProcessor<E extends AnnotatedElement>
    extends AbstractFinderUser
 {
+   private static Logger log = Logger.getLogger(AbstractResourceProcessor.class);
+   private static final Set<String> envEntryTypes = new HashSet<String>();
+   private static final Set<String> serviceRefTypes = new HashSet<String>();
+   private static final Set<String> resourceRefTypes = new HashSet<String>();
+   private static final Set<String> messageDestRefRefTypes = new HashSet<String>();
+   static
+   {
+      envEntryTypes.add("java.lang.String");
+      envEntryTypes.add("java.lang.Character");
+      envEntryTypes.add("java.lang.Integer");
+      envEntryTypes.add("java.lang.Boolean");
+      envEntryTypes.add("java.lang.Double");
+      envEntryTypes.add("java.lang.Byte");
+      envEntryTypes.add("java.lang.Short");
+      envEntryTypes.add("java.lang.Float");
+      envEntryTypes.add("java.lang.Long");
+      envEntryTypes.add("char");
+      envEntryTypes.add("int");
+      envEntryTypes.add("boolean");
+      envEntryTypes.add("double");
+      envEntryTypes.add("byte");
+      envEntryTypes.add("short");
+      envEntryTypes.add("float");
+      envEntryTypes.add("long");
+      serviceRefTypes.add("javax.xml.rpc.Service");
+      serviceRefTypes.add("javax.xml.ws.Service");
+      serviceRefTypes.add("javax.jws.WebService");
+      resourceRefTypes.add("javax.sql.DataSource");
+      resourceRefTypes.add("javax.jms.ConnectionFactory");
+      resourceRefTypes.add("javax.jms.QueueConnectionFactory");
+      resourceRefTypes.add("javax.jms.TopicConnectionFactory");
+      resourceRefTypes.add("javax.mail.Session");
+      resourceRefTypes.add("java.net.URL");
+      resourceRefTypes.add("javax.resource.cci.ConnectionFactory");
+      resourceRefTypes.add("org.omg.CORBA_2_3.ORB");
+      messageDestRefRefTypes.add("javax.jms.Queue");
+      messageDestRefRefTypes.add("javax.jms.Topic");
+      messageDestRefRefTypes.add("javax.jms.TemporaryQueue");
+      messageDestRefRefTypes.add("javax.jms.TemporaryTopic");
+   }
+
+   public static boolean isEnvEntry(String type)
+   {
+      return envEntryTypes.contains(type);
+   }
+   public static boolean isServiceRef(String type)
+   {
+      return serviceRefTypes.contains(type);
+   }
+   public static boolean isResourceRef(String type)
+   {
+      return resourceRefTypes.contains(type);
+   }
+   public static boolean isMessageDestinationRef(String type)
+   {
+      return messageDestRefRefTypes.contains(type);
+   }
+
    protected AbstractResourceProcessor(AnnotationFinder<AnnotatedElement> finder)
    {
       super(finder);
    }
    
-   public void process(T refs, E element)
+   public void process(EnvironmentRefsGroupMetaData refs, E element)
    {
       Resource annotation = finder.getAnnotation(element, Resource.class);
       if(annotation == null)
          return;
-      
-      
-      ResourceReferenceMetaData ref = createResource(annotation, element);
-      refs.add(ref);
+      process(refs, element, annotation);
    }
+   protected void process(EnvironmentRefsGroupMetaData refs, E element, Resource annotation)
+   {
+      boolean trace = log.isTraceEnabled();
+      String type = annotation.type().getName();
+      if(type.equals("java.lang.Object"))
+         type = getType(element);
+      if(trace)
+         log.trace("process: "+annotation+", type="+type);
+      if(isEnvEntry(type))
+      {
+         EnvironmentEntriesMetaData env = refs.getEnvironmentEntries();
+         if(env == null)
+         {
+            env = new EnvironmentEntriesMetaData();
+            refs.setEnvironmentEntries(env);
+         }
+         EnvironmentEntryMetaData entry = createEntry(annotation, element);
+         env.add(entry);
+         if(trace)
+            log.trace("created env-entry: "+entry);
+      }
+      else if(isServiceRef(type))
+      {
+         ServiceReferencesMetaData srefs = refs.getServiceReferences();
+         if(srefs == null)
+         {
+            srefs = new ServiceReferencesMetaData();
+            refs.setServiceReferences(srefs);
+         }
+         ServiceReferenceMetaData ref = createServiceRef(annotation, element);
+         srefs.add(ref);
+         if(trace)
+            log.trace("created service-ref: "+ref);
+      }
+      else if(isResourceRef(type))
+      {
+         ResourceReferencesMetaData resRefs = refs.getResourceReferences();
+         if(resRefs == null)
+         {
+            resRefs = new ResourceReferencesMetaData();
+            refs.setResourceReferences(resRefs);
+         }
+         ResourceReferenceMetaData ref = createResourceRef(annotation, element);
+         resRefs.add(ref);
+         if(trace)
+            log.trace("created resource-ref: "+ref);
+      }
+      else if(isMessageDestinationRef(type))
+      {
+         MessageDestinationReferencesMetaData mrefs = refs.getMessageDestinationReferences();
+         if(mrefs == null)
+         {
+            mrefs = new MessageDestinationReferencesMetaData();
+            refs.setMessageDestinationReferences(mrefs);
+         }
+         MessageDestinationReferenceMetaData ref = createMessageRef(annotation, element);
+         mrefs.add(ref);
+         if(trace)
+            log.trace("created message-destination-ref: "+ref);
+      }
+      else
+      {
+         ResourceEnvironmentReferencesMetaData resRefs = refs.getResourceEnvironmentReferences();
+         if(resRefs == null)
+         {
+            resRefs = new ResourceEnvironmentReferencesMetaData();
+            refs.setResourceEnvironmentReferences(resRefs);
+         }
+         ResourceEnvironmentReferenceMetaData ref = createResourceEnvRef(annotation, element);
+         resRefs.add(ref);         
+         if(trace)
+            log.trace("created resource-env-ref: "+ref);
+      }
+   }
 
    /**
     * Get the resource name based on the AnnotatedElement
@@ -71,11 +245,11 @@
    protected abstract String getDeclaringClass(E element);
 
    /**
-    * Init common resource fiels that don't depend on the AnnotatedElement
+    * Create a
     * @param annotation
     * @param ref
     */
-   protected ResourceReferenceMetaData createResource(Resource annotation, E element)
+   protected ResourceReferenceMetaData createResourceRef(Resource annotation, E element)
    {
       ResourceReferenceMetaData ref = new ResourceReferenceMetaData();
       String name = annotation.name();
@@ -89,24 +263,150 @@
       ref.setResAuth(resAuthType);
       if(annotation.mappedName().length() > 0)
          ref.setMappedName(annotation.mappedName());
-      if(annotation.description().length() > 0)
+      Descriptions descriptions = getDescription(annotation.description());
+      if(descriptions != null)
       {
-         DescriptionImpl description = new DescriptionImpl();
-         description.setDescription(annotation.description());
-         DescriptionsImpl descriptions = new DescriptionsImpl();
-         descriptions.add(description);
          ref.setDescriptions(descriptions);
       }
       if(annotation.type() != Object.class)
          ref.setType(annotation.type().getName());
       else
          ref.setType(getType(element));
-      ResourceInjectionTargetMetaData target = new ResourceInjectionTargetMetaData();
-      target.setInjectionTargetClass(getDeclaringClass(element));
-      target.setInjectionTargetName(name);
-      Set<ResourceInjectionTargetMetaData> injectionTargets = Collections.singleton(target);
-      ref.setInjectionTargets(injectionTargets);
 
+      Set<ResourceInjectionTargetMetaData> injectionTargets = getInjectionTargets(name, element);
+      if(injectionTargets != null)
+         ref.setInjectionTargets(injectionTargets);
+
       return ref;
    }
+
+   protected EnvironmentEntryMetaData createEntry(Resource annotation, E element)
+   {
+      EnvironmentEntryMetaData entry = new EnvironmentEntryMetaData();
+      String name = annotation.name();
+      if(name.length() == 0)
+         name = getName(element);
+      entry.setEnvEntryName(name);
+      Descriptions descriptions = getDescription(annotation.description());
+      if(descriptions != null)
+         entry.setDescriptions(descriptions);
+      if(annotation.type() != Object.class)
+         entry.setType(annotation.type().getName());
+      else
+         entry.setType(getType(element));
+      if(annotation.mappedName().length() > 0)
+         entry.setValue(annotation.mappedName());
+      Set<ResourceInjectionTargetMetaData> injectionTargets = getInjectionTargets(name, element);
+      if(injectionTargets != null)
+         entry.setInjectionTargets(injectionTargets);
+
+      return entry;
+   }
+
+   protected ServiceReferenceMetaData createServiceRef(Resource annotation, E element)
+   {
+      ServiceReferenceMetaData ref = new ServiceReferenceMetaData();
+      String name = annotation.name();
+      if(name.length() == 0)
+         name = getName(element);
+      ref.setServiceRefName(name);
+      if(annotation.mappedName().length() > 0)
+         ref.setMappedName(annotation.mappedName());
+      ref.setAnnotatedElement(element);
+      DescriptionGroupMetaData dg = getDescriptionGroup(annotation.description());
+      if(dg != null)
+         ref.setDescriptionGroup(dg);
+      if(annotation.type() != Object.class)
+         ref.setServiceRefType(annotation.type().getName());
+      else
+         ref.setServiceRefType(getType(element));
+      Set<ResourceInjectionTargetMetaData> injectionTargets = getInjectionTargets(name, element);
+      if(injectionTargets != null)
+         ref.setInjectionTargets(injectionTargets);
+
+      return ref;
+   }
+   
+   protected MessageDestinationReferenceMetaData createMessageRef(Resource annotation, E element)
+   {
+      MessageDestinationReferenceMetaData ref = new MessageDestinationReferenceMetaData();
+      String name = annotation.name();
+      if(name.length() == 0)
+         name = getName(element);
+      ref.setMessageDestinationRefName(name);
+      if(annotation.mappedName().length() > 0)
+         ref.setMappedName(annotation.mappedName());
+      if(annotation.type() != Object.class)
+         ref.setType(annotation.type().getName());
+      else
+         ref.setType(getType(element));
+      Descriptions descriptions = getDescription(annotation.description());
+      if(descriptions != null)
+         ref.setDescriptions(descriptions);
+      Set<ResourceInjectionTargetMetaData> injectionTargets = getInjectionTargets(name, element);
+      if(injectionTargets != null)
+         ref.setInjectionTargets(injectionTargets);
+
+      return ref;
+   }
+
+   protected ResourceEnvironmentReferenceMetaData createResourceEnvRef(Resource annotation, E element)
+   {
+      ResourceEnvironmentReferenceMetaData ref = new ResourceEnvironmentReferenceMetaData();
+      String name = annotation.name();
+      if(name.length() == 0)
+         name = getName(element);
+      ref.setResourceEnvRefName(name);
+      if(annotation.mappedName().length() > 0)
+         ref.setMappedName(annotation.mappedName());
+      if(annotation.type() != Object.class)
+         ref.setType(annotation.type().getName());
+      else
+         ref.setType(getType(element));
+      Descriptions descriptions = getDescription(annotation.description());
+      if(descriptions != null)
+         ref.setDescriptions(descriptions);
+      Set<ResourceInjectionTargetMetaData> injectionTargets = getInjectionTargets(name, element);
+      if(injectionTargets != null)
+         ref.setInjectionTargets(injectionTargets);
+
+      return ref;
+   }
+
+   protected Descriptions getDescription(String description)
+   {
+      DescriptionsImpl descriptions = null;
+      if(description.length() > 0)
+      {
+         DescriptionImpl di = new DescriptionImpl();
+         di.setDescription(description);
+         descriptions = new DescriptionsImpl();
+         descriptions.add(di);
+      }
+      return descriptions;
+   }
+   protected DescriptionGroupMetaData getDescriptionGroup(String description)
+   {
+      DescriptionGroupMetaData dg = null;
+      if(description.length() > 0)
+      {
+         dg = new DescriptionGroupMetaData();
+         Descriptions descriptions = getDescription(description);
+         dg.setDescriptions(descriptions);
+      }
+      return dg;      
+   }
+   protected Set<ResourceInjectionTargetMetaData> getInjectionTargets(String name, E element)
+   {
+      Set<ResourceInjectionTargetMetaData> injectionTargets = null;
+      if((element instanceof Class) == false)
+      {
+         // Create an injection target for non-class elements
+         ResourceInjectionTargetMetaData target = new ResourceInjectionTargetMetaData();
+         target.setInjectionTargetClass(getDeclaringClass(element));
+         target.setInjectionTargetName(name);
+         injectionTargets = Collections.singleton(target);
+      }
+      return injectionTargets;
+   }
 }

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceClassProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceClassProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -0,0 +1,72 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * 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.metadata.annotation.creator;
+
+import java.lang.reflect.AnnotatedElement;
+
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
+
+/**
+ * If the annotation is applied to a class, the annotation declares a resource
+ * that the application will look up at runtime. Even though this annotation is
+ * not marked Inherited, if used all superclasses MUST be examined to discover
+ * all uses of this annotation. All such annotation instances specify resources
+ * that are needed by the application. Note that this annotation may appear on
+ * private fields and methods of the superclasses. Injection of the declared
+ * resources needs to happen in these cases as well, even if a method with such
+ * an annotation is overridden by a subclass.
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
+ */
+public class ResourceClassProcessor
+   extends AbstractResourceProcessor<Class>
+   implements Processor<EnvironmentRefsGroupMetaData, Class>
+{
+
+   /**
+    * @param finder
+    */
+   public ResourceClassProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+   
+   @Override
+   protected String getName(Class element)
+   {
+      String name = element.getSimpleName();
+      return name;
+   }
+   @Override
+   protected String getType(Class element)
+   {
+      return element.getName();
+   }
+   @Override
+   protected String getDeclaringClass(Class element)
+   {
+      return element.getName();
+   }
+
+}


Property changes on: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceClassProcessor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceFieldProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceFieldProcessor.java	2007-11-09 15:42:17 UTC (rev 66916)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceFieldProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -25,15 +25,15 @@
 import java.lang.reflect.Field;
 
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
 
 /**
  * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
 public class ResourceFieldProcessor
-   extends AbstractResourceProcessor<Field, ResourceReferencesMetaData>
-   implements Processor<ResourceReferencesMetaData, Field>
+   extends AbstractResourceProcessor<Field>
+   implements Processor<EnvironmentRefsGroupMetaData, Field>
 {
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceMethodProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceMethodProcessor.java	2007-11-09 15:42:17 UTC (rev 66916)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourceMethodProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -25,15 +25,15 @@
 import java.lang.reflect.Method;
 
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
 
 /**
  * @author Scott.Stark at jboss.org
  * @version $Revision$
  */
 public class ResourceMethodProcessor
-   extends AbstractResourceProcessor<Method, ResourceReferencesMetaData>
-   implements Processor<ResourceReferencesMetaData, Method>
+   extends AbstractResourceProcessor<Method>
+   implements Processor<EnvironmentRefsGroupMetaData, Method>
 {
 
    /**

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourcesClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourcesClassProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourcesClassProcessor.java	2007-11-09 15:43:20 UTC (rev 66917)
@@ -0,0 +1,89 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * 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.metadata.annotation.creator;
+
+import java.lang.reflect.AnnotatedElement;
+
+import javax.annotation.Resource;
+import javax.annotation.Resources;
+
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
+
+/**
+ * If the annotation is applied to a class, the annotation declares a resource
+ * that the application will look up at runtime. Even though this annotation is
+ * not marked Inherited, if used all superclasses MUST be examined to discover
+ * all uses of this annotation. All such annotation instances specify resources
+ * that are needed by the application. Note that this annotation may appear on
+ * private fields and methods of the superclasses. Injection of the declared
+ * resources needs to happen in these cases as well, even if a method with such
+ * an annotation is overridden by a subclass.
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
+ */
+public class ResourcesClassProcessor
+   extends ResourceClassProcessor
+   implements Processor<EnvironmentRefsGroupMetaData, Class>
+{
+
+   /**
+    * @param finder
+    */
+   public ResourcesClassProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   public void process(EnvironmentRefsGroupMetaData metaData, Class type)
+   {
+      Resources annotation = finder.getAnnotation(type, Resources.class);
+      if(annotation == null)
+         return;
+
+      Resource[] resources = annotation.value();
+      if(resources != null)
+      {
+         for(Resource res : resources)
+            super.process(metaData, type, res);
+      }
+   }
+
+   @Override
+   protected String getName(Class element)
+   {
+      String name = element.getSimpleName();
+      return name;
+   }
+   @Override
+   protected String getType(Class element)
+   {
+      return element.getName();
+   }
+   @Override
+   protected String getDeclaringClass(Class element)
+   {
+      return element.getName();
+   }
+
+}


Property changes on: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ResourcesClassProcessor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list