1 /*** 2 * The contents of this file are subject to the Mozilla Public 3 * License Version 1.1 (the "License"); you may not use this file 4 * except in compliance with the License. You may obtain a copy of 5 * the License at http://www.mozilla.org/MPL/ 6 * 7 * Software distributed under the License is distributed on an "AS 8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 9 * implied. See the License for the specific language governing 10 * rights and limitations under the License. 11 * 12 * The Original Code is pow2Toolkit library. 13 * 14 * The Initial Owner of the Original Code is Power Of Two S.R.L. 15 * Portions created by Power Of Two S.R.L. are Copyright (C) Power Of Two S.R.L. 16 * All Rights Reserved. 17 * 18 * Contributor(s): 19 */ 20 package com.pow2.struts.action; 21 22 import javax.servlet.http.HttpServletRequest; 23 24 25 import org.apache.log4j.Category; 26 import org.apache.struts.action.*; 27 28 import com.pow2.util.Util; 29 30 31 /*** 32 * Pow2 Struts base action. 33 * <br> 34 * This class adds base utility methods to other Action subclasses. 35 * <br> 36 * It also provides the <code>validateSession</code> hook method; 37 * the default implementation always returns <code>true</code>. 38 * <br> 39 * To implement your own session validation, extend this class and 40 * override the the <code>validateSession</code> method. 41 * <br> 42 * if <code>validateSession</code> returns <code>false</code>, this action 43 * forwards to the resource specified by the "invalidSession" ActionForward 44 * object. 45 * 46 * @author Luca Fossato 47 */ 48 public class BaseAction extends Action 49 { 50 /*** ActionForward cancel string */ 51 protected final static String FWD_CANCEL = "cancel"; 52 53 /*** ActionForward failure string */ 54 protected final static String FWD_FAILURE = "failure"; 55 56 /*** ActionForward failure string */ 57 protected final static String FWD_LOGIN = "login"; 58 59 /*** ActionForward invalid session string */ 60 protected final static String FWD_INVALID_SESSION = "invalidSession"; 61 62 /*** Resource properties message key for invalidSession forwards */ 63 private final static String KEY_INVALID_SESSION = "action.session.invalid"; 64 65 /*** Log4j category */ 66 protected Category cat = Category.getInstance(this.getClass()); 67 68 69 /*** 70 * Get the <code>FWD_LOGIN</code> ActionForward object. 71 * 72 * @param request the HttpServletRequest object 73 * @param mapping the ActionMapping object 74 * @return Description of the Return Value 75 */ 76 protected ActionForward loginForward(HttpServletRequest request, 77 ActionMapping mapping) 78 { 79 return getForward(request, mapping, null, FWD_LOGIN, null); 80 } 81 82 83 /*** 84 * Get the <code>FWD_LOGIN</code> ActionForward object, and store the 85 * error message identified by the errorKey string into the input 86 * ActionErrors object. 87 * 88 * @param request the HttpServletRequest object 89 * @param mapping the ActionMapping object 90 * @param errors the ActionErrors object 91 * @param errorKey a string key identifying a resource properties error string 92 * @return Description of the Return Value 93 */ 94 protected ActionForward loginForward(HttpServletRequest request, 95 ActionMapping mapping, 96 ActionErrors errors, 97 String errorKey) 98 { 99 return getForward(request, mapping, errors, FWD_LOGIN, errorKey); 100 } 101 102 103 /*** 104 * Get the <code>FWD_FAILURE</code> ActionForward object, and store the 105 * error message identified by the errorKey string into the input 106 * ActionErrors object. 107 * 108 * @param request the HttpServletRequest object 109 * @param mapping the ActionMapping object 110 * @param errors the ActionErrors object 111 * @param errorKey a string key identifying a resource properties error string 112 * @return Description of the Return Value 113 */ 114 protected ActionForward failureForward(HttpServletRequest request, 115 ActionMapping mapping, 116 ActionErrors errors, 117 String errorKey) 118 { 119 cat.debug("::failureForward - using errorKey [" + errorKey + "]"); 120 return getForward(request, mapping, errors, FWD_FAILURE, errorKey); 121 } 122 123 124 /*** 125 * Get the <code>FWD_INVALID_SESSION</code> ActionForward object, and store 126 * the error message identified by the <code>KEY_INVALID_SESSION</code> key 127 * into the input ActionErrors object. 128 * 129 * @param request the HttpServletRequest object 130 * @param mapping the ActionMapping object 131 * @param errors the ActionErrors objects 132 * @return Description of the Return Value 133 */ 134 protected ActionForward invalidSessionForward(HttpServletRequest request, 135 ActionMapping mapping, 136 ActionErrors errors) 137 { 138 return getForward(request, mapping, errors, FWD_INVALID_SESSION, KEY_INVALID_SESSION); 139 } 140 141 142 /*** 143 * Get the ActionForward object related to the input <code>forward</code> string, 144 * and store the error message identified by the errorKey string into 145 * the input ActionErrors object. 146 * 147 * @param request the HttpServletRequest object 148 * @param mapping the ActionMapping object 149 * @param errors the ActionErrors object 150 * @param forward the name of the action forward object to retrieve 151 * @param errorKey a string key identifying a resource properties error string 152 * @return The forward value 153 */ 154 protected ActionForward getForward(HttpServletRequest request, 155 ActionMapping mapping, 156 ActionErrors errors, 157 String forward, 158 String errorKey) 159 { 160 if ((errors != null) && !Util.isNull(errorKey)) 161 { 162 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(errorKey)); 163 saveErrors(request, errors); 164 } 165 166 ActionForward fwd = mapping.findForward(forward); 167 168 if (fwd == null) 169 cat.error("::getForward - ActionForward object [" + forward + "] is null"); 170 171 return fwd; 172 } 173 174 175 /*** 176 * Check if the input ActionForward object is a failure forward 177 * 178 * @param forward the ActionForward object to check 179 */ 180 protected boolean isFailureForward(ActionForward forward) 181 { 182 return (FWD_FAILURE.equals(forward.getName())); 183 } 184 185 186 /*** 187 * Check if the current session is valid. 188 * <br> 189 * This is an hook method that returns always true. 190 * Make your own action class that extends BaseAction 191 * and override this method. 192 * 193 * @param HttpServletRequest the input request object 194 * @return true if the current session is valid; false otherwise. 195 * This implementation returns true 196 */ 197 protected boolean validateSession(HttpServletRequest request) 198 { 199 return true; 200 } 201 }