HtmlComponentWriter.java
package de.slothsoft.sprintsim.io;
import java.util.Locale;
public class HtmlComponentWriter implements ComponentWriter {
private static final char LINE_BREAK = '\n';
private final CellFormat cellFormat = new CellFormat(Locale.ENGLISH);
private final StringBuilder html = new StringBuilder();
private boolean nextTableLineIsHeader;
@Override
public void writeTitle(String string) {
this.html.append("<h1>").append(string).append("</h1>").append(LINE_BREAK);
}
@Override
public void writeLine(String string) {
this.html.append("<p>").append(string).append("</p>").append(LINE_BREAK);
}
@Override
public void writeEmpty() {
this.html.append("<br/>").append(LINE_BREAK);
}
public void clear() {
this.html.setLength(0);
}
public String getHtml() {
return this.html.toString();
}
@Override
public void startTable(TableInfo info) {
this.html.append("<table>").append(LINE_BREAK);
}
@Override
public void writeTableHeader(String... headers) {
doWriteTableHeader((Object[]) headers);
}
private void doWriteTableHeader(Object... values) {
this.html.append("<tr>");
for (final Object value : values) {
this.html.append("<th>").append(this.cellFormat.stringify(value)).append("</th>");
}
this.html.append("</tr>").append(LINE_BREAK);
}
@Override
public void writeTableSeparatorLine(int columnCount) {
this.nextTableLineIsHeader = true;
}
@Override
public void writeTableLine(Object... cells) {
if (this.nextTableLineIsHeader) {
doWriteTableHeader(cells);
this.nextTableLineIsHeader = false;
return;
}
this.html.append("<tr>");
for (final Object cell : cells) {
this.html.append("<td>").append(this.cellFormat.stringify(cell)).append("</td>");
}
this.html.append("</tr>").append(LINE_BREAK);
}
@Override
public void endTable() {
this.html.append("</table>").append(LINE_BREAK);
}
}