001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Scott Ferguson
028: */
029:
030: package com.caucho.server.dispatch;
031:
032: import com.caucho.config.program.ConfigProgram;
033: import com.caucho.config.program.ContainerProgram;
034: import com.caucho.config.ConfigELContext;
035: import com.caucho.config.types.RawString;
036: import com.caucho.el.EL;
037: import com.caucho.el.MapVariableResolver;
038: import com.caucho.util.L10N;
039:
040: import javax.el.ELContext;
041: import javax.servlet.ServletContext;
042: import javax.servlet.ServletException;
043: import java.util.ArrayList;
044: import java.util.HashMap;
045:
046: /**
047: * Configuration for a servlet regexp.
048: */
049: public class ServletRegexp {
050: private static final L10N L = new L10N(ServletRegexp.class);
051:
052: private String _urlRegexp;
053:
054: private String _servletName;
055: private String _servletClassName;
056:
057: // The configuration program
058: private ContainerProgram _program = new ContainerProgram();
059:
060: /**
061: * Creates a new servlet regexp object.
062: */
063: public ServletRegexp() {
064: }
065:
066: /**
067: * Sets the url regexp
068: */
069: public void setURLRegexp(String pattern) {
070: _urlRegexp = pattern;
071: }
072:
073: /**
074: * Gets the url regexp
075: */
076: public String getURLRegexp() {
077: return _urlRegexp;
078: }
079:
080: /**
081: * Sets the servlet name.
082: */
083: public void setServletName(RawString string) {
084: _servletName = string.getValue();
085: }
086:
087: /**
088: * Sets the servlet name.
089: */
090: public String getServletName() {
091: return _servletName;
092: }
093:
094: /**
095: * Sets the servlet class name.
096: */
097: public void setServletClass(RawString string) {
098: _servletClassName = string.getValue();
099: }
100:
101: /**
102: * Gets the servlet class name.
103: */
104: public String getServletClass() {
105: return _servletClassName;
106: }
107:
108: /**
109: * Adds to the builder program.
110: */
111: public void addBuilderProgram(ConfigProgram program) {
112: _program.addProgram(program);
113: }
114:
115: /**
116: * Returns the program.
117: */
118: public ContainerProgram getBuilderProgram() {
119: return _program;
120: }
121:
122: /**
123: * Initialize for a regexp.
124: */
125: String initRegexp(ServletContext application,
126: ServletManager manager, ArrayList<String> vars)
127: throws ServletException {
128: ELContext env = EL.getEnvironment();
129:
130: HashMap<String, Object> map = new HashMap<String, Object>();
131: map.put("regexp", vars);
132:
133: ELContext mapEnv = new ConfigELContext(new MapVariableResolver(
134: map));
135:
136: String rawName = _servletName;
137: String rawClassName = _servletClassName;
138:
139: if (rawName == null)
140: rawName = rawClassName;
141:
142: try {
143: String servletName = EL.evalString(rawName, mapEnv);
144:
145: if (manager.getServletConfig(servletName) != null)
146: return servletName;
147:
148: String className = EL.evalString(rawClassName, mapEnv);
149:
150: ServletConfigImpl config = new ServletConfigImpl();
151:
152: config.setServletName(servletName);
153: config.setServletClass(className);
154: config.setServletContext(application);
155:
156: _program.configure(config);
157:
158: config.init();
159:
160: manager.addServlet(config);
161:
162: return servletName;
163: } catch (RuntimeException e) {
164: throw e;
165: } catch (ServletException e) {
166: throw e;
167: } catch (Exception e) {
168: throw new ServletException(e);
169: }
170: }
171:
172: /**
173: * Returns a printable representation of the servlet config object.
174: */
175: public String toString() {
176: return "ServletRegexp[" + _urlRegexp + "]";
177: }
178: }
|