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}