All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ar.com.zauber.commons.spring.web.AbstractConfirmationController Maven / Gradle / Ivy

There is a newer version: 3.55
Show newest version
/**
 * Copyright (c) 2005-2015 Zauber S.A. 
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ar.com.zauber.commons.spring.web;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.Validate;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import ar.com.zauber.commons.dao.exception.NoSuchEntityException;
import ar.com.zauber.commons.secret.SecretsMap;

/**
 * Controlador pensado para la ejecución asincronica de comandos. 
 * La ejecución tiene un número de pedido (secret). Tipicamente esto
 * sirve para validacion de direcciones de correo electronico, recover de 
 * password, etc.
 * 

* La ejecución se puede confirmar (realizar) o cancelar (reject). *

* * @author Juan F. Codagnone * @since Nov 30, 2005 * @param command to execute */ public abstract class AbstractConfirmationController extends MultiActionController { /** secret map */ private final SecretsMap secretsMap; /** error view */ private final String errorView; /** confirm success view */ private final String successRejectView; /** reject success view */ private final String successConfirmView; /** unregister cmd */ private final boolean unregisterCmd; /** preSuccees view */ private final String preSuccessView; /** reject view */ private final String preRejectView; /** * Creates the ConfirmChangeEmailController. * * @param secretsMap secret map * @param errorView error view * @param successConfirmView success view * @param successRejectView reject view * @param unregisterCmd unregister cmd from the secret map on success? */ public AbstractConfirmationController( final SecretsMap secretsMap, final String errorView, final String successConfirmView, final String successRejectView, final String preSuccessView, final String preRejectView, final boolean unregisterCmd) { Validate.notNull(secretsMap, "secret map"); Validate.notNull(errorView, "error view"); Validate.notNull(successConfirmView, "successConfirmView"); Validate.notNull(successRejectView, "successRejectView"); Validate.notNull(preSuccessView, "preSuccessView"); Validate.notNull(preRejectView, "preRejectView"); this.secretsMap = secretsMap; this.errorView = errorView; this.successConfirmView = successConfirmView; this.successRejectView = successRejectView; this.unregisterCmd = unregisterCmd; this.preSuccessView = preSuccessView; this.preRejectView = preRejectView; } /** @see la aceptacion de la confirmación */ public final ModelAndView postconfirm(final HttpServletRequest request, final HttpServletResponse response) { if(!request.getMethod().equalsIgnoreCase("post")) { throw new IllegalArgumentException("only accept POST method"); } ModelAndView ret = null; final String secret = ServletRequestUtils.getStringParameter(request, "secret", null); if(secret == null) { ret = new ModelAndView(errorView); } else { try { final T cmd = secretsMap.getT(secret); setup(cmd); cmd.run(); if(unregisterCmd) { secretsMap.unregister(cmd); } ret = new ModelAndView(successConfirmView, getViewModel(cmd)); } catch(final NoSuchEntityException e) { // void } if(ret == null) { ret = new ModelAndView(errorView); } } return ret; } /** * Change the email * * @see org.springframework.web.servlet.mvc.AbstractController# * handleRequest(HttpServletRequest, HttpServletResponse) */ public final ModelAndView confirm(final HttpServletRequest request, final HttpServletResponse response) { final String secret = ServletRequestUtils.getStringParameter(request, "secret", null); ModelAndView ret; if(secret == null) { ret = new ModelAndView(errorView); } else { try { Object cmd = secretsMap.getT(secret); Map map = new HashMap(); map.put("cmd", cmd); map.put("secret", secret); ret = new ModelAndView(preSuccessView, map); } catch(final NoSuchEntityException e) { ret = new ModelAndView(errorView); } } return ret; } /** * Reject the change * * @see org.springframework.web.servlet.mvc.AbstractController# * handleRequest(HttpServletRequest, HttpServletResponse) */ public final ModelAndView reject(final HttpServletRequest request, final HttpServletResponse response) { ModelAndView ret = null; final String secret = ServletRequestUtils.getStringParameter(request, "secret", null); if(secret == null) { ret = new ModelAndView(errorView); } else { try { final T cmd = secretsMap.getT(secret); Map map = new HashMap(); map.put("cmd", cmd); map.put("secret", secret); ret = new ModelAndView(preRejectView, map); } catch(final NoSuchEntityException e) { ret = new ModelAndView(errorView); } } return ret; } /** * Reject the change * * @see org.springframework.web.servlet.mvc.AbstractController# * handleRequest(HttpServletRequest, HttpServletResponse) */ public final ModelAndView postreject(final HttpServletRequest request, final HttpServletResponse response) { ModelAndView ret = null; final String secret = ServletRequestUtils.getStringParameter(request, "secret", null); if(!request.getMethod().equalsIgnoreCase("post")) { throw new IllegalArgumentException("only accept POST method"); } if(secret == null) { ret = new ModelAndView(errorView); } else { try { final T cmd = secretsMap.getT(secret); secretsMap.unregister(cmd); ret = new ModelAndView(successRejectView, getViewModel(cmd)); } catch(final NoSuchEntityException e) { ret = new ModelAndView(errorView); } } return ret; } /** * @param cmd cmd to setup */ protected abstract void setup(final T cmd); /** * @param cmd cmd * @return a map to use in ModelAndView */ protected abstract Map getViewModel(final T cmd); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy