/*
* 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;
}
}