/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.rendering.portalfunctions; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.enonic.cms.core.RequestParameters; import com.enonic.cms.core.portal.rendering.PageRendererContext; import com.enonic.cms.core.portal.rendering.RenderedWindowResult; import com.enonic.cms.core.portal.rendering.WindowRenderer; import com.enonic.cms.core.portal.rendering.WindowRendererContext; import com.enonic.cms.core.portal.rendering.WindowRendererFactory; import com.enonic.cms.core.portal.rendering.tracing.RenderTrace; import com.enonic.cms.core.portal.rendering.tracing.TraceMarkerHelper; import com.enonic.cms.core.structure.page.WindowKey; @Component public class IsWindowEmptyFunction { private WindowRendererFactory windowRendererFactory; public IsWindowEmptyFunction() { } public Boolean isWindowEmpty( final WindowKey windowKey, final String[] params ) { // save current PortalFunctionsContext final PortalFunctionsContext previousPortalFunctionContext = PortalFunctionsFactory.get().getContext(); try { final PortalFunctionsContext portalFunctionsContext = PortalFunctionsFactory.get().getContext(); final PageRendererContext pageRendererContext = portalFunctionsContext.getPageRendererContext(); final WindowRendererContext windowRenderContext = new WindowRendererContext(); windowRenderContext.setContentFromRequest( pageRendererContext.getContentFromRequest() ); windowRenderContext.setOverridingSitePropertyCreateUrlAsPath( pageRendererContext.getOverridingSitePropertyCreateUrlAsPath() ); windowRenderContext.setDeviceClass( pageRendererContext.getDeviceClass() ); windowRenderContext.setEncodeURIs( portalFunctionsContext.isEncodeURIs() ); windowRenderContext.setForceNoCacheUsage( pageRendererContext.forceNoCacheUsage() ); windowRenderContext.setHttpRequest( pageRendererContext.getHttpRequest() ); windowRenderContext.setInvocationCache( previousPortalFunctionContext.getInvocationCache() ); windowRenderContext.setLanguage( pageRendererContext.getLanguage() ); windowRenderContext.setLocale( portalFunctionsContext.getLocale() ); windowRenderContext.setMenuItem( portalFunctionsContext.getMenuItem() ); windowRenderContext.setOriginalSitePath( portalFunctionsContext.getOriginalSitePath() ); windowRenderContext.setPageRequestType( pageRendererContext.getPageRequestType() ); windowRenderContext.setPageTemplate( portalFunctionsContext.getPageTemplate() ); windowRenderContext.setPreviewContext( pageRendererContext.getPreviewContext() ); windowRenderContext.setProfile( pageRendererContext.getProfile() ); windowRenderContext.setRegionsInPage( pageRendererContext.getRegionsInPage() ); windowRenderContext.setRenderedInline( true ); windowRenderContext.setRenderer( pageRendererContext.getRenderer() ); windowRenderContext.setTicketId( pageRendererContext.getTicketId() ); windowRenderContext.setSite( pageRendererContext.getSite() ); windowRenderContext.setSitePath( portalFunctionsContext.getSitePath() ); windowRenderContext.setVerticalSession( pageRendererContext.getVerticalSession() ); windowRenderContext.setOriginalUrl( pageRendererContext.getOriginalUrl() ); final String windowContent = renderWindow( windowKey, params, windowRenderContext ); return StringUtils.isBlank( windowContent ); } finally { // restore previous PortalFunctionsContext PortalFunctionsFactory.get().setContext( previousPortalFunctionContext ); } } private String renderWindow( final WindowKey windowKey, final String[] params, final WindowRendererContext context ) { HashMap<String, String> map = createParamsMap( params ); WindowRenderer windowRenderer = windowRendererFactory.createPortletRenderer( context ); RequestParameters portletParams = new RequestParameters(); for ( Map.Entry<String, String> entry : map.entrySet() ) { portletParams.addParameterValue( entry.getKey(), entry.getValue() ); } RenderedWindowResult renderedWindowResult = windowRenderer.renderWindowInline( windowKey, portletParams ); if ( RenderTrace.isTraceOn() ) { return TraceMarkerHelper.unwrapResultWithPortletMarker( renderedWindowResult ); } else { return renderedWindowResult.getContent(); } } private HashMap<String, String> createParamsMap( String[] params ) { HashMap<String, String> map = new HashMap<String, String>(); if ( ( params != null ) && ( params.length > 0 ) ) { for ( int i = 0; i < ( params.length / 2 ); i++ ) { map.put( params[i * 2], params[i * 2 + 1] ); } } return map; } @Autowired public void setWindowRendererFactory( WindowRendererFactory windowRendererFactory ) { this.windowRendererFactory = windowRendererFactory; } }