001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.jetspeed.tools.deploy;
018:
019: import org.jdom.Document;
020: import org.jdom.Element;
021: import org.jdom.Namespace;
022:
023: /**
024: * Utilities for manipulating the web.xml deployment descriptor version 2.4
025: *
026: * @author Nicolas Dutertry
027: * @version $Id: JetspeedWebApplicationRewriter2_4.java 517121 2007-03-12 07:45:49Z ate $
028: */
029: class JetspeedWebApplicationRewriter2_4 extends
030: JetspeedWebApplicationRewriter {
031: public static final String JETSPEED_SERVLET_XPATH = "/js:web-app/js:servlet/js:servlet-name[contains(child::text(), \"JetspeedContainer\")]";
032: public static final String JETSPEED_SERVLET_MAPPING_XPATH = "/js:web-app/js:servlet-mapping/js:servlet-name[contains(child::text(), \"JetspeedContainer\")]";
033: public static final String JSP_CONFIG_XPATH = "/js:web-app/js:jsp-config";
034: public static final String PORTLET_TAGLIB_XPATH = "/js:web-app/js:jsp-config/js:taglib/js:taglib-uri[contains(child::text(), \"http://java.sun.com/portlet\")]";
035:
036: protected static final String[] ELEMENTS_BEFORE_SERVLET = new String[] {
037: "description", "display-name", "icon", "distributable",
038: "context-param", "filter", "filter-mapping", "listener",
039: "servlet" };
040: protected static final String[] ELEMENTS_BEFORE_SERVLET_MAPPING = new String[] {
041: "description", "display-name", "icon", "distributable",
042: "context-param", "filter", "filter-mapping", "listener",
043: "servlet", "servlet-mapping" };
044:
045: protected static final String[] ELEMENTS_BEFORE_JSP_CONFIG = new String[] {
046: "description", "display-name", "icon", "distributable",
047: "context-param", "filter", "filter-mapping", "listener",
048: "servlet", "servlet-mapping", "session-config",
049: "mime-mapping", "welcome-file-list", "error-page",
050: "jsp-config" };
051:
052: protected static final String[] ELEMENTS_BEFORE_TAGLIB_MAPPING = new String[] { "taglib" };
053:
054: public JetspeedWebApplicationRewriter2_4(Document doc,
055: String portletApplication) {
056: super (doc, portletApplication);
057: }
058:
059: public JetspeedWebApplicationRewriter2_4(Document doc) {
060: super (doc);
061: }
062:
063: /**
064: * Returns the jetspeed servlet xpath.
065: *
066: * @return jetspeed servlet xpath
067: */
068: protected String getJetspeedServletXPath() {
069: return JETSPEED_SERVLET_XPATH;
070: }
071:
072: /**
073: * Returns the jetspeed servlet mapping xpath.
074: *
075: * @return jetspeed servlet mapping xpath
076: */
077: protected String getJetspeedServletMappingXPath() {
078: return JETSPEED_SERVLET_MAPPING_XPATH;
079: }
080:
081: /**
082: * Returns the portlet taglib xpath.
083: *
084: * @return portlet taglib xpath
085: */
086: protected String getPortletTagLibXPath() {
087: return PORTLET_TAGLIB_XPATH;
088: }
089:
090: /**
091: * Inserts the jetspeed servlet into web.xml
092: *
093: * @param root
094: * @throws Exception
095: */
096: protected void insertJetspeedServlet(Element root) throws Exception {
097: Namespace namespace = root.getNamespace();
098: Element jetspeedServletElement = new Element("servlet",
099: namespace);
100: Element servletName = new Element("servlet-name", namespace)
101: .addContent(JETSPEED_CONTAINER);
102: Element servletDspName = new Element("display-name", namespace)
103: .addContent(JETSPEED_SERVLET_DISPLAY_NAME);
104: Element servletDesc = new Element("description", namespace)
105: .addContent(JETSPEED_SERVLET_DESCRIPTION);
106: Element servletClass = new Element("servlet-class", namespace)
107: .addContent(JETSPEED_SERVLET_CLASS);
108: // order is important
109: jetspeedServletElement.addContent(servletDesc);
110: jetspeedServletElement.addContent(servletDspName);
111: jetspeedServletElement.addContent(servletName);
112: jetspeedServletElement.addContent(servletClass);
113: insertContextNameParam(jetspeedServletElement);
114: insertLoadOnStartup(jetspeedServletElement);
115: insertElementCorrectly(root, jetspeedServletElement,
116: ELEMENTS_BEFORE_SERVLET);
117: }
118:
119: /**
120: * Inserts the jetspeed servlet mapping into web.xml
121: *
122: * @param root
123: * @throws Exception
124: */
125: protected void insertJetspeedServletMapping(Element root)
126: throws Exception {
127: Namespace namespace = root.getNamespace();
128: Element jetspeedServletMappingElement = new Element(
129: "servlet-mapping", namespace);
130:
131: Element servletMapName = new Element("servlet-name", namespace)
132: .addContent(JETSPEED_CONTAINER);
133: Element servletUrlPattern = new Element("url-pattern",
134: namespace).addContent("/container/*");
135:
136: jetspeedServletMappingElement.addContent(servletMapName);
137: jetspeedServletMappingElement.addContent(servletUrlPattern);
138:
139: insertElementCorrectly(root, jetspeedServletMappingElement,
140: ELEMENTS_BEFORE_SERVLET_MAPPING);
141: }
142:
143: /**
144: * Inserts the portlet taglib into web.xml
145: *
146: * @param root
147: * @throws Exception
148: */
149: protected void insertPortletTagLib(Element root) throws Exception {
150: Namespace namespace = root.getNamespace();
151: Element jspConfig = (Element) getXPath(JSP_CONFIG_XPATH)
152: .selectSingleNode(root.getDocument());
153: if (jspConfig == null) {
154: jspConfig = new Element("jsp-config", namespace);
155: insertElementCorrectly(root, jspConfig,
156: ELEMENTS_BEFORE_JSP_CONFIG);
157: }
158: Element taglib = new Element("taglib", namespace);
159: Element taguri = new Element("taglib-uri", namespace)
160: .addContent("http://java.sun.com/portlet");
161: Element taglocation = new Element("taglib-location", namespace)
162: .addContent("/WEB-INF/tld/portlet.tld");
163:
164: taglib.addContent(taguri);
165: taglib.addContent(taglocation);
166:
167: insertElementCorrectly(jspConfig, taglib,
168: ELEMENTS_BEFORE_TAGLIB_MAPPING);
169: }
170: }
|