package org.deri.grefine.reconcile.rdf.executors;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.json.JSONException;
import org.json.JSONWriter;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.ResultSet;
/**
* @author fadmaa
* query a remote SPARQL endpoint
*/
public class RemoteQueryExecutor implements QueryExecutor{
protected String sparqlEndpointUrl;
protected String defaultGraphUri;
public RemoteQueryExecutor(String sparqlEndpointUrl,String defaultGraphUri) {
this.sparqlEndpointUrl = sparqlEndpointUrl;
this.defaultGraphUri = defaultGraphUri;
}
@Override
public ResultSet sparql(String sparql) {
QueryExecution qExec;
if(defaultGraphUri==null){
qExec = QueryExecutionFactory.sparqlService(sparqlEndpointUrl, sparql);
}else{
qExec = QueryExecutionFactory.sparqlService(sparqlEndpointUrl, sparql,defaultGraphUri);
}
ResultSet res = qExec.execSelect();
return res;
}
@Override
public void save(String serviceId, FileOutputStream baseDir) throws IOException{
//nothing to save... all data is external
}
@Override
public void write(JSONWriter writer) throws JSONException {
writer.object();
writer.key("type"); writer.value("remote");
writer.key("sparql-url"); writer.value(sparqlEndpointUrl);
if(defaultGraphUri!=null){
writer.key("default-graph-uri"); writer.value(defaultGraphUri);
}
writer.endObject();
}
@Override
public void initialize(FileInputStream in) {
//nothing to initialize
}
}