[jboss-cvs] JBossAS SVN: r93665 - in projects/metadata/web/trunk/src: main/java/org/jboss/metadata/web/spec and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Sep 17 20:07:27 EDT 2009


Author: remy.maucherat at jboss.com
Date: 2009-09-17 20:07:26 -0400 (Thu, 17 Sep 2009)
New Revision: 93665

Added:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java
Removed:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/AdditionalWeb30MetaDataCreator.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30Processor.java
Modified:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30MetaDataCreator.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebFilterProcessor.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
   projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/annotation/web/AnnotationWebUnitTestCase.java
Log:
- Revert to the previous WebComponentProcessor (normally @SecurityConstraint and @MultipartConfig will have to be delegated
  to the Servlet container).
- Add the merged view for the new fields, that should enable the three main annotations (@WebFilter, @WebServlet, @WebListener).
- Fix the test case.

Deleted: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/AdditionalWeb30MetaDataCreator.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/AdditionalWeb30MetaDataCreator.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/AdditionalWeb30MetaDataCreator.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -1,112 +0,0 @@
-/*
- * 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.web;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.ejb.MessageDriven;
-import javax.ejb.Stateful;
-import javax.ejb.Stateless;
-
-import org.jboss.ejb3.annotation.Consumer;
-import org.jboss.ejb3.annotation.Service;
-import org.jboss.logging.Logger;
-import org.jboss.metadata.annotation.creator.AbstractCreator;
-import org.jboss.metadata.annotation.creator.Creator;
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.web.spec.Web30MetaData;
-import org.jboss.metadata.web.spec.WebMetaData;
-
-/**
- * Create a Web30MetaData instance from the class annotations
- * 
- * @author Scott.Stark at jboss.org
- * @version $Revision: 77012 $
- */
-public class AdditionalWeb30MetaDataCreator extends AbstractCreator<WebMetaData>
-      implements Creator<Collection<Class<?>>, Web30MetaData>
-{
- 
-   /** The ignore type annotations */
-   private static final Set<Class<? extends Annotation>> ignoreTypeAnnotations;
-   
-   /** The Logger. */
-   private static final Logger log = Logger.getLogger(AdditionalWeb30MetaDataCreator.class);
-   
-   static
-   {
-      // Ignoring classes with the the following type annotations
-      ignoreTypeAnnotations = new HashSet<Class<? extends Annotation>>();
-      ignoreTypeAnnotations.add(Stateful.class);
-      ignoreTypeAnnotations.add(Stateless.class);
-      ignoreTypeAnnotations.add(MessageDriven.class);
-      ignoreTypeAnnotations.add(Service.class);
-      ignoreTypeAnnotations.add(Consumer.class);
-   }
-   
-   public AdditionalWeb30MetaDataCreator(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-      addProcessor(new WebComponentProcessor(finder));
-   }
-
-   public Web30MetaData create(Collection<Class<?>> classes)
-   {
-      // Don't create meta data for a empty collection
-      if(classes == null || classes.isEmpty())
-         return null;
-      
-      // Create meta data
-      Web30MetaData metaData = create();
-
-      processMetaData(classes, metaData);
-      
-      return metaData;
-   }
-   
-   protected Web30MetaData create()
-   {
-      Web30MetaData metaData = new Web30MetaData();
-      metaData.setVersion("3.0");
-      return metaData;
-   }
-   
-   protected boolean validateClass(Class<?> clazz)
-   {
-      boolean trace = log.isTraceEnabled();
-      for(Class<? extends Annotation> annotation : ignoreTypeAnnotations)
-      {
-         if(finder.getAnnotation(clazz, annotation) != null)
-         {
-            if(trace)
-               log.trace("won't process class: " + clazz + ", because of the type annotation: "+ annotation);
-            return false;
-         }
-      }
-      return true;
-   }
-
-}

