1 //==============================================================================
2 // file : CommandDispatcher.java
3 // project: Front View Control
4 //
5 // last change: date: $Date: 2003/09/10 09:13:57 $
6 // by: $Author: bitiboy $
7 // revision: $Revision: 1.1 $
8 //------------------------------------------------------------------------------
9 // copyright: GNU GPL Software License (see class documentation)
10 //==============================================================================
11 package com.justhis.control;
12
13
14 /*
15 * $Id: CommandDispatcher.java,v 1.1 2003/09/10 09:13:57 bitiboy Exp $
16 *
17 * Copyright 2003 Acai Software All Rights Reserved.
18 *
19 * This file CommandDispatcher.java is part of the Front View Control.
20
21 * The Front View Control is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 2 of the License, or
24 * (at your option) any later version.
25
26 * The Front View Control is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
30
31 * You should have received a copy of the GNU General Public License
32 * along with the Front View Control; if not, write to the Free Software
33 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34
35 * http://www.justhis.com
36 * CONTACT: email = superaxis@sohu.com webmaster@justhis.com
37 */
38 import com.justhis.util.XParameters;
39 import com.justhis.util.exception.JavaClassRefectException;
40 import com.justhis.util.exception.LogicException;
41 import com.justhis.util.exception.PropertiesFileReadException;
42 import com.justhis.util.exception.UtilException;
43
44 import java.sql.SQLException;
45
46 import java.util.Enumeration;
47 import java.util.Properties;
48
49 import javax.servlet.ServletConfig;
50 import javax.servlet.ServletException;
51 import javax.servlet.http.HttpServletRequest;
52 import javax.servlet.http.HttpServletResponse;
53
54
55 /***
56 * Instances turn a request into a command, which may then be executed.
57 *
58 * @author <a href="http://blog.ejb.cn">acai</a>
59 * @version $Revision: 1.1 $
60 */
61 public class CommandDispatcher {
62 //~ Static fields/initializers ---------------------------------------------
63
64 /*** The name of the servlet parameter specifying the command or action. */
65 private static final java.lang.String ACTION_PARAMETER_NAME = "action";
66
67 //fix me how to get it from a config file.
68
69 /*** page suffix in the url */
70 private static final java.lang.String PAGE_SUFFIX = ".news";
71
72 //~ Instance fields --------------------------------------------------------
73
74 /*** servlet config */
75 private ServletConfig config;
76
77 /*** The servlet request. */
78 private javax.servlet.http.HttpServletRequest request;
79
80 /*** The servlet response. */
81 private javax.servlet.http.HttpServletResponse response;
82
83 /*** The properties associated with the request. */
84 private java.util.Properties properties;
85
86 //~ Constructors -----------------------------------------------------------
87
88 /***
89 * Create a new instance of the dispatcher containing the parameters from
90 * the servlet request.
91 *
92 * @param request the servlet request
93 * @param response the servlet response
94 */
95 public CommandDispatcher(ServletConfig config, HttpServletRequest request,
96 HttpServletResponse response
97 ) {
98 this.request = request;
99 this.response = response;
100 this.config = config;
101
102 this.properties = extractProperties(request);
103 }
104
105 //~ Methods ----------------------------------------------------------------
106
107 /***
108 * Get the servlet request properties.
109 *
110 * @return the properties for the servlet request
111 */
112 public Properties getProperties() {
113 return properties;
114 }
115
116 /***
117 * Get the servlet request.
118 *
119 * @return the servlet request
120 */
121 public HttpServletRequest getRequest() {
122 return request;
123 }
124
125 /***
126 * Get the servlet response.
127 *
128 * @return the servlet response
129 */
130 public HttpServletResponse getResponse() {
131 return response;
132 }
133
134 /***
135 * get the Servlet config
136 *
137 * @return the servlet config
138 */
139 public ServletConfig getServletConfig() {
140 return this.config;
141 }
142
143 /***
144 * Get the command specified by the servlet request.
145 *
146 * @return the command specified by the servlet request
147 */
148 public Command getCommand()
149 throws UtilException, PropertiesFileReadException,
150 JavaClassRefectException {
151 String param = getProperties().getProperty(ACTION_PARAMETER_NAME);
152
153 if (param == null) {
154 if (request.getServletPath().endsWith(PAGE_SUFFIX)) {
155 return ViewHelper.getCommand("Go");
156 } else {
157 return ViewHelper.getCommand("index");
158 }
159 }
160
161 return ViewHelper.getCommand(param);
162 }
163
164 /***
165 * @see Command#execute()
166 */
167 public String executeCommand()
168 throws JavaClassRefectException, LogicException,
169 SQLException, ServletException, UtilException {
170 Command command = null;
171
172 try {
173 command = getCommand();
174 } catch (PropertiesFileReadException e) {
175 throw new UtilException(e);
176 } catch (JavaClassRefectException e) {
177 throw new UtilException(e.getMessage(), e);
178 }
179
180 if (command == null) {
181 return null;
182 }
183
184 command.init(this);
185
186 return command.execute();
187 }
188
189 /***
190 * Translates servlet request properties to java properties.
191 *
192 * @param the servlet request object
193 *
194 * @return the servlet request properties
195 */
196 private Properties extractProperties(HttpServletRequest servletrequest) {
197 properties = new XParameters();
198
199 Enumeration enumeration = servletrequest.getParameterNames();
200
201 while (enumeration.hasMoreElements()) {
202 String name = (String) enumeration.nextElement();
203 String value = servletrequest.getParameterValues(name)[0];
204 System.out.println(name + " 's value: " + value);
205 properties.setProperty(name, value);
206 }
207
208 properties.setProperty("SYSTEM_OID",
209 (String) request.getAttribute("SYSTEM_OID")
210 );
211
212 return properties;
213 }
214
215 //fixme to get sytem's page suffix. use jibx,but..
216
217 /*
218 private SystemConfig getSystemConfig() throws UtilException{
219 try {
220
221 return (SystemConfig) JibxUtil.unmarshallDocument(SystemConfig.class,config.getServletContext().getRealPath("./")+"/config/SystemConfig.xml");
222 } catch (JiBXException e) {
223 throw new UtilException(e.getMessage(),e);
224 }
225 }*/
226 }
227
228
229 /*
230 * $Log: CommandDispatcher.java,v $
231 * Revision 1.1 2003/09/10 09:13:57 bitiboy
232 * *** empty log message ***
233 *
234 *
235 */
This page was automatically generated by Maven