1 19 20 package com.sslexplorer.wizard.actions; 21 22 import java.util.Iterator ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.apache.struts.action.ActionForm; 30 import org.apache.struts.action.ActionForward; 31 import org.apache.struts.action.ActionMapping; 32 33 import com.sslexplorer.boot.PropertyList; 34 import com.sslexplorer.boot.Util; 35 import com.sslexplorer.core.RedirectException; 36 import com.sslexplorer.core.actions.AuthenticatedDispatchAction; 37 import com.sslexplorer.policyframework.Permission; 38 import com.sslexplorer.policyframework.PolicyDatabaseFactory; 39 import com.sslexplorer.policyframework.Resource; 40 import com.sslexplorer.policyframework.ResourceType; 41 import com.sslexplorer.policyframework.ResourceUtil; 42 import com.sslexplorer.policyframework.forms.AbstractWizardPolicySelectionForm; 43 import com.sslexplorer.security.Constants; 44 import com.sslexplorer.wizard.AbstractWizardSequence; 45 import com.sslexplorer.wizard.WizardActionStatus; 46 import com.sslexplorer.wizard.WizardStep; 47 import com.sslexplorer.wizard.forms.AbstractWizardForm; 48 49 56 public abstract class AbstractWizardAction extends AuthenticatedDispatchAction { 57 58 final static Log log = LogFactory.getLog(AbstractWizardAction.class); 59 60 64 public AbstractWizardAction() { 65 } 66 67 74 public AbstractWizardAction(ResourceType resourceType, Permission permissions[]) { 75 super(resourceType, permissions); 76 } 77 78 89 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 90 throws Exception { 91 request.getSession().removeAttribute(Constants.WIZARD_SEQUENCE); 92 return unspecified(mapping, form, request, response); 93 } 94 95 103 public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, 104 HttpServletResponse response) throws Exception { 105 AbstractWizardSequence seq = (AbstractWizardSequence) request.getSession().getAttribute(Constants.WIZARD_SEQUENCE); 106 if (seq == null) { 107 try { 108 seq = createWizardSequence(mapping, form, request, response); 109 } 110 catch(RedirectException rde) { 111 log.error("Redirect to . " + rde.getForward().getPath(), rde); 112 return rde.getForward(); 113 } 114 request.getSession().setAttribute(Constants.WIZARD_SEQUENCE, seq); 115 } 116 ((AbstractWizardForm) form).init(seq, request); 117 seq.setCurrentPageForm((AbstractWizardForm) form); 118 Util.noCache(response); 119 return mapping.findForward("display"); 120 } 121 122 137 protected AbstractWizardSequence createWizardSequence(ActionMapping mapping, ActionForm form, HttpServletRequest request, 138 HttpServletResponse response) throws Exception { 139 throw new RedirectException(cancel(mapping, form, request, response), "Cannot create sequence on this page."); 140 } 141 142 152 public ActionForward next(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 153 throws Exception { 154 applyToSequence(mapping, (AbstractWizardForm) form, request, response); 155 return mapping.findForward("next"); 156 } 157 158 168 public ActionForward gotoStep(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 169 throws Exception { 170 applyToSequence(mapping, (AbstractWizardForm) form, request, response); 171 AbstractWizardSequence seq = getWizardSequence(request); 172 return new ActionForward(((WizardStep) seq.getSteps().get(((AbstractWizardForm) form).getGotoStep())).getPath(), true); 173 } 174 175 178 protected void applyToSequence(ActionMapping mapping, AbstractWizardForm form, HttpServletRequest request, 179 HttpServletResponse response) throws Exception { 180 AbstractWizardSequence seq = (AbstractWizardSequence) request.getSession().getAttribute(Constants.WIZARD_SEQUENCE); 181 if (seq == null) { 182 throw new Exception ("No sequence."); 183 } 184 form.apply(seq); 185 } 186 187 198 public ActionForward previous(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 199 throws Exception { 200 return mapping.findForward("previous"); 201 } 202 203 213 public ActionForward finish(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 214 throws Exception { 215 applyToSequence(mapping, (AbstractWizardForm) form, request, response); 216 AbstractWizardSequence seq = (AbstractWizardSequence) request.getSession().getAttribute(Constants.WIZARD_SEQUENCE); 217 if (seq == null) { 218 throw new Exception ("No sequence."); 219 } 220 return seq.getFinishActionForward(); 221 } 222 223 235 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 236 throws Exception { 237 AbstractWizardSequence seq = getWizardSequence(request); 238 if(seq != null) { 239 request.getSession().removeAttribute(Constants.WIZARD_SEQUENCE); 240 for (Iterator i = seq.getForms().iterator(); i.hasNext();) { 241 String formName = ((AbstractWizardForm) i.next()).getPageName() + "Form"; 242 request.getSession().removeAttribute(formName); 243 } 244 ActionForward fwd = new ActionForward(seq.getReferer(), true); 245 return fwd; 246 } 247 return mapping.findForward("home"); 248 } 249 250 257 public AbstractWizardSequence getWizardSequence(HttpServletRequest request) { 258 return (AbstractWizardSequence) request.getSession().getAttribute(Constants.WIZARD_SEQUENCE); 259 } 260 261 271 public ActionForward rerun(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 272 throws Exception { 273 return mapping.findForward("rerun"); 274 } 275 276 286 protected WizardActionStatus attachToPoliciesAndAddToFavorites(String messagePrefix, AbstractWizardSequence seq, Resource resource, boolean addToFavorites, HttpServletRequest request) { 287 PropertyList selectedPolicies = (PropertyList) seq.getAttribute(AbstractWizardPolicySelectionForm.ATTR_SELECTED_POLICIES, 288 null); 289 try { 290 PolicyDatabaseFactory.getInstance().attachResourceToPolicyList(resource, selectedPolicies, getSessionInfo(request)); 291 ResourceUtil.setResourceGlobalFavorite(resource, addToFavorites); 292 return new WizardActionStatus(WizardActionStatus.COMPLETED_OK, messagePrefix + ".status.attachedToPolicies"); 293 } catch (Exception e) { 294 log.error("Failed to create profile.", e); 295 return new WizardActionStatus(WizardActionStatus.COMPLETED_WITH_ERRORS, messagePrefix 296 + ".status.failedToAttachToPolicies", e.getMessage()); 297 } 298 } 299 } 300 | Popular Tags |