de.hybris.platform.acceleratorfacades.device.impl.DefaultDeviceDetectionFacade.java Source code

Java tutorial

Introduction

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

import de.hybris.platform.acceleratorfacades.device.DeviceDetectionFacade;
import de.hybris.platform.acceleratorfacades.device.data.DeviceData;
import de.hybris.platform.acceleratorfacades.device.data.UiExperienceData;
import de.hybris.platform.acceleratorservices.config.SiteConfigService;
import de.hybris.platform.commerceservices.enums.UiExperienceLevel;
import de.hybris.platform.acceleratorservices.uiexperience.UiExperienceService;
import de.hybris.platform.core.model.user.UserModel;
import de.hybris.platform.servicelayer.dto.converter.Converter;
import de.hybris.platform.servicelayer.session.SessionService;
import de.hybris.platform.servicelayer.user.UserConstants;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Required;

/**
 * Default implementation of the DeviceDetectionFacade
 */
public class DefaultDeviceDetectionFacade implements DeviceDetectionFacade {
    protected static final String DETECTED_DEVICE = "DeviceDetectionFacade-Detected-Device";
    public static final String DEVICE_DETECTION_UIEXPERIENCE_LEVEL_SUPPORTED = "uiexperience.level.supported";

    private static final Logger LOG = Logger.getLogger(DefaultDeviceDetectionFacade.class.getName());

    private Converter<HttpServletRequest, DeviceData> requestDeviceDataConverter;
    private Converter<DeviceData, UiExperienceData> deviceDataUiExperienceDataConverter;
    private SessionService sessionService;
    private UiExperienceService uiExperienceService;
    private SiteConfigService siteConfigService;

    @Override
    public void initializeRequest(final HttpServletRequest request) {
        // Only initialise the detected device once per session
        if (getCurrentDetectedDevice() == null || "true".equals(request.getParameter("clear"))) {
            // Detect the device in the current request
            final DeviceData deviceData = getRequestDeviceDataConverter().convert(request);
            setCurrentDetectedDevice(deviceData);

            // Map the detected device to a UiExperienceLevel
            final UiExperienceData uiExperienceData = getDeviceDataUiExperienceDataConverter().convert(deviceData);
            final List<String> supportedUiExperienceLevels = Arrays.asList(StringUtils.split(getSiteConfigService()
                    .getString(DEVICE_DETECTION_UIEXPERIENCE_LEVEL_SUPPORTED, StringUtils.EMPTY), ","));

            if (uiExperienceData != null && uiExperienceData.getLevel() != null
                    && (supportedUiExperienceLevels.isEmpty()
                            || supportedUiExperienceLevels.contains(uiExperienceData.getLevel().getCode()))) {
                getUiExperienceService().setDetectedUiExperienceLevel(uiExperienceData.getLevel());
            } else {
                // Default to DESKTOP experience or the first supportUi
                UiExperienceLevel defaultExperience = UiExperienceLevel.DESKTOP;
                try {
                    if (!supportedUiExperienceLevels.isEmpty()) {
                        defaultExperience = UiExperienceLevel.valueOf(supportedUiExperienceLevels.get(0));
                    }
                } catch (IllegalArgumentException e) {
                    LOG.warn(String.format("Invalid UiExperienceLevel enum %s will default to 'Desktop'",
                            supportedUiExperienceLevels.isEmpty() ? "" : supportedUiExperienceLevels.get(0)));
                }
                getUiExperienceService().setDetectedUiExperienceLevel(defaultExperience);
            }

            if (LOG.isDebugEnabled()) {
                final UserModel userModel = (UserModel) getSessionService()
                        .getAttribute(UserConstants.USER_SESSION_ATTR_KEY);
                final String userUid = (userModel != null) ? userModel.getUid() : "<null>";

                LOG.debug("Detected device [" + deviceData.getId() + "] User Agent [" + deviceData.getUserAgent()
                        + "] Mobile [" + deviceData.getMobileBrowser() + "] Session user [" + userUid + "]");
            }
        }
    }

    @Override
    public DeviceData getCurrentDetectedDevice() {
        return getSessionService().getAttribute(DETECTED_DEVICE);
    }

    protected void setCurrentDetectedDevice(final DeviceData deviceData) {
        getSessionService().setAttribute(DETECTED_DEVICE, deviceData);
    }

    protected Converter<HttpServletRequest, DeviceData> getRequestDeviceDataConverter() {
        return requestDeviceDataConverter;
    }

    @Required
    public void setRequestDeviceDataConverter(
            final Converter<HttpServletRequest, DeviceData> requestDeviceDataConverter) {
        this.requestDeviceDataConverter = requestDeviceDataConverter;
    }

    protected Converter<DeviceData, UiExperienceData> getDeviceDataUiExperienceDataConverter() {
        return deviceDataUiExperienceDataConverter;
    }

    @Required
    public void setDeviceDataUiExperienceDataConverter(
            final Converter<DeviceData, UiExperienceData> deviceDataUiExperienceDataConverter) {
        this.deviceDataUiExperienceDataConverter = deviceDataUiExperienceDataConverter;
    }

    protected SessionService getSessionService() {
        return sessionService;
    }

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

    protected UiExperienceService getUiExperienceService() {
        return uiExperienceService;
    }

    @Required
    public void setUiExperienceService(final UiExperienceService uiExperienceService) {
        this.uiExperienceService = uiExperienceService;
    }

    protected SiteConfigService getSiteConfigService() {
        return siteConfigService;
    }

    @Required
    public void setSiteConfigService(final SiteConfigService siteConfigService) {
        this.siteConfigService = siteConfigService;
    }
}