blob: cc3d35de447ee3aeadd1a7b0069f9a3bc74d0396 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*************************************************************/
package convwatch;
import java.io.File;
import java.io.FileWriter;
import helper.OSHelper;
public class HTMLOutputter
{
FileWriter m_aOut;
String m_sFilename;
String m_sNamePrefix; // the HTML files used a suffix to build it's right name
/**
* ls is the current line separator (carridge return)
*/
String ls;
HTMLOutputter() {}
public static HTMLOutputter create( String _sOutputPath, String _sHTMLFilename, String _sNamePrefix, String _sTitle )
{
FileHelper.makeDirectories("", _sOutputPath);
HTMLOutputter a = new HTMLOutputter();
String fs = System.getProperty("file.separator");
String sFilename = _sOutputPath + fs + _sHTMLFilename;
try
{
File outputFile = new File(sFilename);
a.m_aOut = new FileWriter(outputFile.toString());
a.ls = System.getProperty("line.separator");
}
catch (java.io.IOException e)
{
e.printStackTrace();
GlobalLogWriter.get().println("ERROR: Can't create HTML Outputter");
return null;
}
a.m_sFilename = sFilename;
a.m_sNamePrefix = _sNamePrefix;
return a;
}
public String getFilename() {return m_sFilename;}
public void header(String _sTitle)
{
try
{
m_aOut.write( "<html>" + ls);
m_aOut.write( "<head>" + ls);
m_aOut.write( "<title>" + _sTitle + "</title>" + ls);
m_aOut.write( "<link rel=\"stylesheet\" type=\"text/css\" href=\"/gfxcmp_ui/xmloff.css\" media=\"screen\" />" + ls);
m_aOut.write( "<link rel=\"stylesheet\" type=\"text/css\" href=\"/gfxcmp_ui/style.css\" media=\"screen\" />" + ls);
m_aOut.write( "</head>" + ls);
m_aOut.write( "<body bgcolor=white>" + ls);
m_aOut.flush();
}
catch (java.io.IOException e)
{
}
}
final static String TEST_TABLETITLE = "Test";
final static String VISUAL_STATUS_TABLETITLE = "Visual status";
final static String VISUAL_STATUS_MESSAGE_TABLETITLE = "Message";
public void indexSection(String _sOfficeInfo)
{
try
{
m_aOut.write( "<h2>Results for " + _sOfficeInfo + "</h2>" + ls);
m_aOut.write( "<p>Legend:<br>");
m_aOut.write( stronghtml(FIRSTGFX_TABLETITLE) + " contains the output printed via 'ghostscript' as a jpeg picture.<br>");
m_aOut.write( "<table class=\"infotable\">" + ls);
m_aOut.write( "<TR>");
m_aOut.write( tableHeaderCell(TEST_TABLETITLE));
m_aOut.write( tableHeaderCell(TEST_TABLETITLE));
m_aOut.write( tableHeaderCell(VISUAL_STATUS_TABLETITLE));
m_aOut.write( tableHeaderCell(VISUAL_STATUS_MESSAGE_TABLETITLE));
m_aOut.write( "</TR>" + ls);
m_aOut.flush();
}
catch (java.io.IOException e)
{
}
}
String getHREF(String _sHREF, String _sPathInfo)
{
StringBuffer a = new StringBuffer();
if (! OSHelper.isWindows())
{
// System.out.println("Tu'nix system.");
a.append("<A HREF=\"");
a.append(_sHREF);
a.append("\">");
a.append(_sPathInfo);
a.append("</A>");
}
else
{
// System.out.println("Windows system.");
//! this should be replaced by a better method
//! name(WIN|UNIX)
a.append("<A HREF=\"");
a.append(_sHREF);
a.append("\">");
a.append(_sPathInfo);
// a.append("(first)");
a.append("</A>");
// if (_sHREF.charAt(1) == ':' && (_sHREF.charAt(0) == 'x' || _sHREF.charAt(0) == 'X'))
// int index = 0;
// index = _sHREF.indexOf("X:");
// if (index == -1)
// {
// index = _sHREF.indexOf("x:");
// }
// if (index >= 0)
// {
// // int index = 0;
// // remove "X:" and insert "/tausch"
// StringBuffer sbUNIXPath = new StringBuffer( _sHREF.substring(0, index) );
// sbUNIXPath.append("/tausch");
// sbUNIXPath.append(_sHREF.substring(index + 2));
// String sUNIXPath = sbUNIXPath.toString();
// sUNIXPath = utils.replaceAll13(sUNIXPath, "\\", "/");
//
// a.append("<A HREF=\"");
// a.append(sUNIXPath);
// a.append("\">");
// a.append("(second)");
// a.append("</A>");
// }
// else
// {
// System.out.println("Path is '" + _sHREF + "'");
// }
}
return a.toString();
}
String tableDataCell(String _sValue)
{
StringBuffer a = new StringBuffer();
a.append("<TD>");
a.append(_sValue);
a.append("</TD>");
return a.toString();
}
String tableHeaderCell(String _sValue)
{
StringBuffer a = new StringBuffer();
a.append("<TH>");
a.append(_sValue);
a.append("</TH>");
return a.toString();
}
public void indexLine(String _sHTMLFile, String _sHTMLName, String _sHTMLFile2, String _sHTMLName2, String _sStatusRunThrough, String _sStatusMessage)
{
try
{
m_aOut.write( "<TR>");
m_aOut.write(tableDataCell( getHREF(_sHTMLFile, _sHTMLName) ) );
if (_sHTMLFile2.length() > 0)
{
m_aOut.write(tableDataCell( getHREF(_sHTMLFile2, _sHTMLName2) ) );
}
else
{
m_aOut.write(tableDataCell( "" ) );
}
m_aOut.write( tableDataCell(_sStatusRunThrough) );
m_aOut.write( tableDataCell(_sStatusMessage) );
m_aOut.write( "</TR>" + ls);
m_aOut.flush();
}
catch (java.io.IOException e)
{
}
}
public void close()
{
try
{
m_aOut.write( "</TABLE>" + ls);
m_aOut.write( "</BODY></HTML>" + ls);
m_aOut.flush();
m_aOut.close();
}
catch (java.io.IOException e)
{
}
}
// -----------------------------------------------------------------------------
String stronghtml(String _sValue)
{
StringBuffer a = new StringBuffer();
a.append("<STRONG>");
a.append(_sValue);
a.append("</STRONG>");
return a.toString();
}
final static String FIRSTGFX_TABLETITLE = "Original print file as jpeg";
final static String SECONDGFX_TABLETITLE = "New print file as jpeg";
final static String DIFFER_TABLETITLE = "Difference file";
final static String STATUS_TABLETITLE = "Status";
final static String PIXELDIFF_TABLETITLE = "Pixel difference in %";
final static String PIXELDIFF_BM_TABLETITLE = "P.diff. in % after remove border";
final static String DIFFER_BM_TABLETITLE = "Diff file (RB)";
final static String OK_TABLETITLE = "OK?";
public void checkSection(String _sDocumentName)
{
try
{
m_aOut.write( "<H2>Results for the document " + _sDocumentName + "</H2>" + ls);
m_aOut.write( "<p>Legend:<br>");
m_aOut.write( stronghtml(FIRSTGFX_TABLETITLE) + " contains the output printed via 'ghostscript' as a jpeg picture.<br>");
m_aOut.write( stronghtml(SECONDGFX_TABLETITLE) + " contains the same document opened within OpenOffice.org also printed via ghostscript as jpeg.<br>");
m_aOut.write( stronghtml(DIFFER_TABLETITLE)+" is build via composite from original and new picture. The result should be a whole black picture, if there are no differences.<br>At the moment "+stronghtml(STATUS_TABLETITLE)+" is only ok, if the difference file contains only one color (black).</p>" );
m_aOut.write( stronghtml(DIFFER_BM_TABLETITLE) + " is build via composite from original and new picture after the border of both pictures are removed, so differences based on center problems may solved here");
m_aOut.write( "</p>");
m_aOut.write( "<p>Some words about the percentage value<br>");
m_aOut.write( "If a character is on the original page (a) and on the new page this character is moved to an other position only (b) , this means the difference is 100%.<br>");
m_aOut.write( "If character (b) is also bigger than character (a) the percentage is grow over the 100% mark.<br>");
m_aOut.write( "This tool count only the pixels which are differ to it's background color. It makes no sense to count all pixels, or the difference percentage will most the time in a very low percentage range.");
m_aOut.write( "</p>");
m_aOut.write( "<table class=\"infotable\">" + ls);
m_aOut.write( "<TR>" + ls);
m_aOut.write( tableHeaderCell( FIRSTGFX_TABLETITLE) );
m_aOut.write( tableHeaderCell( SECONDGFX_TABLETITLE ) );
m_aOut.write( tableHeaderCell(DIFFER_TABLETITLE ) );
m_aOut.write( tableHeaderCell(PIXELDIFF_TABLETITLE ) );
m_aOut.write( tableHeaderCell(DIFFER_BM_TABLETITLE) );
m_aOut.write( tableHeaderCell(PIXELDIFF_BM_TABLETITLE ) );
m_aOut.write( tableHeaderCell( OK_TABLETITLE) );
m_aOut.write( "</TR>" + ls);
m_aOut.flush();
}
catch (java.io.IOException e)
{
}
}
public void checkLine(StatusHelper _aStatus, boolean _bCurrentResult)
{
try
{
m_aOut.write( "<TR>" + ls);
String sLink = getHREF(FileHelper.getBasename(_aStatus.m_sOldGfx), FileHelper.getBasename(_aStatus.m_sOldGfx));
m_aOut.write( tableDataCell(sLink) );
sLink = getHREF(FileHelper.getBasename(_aStatus.m_sNewGfx), FileHelper.getBasename(_aStatus.m_sNewGfx));
m_aOut.write( tableDataCell(sLink) );
sLink = getHREF(FileHelper.getBasename(_aStatus.m_sDiffGfx), FileHelper.getBasename(_aStatus.m_sDiffGfx));
m_aOut.write( tableDataCell(sLink) );
String sPercent = String.valueOf(_aStatus.nPercent) + "%";
if (_aStatus.nPercent > 0 && _aStatus.nPercent < 5)
{
sPercent += " (less 5% is ok)";
}
m_aOut.write(tableDataCell( sPercent ) );
if (_aStatus.m_sDiff_BM_Gfx == null)
{
sLink = "No diffs, therefore no moves";
m_aOut.write( tableDataCell(sLink) );
m_aOut.write(tableDataCell( "" ) );
}
else
{
sLink = getHREF(FileHelper.getBasename(_aStatus.m_sDiff_BM_Gfx), FileHelper.getBasename(_aStatus.m_sDiff_BM_Gfx));
m_aOut.write( tableDataCell(sLink) );
String sPercent2 = String.valueOf(_aStatus.nPercent2) + "%";
if (_aStatus.nPercent2 > 0 && _aStatus.nPercent2 < 5)
{
sPercent2 += " (less 5% is ok)";
}
m_aOut.write(tableDataCell( sPercent2 ) );
}
// is the check positiv, in a defined range
if (_bCurrentResult)
{
m_aOut.write(tableDataCell( "YES" ) );
}
else
{
m_aOut.write(tableDataCell( "NO" ) );
}
m_aOut.write( "</TR>" + ls);
}
catch (java.io.IOException e)
{
}
}
// -----------------------------------------------------------------------------
public void checkDiffDiffSection(String _sDocumentName)
{
try
{
m_aOut.write( "<H2>Results for the document " + _sDocumentName + "</H2>" + ls);
m_aOut.write( "<p>Legend:<br>");
m_aOut.write( "</p>");
m_aOut.write( "<table class=\"infotable\">" + ls);
m_aOut.write( "<TR>" + ls);
m_aOut.write( tableHeaderCell( "Source to actual difference" ) );
m_aOut.write( tableHeaderCell( "Actual difference" ) );
m_aOut.write( tableHeaderCell(DIFFER_TABLETITLE ) );
m_aOut.write( tableHeaderCell(PIXELDIFF_TABLETITLE ) );
m_aOut.write( tableHeaderCell( OK_TABLETITLE) );
m_aOut.write( "</TR>" + ls);
m_aOut.flush();
}
catch (java.io.IOException e)
{
}
}
public void checkDiffDiffLine(StatusHelper _aStatus, boolean _bCurrentResult)
{
try
{
m_aOut.write( "<TR>" + ls);
// the link to the old difference can't offer here
// String sLink = getHREF(FileHelper.getBasename(_aStatus.m_sOldGfx), FileHelper.getBasename(_aStatus.m_sOldGfx));
// m_aOut.write( tableDataCell(sLink) );
String sBasename = FileHelper.getBasename(m_sFilename);
String sNew = sBasename.substring(m_sNamePrefix.length());
String sLink;
sLink = getHREF(sNew, sNew);
m_aOut.write( tableDataCell(sLink) );
sLink = getHREF(FileHelper.getBasename(_aStatus.m_sNewGfx), FileHelper.getBasename(_aStatus.m_sNewGfx));
m_aOut.write( tableDataCell(sLink) );
sLink = getHREF(FileHelper.getBasename(_aStatus.m_sDiffGfx), FileHelper.getBasename(_aStatus.m_sDiffGfx));
m_aOut.write( tableDataCell(sLink) );
String sPercent = String.valueOf(_aStatus.nPercent) + "%";
// if (_aStatus.nPercent > 0 && _aStatus.nPercent < 5)
// {
// sPercent += " (less 5% is ok)";
// }
m_aOut.write(tableDataCell( sPercent ) );
// is the check positiv, in a defined range
if (_bCurrentResult)
{
m_aOut.write(tableDataCell( "YES" ) );
}
else
{
m_aOut.write(tableDataCell( "NO" ) );
}
m_aOut.write( "</TR>" + ls);
}
catch (java.io.IOException e)
{
}
}
}