diff --git a/src/main/java/edu/isi/kcap/ontapi/jena/KBAPIJena.java b/src/main/java/edu/isi/kcap/ontapi/jena/KBAPIJena.java index b972d48..f953961 100644 --- a/src/main/java/edu/isi/kcap/ontapi/jena/KBAPIJena.java +++ b/src/main/java/edu/isi/kcap/ontapi/jena/KBAPIJena.java @@ -657,11 +657,13 @@ public ArrayList> sparqlQueryRemote(String queryS return list; } - public ArrayList> sparqlQuery(String queryString) { + public ArrayList> sparqlQuery(String queryString) { + Integer timeOut = 1000 * 60 * 5; //default timeout is 5 minutes ArrayList> list = new ArrayList>(); Query query = QueryFactory.create(queryString); ArrayList vars = new ArrayList(query.getResultVars()); QueryExecution qexec = QueryExecutionFactory.create(query, ontmodel); + qexec.setTimeout(timeOut); try { ResultSet results = qexec.execSelect(); for (; results.hasNext();) { @@ -679,13 +681,48 @@ public ArrayList> sparqlQuery(String queryString) } list.add(inner); } - + } + catch(QueryCancelledException e){ + System.out.println("Query cancelled"); + throw e; } finally { qexec.close(); } return list; } + public ArrayList> sparqlQuery(String queryString, int timeOut) { + ArrayList> list = new ArrayList>(); + Query query = QueryFactory.create(queryString); + ArrayList vars = new ArrayList(query.getResultVars()); + QueryExecution qexec = QueryExecutionFactory.create(query, ontmodel); + qexec.setTimeout(timeOut); + try { + ResultSet results = qexec.execSelect(); + for (; results.hasNext();) { + QuerySolution soln = results.nextSolution(); + ArrayList inner = new ArrayList(); + for (String variableName : vars) { + RDFNode x = soln.get(variableName); + // System.out.println(soln.toString()); + KBObject item = null; + if (x != null) + item = new KBObjectJena(x); + + SparqlQuerySolution sqs = new SparqlQuerySolution(variableName, item); + inner.add(sqs); + } + list.add(inner); + } + } + catch(QueryCancelledException e){ + System.out.println("Query cancelled"); + throw e; + } finally { + qexec.close(); + } + return list; + } public ArrayList getSubClasses(KBObject cls, boolean direct_only) { ArrayList list = new ArrayList(); OntClass cl = (OntClass) cls.getInternalNode();