package edu.kit.aifb.cumulus.webapp.writer;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.Arrays;
import org.openrdf.model.Statement;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFHandlerException;
import org.openrdf.rio.helpers.RDFWriterBase;
import org.openrdf.rio.ntriples.NTriplesUtil;
/**
* HTML RDFWriter that extends {@link org.openrdf.rio.helpers.RDFWriterBase}.
* Prints out RDF triples (quads) in N-Triples (N-Quads) syntax.
*
* @author Andreas Wagner
* @author Andrea Gazzarini
*
* @see <a href="http://www.w3.org/TR/n-triples/">http://www.w3.org/TR/n-triples/</a>
* @see <a href="http://www.w3.org/TR/n-quads/">http://www.w3.org/TR/n-quads/</a>
*
* @since 1.0
*/
public class HTMLWriter extends RDFWriterBase {
public static final RDFFormat HTML_FORMAT = new RDFFormat("HTML", Arrays.asList("text/html"), Charset.forName("UTF-8"), Arrays.asList("html", "htm"), false, false);
private final String _title = "CumulusRDF - HTML Results";
private Writer _writer;
public HTMLWriter(OutputStream out) {
this(new OutputStreamWriter(out, Charset.forName("UTF-8")));
}
public HTMLWriter(Writer writer) {
_writer = writer;
}
@Override
public void endRDF() throws RDFHandlerException {
try {
_writer.write("</body></html>");
} catch (IOException e) {
throw new RDFHandlerException(e);
}
}
@Override
public RDFFormat getRDFFormat() {
return HTML_FORMAT;
}
@Override
public void handleComment(String arg0) throws RDFHandlerException {
try {
_writer.write("<p>");
_writer.write("# ");
_writer.write(arg0);
_writer.write("<p/>");
} catch (IOException e) {
throw new RDFHandlerException(e);
}
}
@Override
public void handleStatement(Statement arg0) throws RDFHandlerException {
try {
_writer.write("<p>");
NTriplesUtil.append(arg0.getSubject(), _writer);
_writer.write(" ");
NTriplesUtil.append(arg0.getPredicate(), _writer);
_writer.write(" ");
NTriplesUtil.append(arg0.getObject(), _writer);
if (arg0.getContext() != null) {
_writer.write(" ");
NTriplesUtil.append(arg0.getContext(), _writer);
}
_writer.write(" .");
_writer.write("<p/>");
} catch (IOException e) {
throw new RDFHandlerException(e);
}
}
@Override
public void startRDF() throws RDFHandlerException {
try {
_writer.write("<html><head><title>" + _title + "</title></head><body>");
_writer.write("<h1>" + _title + "</h1>");
} catch (IOException e) {
throw new RDFHandlerException(e);
}
}
}