de.hybris.platform.acceleratorfacades.urlencoder.impl.DefaultUrlEncoderFacade.java Source code

Java tutorial

Introduction

Here is the source code for de.hybris.platform.acceleratorfacades.urlencoder.impl.DefaultUrlEncoderFacade.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.acceleratorfacades.urlencoder.impl;

import de.hybris.platform.acceleratorfacades.urlencoder.UrlEncoderFacade;
import de.hybris.platform.acceleratorfacades.urlencoder.data.UrlEncoderData;
import de.hybris.platform.acceleratorfacades.urlencoder.data.UrlEncoderPatternData;
import de.hybris.platform.acceleratorservices.urlencoder.UrlEncoderService;
import de.hybris.platform.acceleratorservices.urlencoder.attributes.UrlEncodingAttributeManager;
import de.hybris.platform.servicelayer.session.SessionService;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Required;

/**
 * Facade implementation for UrlEncoding attributes
 */
public class DefaultUrlEncoderFacade implements UrlEncoderFacade {
    private static final Logger LOG = Logger.getLogger(DefaultUrlEncoderFacade.class.getName());
    private SessionService sessionService;
    private UrlEncoderService urlEncoderService;

    @Deprecated
    @Override
    public List<UrlEncoderData> variablesForUrlEncoding() {
        return getCurrentUrlEncodingData();
    }

    @Deprecated
    @Override
    public void updateUrlEncodingData() {
        updateSiteFromUrlEncodingData();
    }

    @Override
    public boolean isValid(final String attributeName, final String value) {
        final UrlEncodingAttributeManager attributeManager = getUrlEncoderService().getUrlEncodingAttrManagerMap()
                .get(attributeName);
        if (attributeManager != null) {
            return attributeManager.isValid(value);
        }
        return false;
    }

    @Deprecated
    @Override
    public UrlEncoderPatternData patternForUrlEncoding(final String uri, final String contextPath,
            final boolean newSession) {
        final List<UrlEncoderData> urlEncodingAttributes = variablesForUrlEncoding();
        final UrlEncoderPatternData patternData = new UrlEncoderPatternData();
        final String[] splitUrl = StringUtils.split(uri, "/");
        int splitUrlCounter = (ArrayUtils.isNotEmpty(splitUrl)
                && (StringUtils.remove(contextPath, "/").equals(splitUrl[0]))) ? 1 : 0;
        for (final UrlEncoderData urlEncoderData : urlEncodingAttributes) {
            boolean applicationDriven = false;
            if ((splitUrlCounter) < splitUrl.length) {
                String tempValue = splitUrl[splitUrlCounter];
                if (!isValid(urlEncoderData.getAttributeName(), tempValue)) {
                    tempValue = urlEncoderData.getDefaultValue();
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("Encoding attributes are absent. Injecting default value :  [" + tempValue + "]");
                    }
                }
                final UrlEncodingAttributeManager attributeManager = getUrlEncoderService()
                        .getUrlEncodingAttrManagerMap().get(urlEncoderData.getAttributeName());
                //Check if its driven by user and if so redirect
                if (!newSession && !StringUtils.equalsIgnoreCase(urlEncoderData.getCurrentValue(),
                        attributeManager.getCurrentValue())) {
                    urlEncoderData.setCurrentValue(attributeManager.getCurrentValue());
                    patternData.setRedirectRequired(true);
                    applicationDriven = true;
                }
                if (!applicationDriven) {
                    urlEncoderData.setCurrentValue(tempValue);
                }
                splitUrlCounter++;
            } else {
                break;
            }
        }
        patternData.setPattern(extractEncodingPattern(urlEncodingAttributes));

        return patternData;
    }

    protected String extractEncodingPattern(final List<UrlEncoderData> urlEncodingAttributes) {
        String pattern = null;
        for (final UrlEncoderData urlEncoderData : urlEncodingAttributes) {
            pattern = StringUtils.isBlank(pattern) ? urlEncoderData.getCurrentValue()
                    : pattern + "/" + urlEncoderData.getCurrentValue();
        }
        if (LOG.isDebugEnabled()) {
            LOG.debug(" Encoding pattern after processing :  [" + pattern + "]");
        }
        return pattern;
    }

    @Deprecated
    @Override
    public void removeSessionAttributeForUrlEncoding() {
        getSessionService().removeAttribute("urlEncodingData");
    }

    @Override
    public List<UrlEncoderData> getCurrentUrlEncodingData() {
        if (getSessionService().getAttribute("urlEncodingData") == null) {
            final Collection<String> urlEncodingAttributes = getUrlEncoderService().getEncodingAttributesForSite();
            final List<UrlEncoderData> urlEncoderDataList = new ArrayList<UrlEncoderData>(
                    urlEncodingAttributes.size());

            for (final String attribute : urlEncodingAttributes) {
                final UrlEncodingAttributeManager attributeManager = getUrlEncoderService()
                        .getUrlEncodingAttrManagerMap().get(attribute);
                if (attributeManager != null) {
                    final UrlEncoderData urlEncoderData = new UrlEncoderData();
                    urlEncoderData.setAttributeName(attribute);
                    urlEncoderData.setCurrentValue(attributeManager.getCurrentValue());
                    urlEncoderData.setDefaultValue(attributeManager.getDefaultValue());
                    urlEncoderDataList.add(urlEncoderData);
                }
            }
            getSessionService().setAttribute("urlEncodingData", urlEncoderDataList);
        }

        return getSessionService().getAttribute("urlEncodingData");
    }

    @Override
    public void updateSiteFromUrlEncodingData() {
        for (final UrlEncoderData urlEncoderData : getCurrentUrlEncodingData()) {
            final UrlEncodingAttributeManager attributeManager = getUrlEncoderService()
                    .getUrlEncodingAttrManagerMap().get(urlEncoderData.getAttributeName());
            if (attributeManager != null) {
                attributeManager.updateAndSyncForAttrChange(urlEncoderData.getCurrentValue());
            }
        }
    }

    @Override
    public String calculateAndUpdateUrlEncodingData(final String uri, final String contextPath) {
        final List<UrlEncoderData> urlEncodingAttributes = getCurrentUrlEncodingData();
        final String[] splitUrl = StringUtils.split(uri, "/");
        int splitUrlCounter = (ArrayUtils.isNotEmpty(splitUrl)
                && (StringUtils.remove(contextPath, "/").equals(splitUrl[0]))) ? 1 : 0;

        final StringBuilder patternSb = new StringBuilder();
        for (final UrlEncoderData urlEncoderData : urlEncodingAttributes) {
            String tempValue = urlEncoderData.getCurrentValue();
            if ((splitUrlCounter) < splitUrl.length) {
                tempValue = splitUrl[splitUrlCounter];
                if (!isValid(urlEncoderData.getAttributeName(), tempValue)) {
                    tempValue = urlEncoderData.getDefaultValue();
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("Encoding attributes are absent. Injecting default value :  [" + tempValue + "]");
                    }
                }
                urlEncoderData.setCurrentValue(tempValue);
                splitUrlCounter++;
            }

            if (patternSb.length() != 0) {
                patternSb.append('/');
            }
            patternSb.append(tempValue);

        }
        return patternSb.toString();
    }

    protected SessionService getSessionService() {
        return sessionService;
    }

    @Required
    public void setSessionService(final SessionService sessionService) {
        this.sessionService = sessionService;
    }

    protected UrlEncoderService getUrlEncoderService() {
        return urlEncoderService;
    }

    @Required
    public void setUrlEncoderService(final UrlEncoderService urlEncoderService) {
        this.urlEncoderService = urlEncoderService;
    }
}