use of org.openrdf.query.TupleQueryResultHandler in project incubator-rya by apache.
the class RdfController method queryRdf.
@RequestMapping(value = "/queryrdf", method = { RequestMethod.GET, RequestMethod.POST })
public void queryRdf(@RequestParam("query") final String query, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_QUERY_AUTH, required = false) String auth, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_CV, required = false) final String vis, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_INFER, required = false) final String infer, @RequestParam(value = "nullout", required = false) final String nullout, @RequestParam(value = RdfCloudTripleStoreConfiguration.CONF_RESULT_FORMAT, required = false) final String emit, @RequestParam(value = "padding", required = false) final String padding, @RequestParam(value = "callback", required = false) final String callback, final HttpServletRequest request, final HttpServletResponse response) {
// WARNING: if you add to the above request variables,
// Be sure to validate and encode since they come from the outside and could contain odd damaging character sequences.
SailRepositoryConnection conn = null;
final Thread queryThread = Thread.currentThread();
auth = StringUtils.arrayToCommaDelimitedString(provider.getUserAuths(request));
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
log.debug("interrupting");
queryThread.interrupt();
}
}, QUERY_TIME_OUT_SECONDS * 1000);
try {
final ServletOutputStream os = response.getOutputStream();
conn = repository.getConnection();
final Boolean isBlankQuery = StringUtils.isEmpty(query);
final ParsedOperation operation = QueryParserUtil.parseOperation(QueryLanguage.SPARQL, query, null);
final Boolean requestedCallback = !StringUtils.isEmpty(callback);
final Boolean requestedFormat = !StringUtils.isEmpty(emit);
if (!isBlankQuery) {
if (operation instanceof ParsedGraphQuery) {
// Perform Graph Query
final RDFHandler handler = new RDFXMLWriter(os);
response.setContentType("text/xml");
performGraphQuery(query, conn, auth, infer, nullout, handler);
} else if (operation instanceof ParsedTupleQuery) {
// Perform Tuple Query
TupleQueryResultHandler handler;
if (requestedFormat && emit.equalsIgnoreCase("json")) {
handler = new SPARQLResultsJSONWriter(os);
response.setContentType("application/json");
} else {
handler = new SPARQLResultsXMLWriter(os);
response.setContentType("text/xml");
}
performQuery(query, conn, auth, infer, nullout, handler);
} else if (operation instanceof ParsedUpdate) {
// Perform Update Query
performUpdate(query, conn, os, infer, vis);
} else {
throw new MalformedQueryException("Cannot process query. Query type not supported.");
}
}
if (requestedCallback) {
os.print(")");
}
} catch (final Exception e) {
log.error("Error running query", e);
throw new RuntimeException(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (final RepositoryException e) {
log.error("Error closing connection", e);
}
}
}
timer.cancel();
}
use of org.openrdf.query.TupleQueryResultHandler in project incubator-rya by apache.
the class RdfCloudTripleStoreConnectionTest method testNamespaceUsage.
public void testNamespaceUsage() throws Exception {
RepositoryConnection conn = repository.getConnection();
conn.setNamespace("lit", litdupsNS);
URI loadPerc = vf.createURI(litdupsNS, "loadPerc");
final URI uri1 = vf.createURI(litdupsNS, "uri1");
conn.add(cpu, loadPerc, uri1);
conn.commit();
String query = "PREFIX lit: <" + litdupsNS + ">\n" + "select * where {lit:cpu lit:loadPerc ?o.}";
TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleQuery.evaluate(new TupleQueryResultHandler() {
@Override
public void startQueryResult(List<String> strings) throws TupleQueryResultHandlerException {
}
@Override
public void endQueryResult() throws TupleQueryResultHandlerException {
}
@Override
public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException {
assertTrue(uri1.toString().equals(bindingSet.getBinding("o").getValue().stringValue()));
}
@Override
public void handleBoolean(boolean paramBoolean) throws QueryResultHandlerException {
}
@Override
public void handleLinks(List<String> paramList) throws QueryResultHandlerException {
}
});
conn.close();
}
use of org.openrdf.query.TupleQueryResultHandler in project incubator-rya by apache.
the class InferenceIT method setUp.
@Override
public void setUp() throws Exception {
super.setUp();
dao = new AccumuloRyaDAO();
connector = new MockInstance().getConnector("", new PasswordToken(""));
dao.setConnector(connector);
conf = new AccumuloRdfConfiguration();
conf.setInfer(true);
dao.setConf(conf);
dao.init();
store = new RdfCloudTripleStore();
store.setConf(conf);
store.setRyaDAO(dao);
inferenceEngine = new InferenceEngine();
inferenceEngine.setRyaDAO(dao);
store.setInferenceEngine(inferenceEngine);
inferenceEngine.refreshGraph();
store.initialize();
repository = new SailRepository(store);
conn = repository.getConnection();
solutions = new LinkedList<>();
resultHandler = new TupleQueryResultHandler() {
@Override
public void endQueryResult() throws TupleQueryResultHandlerException {
}
@Override
public void handleBoolean(final boolean value) throws QueryResultHandlerException {
}
@Override
public void handleLinks(final List<String> linkUrls) throws QueryResultHandlerException {
}
@Override
public void handleSolution(final BindingSet bindingSet) throws TupleQueryResultHandlerException {
if (bindingSet != null && bindingSet.iterator().hasNext()) {
solutions.add(bindingSet);
}
}
@Override
public void startQueryResult(final List<String> bindingNames) throws TupleQueryResultHandlerException {
solutions.clear();
}
};
}
use of org.openrdf.query.TupleQueryResultHandler in project incubator-rya by apache.
the class RdfController method performQuery.
private void performQuery(final String query, final RepositoryConnection conn, final String auth, final String infer, final String nullout, final TupleQueryResultHandler handler) throws RepositoryException, MalformedQueryException, QueryEvaluationException, TupleQueryResultHandlerException {
final TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, query);
if (auth != null && auth.length() > 0) {
tupleQuery.setBinding(RdfCloudTripleStoreConfiguration.CONF_QUERY_AUTH, VALUE_FACTORY.createLiteral(auth));
}
if (infer != null && infer.length() > 0) {
tupleQuery.setBinding(RdfCloudTripleStoreConfiguration.CONF_INFER, VALUE_FACTORY.createLiteral(Boolean.parseBoolean(infer)));
}
if (nullout != null && nullout.length() > 0) {
// output nothing, but still run query
tupleQuery.evaluate(new TupleQueryResultHandler() {
@Override
public void startQueryResult(final List<String> strings) throws TupleQueryResultHandlerException {
}
@Override
public void endQueryResult() throws TupleQueryResultHandlerException {
}
@Override
public void handleSolution(final BindingSet bindings) throws TupleQueryResultHandlerException {
}
@Override
public void handleBoolean(final boolean arg0) throws QueryResultHandlerException {
}
@Override
public void handleLinks(final List<String> arg0) throws QueryResultHandlerException {
}
});
} else {
final CountingTupleQueryResultHandlerWrapper sparqlWriter = new CountingTupleQueryResultHandlerWrapper(handler);
final long startTime = System.currentTimeMillis();
tupleQuery.evaluate(sparqlWriter);
log.info(String.format("Query Time = %.3f Result Count = %s\n", (System.currentTimeMillis() - startTime) / 1000., sparqlWriter.getCount()));
}
}
Aggregations