de.hybris.platform.storefront.controllers.pages.checkout.steps.AbstractCheckoutStepController.java Source code

Java tutorial

Introduction

Here is the source code for de.hybris.platform.storefront.controllers.pages.checkout.steps.AbstractCheckoutStepController.java

Source

/*
 * [y] hybris Platform
 *
 * Copyright (c) 2000-2014 hybris AG
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of hybris
 * ("Confidential Information"). You shall not disclose such Confidential
 * Information and shall use it only in accordance with the terms of the
 * license agreement you entered into with hybris.
 *
 *
 */

package de.hybris.platform.storefront.controllers.pages.checkout.steps;

import de.hybris.platform.acceleratorfacades.payment.PaymentFacade;
import de.hybris.platform.acceleratorservices.customer.CustomerLocationService;
import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.ResourceBreadcrumbBuilder;
import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.impl.ContentPageBreadcrumbBuilder;
import de.hybris.platform.acceleratorstorefrontcommons.checkout.steps.CheckoutGroup;
import de.hybris.platform.acceleratorstorefrontcommons.checkout.steps.CheckoutStep;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.AbstractCheckoutController;
import de.hybris.platform.acceleratorstorefrontcommons.forms.validation.AddressValidator;
import de.hybris.platform.acceleratorstorefrontcommons.forms.validation.PaymentDetailsValidator;
import de.hybris.platform.acceleratorstorefrontcommons.forms.verification.AddressVerificationResultHandler;
import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException;
import de.hybris.platform.commercefacades.order.CartFacade;
import de.hybris.platform.commercefacades.product.ProductFacade;
import de.hybris.platform.commercefacades.user.data.CountryData;
import de.hybris.platform.commercefacades.user.data.TitleData;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;