Added: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java	                        (rev 0)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/MultipartConfigProcessor.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -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.web;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+
+import javax.servlet.annotation.MultipartConfig;
+
+import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.Creator;
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.web.spec.MultipartConfigMetaData;
+import org.jboss.metadata.web.spec.ServletMetaData;
+import org.jboss.metadata.web.spec.ServletsMetaData;
+
+/**
+ * Processor for servlet @MultipartConfig
+ * @author Remy Maucherat
+ * @version $Revision: 67218 $
+ */
+public class MultipartConfigProcessor extends AbstractFinderUser
+   implements Processor<ServletsMetaData, Class<?>>, Creator<Class<?>, MultipartConfigMetaData>
+{
+   public MultipartConfigProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   public void process(ServletsMetaData metaData, Class<?> type)
+   {
+      MultipartConfig annotation = finder.getAnnotation(type, MultipartConfig.class);
+      if(annotation == null)
+         return;
+
+      MultipartConfigMetaData multipartConfig = create(type);
+      ServletMetaData servlet = new ServletMetaData();
+      servlet.setServletName(type.getSimpleName());
+      servlet.setServletClass(type.getName());
+      servlet.setMultipartConfig(multipartConfig);
+      metaData.add(servlet);
+   }
+   
+   public MultipartConfigMetaData create(Class<?> element)
+   {
+      MultipartConfig multipartConfig = finder.getAnnotation(element, MultipartConfig.class);
+      if(multipartConfig == null)
+         return null;
+
+      MultipartConfigMetaData metaData = new MultipartConfigMetaData();
+      if (!"".equals(multipartConfig.location()))
+         metaData.setLocation(multipartConfig.location());
+      if (multipartConfig.maxFileSize() != -1L)
+         metaData.setMaxFileSize(multipartConfig.maxFileSize());
+      if (multipartConfig.maxRequestSize() != -1L)
+         metaData.setMaxRequestSize(multipartConfig.maxRequestSize());
+      if (multipartConfig.fileSizeThreshold() != 0)
+         metaData.setFileSizeThreshold(multipartConfig.fileSizeThreshold());
+      return metaData;
+   }
+
+   public Collection<Class<? extends Annotation>> getAnnotationTypes()
+   {
+      return ProcessorUtils.createAnnotationSet(MultipartConfig.class);
+   }
+   
+}

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/RunAsProcessor.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -38,7 +38,7 @@
  * @version $Revision: 67218 $
  */
 public class RunAsProcessor extends AbstractRunAsProcessor
-   implements Processor<ServletsMetaData, Class>
+   implements Processor<ServletsMetaData, Class<?>>
 {
    /**
     * @param finder
@@ -48,7 +48,7 @@
       super(finder);
    }
 
-   public void process(ServletsMetaData metaData, Class type)
+   public void process(ServletsMetaData metaData, Class<?> type)
    {
       RunAs annotation = finder.getAnnotation(type, RunAs.class);
       if(annotation == null)

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30MetaDataCreator.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30MetaDataCreator.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30MetaDataCreator.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -70,7 +70,7 @@
    public Web30MetaDataCreator(AnnotationFinder<AnnotatedElement> finder)
    {
       super(finder);
-      addProcessor(new Web30Processor(finder));
+      addProcessor(new WebComponentProcessor(finder));
    }
 
    public Web30MetaData create(Collection<Class<?>> classes)

Deleted: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30Processor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30Processor.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web30Processor.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -1,50 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2007, Red Hat Middleware LLC, 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.metadata.annotation.creator.web;
-
-import java.lang.reflect.AnnotatedElement;
-
-import org.jboss.metadata.annotation.creator.AbstractProcessor;
-import org.jboss.metadata.annotation.creator.Processor;
-import org.jboss.metadata.annotation.finder.AnnotationFinder;
-import org.jboss.metadata.web.spec.WebMetaData;
-
-/**
- * Create the correct meta data for web component.
- *
- * @author Remy Maucherat
- * @version $Revision: 76430 $
- */
-public class Web30Processor extends AbstractProcessor<WebMetaData>
-   implements Processor<WebMetaData,Class<?>>
-{
-   public Web30Processor(AnnotationFinder<AnnotatedElement> finder)
-   {
-      super(finder);
-      // @WebFilter
-      addTypeProcessor(new WebFilterProcessor(finder));
-      // @WebListener
-      addTypeProcessor(new WebListenerProcessor(finder));
-      // @WebServlet
-      addTypeProcessor(new WebServletProcessor(finder));
-   }
-}

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebComponentProcessor.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -44,10 +44,22 @@
    public WebComponentProcessor(AnnotationFinder<AnnotatedElement> finder)
    {
       super(finder);
+      // @WebFilter
+      addTypeProcessor(new WebFilterProcessor(finder));
+      // @WebListener
+      addTypeProcessor(new WebListenerProcessor(finder));
+      // @WebServlet
+      addTypeProcessor(new WebServletProcessor(finder));
       // @RunAs
       addTypeProcessor(new RunAsProcessor(finder));
       // @DeclareRoles
       addTypeProcessor(new DeclareRolesProcessor(finder));
+      /* Most likely these two are not doable here
+      // @MultipartConfig
+      addTypeProcessor(new MultipartConfigProcessor(finder));
+      // @SecurityConstraint
+      //addTypeProcessor(new SecurityConstraintProcessor(finder));
+       */
    }
 
    @Override
@@ -64,8 +76,6 @@
       }
       super.process(env, type);
       
