KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > core > controller > ExpressoPlugin


1 /* ====================================================================
2  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
3  *
4  * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  * 3. The end-user documentation included with the redistribution,
19  * if any, must include the following acknowledgment:
20  * "This product includes software developed by Jcorporate Ltd.
21  * (http://www.jcorporate.com/)."
22  * Alternately, this acknowledgment may appear in the software itself,
23  * if and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. "Jcorporate" and product names such as "Expresso" must
26  * not be used to endorse or promote products derived from this
27  * software without prior written permission. For written permission,
28  * please contact info@jcorporate.com.
29  *
30  * 5. Products derived from this software may not be called "Expresso",
31  * or other Jcorporate product names; nor may "Expresso" or other
32  * Jcorporate product names appear in their name, without prior
33  * written permission of Jcorporate Ltd.
34  *
35  * 6. No product derived from this software may compete in the same
36  * market space, i.e. framework, without prior written permission
37  * of Jcorporate Ltd. For written permission, please contact
38  * partners@jcorporate.com.
39  *
40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
43  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
44  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
46  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  * ====================================================================
53  *
54  * This software consists of voluntary contributions made by many
55  * individuals on behalf of the Jcorporate Ltd. Contributions back
56  * to the project(s) are encouraged when you make modifications.
57  * Please send them to support@jcorporate.com. For more information
58  * on Jcorporate Ltd. and its products, please see
59  * <http://www.jcorporate.com/>.
60  *
61  * Portions of this software are based upon other open source
62  * products and are subject to their respective licenses.
63  */

64
65 package com.jcorporate.expresso.core.controller;
66
67 import com.jcorporate.expresso.core.misc.ConfigManager;
68 import org.apache.commons.logging.Log;
69 import org.apache.commons.logging.LogFactory;
70 import org.apache.struts.action.ActionServlet;
71 import org.apache.struts.action.RequestProcessor;
72 import org.apache.struts.config.ControllerConfig;
73 import org.apache.struts.config.ModuleConfig;
74 import org.apache.struts.tiles.TilesPlugin;
75 import org.apache.struts.util.RequestUtils;
76
77 import javax.servlet.ServletException JavaDoc;
78
79
80 /**
81  * Title: Expresso Project
82  * Description:
83  * Copyright: Copyright (c) 2001, 2002, 2003
84  * Company: Jcorporate
85  *
86  * @author Peter Pilgrim Wed Feb 12 19:39:44 GMT 2003
87  * <p/>
88  * A Plug-in to set up the Struts support for Expresso Framework.
89  * This plugin conveniently extends the Tiles plug-in so that
90  * Tiles definition can be used from the get-go.
91  * <p/>
92  * <p/>
93  * <font color="red">Design notes by Peter Pilgrim Wed Feb 12 19:35:28 GMT 2003</font>
94  * </p>
95  */

96 public class ExpressoPlugin extends TilesPlugin {
97
98
99     /**
100      * Commons Logging instance.
101      */

102     protected static Log log = LogFactory.getLog(ExpressoPlugin.class);
103
104
105     /**
106      * Default constructor
107      */

108     public ExpressoPlugin() {
109         super();
110     }
111
112
113     /**
114      * Save the module configuration in the configuration manager
115      *
116      * @param servlet ActionServlet that is managing all the modules
117      * in this web application
118      * @param moduleConfig ModuleConfig for the module with which
119      * this plug in is associated
120      */

121     public void initModuleConfiguration(ActionServlet servlet, ModuleConfig moduleConfig) {
122         ConfigManager.storeModuleActionConfig(moduleConfig);
123     }
124
125     /**
126      * <p>Receive notification that the specified module is being
127      * started up.</p>
128      *
129      * @param servlet ActionServlet that is managing all the modules
130      * in this web application
131      * @param moduleConfig ModuleConfig for the module with which
132      * this plug in is associated
133      * @throws ServletException if this <code>PlugIn</code> cannot
134      * be successfully initialized
135      */

136     public void init(ActionServlet servlet, ModuleConfig moduleConfig) throws ServletException JavaDoc {
137         super.init(servlet, moduleConfig); // call the superclass!
138

139         log.info("Expresso Plugin loaded for module`" + moduleConfig.getPrefix() + "'.");
140         initModuleConfiguration(servlet, moduleConfig);
141     }
142
143     /**
144      * End plugin.
145      */

146     public void destroy() {
147         log.info("Expresso Plugin unloading for module.");
148         ConfigManager.setControllerFactory(null);
149
150         super.destroy(); // call the superclass!
151
}
152
153     /**
154      * Sets request processor to appropriate <code>ExpressoRequestProcessor</code>.
155      * This method first checks if a requestprocessor is specified.
156      * If yes, check if it extends appropriate
157      * ExpressoRequestProcessor class. If no, set processor class to
158      * ExpressoRequestProcessor
159      * <p/>
160      * <p>This method is a stock copy of the code that exists in
161      * <code>TilesPlugin</code> except that we are replacing the
162      * <code>TilesRequestProcessor</code> with
163      * <code>ExpressoRequestProcessor</code>
164      *
165      * @param config ModuleConfig for the module with which
166      * this plug in is associated
167      * @throws ServletException If an error occur
168      * @see org.apache.struts.tiles.TilesPlugin
169      * @see org.apache.struts.tiles.TilesRequestProcessor
170      */

171     protected void initRequestProcessorClass(ModuleConfig config) throws ServletException JavaDoc {
172         System.out.println("initRequestProcessorClass(" + config + ")");
173
174         String JavaDoc expressoProcessorClassname = ExpressoRequestProcessor.class.getName();
175         ControllerConfig ctrlConfig = config.getControllerConfig();
176         String JavaDoc configProcessorClassname = ctrlConfig.getProcessorClass();
177
178         // Check if specified classname exist
179
Class JavaDoc configProcessorClass;
180         try {
181             configProcessorClass = RequestUtils.applicationClass(configProcessorClassname);
182         } catch (java.lang.ClassNotFoundException JavaDoc ex) {
183             log.fatal("Can't set ExpressoRequestProcessor: bad class name '"
184                     + configProcessorClassname
185                     + "'.");
186             throw new ServletException JavaDoc(ex);
187         }
188
189         // Check if it is the default request processor or Expresso one.
190
// If true, replace by Expresso' one.
191
if (configProcessorClassname.equals(RequestProcessor.class.getName()) ||
192                 configProcessorClassname.endsWith(expressoProcessorClassname)) {
193             ctrlConfig.setProcessorClass(expressoProcessorClassname);
194             return;
195         }
196
197         // Check if specified request processor is compatible with Expresso.
198
Class JavaDoc expressoProcessorClass = ExpressoRequestProcessor.class;
199         if (!expressoProcessorClass.isAssignableFrom(configProcessorClass)) {
200             // Not compatible
201
String JavaDoc msg = "ExpressoPlugin : Specified RequestProcessor not compatible with ExpressoRequestProcessor";
202             if (log.isFatalEnabled()) {
203                 log.fatal(msg);
204             }
205             throw new ServletException JavaDoc(msg);
206         }
207     }
208
209 }
210
Popular Tags