001package org.javasimon.console.action; 002 003import org.javasimon.Sample; 004import org.javasimon.console.ActionContext; 005import org.javasimon.console.SimonType; 006import org.javasimon.console.html.HtmlBuilder; 007import org.javasimon.console.text.StringifierFactory; 008 009import java.io.IOException; 010import java.io.PrintWriter; 011import java.util.Collections; 012 013/** 014 * Export Simons as a flat static HTML table which can be used for printing. 015 * Each row as an odd/even CSS class. Each cell as a CSS class corresponding to property name. 016 * Only a subset (defined in {@link AbstractTableAction#columns}) of attributes are exported. 017 * Path: http://.../data/table.html?pattern=SimonPattern&type=STOPWATCH&type=COUNTER&timeFormat=MILLISECOND 018 * 019 * @author gquintana 020 */ 021public class TableHtmlAction extends AbstractTableAction { 022 023 /** Path to display Flat HTML table. */ 024 public static final String PATH = "/data/table.html"; 025 026 /** Constructor. */ 027 public TableHtmlAction(ActionContext context) { 028 super(context, "text/html"); 029 this.stringifierFactory = new StringifierFactory(); 030 this.numberPattern = StringifierFactory.INTEGER_NUMBER_PATTERN; 031 } 032 033 /** Row index. */ 034 private Integer index; 035 /** HTML Builder. */ 036 private HtmlBuilder htmlBuilder; 037 038 @Override 039 protected void printTable(PrintWriter writer) throws IOException { 040 htmlBuilder = new HtmlBuilder(writer); 041 htmlBuilder.header("List View", Collections.emptyList()) 042 .begin("table", "flatTable", "flatTable"); 043 super.printTable(writer); 044 htmlBuilder.end("table").footer(); 045 } 046 047 @Override 048 protected void printHeaderRow(PrintWriter writer) throws IOException { 049 htmlBuilder.begin("thead").begin("tr"); 050 super.printHeaderRow(writer); 051 htmlBuilder.end("tr").end("thead"); 052 } 053 054 @Override 055 protected void printBody(PrintWriter writer) throws IOException { 056 htmlBuilder.begin("tbody"); 057 index = 0; 058 super.printBody(writer); 059 index = null; 060 htmlBuilder.end("tbody"); 061 } 062 063 @Override 064 protected void printBodyRow(Sample sample, PrintWriter writer) throws IOException { 065 htmlBuilder.begin("tr", Integer.toString(index), index % 2 == 0 ? "even" : "odd"); 066 super.printBodyRow(sample, writer); 067 index++; 068 htmlBuilder.end("tr"); 069 } 070 071 @Override 072 protected void printCell(Column column, String s, PrintWriter writer) throws IOException { 073 htmlBuilder.begin("td", null, column.getName()); 074 if (column.getName().equals("type")) { 075 try { 076 htmlBuilder.simonTypeImg(SimonType.valueOf(s), "../../"); 077 } catch (IllegalArgumentException illegalArgumentException) { 078 // Else unknown type: non image 079 } 080 } 081 super.printCell(column, s, writer); 082 htmlBuilder.end("td"); 083 } 084}