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";
}
}