/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.processor;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.springframework.util.Assert;
import com.enonic.vertical.engine.handlers.MenuHandler;
import com.enonic.cms.core.language.LanguageEntity;
import com.enonic.cms.core.portal.rendering.RegionsResolver;
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.security.user.UserEntity;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SitePath;
import com.enonic.cms.core.structure.SitePropertiesService;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.page.Regions;
import com.enonic.cms.core.structure.page.template.PageTemplateEntity;
import com.enonic.cms.store.dao.ContentDao;
import com.enonic.cms.store.dao.PageTemplateDao;
import com.enonic.cms.store.dao.SectionContentDao;
public abstract class AbstractPageRequestProcessor
extends AbstractBasePortalRequestProcessor
{
protected PageRequestProcessorContext context;
protected ContentDao contentDao;
protected PageTemplateDao pageTemplateDao;
protected LocaleResolverService localeResolverService;
protected DeviceClassResolverService deviceClassResolverService;
protected SectionContentDao sectionContentDao;
protected SitePropertiesService sitePropertiesService;
protected MenuHandler menuHandler;
protected AbstractPageRequestProcessor( final PageRequestProcessorContext context )
{
this.context = context;
}
public abstract PageRequestProcessorResult process();
protected void processCommonRequest( final PageRequestProcessorResult result )
{
final LanguageEntity resolvedLanguage = result.getLanguage();
Assert.notNull( resolvedLanguage != null, "expected language to already be set on result" );
final PageTemplateEntity resolvedPageTemplate = result.getPageTemplate();
Assert.notNull( resolvedPageTemplate, "expected page template to already be set on result" );
final SitePath sitePath = result.getSitePath();
Assert.notNull( sitePath != null, "expected site path to already be set on result" );
final UserEntity requester = context.getRequester();
final MenuItemEntity menuItem = context.getMenuItem();
final SiteEntity site = context.getSite();
// run-as-user
UserEntity runAsUser = menuHandler.resolveRunAsUserForMenuItem( menuItem, requester, true );
if ( runAsUser == null )
{
runAsUser = requester;
}
result.setRunAsUser( runAsUser );
// http request
HttpServletRequest httpRequest = context.getHttpRequest();
if ( result.getHttpRequest() != null )
{
httpRequest = result.getHttpRequest();
}
ResolverContext resolverContext = new ResolverContext( httpRequest, site, menuItem, resolvedLanguage );
resolverContext.setUser( requester );
// locale
final Locale locale = localeResolverService.getLocale( resolverContext );
result.setLocale( locale );
// device class
final String deviceClass = deviceClassResolverService.getDeviceClass( resolverContext );
result.setDeviceClass( deviceClass );
// regions in page
final Regions regionsInPage =
RegionsResolver.resolveRegionsForPageRequest( menuItem, resolvedPageTemplate, context.getPageRequestType() );
result.setRegionsInPage( regionsInPage );
}
public void setContentDao( ContentDao value )
{
this.contentDao = value;
}
public void setPageTemplateDao( PageTemplateDao value )
{
this.pageTemplateDao = value;
}
public void setLocaleResolverService( LocaleResolverService value )
{
this.localeResolverService = value;
}
public void setDeviceClassResolverService( DeviceClassResolverService value )
{
this.deviceClassResolverService = value;
}
public void setSectionContentDao( SectionContentDao sectionContentDao )
{
this.sectionContentDao = sectionContentDao;
}
public void setSitePropertiesService( final SitePropertiesService sitePropertiesService )
{
this.sitePropertiesService = sitePropertiesService;
}
public void setMenuHandler( final MenuHandler menuHandler )
{
this.menuHandler = menuHandler;
}
}