package org.aksw.jena_sparql_api.batch.reader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.aksw.jena_sparql_api.batch.BindingMapper; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.pagination.core.PagingQuery; import org.springframework.batch.item.data.AbstractPaginatedDataItemReader; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.ResultSet; import org.apache.jena.sparql.engine.binding.Binding; /** * Item reader that reads a SPARQL SELECT query using pagination * * @author raven * * @param <T> */ public class ItemReaderSparqlPaging<T> // extends AbstractPagingItemReader<T> extends AbstractPaginatedDataItemReader<T> { private QueryExecutionFactory qef; private BindingMapper<T> bindingMapper; //private String queryString; // private String serviceUri; // private Collection<String> defaultGraphUris; //private volatile PagingQuery pagingQuery; private volatile Query query = null; private volatile Iterator<Query> itQuery = null; public ItemReaderSparqlPaging() { setName(this.getClass().getName()); } // @Override // public void ge public void setSparqlService(QueryExecutionFactory qef) { this.qef = qef; } public QueryExecutionFactory getQueryExecutionFactory() { return this.qef; } public Query getQuery() { return query; } public void setQuery(Query query) { this.query = query; } public String getQueryString() { return "" + query; } /* public void setQueryString(String queryString) { Query query = QueryFactory.create(queryString, Syntax.syntaxSPARQL_11); this.query = query; //this.queryString = queryString; } */ // public String getServiceUri() { // return serviceUri; // } // // public void setServiceUri(String serviceUri) { // this.serviceUri = serviceUri; // } // // public Collection<String> getDefaultGraphUris() { // return defaultGraphUris; // } // // public void setDefaultGraphUris(Collection<String> defaultGraphUris) { // this.defaultGraphUris = defaultGraphUris; // } public void setBindingMapper(BindingMapper<T> bindingMapper) { this.bindingMapper = bindingMapper; } public BindingMapper<?> getBindingMapper() { return this.bindingMapper; } @Override protected Iterator<T> doPageRead() { /* if (results == null) { results = new CopyOnWriteArrayList<T>(); } else { results.clear(); } */ //if(itQuery == null) { PagingQuery pagingQuery = new PagingQuery(this.pageSize, this.query); Iterator<Query> itQuery = pagingQuery.createQueryIterator((long)(this.page * this.pageSize), null); //} Query query = itQuery.next(); if(query == null) { Collection<T> tmp = Collections.emptyList(); return tmp.iterator(); } //Query query = queryIterator.next(); QueryExecution qe = qef.createQueryExecution(query); ResultSet rs = qe.execSelect(); List<T> items = new ArrayList<T>(); long rowId = 0; while(rs.hasNext()) { ++rowId; Binding binding = rs.nextBinding(); T item = bindingMapper.map(binding, rowId); items.add(item); //results.add(item); } return items.iterator(); } // @Override // protected void doReadPage() { // if (results == null) { // results = new CopyOnWriteArrayList<T>(); // } // else { // results.clear(); // } // // if(itQuery == null) { // doJumpToPage(0); // } // // Query query = itQuery.next(); // // if(query == null) { // return; // } // // //Query query = queryIterator.next(); // QueryExecution qe = sparqlService.createQueryExecution(query); // ResultSet rs = qe.execSelect(); // // // long rowId = 0; // while(rs.hasNext()) { // ++rowId; // Binding binding = rs.nextBinding(); // // T item = bindingMapper.map(binding, rowId); // // results.add(item); // } // // } /* @Override protected void doJumpToPage(int itemIndex) { PagingQuery pagingQuery = new PagingQuery(getPageSize(), query); Iterator<Query> itQuery = pagingQuery.createQueryIterator(itemIndex); this.itQuery = itQuery; } */ }