[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