package ecologylab.bigsemantics.metadata.output;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import ecologylab.bigsemantics.metadata.Metadata;
import ecologylab.generic.Debug;
import ecologylab.serialization.SIMPLTranslationException;
public class HtmlRenderer extends Debug
{
private String title;
private String header;
private String styleSheet;
private String jQuery = "<script language=\"JavaScript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js\"></script>";
private String javascript;
private boolean bad;
File file;
PrintWriter fileWriter;
public HtmlRenderer(File file, String title, String header)
{
this(file, title, header, "mixed_search.css", "linking_metadata.js");
}
public HtmlRenderer(File file, String title, String header, String styleSheet, String javascript)
{
this.file = file;
debug("Opening " + file.getAbsolutePath());
try
{
fileWriter = new PrintWriter(file);
setup(title, header, styleSheet, javascript);
appendHeader(fileWriter);
}
catch (Exception e)
{
e.printStackTrace();
bad = true;
}
}
public HtmlRenderer(String title, String header, String styleSheet, String javascript)
{
setup(title, header, styleSheet, javascript);
}
/**
* @param title
* @param header
* @param styleSheet
* @param javascript
*/
public void setup(String title, String header, String styleSheet, String javascript)
{
this.title = title;
this.header = header;
this.styleSheet = styleSheet;
this.javascript = javascript;
}
public void appendHeader(Appendable appendable) throws IOException
{
appendable.append("<html>\n");
appendable.append(" <head>\n");
appendable.append(" <title>").append(title).append("</title>\n");
appendable.append(" <link href=\"").append(styleSheet) .append("\" rel=\"stylesheet\" type=\"text/css\" />\n");
appendable.append(" ").append(jQuery).append('\n');
appendable.append(" <script language=\"JavaScript\" src=\"").append(javascript) .append("\"> </script>");
appendable.append(" </head>\n");
appendable.append(" <body>\n");
appendable.append(" <h1 class=\"header\">").append(header).append("</h1>\n");
appendable.append(" <div id=\"results\">\n");
}
public boolean appendMetadata(Metadata metadata)
{
try
{
appendMetadata(metadata, fileWriter);
}
catch (Exception e)
{
e.printStackTrace();
bad = true;
}
return bad;
}
public void appendMetadata(Metadata metadata, Appendable a) throws IOException,
IllegalArgumentException, IllegalAccessException, SIMPLTranslationException
{
a.append(" ");
metadata.serializeToHtml(a, metadata.getMetaMetadata().createGraphContext());
a.append("\n");
for (String linkedMetadataKey : metadata.getLinkedMetadataKeys())
{
Metadata linkedMetadata = metadata.getLinkedMetadata(linkedMetadataKey);
if (linkedMetadata != null)
{
a.append(" <div class=\"linked_metadata ").append(linkedMetadataKey).append("\">");
linkedMetadata.serializeToHtml(a, linkedMetadata.getMetaMetadata().createGraphContext());
a.append("</div>\n");
}
}
a.append("\n");
}
public void appendFooter(Appendable a) throws IOException
{
a.append(" </div>\n");
a.append(" <div class=\"footer\">Powered by Meta-Metadata, Interface Ecology Lab</div>\n");
a.append(" ").append("</body>\n");
a.append("</html>\n");
}
public boolean close()
{
try
{
appendFooter(fileWriter);
fileWriter.close();
}
catch (IOException e)
{
e.printStackTrace();
bad = true;
}
debug("Closed " + file.getAbsolutePath());
return bad;
}
/**
* @return the bad
*/
public boolean isBad()
{
return bad;
}
}