Strabon
changeset 360:67376341384d
added HTML query result writer and factory
author | Babis Nikolaou <charnik@di.uoa.gr> |
---|---|
date | Mon Jun 25 20:53:02 2012 +0300 (2012-06-25) |
parents | 10dcd779521e |
children | d6319e10dbcc |
files | resultio/src/main/java/org/openrdf/query/resultio/sparqlhtml/stSPARQLResultsHTMLWriter.java resultio/src/main/java/org/openrdf/query/resultio/sparqlhtml/stSPARQLResultsHTMLWriterFactory.java resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultFormat.java resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultWriterFactory.java runtime/src/main/java/eu/earthobservatory/runtime/generaldb/Strabon.java |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/resultio/src/main/java/org/openrdf/query/resultio/sparqlhtml/stSPARQLResultsHTMLWriter.java Mon Jun 25 20:53:02 2012 +0300 1.3 @@ -0,0 +1,97 @@ 1.4 +package org.openrdf.query.resultio.sparqlhtml; 1.5 + 1.6 +import java.io.IOException; 1.7 +import java.io.OutputStream; 1.8 +import java.util.List; 1.9 + 1.10 +import org.openrdf.model.BNode; 1.11 +import org.openrdf.query.Binding; 1.12 +import org.openrdf.query.BindingSet; 1.13 +import org.openrdf.query.TupleQueryResultHandlerException; 1.14 +import org.openrdf.query.resultio.TupleQueryResultFormat; 1.15 +import org.openrdf.query.resultio.TupleQueryResultWriter; 1.16 +import org.openrdf.query.resultio.stSPARQLQueryResultFormat; 1.17 +import org.openrdf.query.resultio.sparqlxml.stSPARQLXMLWriter; 1.18 + 1.19 +/** 1.20 + * @author Charalampos Nikolaou <charnik@di.uoa.gr> 1.21 + * 1.22 + */ 1.23 +public class stSPARQLResultsHTMLWriter implements TupleQueryResultWriter { 1.24 + 1.25 + public static final String TABLE_ROW_TAG = "TR"; 1.26 + public static final String TABLE_HEADER_TAG = "TH"; 1.27 + public static final String TABLE_DATA_TAG = "TD"; 1.28 + 1.29 + /** 1.30 + * The underlying XML formatter. 1.31 + */ 1.32 + private stSPARQLXMLWriter xmlWriter; 1.33 + 1.34 + public stSPARQLResultsHTMLWriter(OutputStream out) { 1.35 + this(new stSPARQLXMLWriter(out)); 1.36 + } 1.37 + 1.38 + public stSPARQLResultsHTMLWriter(stSPARQLXMLWriter writer) { 1.39 + xmlWriter = writer; 1.40 + xmlWriter.setPrettyPrint(true); 1.41 + } 1.42 + 1.43 + @Override 1.44 + public void startQueryResult(List<String> bindingNames) 1.45 + throws TupleQueryResultHandlerException { 1.46 + 1.47 + try { 1.48 + // write Table header containing the bindings 1.49 + xmlWriter.startTag(TABLE_ROW_TAG); 1.50 + for (String bindingName: bindingNames) { 1.51 + xmlWriter.textElement(TABLE_HEADER_TAG, bindingName); 1.52 + } 1.53 + 1.54 + xmlWriter.endTag(TABLE_ROW_TAG); 1.55 + } catch (IOException e) { 1.56 + throw new TupleQueryResultHandlerException(e); 1.57 + } 1.58 + 1.59 + } 1.60 + 1.61 + @Override 1.62 + public void endQueryResult() throws TupleQueryResultHandlerException { 1.63 + try { 1.64 + // needed to flush data 1.65 + xmlWriter.endDocument(); 1.66 + 1.67 + } catch (IOException e) { 1.68 + throw new TupleQueryResultHandlerException(e); 1.69 + } 1.70 + } 1.71 + 1.72 + @Override 1.73 + public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException { 1.74 + try { 1.75 + StringBuilder value = new StringBuilder(); 1.76 + 1.77 + xmlWriter.startTag(TABLE_ROW_TAG); 1.78 + for (Binding binding : bindingSet) { 1.79 + value.append(binding.getValue().stringValue()); 1.80 + 1.81 + if (binding.getValue() instanceof BNode) { 1.82 + value.insert(0, "_:"); 1.83 + } 1.84 + xmlWriter.textElement(TABLE_DATA_TAG, value.toString()); 1.85 + 1.86 + value.setLength(0); 1.87 + } 1.88 + 1.89 + xmlWriter.endTag(TABLE_ROW_TAG); 1.90 + } catch (IOException e) { 1.91 + throw new TupleQueryResultHandlerException(e); 1.92 + } 1.93 + } 1.94 + 1.95 + @Override 1.96 + public TupleQueryResultFormat getTupleQueryResultFormat() { 1.97 + return stSPARQLQueryResultFormat.HTML; 1.98 + } 1.99 + 1.100 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/resultio/src/main/java/org/openrdf/query/resultio/sparqlhtml/stSPARQLResultsHTMLWriterFactory.java Mon Jun 25 20:53:02 2012 +0300 2.3 @@ -0,0 +1,26 @@ 2.4 +package org.openrdf.query.resultio.sparqlhtml; 2.5 + 2.6 +import java.io.OutputStream; 2.7 + 2.8 +import org.openrdf.query.resultio.TupleQueryResultFormat; 2.9 +import org.openrdf.query.resultio.TupleQueryResultWriter; 2.10 +import org.openrdf.query.resultio.TupleQueryResultWriterFactory; 2.11 +import org.openrdf.query.resultio.stSPARQLQueryResultFormat; 2.12 + 2.13 +/** 2.14 + * @author Charalampos Nikolaou <charnik@di.uoa.gr> 2.15 + * 2.16 + */ 2.17 +public class stSPARQLResultsHTMLWriterFactory implements TupleQueryResultWriterFactory { 2.18 + 2.19 + @Override 2.20 + public TupleQueryResultFormat getTupleQueryResultFormat() { 2.21 + return stSPARQLQueryResultFormat.HTML; 2.22 + } 2.23 + 2.24 + @Override 2.25 + public TupleQueryResultWriter getWriter(OutputStream out) { 2.26 + return new stSPARQLResultsHTMLWriter(out); 2.27 + } 2.28 + 2.29 +}
3.1 --- a/resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultFormat.java Mon Jun 25 20:18:51 2012 +0300 3.2 +++ b/resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultFormat.java Mon Jun 25 20:53:02 2012 +0300 3.3 @@ -55,6 +55,12 @@ 3.4 public static final stSPARQLQueryResultFormat TSV = new stSPARQLQueryResultFormat("TSV", 3.5 Arrays.asList("text/tab-separated-values"), Charset.forName("UTF-8"), Arrays.asList("tsv")); 3.6 3.7 + /** 3.8 + * HTML format (encoded as an HTML table, without the <tt><TABLE></tt> tag) 3.9 + */ 3.10 + public static final stSPARQLQueryResultFormat HTML = new stSPARQLQueryResultFormat("HTML", 3.11 + Arrays.asList("text/tab-separated-values"), Charset.forName("UTF-8"), Arrays.asList("html", "htm")); 3.12 + 3.13 // registers stSPARQL/GeoSPARQL formats 3.14 static { 3.15 register(XML); 3.16 @@ -62,6 +68,7 @@ 3.17 register(KMZ); 3.18 register(GEOJSON); 3.19 register(TSV); 3.20 + register(HTML); 3.21 } 3.22 3.23 public stSPARQLQueryResultFormat(String name, String mimeType, String fileExt) {
4.1 --- a/resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultWriterFactory.java Mon Jun 25 20:18:51 2012 +0300 4.2 +++ b/resultio/src/main/java/org/openrdf/query/resultio/stSPARQLQueryResultWriterFactory.java Mon Jun 25 20:53:02 2012 +0300 4.3 @@ -6,6 +6,7 @@ 4.4 import java.io.OutputStream; 4.5 4.6 import org.openrdf.query.resultio.sparqlgeojson.stSPARQLResultsGeoJSONWriterFactory; 4.7 +import org.openrdf.query.resultio.sparqlhtml.stSPARQLResultsHTMLWriterFactory; 4.8 import org.openrdf.query.resultio.sparqlxml.Format; 4.9 import org.openrdf.query.resultio.sparqlxml.stSPARQLResultsKMLWriterFactory; 4.10 import org.openrdf.query.resultio.sparqlxml.stSPARQLResultsXMLWriterFactory; 4.11 @@ -20,6 +21,7 @@ 4.12 */ 4.13 public class stSPARQLQueryResultWriterFactory { 4.14 4.15 + private static TupleQueryResultWriterFactory html = new stSPARQLResultsHTMLWriterFactory(); 4.16 private static TupleQueryResultWriterFactory xml = new stSPARQLResultsXMLWriterFactory(); 4.17 private static TupleQueryResultWriterFactory kml = new stSPARQLResultsKMLWriterFactory(); 4.18 private static TupleQueryResultWriterFactory tsv = new stSPARQLResultsTSVWriterFactory(); 4.19 @@ -48,10 +50,14 @@ 4.20 case GEOJSON: 4.21 writer = geojson.getWriter(out); 4.22 break; 4.23 + 4.24 + case EXP: 4.25 + // TODO: add 4.26 + break; 4.27 4.28 - // TODO: add for the following two 4.29 - case EXP: 4.30 case HTML: 4.31 + writer = html.getWriter(out); 4.32 + break; 4.33 } 4.34 4.35 return writer;
5.1 --- a/runtime/src/main/java/eu/earthobservatory/runtime/generaldb/Strabon.java Mon Jun 25 20:18:51 2012 +0300 5.2 +++ b/runtime/src/main/java/eu/earthobservatory/runtime/generaldb/Strabon.java Mon Jun 25 20:53:02 2012 +0300 5.3 @@ -267,51 +267,6 @@ 5.4 // close the zip stream 5.5 kmzout.close(); 5.6 break; 5.7 - 5.8 - case HTML: 5.9 - result = tupleQuery.evaluate(); 5.10 - 5.11 - if (result.hasNext()) { 5.12 - BindingSet set = result.next(); 5.13 - Set<String> bindingNames = set.getBindingNames(); 5.14 - writeString(out, "<tr>"); 5.15 - for (String bindingName: bindingNames) { 5.16 - writeString(out, "<th>"); 5.17 - writeString(out, bindingName); 5.18 - writeString(out, "</th>"); 5.19 - } 5.20 - 5.21 - writeString(out, "</tr>"); 5.22 - writeString(out, "<tr>"); 5.23 - 5.24 - for (String bindingName: bindingNames) { 5.25 - writeString(out, "<td>"); 5.26 - writeString(out, set.getValue(bindingName).stringValue()); 5.27 - writeString(out, "</td>"); 5.28 - } 5.29 - writeString(out, "</tr>"); 5.30 - 5.31 - 5.32 - while (result.hasNext()) { 5.33 - writeString(out, "<tr>"); 5.34 - BindingSet bindingSet1 = result.next(); 5.35 - 5.36 - for (String bindingName: bindingNames) { 5.37 - writeString(out, "<td>"); 5.38 - Binding binding = bindingSet1.getBinding(bindingName); 5.39 - if (binding != null) { 5.40 - Value val = binding.getValue(); 5.41 - writeString(out, val.stringValue()); 5.42 - } 5.43 - writeString(out, "</td>"); 5.44 - } 5.45 - 5.46 - writeString(out, "</tr>"); 5.47 - } 5.48 - writeString(out, NEWLINE); 5.49 - } 5.50 - 5.51 - break; 5.52 5.53 default: 5.54 // get the writer for the specified format