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>&lt;TABLE&gt;</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