com.enonic.cms.web.portal.services.PortalServicesProcessor.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.web.portal.services.PortalServicesProcessor.java

Source

/*
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */

package com.enonic.cms.web.portal.services;

import java.io.IOException;

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

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.enonic.esl.containers.ExtendedMap;
import com.enonic.vertical.engine.VerticalEngineException;

import com.enonic.cms.core.resolver.ForcedResolverValueLifetimeSettings;
import com.enonic.cms.core.resolver.ResolverContext;
import com.enonic.cms.core.resolver.deviceclass.DeviceClassResolverService;
import com.enonic.cms.core.resolver.locale.LocaleResolverService;
import com.enonic.cms.core.service.UserServicesService;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SiteKey;

@Component
public final class PortalServicesProcessor extends ServicesProcessorBase {
    private DeviceClassResolverService deviceClassResolverService;

    private LocaleResolverService localeResolverService;

    private final static String FORM_ITEM_DEVICE_CLASS = "deviceclass";

    private final static String FORM_ITEM_LOCALE = "locale";

    private static final String FORCE_VALUE_SETTING_KEY = "lifetime";

    public PortalServicesProcessor() {
        super("portal");
    }

    @Autowired
    public void setDeviceClassificationService(DeviceClassResolverService deviceClassResolverService) {
        this.deviceClassResolverService = deviceClassResolverService;
    }

    @Autowired
    public void setLocaleResolverService(LocaleResolverService localeResolverService) {
        this.localeResolverService = localeResolverService;
    }

    private enum PortalOperation {
        forcedeviceclass, resetdeviceclass, forcelocale, resetlocale
    }

    @Override
    protected void handlerCustom(HttpServletRequest request, HttpServletResponse response, HttpSession session,
            ExtendedMap formItems, UserServicesService userServices, SiteKey siteKey, String operation)
            throws VerticalUserServicesException, VerticalEngineException, IOException, ClassNotFoundException,
            IllegalAccessException, InstantiationException {

        PortalOperation portalOperation = null;
        try {
            portalOperation = PortalOperation.valueOf(StringUtils.lowerCase(operation));
        } catch (IllegalArgumentException e) {
            throw new VerticalUserServicesException(
                    "Operation: " + operation + " not supported in service " + " portal");
        }

        ResolverContext resolverContext = new ResolverContext(request, getSite(siteKey));

        switch (portalOperation) {
        case forcedeviceclass:
            handleForceDeviceClass(resolverContext, response, formItems);
            break;
        case resetdeviceclass:
            handleResetDeviceClass(resolverContext, response);
            break;
        case forcelocale:
            handleForceLocale(resolverContext, response, formItems);
            break;
        case resetlocale:
            handleResetLocale(resolverContext, response);
            break;
        }

        redirectToPage(request, response, formItems);
    }

    private void handleForceDeviceClass(ResolverContext context, HttpServletResponse response,
            ExtendedMap formItems) {

        ForcedResolverValueLifetimeSettings forcedDeviceClassSetting = getForcedDeviceClassSetting(formItems);

        String deviceClass = formItems.getString(FORM_ITEM_DEVICE_CLASS);

        deviceClassResolverService.setForcedDeviceClass(context, response, forcedDeviceClassSetting, deviceClass);
    }

    private void handleResetDeviceClass(ResolverContext context, HttpServletResponse response) {
        deviceClassResolverService.resetDeviceClass(context, response);
    }

    private void handleForceLocale(ResolverContext context, HttpServletResponse response, ExtendedMap formItems) {

        ForcedResolverValueLifetimeSettings forceLocaleLifeTimeSetting = getForcedDeviceClassSetting(formItems);

        String localeString = formItems.getString(FORM_ITEM_LOCALE);

        localeResolverService.setForcedLocale(context, response, forceLocaleLifeTimeSetting, localeString);
    }

    private void handleResetLocale(ResolverContext context, HttpServletResponse response) {
        localeResolverService.resetLocale(context, response);
    }

    private ForcedResolverValueLifetimeSettings getForcedDeviceClassSetting(ExtendedMap formItems) {

        ForcedResolverValueLifetimeSettings defaultSetting = ForcedResolverValueLifetimeSettings.permanent;
        String forcedDeviceClassParameter = formItems.getString(FORCE_VALUE_SETTING_KEY, defaultSetting.name());

        ForcedResolverValueLifetimeSettings forcedDeviceClassSetting;
        try {
            forcedDeviceClassSetting = ForcedResolverValueLifetimeSettings
                    .valueOf(StringUtils.lowerCase(forcedDeviceClassParameter));
        } catch (IllegalArgumentException e) {
            throw new VerticalUserServicesException(
                    "Force deviceclass setting is invalid: " + forcedDeviceClassParameter);
        }
        return forcedDeviceClassSetting;
    }

    private SiteEntity getSite(SiteKey siteKey) {
        SiteEntity site = siteDao.findByKey(siteKey.toInt());
        return site;
    }
}