MARMOTTA-204: updated marmotta-sparql to be compatible with the new rio writers in sesame 2.7.0
Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/2a2baa77 Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/2a2baa77 Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/2a2baa77 Branch: refs/heads/develop Commit: 2a2baa770b9532f280c56f958099e6cbc568fbe6 Parents: 9cbf5ea Author: Sergio Fernández <[email protected]> Authored: Wed Apr 17 09:30:15 2013 +0200 Committer: Sergio Fernández <[email protected]> Committed: Wed Apr 17 09:30:15 2013 +0200 ---------------------------------------------------------------------- .../sparqlhtml/SPARQLBooleanHTMLWriter.java | 135 +++- .../sparqlhtml/SPARQLResultsHTMLWriter.java | 95 +++- .../sparqlhtml/SPARQLResultsHTMLWriterXSL.java | 104 +++- .../sparqljson/SPARQLBooleanJSONWriter.java | 111 +++- .../sparqljson/SPARQLResultsJSONWriter.java | 538 ++++++++------- 5 files changed, 708 insertions(+), 275 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/2a2baa77/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLBooleanHTMLWriter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLBooleanHTMLWriter.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLBooleanHTMLWriter.java index bc08941..28b83e3 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLBooleanHTMLWriter.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLBooleanHTMLWriter.java @@ -17,36 +17,47 @@ */ package org.apache.marmotta.platform.sparql.services.sparqlio.sparqlhtml; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.xml.transform.Source; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamSource; + import org.apache.marmotta.platform.core.api.config.ConfigurationService; import org.apache.marmotta.platform.core.util.CDIContext; import org.jdom2.Document; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import org.jdom2.transform.JDOMResult; +import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryResultHandlerException; +import org.openrdf.query.TupleQueryResultHandlerException; import org.openrdf.query.resultio.BooleanQueryResultFormat; import org.openrdf.query.resultio.BooleanQueryResultWriter; +import org.openrdf.query.resultio.QueryResultFormat; import org.openrdf.query.resultio.sparqlxml.SPARQLBooleanXMLWriter; +import org.openrdf.rio.RioSetting; +import org.openrdf.rio.WriterConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.transform.Source; -import javax.xml.transform.Templates; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamSource; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.nio.charset.Charset; - /** - * Add file description here! - * <p/> - * User: sschaffe + * SPARQL Boolean HTML RIO Writer + * + * @author Sebastian Schaffert + * @author Sergio Fernández */ public class SPARQLBooleanHTMLWriter implements BooleanQueryResultWriter { @@ -55,14 +66,15 @@ public class SPARQLBooleanHTMLWriter implements BooleanQueryResultWriter { private OutputStream out; private ByteArrayOutputStream xmlOut; - private SPARQLBooleanXMLWriter xmlWriter; + private SPARQLBooleanXMLWriter writer; + private WriterConfig config; private Templates stylesheet; public SPARQLBooleanHTMLWriter(OutputStream out) { this.out = out; this.xmlOut = new ByteArrayOutputStream(); - this.xmlWriter = new SPARQLBooleanXMLWriter(xmlOut); + this.writer = new SPARQLBooleanXMLWriter(xmlOut); Source s_stylesheet = new StreamSource(SPARQLBooleanHTMLWriter.class.getResourceAsStream("style.xsl")); try { @@ -85,7 +97,7 @@ public class SPARQLBooleanHTMLWriter implements BooleanQueryResultWriter { */ @Override public void write(boolean value) throws IOException { - xmlWriter.write(value); + writer.write(value); byte[] queryResult = xmlOut.toByteArray(); @@ -94,7 +106,7 @@ public class SPARQLBooleanHTMLWriter implements BooleanQueryResultWriter { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); try { - Source input = new StreamSource(new ByteArrayInputStream(queryResult)); + Source input = new StreamSource(new ByteArrayInputStream(queryResult)); Transformer transformer = stylesheet.newTransformer(); transformer.setParameter("serverurl", server_uri); @@ -111,6 +123,85 @@ public class SPARQLBooleanHTMLWriter implements BooleanQueryResultWriter { } finally { writer.close(); } - } + + @Override + public void endHeader() throws QueryResultHandlerException { + + } + + @Override + public QueryResultFormat getQueryResultFormat() { + return new QueryResultFormat("HTML", "text/html", Charset.forName("utf-8"), "html"); + } + + @Override + public Collection<RioSetting<?>> getSupportedSettings() { + return new ArrayList<RioSetting<?>>(); + } + + @Override + public WriterConfig getWriterConfig() { + return config; + } + + @Override + public void handleNamespace(String arg0, String arg1) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleStylesheet(String arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void setWriterConfig(WriterConfig config) { + this.config = config; + } + + @Override + public void startDocument() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endQueryResult() throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> links) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleSolution(BindingSet bindings) throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startQueryResult(List<String> start) throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } + } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/2a2baa77/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriter.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriter.java index 05560a4..a1cc0e3 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriter.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriter.java @@ -20,6 +20,8 @@ package org.apache.marmotta.platform.sparql.services.sparqlio.sparqlhtml; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -27,9 +29,13 @@ import java.util.Map; import org.apache.marmotta.platform.core.api.templating.TemplatingService; import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryResultHandlerException; import org.openrdf.query.TupleQueryResultHandlerException; +import org.openrdf.query.resultio.QueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultWriter; +import org.openrdf.rio.RioSetting; +import org.openrdf.rio.WriterConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,6 +60,8 @@ public class SPARQLResultsHTMLWriter implements TupleQueryResultWriter { private TemplatingService templatingService; + private WriterConfig config; + public SPARQLResultsHTMLWriter(OutputStream out, TemplatingService templatingService) { this.out = out; } @@ -106,6 +114,91 @@ public class SPARQLResultsHTMLWriter implements TupleQueryResultWriter { log.error(e.getMessage(), e); throw new TupleQueryResultHandlerException(e); } - } + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public QueryResultFormat getQueryResultFormat() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void handleNamespace(String prefix, String uri) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startDocument() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleStylesheet(String stylesheetUrl) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + /** + * @return A collection of {@link RioSetting}s that are supported by this + * RDFWriter. + * @since 2.7.0 + */ + @Override + public Collection<RioSetting<?>> getSupportedSettings() { + return new ArrayList<RioSetting<?>>(); + } + + /** + * Retrieves the current writer configuration as a single object. + * + * @return a writer configuration object representing the current + * configuration of the writer. + * @since 2.7.0 + */ + @Override + public WriterConfig getWriterConfig() { + return config; + } + + /** + * Sets all supplied writer configuration options. + * + * @param config + * a writer configuration object. + * @since 2.7.0 + */ + @Override + public void setWriterConfig(WriterConfig config) { + this.config = config; + } } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/2a2baa77/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriterXSL.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriterXSL.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriterXSL.java index 56fbe11..5959b2a 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriterXSL.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqlhtml/SPARQLResultsHTMLWriterXSL.java @@ -24,10 +24,14 @@ import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import org.jdom2.transform.JDOMResult; import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryResultHandlerException; import org.openrdf.query.TupleQueryResultHandlerException; +import org.openrdf.query.resultio.QueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultWriter; import org.openrdf.query.resultio.sparqlxml.SPARQLResultsXMLWriter; +import org.openrdf.rio.RioSetting; +import org.openrdf.rio.WriterConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +48,8 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -59,14 +65,16 @@ public class SPARQLResultsHTMLWriterXSL implements TupleQueryResultWriter { private OutputStream out; private ByteArrayOutputStream xmlOut; - private SPARQLResultsXMLWriter xmlWriter; + private SPARQLResultsXMLWriter writer; + + private WriterConfig config; private Templates stylesheet; public SPARQLResultsHTMLWriterXSL(OutputStream out) { this.out = out; this.xmlOut = new ByteArrayOutputStream(); - this.xmlWriter = new SPARQLResultsXMLWriter(xmlOut); + this.writer = new SPARQLResultsXMLWriter(xmlOut); Source s_stylesheet = new StreamSource(SPARQLResultsHTMLWriterXSL.class.getResourceAsStream("style.xsl")); try { stylesheet = TransformerFactory.newInstance().newTemplates(s_stylesheet); @@ -93,7 +101,7 @@ public class SPARQLResultsHTMLWriterXSL implements TupleQueryResultWriter { */ @Override public void startQueryResult(List<String> bindingNames) throws TupleQueryResultHandlerException { - xmlWriter.startQueryResult(bindingNames); + writer.startQueryResult(bindingNames); } /** @@ -101,7 +109,7 @@ public class SPARQLResultsHTMLWriterXSL implements TupleQueryResultWriter { */ @Override public void endQueryResult() throws TupleQueryResultHandlerException { - xmlWriter.endQueryResult(); + writer.endQueryResult(); // get server uri String server_uri = CDIContext.getInstance(ConfigurationService.class).getServerUri(); @@ -138,6 +146,92 @@ public class SPARQLResultsHTMLWriterXSL implements TupleQueryResultWriter { */ @Override public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException { - xmlWriter.handleSolution(bindingSet); + writer.handleSolution(bindingSet); } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public QueryResultFormat getQueryResultFormat() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void handleNamespace(String prefix, String uri) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startDocument() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleStylesheet(String stylesheetUrl) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + /** + * @return A collection of {@link RioSetting}s that are supported by this + * RDFWriter. + * @since 2.7.0 + */ + @Override + public Collection<RioSetting<?>> getSupportedSettings() { + return new ArrayList<RioSetting<?>>(); + } + + /** + * Retrieves the current writer configuration as a single object. + * + * @return a writer configuration object representing the current + * configuration of the writer. + * @since 2.7.0 + */ + @Override + public WriterConfig getWriterConfig() { + return config; + } + + /** + * Sets all supplied writer configuration options. + * + * @param config + * a writer configuration object. + * @since 2.7.0 + */ + @Override + public void setWriterConfig(WriterConfig config) { + this.config = config; + } + } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/2a2baa77/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLBooleanJSONWriter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLBooleanJSONWriter.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLBooleanJSONWriter.java index b9c81d9..31ef321 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLBooleanJSONWriter.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLBooleanJSONWriter.java @@ -17,14 +17,23 @@ */ package org.apache.marmotta.platform.sparql.services.sparqlio.sparqljson; +import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryResultHandlerException; +import org.openrdf.query.TupleQueryResultHandlerException; import org.openrdf.query.resultio.BooleanQueryResultFormat; import org.openrdf.query.resultio.BooleanQueryResultWriter; +import org.openrdf.query.resultio.QueryResultFormat; +import org.openrdf.rio.RioSetting; +import org.openrdf.rio.WriterConfig; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; /** * Add file description here! @@ -33,8 +42,8 @@ import java.nio.charset.Charset; */ public class SPARQLBooleanJSONWriter implements BooleanQueryResultWriter { - private OutputStream out; + private WriterConfig config; public SPARQLBooleanJSONWriter(OutputStream out) { this.out = out; @@ -59,4 +68,104 @@ public class SPARQLBooleanJSONWriter implements BooleanQueryResultWriter { writer.flush(); writer.close(); } + + /** + * @return A collection of {@link RioSetting}s that are supported by this + * RDFWriter. + * @since 2.7.0 + */ + @Override + public Collection<RioSetting<?>> getSupportedSettings() { + return new ArrayList<RioSetting<?>>(); + } + + /** + * Retrieves the current writer configuration as a single object. + * + * @return a writer configuration object representing the current + * configuration of the writer. + * @since 2.7.0 + */ + @Override + public WriterConfig getWriterConfig() { + return config; + } + + /** + * Sets all supplied writer configuration options. + * + * @param config + * a writer configuration object. + * @since 2.7.0 + */ + @Override + public void setWriterConfig(WriterConfig config) { + this.config = config; + } + + @Override + public QueryResultFormat getQueryResultFormat() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void handleNamespace(String prefix, String uri) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startDocument() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleStylesheet(String stylesheetUrl) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endQueryResult() throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleSolution(BindingSet arg0) throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startQueryResult(List<String> arg0) throws TupleQueryResultHandlerException { + // TODO Auto-generated method stub + + } } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/2a2baa77/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLResultsJSONWriter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLResultsJSONWriter.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLResultsJSONWriter.java index 0bf4881..941ec6d 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLResultsJSONWriter.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/sparqljson/SPARQLResultsJSONWriter.java @@ -17,27 +17,33 @@ */ package org.apache.marmotta.platform.sparql.services.sparqlio.sparqljson; +import info.aduna.io.IndentingWriter; +import info.aduna.text.StringUtil; + import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; import java.util.List; -import info.aduna.io.IndentingWriter; -import info.aduna.text.StringUtil; - import org.openrdf.model.BNode; import org.openrdf.model.Literal; import org.openrdf.model.URI; import org.openrdf.model.Value; import org.openrdf.query.Binding; import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryResultHandlerException; import org.openrdf.query.TupleQueryResultHandlerException; +import org.openrdf.query.resultio.QueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultWriter; +import org.openrdf.rio.RioSetting; +import org.openrdf.rio.WriterConfig; /** * A TupleQueryResultWriter that writes query results in the <a @@ -46,247 +52,287 @@ import org.openrdf.query.resultio.TupleQueryResultWriter; */ public class SPARQLResultsJSONWriter implements TupleQueryResultWriter { - /*-----------* - * Variables * - *-----------*/ - - private IndentingWriter writer; - - private boolean firstTupleWritten; - - /*--------------* - * Constructors * - *--------------*/ - - public SPARQLResultsJSONWriter(OutputStream out) { - Writer w = new OutputStreamWriter(out, Charset.forName("UTF-8")); - w = new BufferedWriter(w, 1024); - writer = new IndentingWriter(w); - } - - /*---------* - * Methods * - *---------*/ - - public final TupleQueryResultFormat getTupleQueryResultFormat() { - return TupleQueryResultFormat.JSON; - } - - public void startQueryResult(List<String> columnHeaders) - throws TupleQueryResultHandlerException - { - try { - openBraces(); - - // Write header - writeKey("head"); - openBraces(); - writeKeyValue("vars", columnHeaders); - closeBraces(); - - writeComma(); - - // Write results - writeKey("results"); - openBraces(); - - writeKey("bindings"); - openArray(); - - firstTupleWritten = false; - } - catch (IOException e) { - throw new TupleQueryResultHandlerException(e); - } - } - - public void endQueryResult() - throws TupleQueryResultHandlerException - { - try { - closeArray(); // bindings array - closeBraces(); // results braces - closeBraces(); // root braces - writer.flush(); - } - catch (IOException e) { - throw new TupleQueryResultHandlerException(e); - } - } - - public void handleSolution(BindingSet bindingSet) - throws TupleQueryResultHandlerException - { - try { - if (firstTupleWritten) { - writeComma(); - } - else { - firstTupleWritten = true; - } - - openBraces(); // start of new solution - - Iterator<Binding> bindingIter = bindingSet.iterator(); - while (bindingIter.hasNext()) { - Binding binding = bindingIter.next(); - - writeKeyValue(binding.getName(), binding.getValue()); - - if (bindingIter.hasNext()) { - writeComma(); - } - } - - closeBraces(); // end solution - - writer.flush(); - } - catch (IOException e) { - throw new TupleQueryResultHandlerException(e); - } - } - - private void writeKeyValue(String key, String value) - throws IOException - { - writeKey(key); - writeString(value); - } - - private void writeKeyValue(String key, Value value) - throws IOException, TupleQueryResultHandlerException - { - writeKey(key); - writeValue(value); - } - - private void writeKeyValue(String key, Iterable<String> array) - throws IOException - { - writeKey(key); - writeArray(array); - } - - private void writeKey(String key) - throws IOException - { - writeString(key); - writer.write(": "); - } - - private void writeValue(Value value) - throws IOException, TupleQueryResultHandlerException - { - writer.write("{ "); - - if (value instanceof URI) { - writeKeyValue("type", "uri"); - writer.write(", "); - writeKeyValue("value", ((URI)value).toString()); - } - else if (value instanceof BNode) { - writeKeyValue("type", "bnode"); - writer.write(", "); - writeKeyValue("value", ((BNode)value).getID()); - } - else if (value instanceof Literal) { - Literal lit = (Literal)value; - - if (lit.getLanguage() != null) { - writeKeyValue("xml:lang", lit.getLanguage()); - writer.write(", "); - } - if (lit.getDatatype() != null) { - writeKeyValue("datatype", lit.getDatatype().toString()); - writer.write(", "); - } - - writeKeyValue("type", "literal"); - - writer.write(", "); - writeKeyValue("value", lit.getLabel()); - } - else { - throw new TupleQueryResultHandlerException("Unknown Value object type: " + value.getClass()); - } - - writer.write(" }"); - } - - private void writeString(String value) - throws IOException - { - // Escape special characters - value = StringUtil.gsub("\\", "\\\\", value); - value = StringUtil.gsub("\"", "\\\"", value); - value = StringUtil.gsub("/", "\\/", value); - value = StringUtil.gsub("\b", "\\b", value); - value = StringUtil.gsub("\f", "\\f", value); - value = StringUtil.gsub("\n", "\\n", value); - value = StringUtil.gsub("\r", "\\r", value); - value = StringUtil.gsub("\t", "\\t", value); - - writer.write("\""); - writer.write(value); - writer.write("\""); - } - - private void writeArray(Iterable<String> array) - throws IOException - { - writer.write("[ "); - - Iterator<String> iter = array.iterator(); - while (iter.hasNext()) { - String value = iter.next(); - - writeString(value); - - if (iter.hasNext()) { - writer.write(", "); - } - } - - writer.write(" ]"); - } - - private void openArray() - throws IOException - { - writer.write("["); - writer.writeEOL(); - writer.increaseIndentation(); - } - - private void closeArray() - throws IOException - { - writer.writeEOL(); - writer.decreaseIndentation(); - writer.write("]"); - } - - private void openBraces() - throws IOException - { - writer.write("{"); - writer.writeEOL(); - writer.increaseIndentation(); - } - - private void closeBraces() - throws IOException - { - writer.writeEOL(); - writer.decreaseIndentation(); - writer.write("}"); - } - - private void writeComma() - throws IOException - { - writer.write(", "); - writer.writeEOL(); - } + private IndentingWriter writer; + + private WriterConfig config; + + private boolean firstTupleWritten; + + public SPARQLResultsJSONWriter(OutputStream out) { + Writer w = new OutputStreamWriter(out, Charset.forName("UTF-8")); + w = new BufferedWriter(w, 1024); + writer = new IndentingWriter(w); + } + + public final TupleQueryResultFormat getTupleQueryResultFormat() { + return TupleQueryResultFormat.JSON; + } + + public void startQueryResult(List<String> columnHeaders) throws TupleQueryResultHandlerException { + try { + openBraces(); + + // Write header + writeKey("head"); + openBraces(); + writeKeyValue("vars", columnHeaders); + closeBraces(); + + writeComma(); + + // Write results + writeKey("results"); + openBraces(); + + writeKey("bindings"); + openArray(); + + firstTupleWritten = false; + } catch (IOException e) { + throw new TupleQueryResultHandlerException(e); + } + } + + public void endQueryResult() throws TupleQueryResultHandlerException { + try { + closeArray(); // bindings array + closeBraces(); // results braces + closeBraces(); // root braces + writer.flush(); + } catch (IOException e) { + throw new TupleQueryResultHandlerException(e); + } + } + + public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException { + try { + if (firstTupleWritten) { + writeComma(); + } else { + firstTupleWritten = true; + } + + openBraces(); // start of new solution + + Iterator<Binding> bindingIter = bindingSet.iterator(); + while (bindingIter.hasNext()) { + Binding binding = bindingIter.next(); + + writeKeyValue(binding.getName(), binding.getValue()); + + if (bindingIter.hasNext()) { + writeComma(); + } + } + + closeBraces(); // end solution + + writer.flush(); + } catch (IOException e) { + throw new TupleQueryResultHandlerException(e); + } + } + + private void writeKeyValue(String key, String value) throws IOException { + writeKey(key); + writeString(value); + } + + private void writeKeyValue(String key, Value value) throws IOException, TupleQueryResultHandlerException { + writeKey(key); + writeValue(value); + } + + private void writeKeyValue(String key, Iterable<String> array) + throws IOException { + writeKey(key); + writeArray(array); + } + + private void writeKey(String key) throws IOException { + writeString(key); + writer.write(": "); + } + + private void writeValue(Value value) throws IOException, TupleQueryResultHandlerException { + writer.write("{ "); + + if (value instanceof URI) { + writeKeyValue("type", "uri"); + writer.write(", "); + writeKeyValue("value", ((URI) value).toString()); + } else if (value instanceof BNode) { + writeKeyValue("type", "bnode"); + writer.write(", "); + writeKeyValue("value", ((BNode) value).getID()); + } else if (value instanceof Literal) { + Literal lit = (Literal) value; + + if (lit.getLanguage() != null) { + writeKeyValue("xml:lang", lit.getLanguage()); + writer.write(", "); + } + if (lit.getDatatype() != null) { + writeKeyValue("datatype", lit.getDatatype().toString()); + writer.write(", "); + } + + writeKeyValue("type", "literal"); + + writer.write(", "); + writeKeyValue("value", lit.getLabel()); + } else { + throw new TupleQueryResultHandlerException( + "Unknown Value object type: " + value.getClass()); + } + + writer.write(" }"); + } + + private void writeString(String value) throws IOException { + // Escape special characters + value = StringUtil.gsub("\\", "\\\\", value); + value = StringUtil.gsub("\"", "\\\"", value); + value = StringUtil.gsub("/", "\\/", value); + value = StringUtil.gsub("\b", "\\b", value); + value = StringUtil.gsub("\f", "\\f", value); + value = StringUtil.gsub("\n", "\\n", value); + value = StringUtil.gsub("\r", "\\r", value); + value = StringUtil.gsub("\t", "\\t", value); + + writer.write("\""); + writer.write(value); + writer.write("\""); + } + + private void writeArray(Iterable<String> array) throws IOException { + writer.write("[ "); + + Iterator<String> iter = array.iterator(); + while (iter.hasNext()) { + String value = iter.next(); + + writeString(value); + + if (iter.hasNext()) { + writer.write(", "); + } + } + + writer.write(" ]"); + } + + private void openArray() throws IOException { + writer.write("["); + writer.writeEOL(); + writer.increaseIndentation(); + } + + private void closeArray() throws IOException { + writer.writeEOL(); + writer.decreaseIndentation(); + writer.write("]"); + } + + private void openBraces() throws IOException { + writer.write("{"); + writer.writeEOL(); + writer.increaseIndentation(); + } + + private void closeBraces() throws IOException { + writer.writeEOL(); + writer.decreaseIndentation(); + writer.write("}"); + } + + private void writeComma() throws IOException { + writer.write(", "); + writer.writeEOL(); + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public QueryResultFormat getQueryResultFormat() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void handleNamespace(String prefix, String uri) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startDocument() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleStylesheet(String stylesheetUrl) + throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void startHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void endHeader() throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + /** + * @return A collection of {@link RioSetting}s that are supported by this + * RDFWriter. + * @since 2.7.0 + */ + @Override + public Collection<RioSetting<?>> getSupportedSettings() { + return new ArrayList<RioSetting<?>>(); + } + + /** + * Retrieves the current writer configuration as a single object. + * + * @return a writer configuration object representing the current + * configuration of the writer. + * @since 2.7.0 + */ + @Override + public WriterConfig getWriterConfig() { + return config; + } + + /** + * Sets all supplied writer configuration options. + * + * @param config + * a writer configuration object. + * @since 2.7.0 + */ + @Override + public void setWriterConfig(WriterConfig config) { + this.config = config; + } }
