package org.aksw.jena_sparql_api.batch.trash; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.aksw.jena_sparql_api.batch.step.F_QuadToBinding; import org.aksw.jena_sparql_api.batch.step.F_TripleToQuad; import org.aksw.jena_sparql_api.core.QueryExecutionAdapter; import org.apache.jena.atlas.web.TypedInputStream; import org.apache.jena.graph.Triple; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFactory; import org.apache.jena.riot.Lang; import org.apache.jena.riot.RDFDataMgr; import org.apache.jena.sparql.engine.binding.Binding; import org.apache.jena.sparql.engine.iterator.QueryIter; import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Iterators; public class QueryExecutionResourceCore extends QueryExecutionAdapter { private String fileNameOrUrl; private TypedInputStream tis; public QueryExecutionResourceCore(String fileNameOrUrl) { this.fileNameOrUrl = fileNameOrUrl; } @Override public ResultSet execSelect() { if(tis != null) { throw new RuntimeException("Query execution already running"); } tis = RDFDataMgr.open(fileNameOrUrl); Lang lang = RDFDataMgr.determineLang(fileNameOrUrl, null, null); String base = tis.getBaseURI(); Iterator<Triple> itTriple = RDFDataMgr.createIteratorTriples(tis, lang, base); Function<Triple, Binding> fn = Functions.compose( F_QuadToBinding.fn, F_TripleToQuad.fn); Iterator<Binding> itBinding = Iterators.transform(itTriple, fn); QueryIter queryIter = new QueryIterPlainWrapper(itBinding); List<String> varNames = Arrays.asList("g", "s", "p", "o"); ResultSet rs = ResultSetFactory.create(queryIter, varNames); return rs; }; @Override public void abort() { close(); } @Override public void close() { tis.close(); } }