1 package org.appfuse.webapp.action; 2 3 import java.util.Date ; 4 import java.util.Enumeration ; 5 import java.util.HashMap ; 6 import java.util.Map ; 7 8 import javax.servlet.http.HttpServletRequest ; 9 import javax.servlet.http.HttpServletResponse ; 10 import javax.servlet.http.HttpSession ; 11 12 import org.apache.commons.beanutils.ConvertUtils; 13 import org.apache.commons.beanutils.converters.IntegerConverter; 14 import org.apache.commons.beanutils.converters.LongConverter; 15 import org.apache.commons.lang.StringUtils; 16 import org.apache.commons.logging.Log; 17 import org.apache.commons.logging.LogFactory; 18 import org.apache.struts.Globals; 19 import org.apache.struts.action.ActionForm; 20 import org.apache.struts.action.ActionForward; 21 import org.apache.struts.action.ActionMapping; 22 import org.apache.struts.action.ActionMessages; 23 import org.apache.struts.actions.DispatchAction; 24 25 import org.appfuse.Constants; 26 import org.appfuse.util.ConvertUtil; 27 import org.appfuse.util.CurrencyConverter; 28 import org.appfuse.util.DateConverter; 29 30 import org.springframework.context.ApplicationContext; 31 import org.springframework.web.context.support.WebApplicationContextUtils; 32 33 76 public class BaseAction extends DispatchAction { 77 protected final Log log = LogFactory.getLog(getClass()); 78 private static final Long defaultLong = null; 79 80 static { 81 ConvertUtils.register(new CurrencyConverter(), Double .class); 82 ConvertUtils.register(new DateConverter(), Date .class); 83 ConvertUtils.register(new DateConverter(), String .class); 84 ConvertUtils.register(new LongConverter(defaultLong), Long .class); 85 ConvertUtils.register(new IntegerConverter(defaultLong), Integer .class); 86 } 87 88 94 public Object getBean(String name) { 95 ApplicationContext ctx = 96 WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext()); 97 return ctx.getBean(name); 98 } 99 100 103 protected Object convert(Object o) throws Exception { 104 return ConvertUtil.convert(o); 105 } 106 107 110 protected Object convertLists(Object o) throws Exception { 111 return ConvertUtil.convertLists(o); 112 } 113 114 120 public ActionMessages getMessages(HttpServletRequest request) { 121 ActionMessages messages = null; 122 HttpSession session = request.getSession(); 123 124 if (request.getAttribute(Globals.MESSAGE_KEY) != null) { 125 messages = (ActionMessages) request.getAttribute(Globals.MESSAGE_KEY); 126 saveMessages(request, messages); 127 } else if (session.getAttribute(Globals.MESSAGE_KEY) != null) { 128 messages = (ActionMessages) session.getAttribute(Globals.MESSAGE_KEY); 129 saveMessages(request, messages); 130 session.removeAttribute(Globals.MESSAGE_KEY); 131 } else { 132 messages = new ActionMessages(); 133 } 134 135 return messages; 136 } 137 138 141 private String getActionMethodWithMapping(HttpServletRequest request, ActionMapping mapping) { 142 return getActionMethod(request, mapping.getParameter()); 143 } 144 145 148 protected String getActionMethod(HttpServletRequest request, String prepend) { 149 String name = null; 150 151 name = request.getParameter(prepend); 153 if (name != null) { 154 name = name.trim(); 156 return name.replace(name.charAt(0), Character.toLowerCase(name.charAt(0))); 158 } 159 160 Enumeration e = request.getParameterNames(); 161 162 while (e.hasMoreElements()) { 163 String currentName = (String ) e.nextElement(); 164 165 if (currentName.startsWith(prepend + ".")) { 166 if (log.isDebugEnabled()) { 167 log.debug("calling method: " + currentName); 168 } 169 170 String [] parameterMethodNameAndArgs = StringUtils.split(currentName, "."); 171 name = parameterMethodNameAndArgs[1]; 172 break; 173 } 174 } 175 176 return name; 177 } 178 179 191 public ActionForward execute(ActionMapping mapping, ActionForm form, 192 HttpServletRequest request, 193 HttpServletResponse response) 194 throws Exception { 195 196 if (isCancelled(request)) { 197 try { 198 getMethod("cancel"); 199 return dispatchMethod(mapping, form, request, response, "cancel"); 200 } catch (NoSuchMethodException n) { 201 log.warn("No 'cancel' method found, returning null"); 202 return cancelled(mapping, form, request, response); 203 } 204 } 205 206 String actionMethod = getActionMethodWithMapping(request, mapping); 208 209 if (actionMethod != null) { 210 return dispatchMethod(mapping, form, request, response, actionMethod); 211 } else { 212 String [] rules = {"edit", "save", "search", "view"}; 213 for (int i = 0; i < rules.length; i++) { 214 if (request.getServletPath().indexOf(rules[i]) > -1) { 216 return dispatchMethod(mapping, form, request, response, rules[i]); 217 } 218 } 219 } 220 221 return super.execute(mapping, form, request, response); 222 } 223 224 232 protected ActionForm getActionForm(ActionMapping mapping, HttpServletRequest request) { 233 ActionForm actionForm = null; 234 235 if (mapping.getAttribute() != null) { 237 if ("request".equals(mapping.getScope())) { 238 actionForm = (ActionForm) request.getAttribute(mapping.getAttribute()); 239 } else { 240 HttpSession session = request.getSession(); 241 actionForm = (ActionForm) session.getAttribute(mapping.getAttribute()); 242 } 243 } 244 245 return actionForm; 246 } 247 248 254 public Map getConfiguration() { 255 Map config = (HashMap ) getServlet().getServletContext().getAttribute(Constants.CONFIG); 256 257 if (config == null) { 259 return new HashMap (); 260 } 261 262 return config; 263 } 264 265 271 protected void removeFormBean(ActionMapping mapping, HttpServletRequest request) { 272 if (mapping.getAttribute() != null) { 274 if ("request".equals(mapping.getScope())) { 275 request.removeAttribute(mapping.getAttribute()); 276 } else { 277 HttpSession session = request.getSession(); 278 session.removeAttribute(mapping.getAttribute()); 279 } 280 } 281 } 282 283 290 protected void updateFormBean(ActionMapping mapping, HttpServletRequest request, ActionForm form) { 291 if (mapping.getAttribute() != null) { 293 if ("request".equals(mapping.getScope())) { 294 request.setAttribute(mapping.getAttribute(), form); 295 } else { 296 HttpSession session = request.getSession(); 297 session.setAttribute(mapping.getAttribute(), form); 298 } 299 } 300 } 301 } 302 | Popular Tags |