/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.rendering;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringEscapeUtils;
import com.enonic.cms.framework.util.HtmlEncoder;
import com.enonic.cms.core.portal.PortletXsltViewTransformationException;
import com.enonic.cms.core.portal.rendering.tracing.RenderTrace;
final class PortletErrorMessageMarkupCreator
{
public String createMarkup( String message, Exception exception )
{
return createMarkup( message, exception, RenderTrace.isExecutingInDebugMode() );
}
private String createMarkup( String message, Exception exception, final boolean showDetails )
{
final String details = getDetailsBase64( exception );
final StringBuilder str = new StringBuilder();
str.append( "<div class=\"-cms-portlet-error\"" );
str.append( " style=\"" );
str.append( " border-style: solid;" );
str.append( " border-width: 2px;" );
str.append( " border-color: #FF0000;" );
str.append( " background-color: #FFC0C0;" );
str.append( " color: black;" );
str.append( " font-size: 12px;" );
str.append( " padding: 4px; " );
str.append( " text-align: left\">" );
str.append( HtmlEncoder.encode( message ) );
if ( showDetails )
{
str.append( " (<a href=\"data:text/plain;base64," );
str.append( details );
str.append( "\" target=\"__portlet_error\">details</a>)" );
}
str.append( "</div>" );
return str.toString();
}
private String getDetails( final Exception e )
{
Throwable error = e;
final StringWriter writer = new StringWriter();
if ( error instanceof PortletXsltViewTransformationException )
{
error = error.getCause();
}
error.printStackTrace( new PrintWriter( writer ) );
return StringEscapeUtils.escapeHtml( writer.toString() );
}
private String getDetailsBase64( final Exception e )
{
return new String( Base64.encodeBase64( getDetails( e ).getBytes() ) );
}
}