All pastes #766920 Raw Edit

Something

public text v1 · immutable
·published 2007-11-09 08:54 UTC
rendered paste body
package fr.cvf.vodoo.zne.web.controller.page;

import fr.cvf.pgc.dao.DAOException;
import fr.cvf.vodoo.ihm.zne.ajax.dto.AbstractBclMenuItem;
import fr.cvf.vodoo.ihm.zne.ajax.dto.MovieInfosBean;
import fr.cvf.vodoo.ihm.zne.ajax.dto.MovieInfosBeanFactory;
import fr.cvf.vodoo.ihm.zne.ajax.dto.PaymentModeBclMenuItem;
import fr.cvf.vodoo.ihm.zne.domain.service.BasketService;
import fr.cvf.vodoo.ihm.zne.domain.service.payment.IPaymentStrategyFactory;
import fr.cvf.vodoo.pgc.facade.Movie;
import fr.cvf.vodoo.pgc.facade.User;
import fr.cvf.vodoo.pgc.facade.impl.basket.PaymentMethod;
import fr.cvf.vodoo.zne.web.bean.PaymentModeResult;
import fr.cvf.vodoo.zne.web.security.CheckSession;
import fr.cvf.vodoo.zne.web.service.ZneUrlFactory;
import fr.cvf.vodoo.zne.web.session.Visit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

/**
 * @author ecruciani
 */
@CheckSession
public class PaymentChoiceController extends SimpleFormController {
    /** Movie infos bean Factory */
    private MovieInfosBeanFactory movieInfosBeanFactory;
    /** Payment Strategy Factory */
    private IPaymentStrategyFactory paymentStrategyFactory;
    /** Basket Service */
    private BasketService basketService;
    /** User vist */
    private Visit visit;
    /** ZneUrlFactory*/
    private ZneUrlFactory zneUrlFactory;

    
    /**
     * indique si l'utilisateur peut passer la phase de paiement
     * @param user
     * @return
     * @throws DAOException
     */
    private boolean isFreePaymentApplicable() throws DAOException {
        boolean freePaymentApplicable = false;
    
        User user = visit.getUser();
        
        if  (user.isWhiteUser() ) {
            if ((user.isDemoUser() && user.isDemoUserUnderCeiling()) || user.isTestUser()) {
                freePaymentApplicable = true;
            }
        }
        return freePaymentApplicable;
    }
    
    /**
     * (non-Javadoc)
     * 
     * @see org.springframework.web.servlet.mvc.SimpleFormController#showForm(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse, org.springframework.validation.BindException,
     *      java.util.Map)
     */
    @Override
    protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors,
            Map controlModel) throws Exception {

        Movie m = this.basketService.getMovie();

        // only display form is price > 0, otherwise confirm directly
        if (m.getLowestPrice() == 0) {
            return goConfirmationWithPayment(PaymentType.FREE_ITEM);
        } else 
        if(isFreePaymentApplicable()) {
        	return goConfirmationWithPayment(PaymentType.FREE);
        } else {
        	return goConfirmationWithPayment(PaymentType.WPMS);
        }
        
        //return super.showForm(request, response, errors, controlModel);
    }

    /**
     * @param paymentMode
     * @return
     */
    private ModelAndView goConfirmationWithPayment(PaymentType paymentMode) {
      
    	PaymentMethod payment = this.paymentStrategyFactory.createPaymentStrategy(paymentMode).choosePaymentMode();
        this.visit.getBasket().setPrimaryPaymentMethod(payment);
       
        return new ModelAndView("redirect:/paymentConfirmation.do", new HashMap<String, Object>());
    }

    /**
     * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(java.lang.Object)
     */
    @Override
    protected ModelAndView onSubmit(Object commandObject) throws Exception {
        PaymentModeResult paymentModeResult = (PaymentModeResult) commandObject;
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("paymentModeResult : " + paymentModeResult.toString());
            this.logger.debug("Visit is null ? " + (this.visit == null));
            this.logger.debug("user is null ?: " + (this.visit.getUser() == null));
        }

        return goConfirmationWithPayment(paymentModeResult.getPaymentMode());
    }

    /**
     * @see org.springframework.web.servlet.mvc.AbstractFormController#formBackingObject(javax.servlet.http.HttpServletRequest)
     */
    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        this.logger.debug("formBackingObject() return new PaymentModeResult ");
        return new PaymentModeResult();
    }

    /**
     * initailisation de la vue
     * 
     * @see org.springframework.web.servlet.mvc.SimpleFormController#referenceData(javax.servlet.http.HttpServletRequest,
     *      java.lang.Object, org.springframework.validation.Errors)
     */
    @Override
    protected Map<String, Object> referenceData(HttpServletRequest request, Object commandObject, Errors errors)
            throws Exception {
        Map<String, Object> model = new HashMap<String, Object>();
        String jsonItems = buildMenuItems(request).toString();
        model.put("jsonItems", jsonItems);

        int marqueurFilm = this.basketService.getMovie().getMarqueur();
        int marqueurOrigine = this.basketService.getOrigine().getMarqueur();
        MovieInfosBean movieInfosBean = this.movieInfosBeanFactory.createMovieInfosBean(marqueurFilm, marqueurOrigine);
        model.put("backUrl", this.zneUrlFactory.buildMovieUrl());
        model.put("movieInfosBean", movieInfosBean);

        return model;
    }

    /**
     * @param request
     * @return
     */
    private JSONArray buildMenuItems(HttpServletRequest request) {
        List<AbstractBclMenuItem> items = new ArrayList<AbstractBclMenuItem>();
        items.add(new PaymentModeBclMenuItem("facture Orange", PaymentType.WPMS));
        items.add(new PaymentModeBclMenuItem("code cadeau", PaymentType.OTA));
        return JSONArray.fromObject(items);
    }

    /**
     * @param movieInfosBeanFactory
     */
    @Required
    public void setMovieInfosBeanFactory(MovieInfosBeanFactory movieInfosBeanFactory) {
        this.movieInfosBeanFactory = movieInfosBeanFactory;
    }

    /**
     * @param paymentStrategyFactory
     */
    @Required
    public void setPaymentStrategyFactory(IPaymentStrategyFactory paymentStrategyFactory) {
        this.paymentStrategyFactory = paymentStrategyFactory;
    }

    /**
     * @param basketService
     */
    @Required
    public void setBasketService(BasketService basketService) {
        this.basketService = basketService;
    }

    /**
     * @param visit
     */
    @Required
    public void setVisit(Visit visit) {
        this.visit = visit;
    }

    @Required
	public void setZneUrlFactory(ZneUrlFactory zneUrlFactory) {
		this.zneUrlFactory = zneUrlFactory;
	}
}







	<!-- VOD_PAY_LS001 -->
	<bean name="/paymentChoice.do" class="fr.cvf.vodoo.zne.web.controller.page.PaymentChoiceController" >
        <property name="formView" value="VOD_PAY_LS001"/>
        <property name="commandName" value="paymentModeResult"/>
        <property name="commandClass" value="fr.cvf.vodoo.zne.web.bean.PaymentModeResult"/>	
		<property name="movieInfosBeanFactory" ref="movieInfosBeanFactory"/>
		<property name="paymentStrategyFactory" ref="paymentStrategyFactory"/>
		<property name="basketService" ref="basketService"/>
		<property name="zneUrlFactory" ref="zneUrlFactory"/>
		<property name="visit" ref="visit"/>
	</bean>