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 { TFModel model; java.util.List<Field> fields; Field title; public HtmlFormat() {} public HtmlFormat(TFModel model) { setModel(model); } public void setModel(TFModel model) { this.model=model; fields=model.getDB().getFields(); title=model.getDB().getField(VirtualField.LABEL); } @Override public void export(TFModel 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("<tr><td valign=top align=left width=200><b>"); 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("<font size=+1 color="+htmlColor(c)+">"+act.getString(title)+"</font><br>"); } Field startField=model.getDB().getField(VirtualField.START); if (startField!=null) { page.append("<font color=#999999>"+model.getDisplay().format( act.getTime(startField))+"</font>"); } page.append("</b><br>"); if (id>=0) page.append("<a href=\"e"+id+"\">EDIT</a>"); page.append("<br></td><td valign=top>"); for (Field f: fields) { page.append("<b><font color=#003399>"+f.getName()+"</font></b>  "); Object val=act.get(f); if (val instanceof URL) { page.append("<a href=\""+val+"\">"+val+"</a>"); } else page.append(model.getDisplay().toString(val)); page.append("<br>"); } page.append("<br></td></tr>"); return page.toString(); } public String makeHeader() { StringBuffer page=new StringBuffer(); page.append("<html><body><blockquote>"); page.append("<br>File: "+model.getDbFile()+"<br>"); page.append("Source: "+model.getDB().getSource()+"<br><br>"); page.append("<br><br>"); page.append("<table border=0>"); return page.toString(); } public String makeFooter() { return "</table></blockquote></body></html>"; } 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"; } }