-      // TODO @PermitAll, @TransportProtected, @RolesAllowed, @RunAs, @DenyAll, @MultipartConfig
-      // all apply to Servlets and have to be done at once
       // @RunAs
       ServletsMetaData servlets = metaData.getServlets();
       if(servlets == null)

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebFilterProcessor.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebFilterProcessor.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/WebFilterProcessor.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -29,7 +29,6 @@
 
 import javax.servlet.annotation.WebFilter;
 import javax.servlet.annotation.WebInitParam;
-import javax.servlet.annotation.WebServlet;
 
 import org.jboss.metadata.annotation.creator.AbstractFinderUser;
 import org.jboss.metadata.annotation.creator.Creator;
@@ -149,7 +148,7 @@
 
    public Collection<Class<? extends Annotation>> getAnnotationTypes()
    {
-      return ProcessorUtils.createAnnotationSet(WebServlet.class);
+      return ProcessorUtils.createAnnotationSet(WebFilter.class);
    }
    
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -21,7 +21,9 @@
  */
 package org.jboss.metadata.web.spec;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 import org.jboss.metadata.javaee.spec.Environment;
 import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
@@ -33,6 +35,7 @@
  * Create a merged WebMetaData view from an xml + annotation views
  * @author Scott.Stark at jboss.org
  * @author Anil.Saldhana at jboss.org
+ * @author Remy Maucherat
  * @version $Revision: 70998 $
  */
 public class AnnotationMergedView
@@ -43,16 +46,32 @@
       ServletsMetaData servletsMetaData = new ServletsMetaData();
       merge(servletsMetaData, xml.getServlets(), annotation.getServlets());
       merged.setServlets(servletsMetaData);
-      
-      // TODO: Merge the filters meta data
-      
-      // TODO: Add the listeners meta data
-      
+
+      // Merge the servlet mappings meta data
+      List<ServletMappingMetaData> servletMappingsMetaData = new ArrayList<ServletMappingMetaData>();
+      mergeS(servletMappingsMetaData, xml.getServletMappings(), annotation.getServletMappings());
+      merged.setServletMappings(servletMappingsMetaData);
+
+      // Merge the filters meta data
+      FiltersMetaData filtersMetaData = new FiltersMetaData();
+      merge(filtersMetaData, xml.getFilters(), annotation.getFilters());
+      merged.setFilters(filtersMetaData);
+
+      // Merge the filter mappings meta data
+      List<FilterMappingMetaData> filterMappingsMetaData = new ArrayList<FilterMappingMetaData>();
+      mergeF(filterMappingsMetaData, xml.getFilterMappings(), annotation.getFilterMappings());
+      merged.setFilterMappings(filterMappingsMetaData);
+
+      // Listeners meta data
+      List<ListenerMetaData> listenerMappingsMetaData = new ArrayList<ListenerMetaData>();
+      mergeL(listenerMappingsMetaData, xml.getListeners(), annotation.getListeners());
+      merged.setListeners(listenerMappingsMetaData);
+
       // Security Roles
       SecurityRolesMetaData securityRolesMetaData = new SecurityRolesMetaData();
       merge(securityRolesMetaData, xml.getSecurityRoles(), annotation.getSecurityRoles());
       merged.setSecurityRoles(securityRolesMetaData);
