/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.rendering.tracing; import org.apache.commons.lang.StringUtils; import com.enonic.cms.core.portal.rendering.RenderedWindowResult; /** * This class implements the render trace helper. */ public final class TraceMarkerHelper { /** * This method modifies the markup with extra trace code. */ public static String writePageMarker( RenderTraceInfo traceInfo, String markup, String outputMethod ) { if ( outputMethod == null ) { return markup; } outputMethod = outputMethod.toLowerCase(); boolean usePageMarker = outputMethod.contains( "html" ); if ( ( traceInfo != null ) && usePageMarker ) { StringBuffer buffer = new StringBuffer( markup ); int pos = buffer.indexOf( "</head>" ); if ( pos > -1 ) { String href = "__info__?type=css&key=" + traceInfo.getKey(); href = makeXmlCompliantIfNeeded( href, outputMethod ); buffer.insert( pos, writeCssInclude( href ) ); } pos = buffer.indexOf( "</body>" ); if ( pos > -1 ) { String href = "__info__?type=javascript&key=" + traceInfo.getKey(); href = makeXmlCompliantIfNeeded( href, outputMethod ); buffer.insert( pos, writeJavaScriptInclude( href ) ); } return buffer.toString(); } else { return markup; } } private static String makeXmlCompliantIfNeeded( String url, String outputMethod ) { if ( "xhtml".equals( outputMethod ) || "xml".equals( outputMethod ) ) { return url.replaceAll( "&", "&" ); } return url; } /** * Return css tag. */ private static String writeCssInclude( String href ) { return "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + href + "\"/>"; } /** * Return javascript tag. */ private static String writeJavaScriptInclude( String href ) { return "<script charset=\"UTF-8\" type=\"text/javascript\" src=\"" + href + "\">//</script>"; } public static void wrapResultWithPortletMarker( RenderedWindowResult result, PagePortletTraceInfo info ) { StringBuffer str = new StringBuffer(); String key = RenderTrace.getCurrentRenderTraceInfo().getKey(); str.append( "<div id=\"marker-" ).append( key ).append( "-" ).append( info.getKey() ).append( "\">" ); str.append( result.getContent() ); str.append( "</div>" ); result.setContent( str.toString() ); } public static String unwrapResultWithPortletMarker( RenderedWindowResult result ) { String content = result.getContent(); String contentUnwrapped = StringUtils.substringBetween( content, "<div id=\"marker-", "</div>" ); if ( contentUnwrapped != null ) { return StringUtils.substringAfter( contentUnwrapped, ">" ); } else { return content; } } }