package timeflow.format.file; import java.awt.Color; import java.io.BufferedWriter; import java.net.URL; import timeflow.model.*; import timeflow.data.db.*; public class HtmlFormat implements Export { TimeflowModel model; java.util.List fields; Field title; public HtmlFormat() { } public HtmlFormat(TimeflowModel model) { setModel(model); } public void setModel(TimeflowModel model) { this.model = model; fields = model.getDB().getFields(); title = model.getDB().getField(VirtualField.LABEL); } @Override public void export(TimeflowModel model, BufferedWriter out) throws Exception { setModel(model); out.write(makeHeader()); for (Act a : model.getDB()) { out.write(makeItem(a)); } out.write(makeFooter()); out.flush(); } public void append(ActList acts, int start, int end, StringBuffer b) { for (int i = start; i < end; i++) { Act a = acts.get(i); b.append(makeItem(a, i)); } } private String makeItem(Act act) { return makeItem(act, -1); } public String makeItem(Act act, int id) { StringBuffer page = new StringBuffer(); page.append(""); if (title != null) { Field f = model.getColorField(); Color c = Color.black; if (f != null) { if (f.getType() == String.class) { c = model.getDisplay().makeColor(act.getString(f)); } else { String[] tags = act.getTextList(f); if (tags.length == 0) { c = Color.gray; } else { c = model.getDisplay().makeColor(tags[0]); } } } page.append("" + act.getString(title) + "
"); } Field startField = model.getDB().getField(VirtualField.START); if (startField != null) { page.append("" + model.getDisplay().format(act.getTime(startField)) + ""); } page.append("

"); if (id >= 0) { page.append("EDIT"); } page.append("
"); for (Field f : fields) { page.append("" + f.getName() + "  "); Object val = act.get(f); if (val instanceof URL) { page.append("" + val + ""); } else { page.append(model.getDisplay().toString(val)); } page.append("
"); } page.append("
"); return page.toString(); } public String makeHeader() { StringBuffer page = new StringBuffer(); page.append("
"); page.append("
File: " + model.getDbFile() + "
"); page.append("Source: " + model.getDB().getSource() + "

"); page.append("

"); page.append(""); return page.toString(); } public String makeFooter() { return "
"; } static String htmlColor(Color c) { return '#' + hex2(c.getRed()) + hex2(c.getGreen()) + hex2(c.getBlue()); } private static final String hexDigits = "0123456789ABCDEF"; private static String hex2(int n) { return hexDigits.charAt((n / 16) % 16) + "" + hexDigits.charAt(n % 16); } @Override public String getName() { return "HTML List"; } }