1 4 package com.tc.test.server.appserver.war; 5 6 import com.tc.util.Assert; 7 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 import java.util.Map ; 12 13 19 public final class Dtd2x3WebXml extends AbstractDescriptorXml implements WebXml { 20 21 private final static String NAME = "web.xml"; 22 private final List servlets; 23 private final List listeners; 24 private final List filters; 25 private final String appName; 26 27 public Dtd2x3WebXml(String appName) { 28 super(); 29 Assert.assertTrue(appName != null); 30 this.appName = appName; 31 this.servlets = new ArrayList (); 32 this.listeners = new ArrayList (); 33 this.filters = new ArrayList (); 34 } 35 36 public String addServlet(Class servletClass) { 37 String name = servletClass.getName(); 38 String [] parts = name.split("\\."); 39 servlets.add(name); 40 return translateUrl(parts[parts.length - 1]); 41 } 42 43 public void addListener(Class listenerClass) { 44 String name = listenerClass.getName(); 45 listeners.add(name); 46 } 47 48 public void addFilter(Class filterClass, String pattern, Map initParams) { 49 Filter filter = new Filter(); 50 filter.filterClass = filterClass; 51 filter.pattern = pattern; 52 filter.initParams = initParams; 53 filters.add(filter); 54 } 55 56 public byte[] getBytes() { 57 add("<?xml version=\"1.0\"?>"); 58 add("<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\" \"http://java.sun.com/dtd/web-app_2_3.dtd\">"); 59 add(""); 60 add("<web-app>"); 61 add(1, "<display-name>" + appName + "</display-name>"); 62 addListeners(); 63 addServlets(); 64 addMappings(); 65 addFilters(); 66 add("</web-app>"); 67 68 return sout().toString().getBytes(); 69 } 70 71 public String getFileName() { 72 return NAME; 73 } 74 75 private void addListeners() { 76 for (Iterator iter = listeners.iterator(); iter.hasNext();) { 77 String className = (String ) iter.next(); 78 add(1, "<listener><listener-class>" + className + "</listener-class></listener>"); 79 } 80 } 81 82 private void addServlets() { 83 String servletName; 84 for (Iterator iter = servlets.iterator(); iter.hasNext();) { 85 servletName = (String ) iter.next(); 86 String name = getSimpleName(servletName); 87 add(1, "<servlet>"); 88 add(2, "<servlet-name>" + name + "</servlet-name>"); 89 add(2, "<servlet-class>" + servletName + "</servlet-class>"); 90 add(1, "</servlet>"); 91 } 92 } 93 94 private void addMappings() { 95 for (Iterator iter = servlets.iterator(); iter.hasNext();) { 96 String name = getSimpleName((String ) iter.next()); 97 add(1, "<servlet-mapping>"); 98 add(2, "<servlet-name>" + name + "</servlet-name>"); 99 add(2, "<url-pattern>/" + translateUrl(name) + "</url-pattern>"); 100 add(1, "</servlet-mapping>"); 101 } 102 } 103 104 private void addFilters() { 105 Filter filter; 106 for (Iterator iter = filters.iterator(); iter.hasNext();) { 107 add(1, "<filter>"); 108 filter = (Filter) iter.next(); 109 String name = getSimpleName(filter.filterClass.getName()); 110 add(2, "<filter-name>" + name + "</filter-name>"); 111 add(2, "<filter-class>" + filter.filterClass.getName() + "</filter-class>"); 112 if (filter.initParams != null) { 113 add(2, "<init-param>"); 114 for (Iterator paramIter = filter.initParams.entrySet().iterator(); paramIter.hasNext();) { 115 Map.Entry entry = (Map.Entry ) paramIter.next(); 116 add(3, "<param-name>" + entry.getKey() + "</param-name>"); 117 add(3, "<param-value>" + entry.getValue() + "</param-value>"); 118 } 119 add(2, "</init-param>"); 120 } 121 add(1, "</filter>"); 122 } 123 124 for (Iterator iter = filters.iterator(); iter.hasNext();) { 125 add(1, "<filter-mapping>"); 126 filter = (Filter) iter.next(); 127 String name = getSimpleName(filter.filterClass.getName()); 128 add(2, "<filter-name>" + name + "</filter-name>"); 129 add(2, "<url-pattern>" + filter.pattern + "</url-pattern>"); 130 add(1, "</filter-mapping>"); 131 } 132 } 133 134 private String getSimpleName(String className) { 135 String [] parts = className.split("\\."); 136 return parts[parts.length - 1]; 137 } 138 139 private class Filter { 140 Class filterClass; 141 String pattern; 142 Map initParams; 143 } 144 } 145 | Popular Tags |