-      
+
       // Env
       EnvironmentRefsGroupMetaData environmentRefsGroup = new EnvironmentRefsGroupMetaData();
       Environment xmlEnv = xml != null ? xml.getJndiEnvironmentRefsGroup() : null;
@@ -71,6 +90,200 @@
       mergeIn(merged, xml);
    }
    
+   private static void mergeS(List<ServletMappingMetaData> merged, List<ServletMappingMetaData> xml,
+         List<ServletMappingMetaData> annotation)
+   {
+      if (xml != null)
+      {
+         for (ServletMappingMetaData servletMapping : xml)
+         {
+            ServletMappingMetaData newServletMapping = new ServletMappingMetaData();
+            newServletMapping.setServletName(servletMapping.getServletName());
+            if (servletMapping.getUrlPatterns() != null)
+            {
+               List<String> urlPatterns = new ArrayList<String>();
+               for (String urlPattern : servletMapping.getUrlPatterns())
+               {
+                  urlPatterns.add(urlPattern);
+               }
+               newServletMapping.setUrlPatterns(urlPatterns);
+            }
+            merged.add(newServletMapping);
+         }
+      }
+      if (annotation != null)
+      {
+         for (ServletMappingMetaData servletMapping : annotation)
+         {
+            boolean found = false;
+            for (ServletMappingMetaData check : merged)
+            {
+               if (check.getServletName().equals(servletMapping.getServletName()))
+               {
+                  found = true;
+                  for (String urlPattern : servletMapping.getUrlPatterns())
+                  {
+                     if (!check.getUrlPatterns().contains(urlPattern))
+                        check.getUrlPatterns().add(urlPattern);
+                  }
+               }
+            }
+            if (!found)
+            {
+               ServletMappingMetaData newServletMapping = new ServletMappingMetaData();
+               newServletMapping.setServletName(servletMapping.getServletName());
+               if (servletMapping.getUrlPatterns() != null)
+               {
+                  List<String> urlPatterns = new ArrayList<String>();
+                  for (String urlPattern : servletMapping.getUrlPatterns())
+                  {
+                     urlPatterns.add(urlPattern);
+                  }
+                  newServletMapping.setUrlPatterns(urlPatterns);
+               }
+               merged.add(newServletMapping);
+            }
+         }
+      }
+   }
+   
+   private static void mergeF(List<FilterMappingMetaData> merged, List<FilterMappingMetaData> xml,
+         List<FilterMappingMetaData> annotation)
+   {
+      if (xml != null)
+      {
+         for (FilterMappingMetaData filterMapping : xml)
+         {
+            FilterMappingMetaData newFilterMapping = new FilterMappingMetaData();
+            newFilterMapping.setFilterName(filterMapping.getFilterName());
+            if (filterMapping.getUrlPatterns() != null)
+            {
+               List<String> urlPatterns = new ArrayList<String>();
+               for (String urlPattern : filterMapping.getUrlPatterns())
+               {
+                  urlPatterns.add(urlPattern);
+               }
+               newFilterMapping.setUrlPatterns(urlPatterns);
+            }
+            if (filterMapping.getServletNames() != null)
+            {
+               List<String> servletNames = new ArrayList<String>();
+               for (String servletName : filterMapping.getServletNames())
+               {
+                  servletNames.add(servletName);
+               }
+               newFilterMapping.setServletNames(servletNames);
+            }
+            if (filterMapping.getDispatchers() != null)
+            {
+               List<DispatcherType> dispatchers = new ArrayList<DispatcherType>();
+               for (DispatcherType dispatcher : filterMapping.getDispatchers())
+               {
+                  dispatchers.add(dispatcher);
+               }
+               newFilterMapping.setDispatchers(dispatchers);
+            }
+            merged.add(newFilterMapping);
+         }
+      }
+      if (annotation != null)
+      {
+         for (FilterMappingMetaData filterMapping : annotation)
+         {
+            boolean found = false;
+            for (FilterMappingMetaData check : merged)
+            {
+               if (check.getFilterName().equals(filterMapping.getFilterName()))
+               {
+                  found = true;
+                  for (String urlPattern : filterMapping.getUrlPatterns())
+                  {
+                     if (!check.getUrlPatterns().contains(urlPattern))
+                        check.getUrlPatterns().add(urlPattern);
+                  }
+                  for (String servletName : filterMapping.getServletNames())
+                  {
+                     if (!check.getServletNames().contains(servletName))
+                        check.getServletNames().add(servletName);
+                  }
+                  for (DispatcherType dispatcher : filterMapping.getDispatchers())
+                  {
+                     if (!check.getDispatchers().contains(dispatcher))
+                        check.getDispatchers().add(dispatcher);
+                  }
+               }
+            }
+            if (!found)
+            {
+               FilterMappingMetaData newFilterMapping = new FilterMappingMetaData();
+               newFilterMapping.setFilterName(filterMapping.getFilterName());
+               if (filterMapping.getUrlPatterns() != null)
+               {
+                  List<String> urlPatterns = new ArrayList<String>();
+                  for (String urlPattern : filterMapping.getUrlPatterns())
+                  {
+                     urlPatterns.add(urlPattern);
+                  }
+                  newFilterMapping.setUrlPatterns(urlPatterns);
+               }
+               if (filterMapping.getServletNames() != null)
+               {
+                  List<String> servletNames = new ArrayList<String>();
+                  for (String servletName : filterMapping.getServletNames())
+                  {
+                     servletNames.add(servletName);
+                  }
+                  newFilterMapping.setServletNames(servletNames);
+               }
+               if (filterMapping.getDispatchers() != null)
+               {
+                  List<DispatcherType> dispatchers = new ArrayList<DispatcherType>();
+                  for (DispatcherType dispatcher : filterMapping.getDispatchers())
+                  {
+                     dispatchers.add(dispatcher);
+                  }
+                  newFilterMapping.setDispatchers(dispatchers);
+               }
+               merged.add(newFilterMapping);
+            }
+         }
+      }
+   }
+   
+   private static void mergeL(List<ListenerMetaData> merged, List<ListenerMetaData> xml,
+         List<ListenerMetaData> annotation)
+   {
+      if (xml != null)
+      {
+         for (ListenerMetaData listener : xml)
+         {
+            ListenerMetaData newListener = new ListenerMetaData();
+            newListener.setListenerClass(listener.getListenerClass());
+            merged.add(newListener);
+         }
+      }
+      if (annotation != null)
+      {
+         for (ListenerMetaData listener : annotation)
+         {
+            boolean found = false;
+            for (ListenerMetaData check : merged)
+            {
+               if (check.getListenerClass().equals(listener.getListenerClass()))
+               {
+                  found = true;
+               }
+            }
+            if (!found)
+            {
+               ListenerMetaData newListener = new ListenerMetaData();
+               newListener.setListenerClass(listener.getListenerClass());
+               merged.add(newListener);
+            }
+         }
+      }
+   }
+   
    private static void merge(ServletsMetaData merged, ServletsMetaData xml,
          ServletsMetaData annotation)
    {
@@ -153,6 +366,88 @@
       } 
    }
    