public abstract class AbstractCheckoutStepController extends AbstractCheckoutController
        implements CheckoutStepController {
    protected static final String MULTI_CHECKOUT_SUMMARY_CMS_PAGE_LABEL = "multiStepCheckoutSummary";
    protected static final String REDIRECT_URL_ADD_DELIVERY_ADDRESS = REDIRECT_PREFIX
            + "/checkout/multi/delivery-address/add";
    protected static final String REDIRECT_URL_CHOOSE_DELIVERY_METHOD = REDIRECT_PREFIX
            + "/checkout/multi/delivery-method/choose";
    protected static final String REDIRECT_URL_ADD_PAYMENT_METHOD = REDIRECT_PREFIX
            + "/checkout/multi/payment-method/add";
    protected static final String REDIRECT_URL_SUMMARY = REDIRECT_PREFIX + "/checkout/multi/summary/view";
    protected static final String REDIRECT_URL_CART = REDIRECT_PREFIX + "/cart";
    protected static final String REDIRECT_URL_ERROR = REDIRECT_PREFIX + "/checkout/multi/hop/error";

    @Resource(name = "paymentDetailsValidator")
    private PaymentDetailsValidator paymentDetailsValidator;

    @Resource(name = "accProductFacade")
    private ProductFacade productFacade;

    @Resource(name = "multiStepCheckoutBreadcrumbBuilder")
    private ResourceBreadcrumbBuilder resourceBreadcrumbBuilder;

    @Resource(name = "paymentFacade")
    private PaymentFacade paymentFacade;

    @Resource(name = "addressValidator")
    private AddressValidator addressValidator;

    @Resource(name = "customerLocationService")
    private CustomerLocationService customerLocationService;

    @Resource(name = "cartFacade")
    private CartFacade cartFacade;

    @Resource(name = "addressVerificationResultHandler")
    private AddressVerificationResultHandler addressVerificationResultHandler;

    @Resource(name = "contentPageBreadcrumbBuilder")
    private ContentPageBreadcrumbBuilder contentPageBreadcrumbBuilder;

    @Resource(name = "checkoutFlowGroupMap")
    private Map<String, CheckoutGroup> checkoutFlowGroupMap;

    @ModelAttribute("titles")
    public Collection<TitleData> getTitles() {
        return getUserFacade().getTitles();
    }

    @ModelAttribute("countries")
    public Collection<CountryData> getCountries() {
        return getCheckoutFacade().getDeliveryCountries();
    }

    @ModelAttribute("countryDataMap")
    public Map<String, CountryData> getCountryDataMap() {
        final Map<String, CountryData> countryDataMap = new HashMap<String, CountryData>();
        for (final CountryData countryData : getCountries()) {
            countryDataMap.put(countryData.getIsocode(), countryData);
        }
        return countryDataMap;
    }

    @ModelAttribute("checkoutSteps")
    public List<CheckoutSteps> addCheckoutStepsToModel() {
        final CheckoutGroup checkoutGroup = getCheckoutFlowGroupMap()
                .get(getCheckoutFacade().getCheckoutFlowGroupForCheckout());
        final Map<String, CheckoutStep> progressBarMap = checkoutGroup.getCheckoutProgressBar();
        final List<CheckoutSteps> checkoutSteps = new ArrayList<CheckoutSteps>(progressBarMap.size());

        for (final Map.Entry<String, CheckoutStep> entry : progressBarMap.entrySet()) {
            final CheckoutStep checkoutStep = entry.getValue();
            checkoutSteps.add(new CheckoutSteps(checkoutStep.getProgressBarId(),
                    StringUtils.remove(checkoutStep.currentStep(), "redirect:"), Integer.valueOf(entry.getKey())));
        }
        return checkoutSteps;
    }

    protected void prepareDataForPage(final Model model) throws CMSItemNotFoundException {
        model.addAttribute("isOmsEnabled",
                Boolean.valueOf(getSiteConfigService().getBoolean("oms.enabled", false)));
        model.addAttribute("supportedCountries", getCartFacade().getDeliveryCountries());
        model.addAttribute("expressCheckoutAllowed",
                Boolean.valueOf(getCheckoutFacade().isExpressCheckoutAllowedForCart()));
        model.addAttribute("taxEstimationEnabled",
                Boolean.valueOf(getCheckoutFacade().isTaxEstimationEnabledForCart()));
    }

    protected CheckoutStep getCheckoutStep(final String currentController) {
        final CheckoutGroup checkoutGroup = getCheckoutFlowGroupMap()
                .get(getCheckoutFacade().getCheckoutFlowGroupForCheckout());
        return checkoutGroup.getCheckoutStepMap().get(currentController);
    }

    protected void setCheckoutStepLinksForModel(final Model model, final CheckoutStep checkoutStep) {
        model.addAttribute("previousStepUrl", StringUtils.remove(checkoutStep.previousStep(), "redirect:"));
        model.addAttribute("nextStepUrl", StringUtils.remove(checkoutStep.nextStep(), "redirect:"));
        model.addAttribute("currentStepUrl", StringUtils.remove(checkoutStep.currentStep(), "redirect:"));
        model.addAttribute("progressBarId", checkoutStep.getProgressBarId());
    }

    protected Map<String, String> getRequestParameterMap(final HttpServletRequest request) {
        final Map<String, String> map = new HashMap<String, String>();

        final Enumeration myEnum = request.getParameterNames();
        while (myEnum.hasMoreElements()) {
            final String paramName = (String) myEnum.nextElement();
            final String paramValue = request.getParameter(paramName);
            map.put(paramName, paramValue);
        }

        return map;
    }

    public static class CheckoutSteps {
        private final String progressBarId;
        private final String url;
        private final Integer stepNumber;

        public CheckoutSteps(final String progressBarId, final String url, final Integer stepNumber) {
            this.progressBarId = progressBarId;
            this.url = url;
            this.stepNumber = stepNumber;
        }

        public String getProgressBarId() {
            return progressBarId;
        }

        public String getUrl() {
            return url;
        }

        public Integer getStepNumber() {
            return stepNumber;
        }
    }

    @Override
    protected CartFacade getCartFacade() {
        return cartFacade;
    }

    protected ProductFacade getProductFacade() {
        return productFacade;
    }

    protected PaymentDetailsValidator getPaymentDetailsValidator() {
        return paymentDetailsValidator;
    }

    protected ResourceBreadcrumbBuilder getResourceBreadcrumbBuilder() {
        return resourceBreadcrumbBuilder;
    }

    protected PaymentFacade getPaymentFacade() {
        return paymentFacade;
    }

    protected AddressValidator getAddressValidator() {
        return addressValidator;
    }

    protected CustomerLocationService getCustomerLocationService() {
        return customerLocationService;
    }

    protected AddressVerificationResultHandler getAddressVerificationResultHandler() {
        return addressVerificationResultHandler;
    }

    public ContentPageBreadcrumbBuilder getContentPageBreadcrumbBuilder() {
        return contentPageBreadcrumbBuilder;
    }

    public Map<String, CheckoutGroup> getCheckoutFlowGroupMap() {
        return checkoutFlowGroupMap;
    }

}