KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > test > server > appserver > war > Dtd2x3WebXml


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tc.test.server.appserver.war;
5
6 import com.tc.util.Assert;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.List JavaDoc;
11 import java.util.Map JavaDoc;
12
13 /**
14  * Knows the format of a dtd 2.3 compliant web.xml file as part of the J2EE 2.0 WAR spec. The relevant feature of this
15  * class is it's ability to map servlet classes to a URL by passing a class object. The actual URL to a given servlet
16  * class is mapped to the domain:port/[app name]/[servlet url]. To obtain a servlet URL you must call the static method
17  * {@link AbstractDescriptorXml.translateUrl()} passing just the class name (not the full pathname).
18  */

19 public final class Dtd2x3WebXml extends AbstractDescriptorXml implements WebXml {
20
21   private final static String JavaDoc NAME = "web.xml";
22   private final List JavaDoc servlets;
23   private final List JavaDoc listeners;
24   private final List JavaDoc filters;
25   private final String JavaDoc appName;
26
27   public Dtd2x3WebXml(String JavaDoc appName) {
28     super();
29     Assert.assertTrue(appName != null);
30     this.appName = appName;
31     this.servlets = new ArrayList JavaDoc();
32     this.listeners = new ArrayList JavaDoc();
33     this.filters = new ArrayList JavaDoc();
34   }
35
36   public String JavaDoc addServlet(Class JavaDoc servletClass) {
37     String JavaDoc name = servletClass.getName();
38     String JavaDoc[] parts = name.split("\\.");
39     servlets.add(name);
40     return translateUrl(parts[parts.length - 1]);
41   }
42
43   public void addListener(Class JavaDoc listenerClass) {
44     String JavaDoc name = listenerClass.getName();
45     listeners.add(name);
46   }
47
48   public void addFilter(Class JavaDoc filterClass, String JavaDoc pattern, Map JavaDoc 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 JavaDoc getFileName() {
72     return NAME;
73   }
74
75   private void addListeners() {
76     for (Iterator JavaDoc iter = listeners.iterator(); iter.hasNext();) {
77       String JavaDoc className = (String JavaDoc) iter.next();
78       add(1, "<listener><listener-class>" + className + "</listener-class></listener>");
79     }
80   }
81
82   private void addServlets() {
83     String JavaDoc servletName;
84     for (Iterator JavaDoc iter = servlets.iterator(); iter.hasNext();) {
85       servletName = (String JavaDoc) iter.next();
86       String JavaDoc 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 JavaDoc iter = servlets.iterator(); iter.hasNext();) {
96       String JavaDoc name = getSimpleName((String JavaDoc) 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 JavaDoc iter = filters.iterator(); iter.hasNext();) {
107       add(1, "<filter>");
108       filter = (Filter) iter.next();
109       String JavaDoc 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 JavaDoc paramIter = filter.initParams.entrySet().iterator(); paramIter.hasNext();) {
115           Map.Entry JavaDoc entry = (Map.Entry JavaDoc) 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 JavaDoc iter = filters.iterator(); iter.hasNext();) {
125       add(1, "<filter-mapping>");
126       filter = (Filter) iter.next();
127       String JavaDoc 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 JavaDoc getSimpleName(String JavaDoc className) {
135     String JavaDoc[] parts = className.split("\\.");
136     return parts[parts.length - 1];
137   }
138
139   private class Filter {
140     Class JavaDoc filterClass;
141     String JavaDoc pattern;
142     Map JavaDoc initParams;
143   }
144 }
145
Popular Tags