+   private static void merge(FiltersMetaData merged, FiltersMetaData xml,
+         FiltersMetaData annotation)
+   {
+      HashMap<String,String> filterClassToName = new HashMap<String,String>();
+      if(xml != null)
+      {
+         if(xml.getId() != null)
+            merged.setId(xml.getId());
+         for(FilterMetaData filter : xml)
+         {
+            String className = filter.getFilterName();
+            if(className != null)
+            {
+               // Use the unqualified name
+               int dot = className.lastIndexOf('.');
+               if(dot >= 0)
+                  className = className.substring(dot+1);
+               filterClassToName.put(className, filter.getFilterName()); 
+            }
+         }         
+      }
+      
+      // First get the annotation beans without an xml entry
+      if(annotation != null)
+      {
+         for(FilterMetaData filter : annotation)
+         {
+            if(xml != null)
+            {
+               // This is either the filter-name or the filter-class simple name
+               String filterName = filter.getFilterName();
+               FilterMetaData match = xml.get(filterName);
+               if(match == null)
+               {
+                  // Lookup by the unqualified filter class
+                  String xmlFilterName = filterClassToName.get(filterName);
+                  if(xmlFilterName == null)
+                     merged.add(filter);
+               }
+            }
+            else
+            {
+               merged.add(filter);
+            }
+         }
+      }
+      // Now merge the xml and annotations
+      if(xml != null)
+      {
+         for(FilterMetaData filter : xml)
+         {
+            FilterMetaData annFilter = null;
+            if(annotation != null)
+            {
+               String name = filter.getFilterName();
+               annFilter = annotation.get(name);
+               if(annFilter == null)
+               {
+                  // Lookup by the unqualified filter class
+                  String className = filter.getFilterClass();
+                  if(className != null)
+                  {
+                     // Use the unqualified name
+                     int dot = className.lastIndexOf('.');
+                     if(dot >= 0)
+                        className = className.substring(dot+1);
+                     annFilter = annotation.get(className);
+                  }
+               }
+            }
+            // Merge
+            FilterMetaData mergedFilterMetaData = filter;
+            if(annFilter != null)
+            {
+               mergedFilterMetaData = new FilterMetaData();
+               mergedFilterMetaData.merge(filter, annFilter);
+            }
+            merged.add(mergedFilterMetaData);
+         }
+      } 
+   }
+   
    private static void merge(SecurityRolesMetaData merged, SecurityRolesMetaData xml,
          SecurityRolesMetaData annotation)
    {

Modified: projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/annotation/web/AnnotationWebUnitTestCase.java
===================================================================
--- projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/annotation/web/AnnotationWebUnitTestCase.java	2009-09-17 23:37:08 UTC (rev 93664)
+++ projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/annotation/web/AnnotationWebUnitTestCase.java	2009-09-18 00:07:26 UTC (rev 93665)
@@ -41,12 +41,15 @@
 import javax.persistence.PersistenceContexts;
 import javax.persistence.PersistenceUnit;
 import javax.persistence.PersistenceUnits;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebListener;
+import javax.servlet.annotation.WebServlet;
 import javax.transaction.UserTransaction;
 import javax.xml.ws.WebServiceRef;
 import javax.xml.ws.WebServiceRefs;
 
 import org.jboss.metadata.annotation.creator.AnnotationContext;
-import org.jboss.metadata.annotation.creator.web.Web25MetaDataCreator;
+import org.jboss.metadata.annotation.creator.web.Web30MetaDataCreator;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
 import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData;
@@ -71,7 +74,7 @@
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.AnnotationMergedView;
 import org.jboss.metadata.web.spec.ServletMetaData;
-import org.jboss.metadata.web.spec.Web25MetaData;
+import org.jboss.metadata.web.spec.Web30MetaData;
 import org.jboss.metadata.web.spec.WebMetaData;
 import org.jboss.test.metadata.annotation.ws.TestEndpoint;
 import org.jboss.test.metadata.annotation.ws.TestEndpointService;
@@ -247,15 +250,15 @@
       System.out.println("Processing classes: " + classes);
 
       AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
-      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
-      Web25MetaData metaData = creator.create(classes);
+      Web30MetaDataCreator creator = new Web30MetaDataCreator(finder);
+      Web30MetaData metaData = creator.create(classes);
 
-      WebMetaData specMetaData = new Web25MetaData();
-      WebMetaData merged = new Web25MetaData();
+      WebMetaData specMetaData = new Web30MetaData();
+      WebMetaData merged = new Web30MetaData();
       AnnotationMergedView.merge(merged, specMetaData, metaData);
 
-      assertTrue(metaData.is25());
-      assertEquals("2.5", merged.getVersion());
+      assertTrue(metaData.is30());
+      assertEquals("3.0", merged.getVersion());
 
       assertEnv(merged.getJndiEnvironmentRefsGroup());
 
@@ -305,12 +308,12 @@
       System.out.println("Processing classes: " + classes);
 
       //enableTrace("org.jboss.metadata.annotation.creator");
-      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
+      Web30MetaDataCreator creator = new Web30MetaDataCreator(finder);
 
-      Web25MetaData metaData = creator.create(classes);
+      Web30MetaData metaData = creator.create(classes);
 
-      assertTrue(metaData.is25());
-      assertEquals("2.5", metaData.getVersion());
+      assertTrue(metaData.is30());
+      assertEquals("3.0", metaData.getVersion());
 
       assertEnv(metaData.getJndiEnvironmentRefsGroup());
 
@@ -348,11 +351,11 @@
       System.out.println("Processing classes: " + classes);
 
       //enableTrace("org.jboss.metadata.annotation.creator");
-      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
+      Web30MetaDataCreator creator = new Web30MetaDataCreator(finder);
 
-      Web25MetaData annotation = creator.create(classes);
+      Web30MetaData annotation = creator.create(classes);
 
-      assertTrue(annotation.is25());
+      assertTrue(annotation.is30());
 
       //Now create the web meta data
       WebMetaData xml = unmarshal(WebMetaData.class);
@@ -399,11 +402,11 @@
       System.out.println("Processing classes: " + classes);
 
       //enableTrace("org.jboss.metadata.annotation.creator");
-      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
+      Web30MetaDataCreator creator = new Web30MetaDataCreator(finder);
 
-      Web25MetaData annotation = creator.create(classes);
+      Web30MetaData annotation = creator.create(classes);
 
-      assertTrue(annotation.is25());
+      assertTrue(annotation.is30());
 
       //Now create the web meta data
       WebMetaData xml = unmarshal("AnnotationWeb_testAnnotationXML.xml", WebMetaData.class);
@@ -445,11 +448,11 @@
       List<Class<?>> classes = Arrays.asList(webClasses);
 
       //enableTrace("org.jboss.metadata.annotation.creator");
-      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
+      Web30MetaDataCreator creator = new Web30MetaDataCreator(finder);
 
-      Web25MetaData annotation = creator.create(classes);
+      Web30MetaData annotation = creator.create(classes);
 
-      assertTrue(annotation.is25());
+      assertTrue(annotation.is30());
       EnvironmentRefsGroupMetaData envRefs = annotation.getJndiEnvironmentRefsGroup();
       assertNotNull(envRefs);
 
@@ -477,6 +480,9 @@
       typeAnnotations.add(PersistenceUnits.class);
       typeAnnotations.add(WebServiceRef.class);
       typeAnnotations.add(WebServiceRefs.class);
+      typeAnnotations.add(WebFilter.class);
+      typeAnnotations.add(WebServlet.class);
+      typeAnnotations.add(WebListener.class);
 
       // Assert Type annotations
       assertAnnotations(typeAnnotations, context.getTypeAnnotations());




More information about the jboss-cvs-commits mailing list