package org.codehaus.mojo.dashboard.report.plugin;
/*
* Copyright 2006 David Vicente
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.text.NumberFormat;
import java.util.ResourceBundle;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.plugin.logging.Log;
/**
*
* @author <a href="dvicente72@gmail.com">David Vicente</a>
*
*/
public abstract class AbstractDashBoardGenerator
{
private String imagesPath = "";
private static final int SPACE_NUMBER = 5;
private int nbExportedPackagesSummary = 10;
private char[] forbiddenChar = new char[] { '\\', '/', ':', '*', '?', '"', '<', '>', ';' };
private Log log;
public AbstractDashBoardGenerator( Log log )
{
this.log = log;
}
public abstract void doGenerateReport( ResourceBundle bundle, Sink sink );
protected void sinkHeader( Sink sink, String header )
{
sink.tableHeaderCell();
if ( header != null && header.length() > 0 )
{
sink.text( header );
}
else
{
sink.nonBreakingSpace();
}
sink.tableHeaderCell_();
}
protected void tableHeaderCellClass( Sink sink, String CssClass )
{
sink.rawText( "<th class=\"" + CssClass + "\">" );
}
protected void tableHeaderCell_( Sink sink )
{
sink.tableHeaderCell_();
}
protected void sinkHeaderClass( Sink sink, String header, String CssClass )
{
if ( header != null && header.length() > 0 )
{
sink.rawText( "<th class=\"" + CssClass + "\">" + header + "</th>" );
}
else
{
sink.rawText( "<th class=\"" + CssClass + "\"> </th>" );
}
}
protected void sinkHeaderBold( Sink sink, String header )
{
sink.tableHeaderCell();
sink.bold();
if ( header != null && header.length() > 0 )
{
sink.text( header );
}
else
{
sink.nonBreakingSpace();
}
sink.bold_();
sink.tableHeaderCell_();
}
protected void sinkSuperHeader( Sink sink, String header, int colspan )
{
sink.rawText( "<th colspan=\"" + colspan + "\">" + header + "</th>" );
}
protected void sinkSuperHeaderClass( Sink sink, String header, int colspan, String CssClass )
{
sink.rawText( "<th class=\"" + CssClass + "\" colspan=\"" + colspan + "\">" + header + "</th>" );
}
protected void sinkCell( Sink sink, String text )
{
sink.tableCell();
if ( text != null && text.length() > 0 )
{
sink.text( text );
}
else
{
sink.nonBreakingSpace();
}
sink.tableCell_();
}
protected void sinkCellClass( Sink sink, String text, String CssClass )
{
if ( text != null && text.length() > 0 )
{
sink.rawText( "<td class=\"" + CssClass + "\">" + text + "</td>" );
}
else
{
sink.rawText( "<td class=\"" + CssClass + "\"> </td>" );
}
}
protected void sinkCellBold( Sink sink, String text )
{
sink.tableCell();
sink.bold();
if ( text != null && text.length() > 0 )
{
sink.text( text );
}
else
{
sink.nonBreakingSpace();
}
sink.bold_();
sink.tableCell_();
}
protected void sinkCellWithLink( Sink sink, String text, String link )
{
// sink.tableCell();
sink.rawText( "<td NOWRAP>" );
sink.link( link );
sink.text( text );
sink.link_();
sink.tableCell_();
}
protected void sinkCellBoldWithLink( Sink sink, String text, String link )
{
// sink.tableCell();
sink.rawText( "<td NOWRAP>" );
sink.bold();
sink.link( link );
sink.text( text );
sink.link_();
sink.bold_();
sink.tableCell_();
}
protected void sinkCellTab( Sink sink, String text, int nbTabulation )
{
sink.tableCell();
int loop = AbstractDashBoardGenerator.SPACE_NUMBER * nbTabulation;
for ( int i = 0; i < loop; i++ )
{
sink.nonBreakingSpace();
}
sink.text( text );
sink.tableCell_();
}
protected void sinkCellTabWithLink( Sink sink, String text, int nbTabulation, String link )
{
// sink.tableCell();
sink.rawText( "<td NOWRAP>" );
int loop = AbstractDashBoardGenerator.SPACE_NUMBER * nbTabulation;
for ( int i = 0; i < loop; i++ )
{
sink.nonBreakingSpace();
}
sink.link( link );
sink.text( text );
sink.link_();
sink.tableCell_();
}
protected void sinkCellTabBold( Sink sink, String text, int nbTabulation )
{
sink.tableCell();
int loop = AbstractDashBoardGenerator.SPACE_NUMBER * nbTabulation;
for ( int i = 0; i < loop; i++ )
{
sink.nonBreakingSpace();
}
sink.bold();
sink.text( text );
sink.bold_();
sink.tableCell_();
}
protected void sinkCellTabBoldWithLink( Sink sink, String text, int nbTabulation, String link )
{
// sink.tableCell();
sink.rawText( "<td NOWRAP>" );
int loop = AbstractDashBoardGenerator.SPACE_NUMBER * nbTabulation;
for ( int i = 0; i < loop; i++ )
{
sink.nonBreakingSpace();
}
sink.bold();
sink.link( link );
sink.text( text );
sink.link_();
sink.bold_();
sink.tableCell_();
}
protected static String getPercentValue( double value )
{
String sValue;
NumberFormat formatter;
formatter = NumberFormat.getPercentInstance();
if ( value == -1.0 )
{
sValue = "0%";
}
else
{
sValue = formatter.format( value );
}
return sValue;
}
protected void iconInfo( Sink sink )
{
sink.figure();
sink.figureCaption();
sink.text( "info" );
sink.figureCaption_();
sink.figureGraphics( "./images/icon_info_sml.gif" );
sink.figure_();
}
protected void iconWarning( Sink sink )
{
sink.figure();
sink.figureCaption();
sink.text( "warning" );
sink.figureCaption_();
sink.figureGraphics( "./images/icon_warning_sml.gif" );
sink.figure_();
}
protected void iconError( Sink sink )
{
sink.figure();
sink.figureCaption();
sink.text( "error" );
sink.figureCaption_();
sink.figureGraphics( "./images/icon_error_sml.gif" );
sink.figure_();
}
protected void linkToTopPage( Sink sink )
{
sink.bold();
sink.text( "[" );
sink.link( "#top" );
sink.text( "Top" );
sink.link_();
sink.text( "]" );
sink.bold_();
}
protected void linkToHistoricPage( Sink sink, String anchor )
{
sink.bold();
sink.text( "[" );
sink.link( "dashboard-report-historic.html#" + anchor );
sink.text( "Go to Historic page" );
sink.link_();
sink.text( "]" );
sink.bold_();
}
protected void setImagesPath( String path )
{
this.imagesPath = path;
}
protected String getImagesPath()
{
return this.imagesPath;
}
public void setNbExportedPackagesSummary( int nbExportedPackagesSummary )
{
this.nbExportedPackagesSummary = nbExportedPackagesSummary;
}
public int getNbExportedPackagesSummary()
{
return nbExportedPackagesSummary;
}
/**
* replace all invalid characters as {'\\','/',':','*','?','"','<','>',';'} by '-'. MOJO-623 correction
*
* @param value
* @return
*/
protected String replaceForbiddenChar( String value )
{
String replaced = value;
for ( int i = 0; i < forbiddenChar.length; i++ )
{
char rep = forbiddenChar[i];
replaced = replaced.replace( rep, '-' );
}
return replaced;
}
public Log getLog()
{
return log;
}
protected void sinkCellPercentGraphic( Sink sink, double value, String CssClass )
{
sinkDefaultCellPercentGraphic( sink, value, CssClass, false, null );
}
protected void sinkCellInvertPercentGraphic( Sink sink, double value, String CssClass )
{
sinkDefaultInvertCellPercentGraphic( sink, value, CssClass, false, null );
}
protected void sinkCellInvertPercentGraphic( Sink sink, double value, String CssClass , String label)
{
sinkDefaultInvertCellPercentGraphic( sink, value, CssClass, false, label );
}
protected void sinkHeaderCellPercentGraphic( Sink sink, double value, String CssClass )
{
sinkDefaultCellPercentGraphic( sink, value, CssClass, true, null );
}
protected void sinkCellPercentGraphic( Sink sink, double value, String CssClass, String label )
{
sinkDefaultCellPercentGraphic( sink, value, CssClass, false, label );
}
protected void sinkHeaderCellPercentGraphic( Sink sink, double value, String CssClass, String label )
{
sinkDefaultCellPercentGraphic( sink, value, CssClass, true, label );
}
protected void sinkDefaultCellPercentGraphic( Sink sink, double value, String CssClass, boolean header, String label )
{
if ( value == -1.0 )
{
value = 0d;
}
if ( header )
{
sink.rawText( "<th class=\"" + CssClass + "\">" );
}
else
{
sink.rawText( "<td class=\"" + CssClass + "\">" );
}
sinkPercentGraphic( sink, value );
if ( label != null && label.length() > 0 )
{
sink.rawText( label );
}
if ( header )
{
sink.rawText( "</th>" );
}
else
{
sink.rawText( "</td>" );
}
}
// protected void sinkPercentGraphic( Sink sink, double value )
// {
// sink.rawText( "<div style=\"border: 1px solid #808080; padding: 0px; background-color: #FF5555; width: 100px; border-collapse: collapse;\">" );
// sink.rawText( "<div style=\"padding: 0px; background-color: #77FF77; height: 1.3em; border-collapse: collapse; width: "
// + (int) Math.floor( value * 100 ) + "px;\">" );
// sink.rawText( "<span style=\"display:block; position:absolute; text-align:center; width:100px; border-collapse:collapse;\">"
// + getPercentValue( value ) + "</span>" );
// sink.rawText( "</div>" );
// sink.rawText( "</div>" );
// }
protected void sinkPercentGraphic( Sink sink, double value )
{
sink.rawText( "<div class=\"percentOuter\">" );
sink.rawText( "<div class=\"percentInner\" style=\"width: "
+ (int) Math.floor( value * 100 ) + "px;\">" );
sink.rawText( "<span class=\"percentLabel\">"
+ getPercentValue( value ) + "</span>" );
sink.rawText( "</div>" );
sink.rawText( "</div>" );
}
protected void sinkDefaultInvertCellPercentGraphic( Sink sink, double value, String CssClass, boolean header, String label )
{
if ( value == -1.0 )
{
value = 0d;
}
if ( header )
{
sink.rawText( "<th class=\"" + CssClass + "\">" );
}
else
{
sink.rawText( "<td class=\"" + CssClass + "\">" );
}
sinkInvertPercentGraphic( sink, value );
if ( label != null && label.length() > 0 )
{
sink.rawText( label );
}
if ( header )
{
sink.rawText( "</th>" );
}
else
{
sink.rawText( "</td>" );
}
}
// protected void sinkInvertPercentGraphic( Sink sink, double value )
// {
// sink.rawText( "<div style=\"border: 1px solid #808080; padding: 0px; background-color: #77FF77; width: 100px; border-collapse: collapse;\">" );
// sink.rawText( "<div style=\"padding: 0px; background-color: #FF5555; height: 1.3em; border-collapse: collapse; width: "
// + (int) Math.floor( value * 100 ) + "px;\">" );
// sink.rawText( "<span style=\"display:block; position:absolute; text-align:center; width:100px; border-collapse:collapse;\">"
// + getPercentValue( value ) + "</span>" );
// sink.rawText( "</div>" );
// sink.rawText( "</div>" );
// }
protected void sinkInvertPercentGraphic( Sink sink, double value )
{
sink.rawText( "<div class=\"invertPercentOuter\">" );
sink.rawText( "<div class=\"invertPercentInner\" style=\"width: "
+ (int) Math.floor( value * 100 ) + "px;\">" );
sink.rawText( "<span class=\"percentLabel\">"
+ getPercentValue( value ) + "</span>" );
sink.rawText( "</div>" );
sink.rawText( "</div>" );
}
protected void addDashboardCss(Sink sink)
{
sink.rawText( "<link rel=\"stylesheet\" href=\"./css/print.css\" type=\"text/css\" media=\"print\" />" );
sink.rawText( "<link rel=\"stylesheet\" href=\"./css/dashboard.css\" type=\"text/css\" media=\"all\" />" );
sink.rawText( "<link rel=\"stylesheet\" href=\"./css/dashboard2.css\" type=\"text/css\" media=\"all\" />" );
sink.rawText( "<!--[if IE]>");
sink.rawText( "<link rel=\"stylesheet\" href=\"./css/dashboard2IE.css\" type=\"text/css\" media=\"all\" />" );
sink.rawText( "<![endif]-->");
}
}