001: /* ====================================================================
002: * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
003: *
004: * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by Jcorporate Ltd.
021: * (http://www.jcorporate.com/)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. "Jcorporate" and product names such as "Expresso" must
026: * not be used to endorse or promote products derived from this
027: * software without prior written permission. For written permission,
028: * please contact info@jcorporate.com.
029: *
030: * 5. Products derived from this software may not be called "Expresso",
031: * or other Jcorporate product names; nor may "Expresso" or other
032: * Jcorporate product names appear in their name, without prior
033: * written permission of Jcorporate Ltd.
034: *
035: * 6. No product derived from this software may compete in the same
036: * market space, i.e. framework, without prior written permission
037: * of Jcorporate Ltd. For written permission, please contact
038: * partners@jcorporate.com.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
044: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
045: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
046: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Jcorporate Ltd. Contributions back
056: * to the project(s) are encouraged when you make modifications.
057: * Please send them to support@jcorporate.com. For more information
058: * on Jcorporate Ltd. and its products, please see
059: * <http://www.jcorporate.com/>.
060: *
061: * Portions of this software are based upon other open source
062: * products and are subject to their respective licenses.
063: */
064:
065: package com.jcorporate.expresso.core.controller;
066:
067: import com.jcorporate.expresso.core.misc.ConfigManager;
068: import org.apache.commons.logging.Log;
069: import org.apache.commons.logging.LogFactory;
070: import org.apache.struts.action.ActionServlet;
071: import org.apache.struts.action.RequestProcessor;
072: import org.apache.struts.config.ControllerConfig;
073: import org.apache.struts.config.ModuleConfig;
074: import org.apache.struts.tiles.TilesPlugin;
075: import org.apache.struts.util.RequestUtils;
076:
077: import javax.servlet.ServletException;
078:
079: /**
080: * Title: Expresso Project
081: * Description:
082: * Copyright: Copyright (c) 2001, 2002, 2003
083: * Company: Jcorporate
084: *
085: * @author Peter Pilgrim Wed Feb 12 19:39:44 GMT 2003
086: * <p/>
087: * A Plug-in to set up the Struts support for Expresso Framework.
088: * This plugin conveniently extends the Tiles plug-in so that
089: * Tiles definition can be used from the get-go.
090: * <p/>
091: * <p/>
092: * <font color="red">Design notes by Peter Pilgrim Wed Feb 12 19:35:28 GMT 2003</font>
093: * </p>
094: */
095: public class ExpressoPlugin extends TilesPlugin {
096:
097: /**
098: * Commons Logging instance.
099: */
100: protected static Log log = LogFactory.getLog(ExpressoPlugin.class);
101:
102: /**
103: * Default constructor
104: */
105: public ExpressoPlugin() {
106: super ();
107: }
108:
109: /**
110: * Save the module configuration in the configuration manager
111: *
112: * @param servlet ActionServlet that is managing all the modules
113: * in this web application
114: * @param moduleConfig ModuleConfig for the module with which
115: * this plug in is associated
116: */
117: public void initModuleConfiguration(ActionServlet servlet,
118: ModuleConfig moduleConfig) {
119: ConfigManager.storeModuleActionConfig(moduleConfig);
120: }
121:
122: /**
123: * <p>Receive notification that the specified module is being
124: * started up.</p>
125: *
126: * @param servlet ActionServlet that is managing all the modules
127: * in this web application
128: * @param moduleConfig ModuleConfig for the module with which
129: * this plug in is associated
130: * @throws ServletException if this <code>PlugIn</code> cannot
131: * be successfully initialized
132: */
133: public void init(ActionServlet servlet, ModuleConfig moduleConfig)
134: throws ServletException {
135: super .init(servlet, moduleConfig); // call the superclass!
136:
137: log.info("Expresso Plugin loaded for module`"
138: + moduleConfig.getPrefix() + "'.");
139: initModuleConfiguration(servlet, moduleConfig);
140: }
141:
142: /**
143: * End plugin.
144: */
145: public void destroy() {
146: log.info("Expresso Plugin unloading for module.");
147: ConfigManager.setControllerFactory(null);
148:
149: super .destroy(); // call the superclass!
150: }
151:
152: /**
153: * Sets request processor to appropriate <code>ExpressoRequestProcessor</code>.
154: * This method first checks if a requestprocessor is specified.
155: * If yes, check if it extends appropriate
156: * ExpressoRequestProcessor class. If no, set processor class to
157: * ExpressoRequestProcessor
158: * <p/>
159: * <p>This method is a stock copy of the code that exists in
160: * <code>TilesPlugin</code> except that we are replacing the
161: * <code>TilesRequestProcessor</code> with
162: * <code>ExpressoRequestProcessor</code>
163: *
164: * @param config ModuleConfig for the module with which
165: * this plug in is associated
166: * @throws ServletException If an error occur
167: * @see org.apache.struts.tiles.TilesPlugin
168: * @see org.apache.struts.tiles.TilesRequestProcessor
169: */
170: protected void initRequestProcessorClass(ModuleConfig config)
171: throws ServletException {
172: System.out.println("initRequestProcessorClass(" + config + ")");
173:
174: String expressoProcessorClassname = ExpressoRequestProcessor.class
175: .getName();
176: ControllerConfig ctrlConfig = config.getControllerConfig();
177: String configProcessorClassname = ctrlConfig
178: .getProcessorClass();
179:
180: // Check if specified classname exist
181: Class configProcessorClass;
182: try {
183: configProcessorClass = RequestUtils
184: .applicationClass(configProcessorClassname);
185: } catch (java.lang.ClassNotFoundException ex) {
186: log
187: .fatal("Can't set ExpressoRequestProcessor: bad class name '"
188: + configProcessorClassname + "'.");
189: throw new ServletException(ex);
190: }
191:
192: // Check if it is the default request processor or Expresso one.
193: // If true, replace by Expresso' one.
194: if (configProcessorClassname.equals(RequestProcessor.class
195: .getName())
196: || configProcessorClassname
197: .endsWith(expressoProcessorClassname)) {
198: ctrlConfig.setProcessorClass(expressoProcessorClassname);
199: return;
200: }
201:
202: // Check if specified request processor is compatible with Expresso.
203: Class expressoProcessorClass = ExpressoRequestProcessor.class;
204: if (!expressoProcessorClass
205: .isAssignableFrom(configProcessorClass)) {
206: // Not compatible
207: String msg = "ExpressoPlugin : Specified RequestProcessor not compatible with ExpressoRequestProcessor";
208: if (log.isFatalEnabled()) {
209: log.fatal(msg);
210: }
211: throw new ServletException(msg);
212: }
213: }
214:
215: }
|