[jboss-cvs] JBossAS SVN: r70960 - projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Mar 18 15:33:27 EDT 2008


Author: anil.saldhana at jboss.com
Date: 2008-03-18 15:33:27 -0400 (Tue, 18 Mar 2008)
New Revision: 70960

Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
Log:
JBMETA-7: merged web metadata from xml and annotation

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2008-03-18 17:52:01 UTC (rev 70959)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/spec/AnnotationMergedView.java	2008-03-18 19:33:27 UTC (rev 70960)
@@ -21,15 +21,200 @@
  */
 package org.jboss.metadata.web.spec;
 
+import java.util.HashMap;
+
+import org.jboss.metadata.javaee.spec.Environment;
+import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationsMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRolesMetaData;
+
+
 /**
  * Create a merged WebMetaData view from an xml + annotation views
  * @author Scott.Stark at jboss.org
+ * @author Anil.Saldhana at jboss.org
  * @version $Revision$
  */
 public class AnnotationMergedView
 {
    public static void merge(WebMetaData merged, WebMetaData xml, WebMetaData annotation)
    {
-      // TODO
+      //Merge the servlets meta data
+      ServletsMetaData servletsMetaData = new ServletsMetaData();
+      merge(servletsMetaData,xml.getServlets(), annotation.getServlets());
+      merged.setServlets(servletsMetaData);
+      
+      //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;
+      Environment annEnv = annotation != null ? annotation.getJndiEnvironmentRefsGroup() : null;
+      environmentRefsGroup.merge(xmlEnv,annEnv, "", "", false);
+      merged.setJndiEnvironmentRefsGroup(environmentRefsGroup);
+      
+      //Message Destinations
+      MessageDestinationsMetaData messageDestinations = new MessageDestinationsMetaData();
+      messageDestinations.merge(xml.getMessageDestinations(), annotation.getMessageDestinations());
+      merged.setMessageDestinations(messageDestinations);
+      
+      //merge xml override
+      mergeXMLOverrides(merged,xml);
    }
-}
+   
+   private static void merge(ServletsMetaData merged, ServletsMetaData xml,
+         ServletsMetaData annotation)
+   {
+      HashMap<String,String> servletClassToName = new HashMap<String,String>();
+      if(xml != null)
+      {
+         if(xml.getId() != null)
+            merged.setId(xml.getId());
+         for(ServletMetaData servlet : xml)
+         {
+            String className = servlet.getServletName();
+            if(className != null)
+            {
+               // Use the unqualified name
+               int dot = className.lastIndexOf('.');
+               if(dot >= 0)
+                  className = className.substring(dot+1);
+               servletClassToName.put(className, servlet.getServletName()); 
+            }
+         }         
+      }
+      
+      // First get the annotation beans without an xml entry
+      if(annotation != null)
+      {
+         for(ServletMetaData servlet : annotation)
+         {
+            if(xml != null)
+            {
+               // This is either the servlet-name or the servlet-class simple name
+               String servletName = servlet.getServletName();
+               ServletMetaData match = xml.get(servletName);
+               if(match == null)
+               {
+                  // Lookup by the unqualified servlet class
+                  String xmlServletName = servletClassToName.get(servletName);
+                  if(xmlServletName == null)
+                     merged.add(servlet);
+               }
+            }
+            else
+            {
+               merged.add(servlet);
+            }
+         }
+      }
+      // Now merge the xml and annotations
+      if(xml != null)
+      {
+         for(ServletMetaData servlet : xml)
+         {
+            ServletMetaData annServlet = null;
+            if(annotation != null)
+            {
+               String name = servlet.getServletName();
+               annServlet = annotation.get(name);
+               if(annServlet == null)
+               {
+                  // Lookup by the unqualified servlet class
+                  String className = servlet.getServletClass();
+                  if(className != null)
+                  {
+                     // Use the unqualified name
+                     int dot = className.lastIndexOf('.');
+                     if(dot >= 0)
+                        className = className.substring(dot+1);
+                     annServlet = annotation.get(className);
+                  }
+               }
+            }
+            // Merge
+            ServletMetaData mergedServletMetaData = servlet;
+            if(annServlet != null)
+            {
+               mergedServletMetaData = new ServletMetaData();
+               mergedServletMetaData.merge(servlet, annServlet);
+            }
+            merged.add(mergedServletMetaData);
+         }
+      } 
+   }
+   
+   private static void merge(SecurityRolesMetaData merged, SecurityRolesMetaData xml,
+         SecurityRolesMetaData annotation)
+   {
+      merged.merge(xml, annotation); 
+   }
+   
+   private static void mergeXMLOverrides(WebMetaData merged, WebMetaData xml)
+   {
+      merged.setDTD("", xml.getDtdPublicId(), xml.getDtdSystemId());
+      
+      //Version
+      if(xml.getVersion() != null)
+         merged.setVersion(xml.getVersion());
+      
+      //Description Group
+      if(xml.getDescriptionGroup() != null)
+         merged.setDescriptionGroup(xml.getDescriptionGroup());
+      
+      //Merge the Params
+      if(xml.getContextParams() != null)
+         merged.setContextParams(xml.getContextParams());
+      
+      //Distributable
+      if(xml.getDistributable() != null)
+         merged.setDistributable(xml.getDistributable());
+      
+      //Session Config
+      if(xml.getSessionConfig() != null)
+         merged.setSessionConfig(xml.getSessionConfig());
+      
+      //Filters
+      if(xml.getFilters() != null)
+         merged.setFilters(xml.getFilters());
+      
+      //Error Pages
+      if(xml.getErrorPages() != null)
+         merged.setErrorPages(xml.getErrorPages());
+      
+      //JSP Config
+      if(xml.getJspConfig() != null)
+         merged.setJspConfig(xml.getJspConfig());
+      
+      //Listener meta data
+      if(xml.getListeners() != null)
+         merged.setListeners(xml.getListeners());
+      
+      //Login Config
+      if(xml.getLoginConfig() != null)
+         merged.setLoginConfig(xml.getLoginConfig());
+      
+      //Mime
+      if(xml.getMimeMappings() != null)
+         merged.setMimeMappings(xml.getMimeMappings());
+      
+      //Servlet Mapping
+      if(xml.getServletMappings() != null)
+         merged.setServletMappings(xml.getServletMappings());
+      
+      //Security Constraints
+      if(xml.getSecurityContraints() != null)
+         merged.setSecurityContraints(xml.getSecurityContraints());
+      
+      //Welcome Files
+      if(xml.getWelcomeFileList() != null)
+         merged.setWelcomeFileList(xml.getWelcomeFileList());
+      
+      //Local Encodings
+      if(xml.getLocalEncodings() != null)
+         merged.setLocalEncodings(xml.getLocalEncodings());
+   }
+}
\ No newline at end of file




More information about the jboss-cvs-commits mailing list