package org.aksw.jena_sparql_api.fallback; import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.core.QueryExecutionFactoryBackQuery; import org.aksw.jena_sparql_api.http.QueryExecutionFactoryHttp; import com.google.common.collect.Lists; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFormatter; public class QueryExecutionFactoryFallback extends QueryExecutionFactoryBackQuery { private List<QueryExecutionFactory> decoratees; public QueryExecutionFactoryFallback(PriorityQueue<QueryExecutionFactory> decoratees) { this.decoratees = Lists.newArrayList(decoratees); } public QueryExecutionFactoryFallback(List<QueryExecutionFactory> decoratees) { this.decoratees = decoratees; } @Override public QueryExecution createQueryExecution(Query query) { List<QueryExecution> queryExecutions = new ArrayList<QueryExecution>(decoratees.size()); for (QueryExecutionFactory decoratee : decoratees) { QueryExecution qe = decoratee.createQueryExecution(query); queryExecutions.add(qe); } return new QueryExecutionFallback(queryExecutions); } @Override public QueryExecution createQueryExecution(String queryString) { List<QueryExecution> queryExecutions = new ArrayList<QueryExecution>(decoratees.size()); for (QueryExecutionFactory decoratee : decoratees) { QueryExecution qe = decoratee.createQueryExecution(queryString); queryExecutions.add(qe); } return new QueryExecutionFallback(queryExecutions); } /* (non-Javadoc) * @see org.aksw.jena_sparql_api.core.QueryExecutionFactory#getId() */ @Override public String getId() { return null; } /* (non-Javadoc) * @see org.aksw.jena_sparql_api.core.QueryExecutionFactory#getState() */ @Override public String getState() { return null; } public static void main(String[] args) throws Exception { //official DBpedia QueryExecutionFactory qef1 = new QueryExecutionFactoryHttp("http://dbpedia.org/sparql", "http://dbpedia.org"); //DBpedia Live QueryExecutionFactory qef2 = new QueryExecutionFactoryHttp("http://live.dbpedia.org/sparql", "http://dbpedia.org"); //DBpedia in LOD cloud cache QueryExecutionFactory qef3 = new QueryExecutionFactoryHttp("http://lod.openlinksw.org/sparql", "http://dbpedia.org"); List<QueryExecutionFactory> qefs = new ArrayList<QueryExecutionFactory>(); qefs.add(qef1); qefs.add(qef2); qefs.add(qef3); QueryExecutionFactory qef = new QueryExecutionFactoryFallback(qefs); String query = "SELECT * WHERE {?s a <http://dbpedia.org/ontology/Book>.} LIMIT 10"; QueryExecution qe = qef.createQueryExecution(query); ResultSet rs = qe.execSelect(); System.out.println(ResultSetFormatter.asText(rs)); } }