/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.portal.page; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.enonic.cms.core.Attribute; import com.enonic.cms.core.plugin.ext.HttpResponseFilterExtensions; import com.enonic.cms.core.portal.PortalRequest; import com.enonic.cms.core.portal.PortalResponse; import com.enonic.cms.core.portal.livetrace.PortalRequestTrace; import com.enonic.cms.core.portal.rendering.tracing.RenderTrace; import com.enonic.cms.core.structure.SiteEntity; import com.enonic.cms.core.structure.SiteKey; import com.enonic.cms.core.structure.SitePath; import com.enonic.cms.core.structure.SiteProperties; import com.enonic.cms.core.structure.SitePropertiesService; import com.enonic.cms.core.structure.SitePropertyNames; import com.enonic.cms.server.service.servlet.OriginalPathResolver; import com.enonic.cms.store.dao.SiteDao; import com.enonic.cms.web.portal.SiteRedirectAndForwardHelper; import com.enonic.cms.web.portal.instanttrace.InstantTraceRequestInspector; /** * May 26, 2009 */ @Component public class PortalRenderResponseService { private SitePropertiesService sitePropertiesService; private SiteRedirectAndForwardHelper siteRedirectAndForwardHelper; private SiteDao siteDao; private HttpResponseFilterExtensions httpResponseFilterExtensions; private final OriginalPathResolver originalPathResolver = new OriginalPathResolver(); @Value("${cms.portal.encodeRedirectUrl}") private boolean encodeRedirectUrl; public void serveResponse( final PortalRequest request, final PortalResponse response, final HttpServletResponse httpResponse, final HttpServletRequest httpRequest, final PortalRequestTrace portalRequestTrace ) throws Exception { final SitePath requestedPath = request.getSitePath(); final SiteKey requestedSiteKey = requestedPath.getSiteKey(); final SiteEntity site = siteDao.findByKey( requestedSiteKey ); final PortalResponseProcessor processor = new PortalResponseProcessor(); processor.setSiteRedirectAndForwardHelper( siteRedirectAndForwardHelper ); processor.setRequest( request ); processor.setResponse( response ); processor.setHttpRequest( httpRequest ); processor.setHttpResponse( httpResponse ); processor.setHttpSession( httpRequest.getSession( true ) ); processor.setInPreview( "true".equals( httpRequest.getAttribute( Attribute.PREVIEW_ENABLED ) ) ); processor.setRenderTraceOn( RenderTrace.isTraceOn() ); processor.setDeviceClassificationEnabled( site.isDeviceClassificationEnabled() ); processor.setLocalizationEnabled( site.isLocalizationEnabled() ); final SiteProperties siteProperties = sitePropertiesService.getSiteProperties( requestedSiteKey ); processor.setForceNoCacheForSite( siteProperties.getPropertyAsBoolean( SitePropertyNames.PAGE_CACHE_HEADERS_FORCENOCACHE ) ); processor.setDoctypeHandler( siteProperties.getProperty( SitePropertyNames.PAGE_DOCTYPE_HANDLER.getKeyName() ) ); processor.setEncodeRedirectUrl( encodeRedirectUrl ); processor.setCacheHeadersEnabledForSite( siteProperties.getPropertyAsBoolean( SitePropertyNames.PAGE_CACHE_HEADERS_ENABLED ) ); final String matchingPath = originalPathResolver.getRequestPathFromHttpRequest( httpRequest ); processor.setResponseFilters( httpResponseFilterExtensions.findMatching( matchingPath ) ); processor.setInstantTraceEnabled( InstantTraceRequestInspector.isClientEnabled( httpRequest ) ); processor.setCurrentPortalRequestTrace( portalRequestTrace ); processor.serveResponse(); } @Autowired public void setSitePropertiesService( SitePropertiesService sitePropertiesService ) { this.sitePropertiesService = sitePropertiesService; } @Autowired public void setSiteRedirectAndForwardHelper( SiteRedirectAndForwardHelper siteRedirectAndForwardHelper ) { this.siteRedirectAndForwardHelper = siteRedirectAndForwardHelper; } @Autowired public void setSiteDao( SiteDao siteDao ) { this.siteDao = siteDao; } @Autowired public void setHttpResponseFilterExtensions( HttpResponseFilterExtensions httpResponseFilterExtensions ) { this.httpResponseFilterExtensions = httpResponseFilterExtensions; } }