/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.preview;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Service;
import com.enonic.cms.core.Attribute;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
@Service("previewService")
class PreviewServiceImpl
implements PreviewService
{
private static final String PREVIEW_CONTEXT_ATTRIBUTE = "_preview-context";
public boolean isInPreview()
{
HttpServletRequest request = doGetRequest();
return request != null && "true".equals( request.getAttribute( Attribute.PREVIEW_ENABLED ) );
}
public PreviewContext getPreviewContext()
{
if ( !isInPreview() )
{
return PreviewContext.NO_PREVIEW;
}
return doGetPreviewContext();
}
public void setPreviewContext( PreviewContext previewContext )
{
HttpSession session = doGetSession();
if ( session != null )
{
if ( previewContext.isPreviewingContent() )
{
NoLazyInitializationEnforcerForPreview.enforceNoLazyInitialization(
previewContext.getContentPreviewContext().getContentPreviewed() );
}
session.setAttribute( PREVIEW_CONTEXT_ATTRIBUTE, previewContext );
}
}
private PreviewContext doGetPreviewContext()
{
HttpSession session = doGetSession();
if ( session == null )
{
return null;
}
return (PreviewContext) session.getAttribute( PREVIEW_CONTEXT_ATTRIBUTE );
}
private HttpSession doGetSession()
{
final HttpServletRequest servletRequest = doGetRequest();
if ( servletRequest == null )
{
return null;
}
return servletRequest.getSession( false );
}
private HttpServletRequest doGetRequest()
{
return ServletRequestAccessor.getRequest();
}
}