/* * $Id$ * * This file is part of the OpenLink Software Virtuoso Open-Source (VOS) * project. * * Copyright (C) 1998-2012 OpenLink Software * * This project is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; only version 2 of the License, dated June 1991. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ package virtuoso.jena.driver; import java.util.List; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.sparql.core.DatasetImpl; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.sparql.util.Context; import com.hp.hpl.jena.util.FileManager; public class VirtuosoQueryExecutionFactory { private VirtuosoQueryExecutionFactory() { } static public VirtuosoQueryExecution create(Query query, VirtGraph graph) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution( query.toString(), graph); return ret; } static public VirtuosoQueryExecution create(String query, VirtGraph graph) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution(query, graph); return ret; } /* TODO */ static public QueryExecution create(Query query, Dataset dataset) { if (dataset instanceof VirtDataSource) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution( query.toString(), (VirtGraph) dataset); return ret; } else { return make(query, dataset); } } static public QueryExecution create(String queryStr, Dataset dataset) { if (dataset instanceof VirtDataSource) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution(queryStr, (VirtGraph) dataset); return ret; } else { return make(makeQuery(queryStr), dataset); } } static public QueryExecution create(Query query, FileManager fm) { checkArg(query); QueryExecution qe = make(query); if (fm != null) qe.setFileManager(fm); return qe; } static public QueryExecution create(String queryStr, FileManager fm) { checkArg(queryStr); return create(makeQuery(queryStr), fm); } // ---------------- Query + Model static public QueryExecution create(Query query, Model model) { checkArg(query); checkArg(model); if (model.getGraph() instanceof VirtGraph) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution( query.toString(), (VirtGraph) model.getGraph()); return ret; } else { return make(query, new DatasetImpl(model)); } } static public QueryExecution create(String queryStr, Model model) { checkArg(queryStr); checkArg(model); if (model.getGraph() instanceof VirtGraph) { VirtuosoQueryExecution ret = new VirtuosoQueryExecution(queryStr, (VirtGraph) model.getGraph()); return ret; } else { return create(makeQuery(queryStr), model); } } static public QueryExecution create(Query query, QuerySolution initialBinding) { checkArg(query); QueryExecution qe = make(query); if (initialBinding != null) qe.setInitialBinding(initialBinding); return qe; } static public QueryExecution create(String queryStr, QuerySolution initialBinding) { checkArg(queryStr); return create(makeQuery(queryStr), initialBinding); } // ?? static public QueryExecution create(Query query, Dataset dataset, QuerySolution initialBinding) { checkArg(query); QueryExecution qe = make(query, dataset); if (initialBinding != null) qe.setInitialBinding(initialBinding); return qe; } // ?? static public QueryExecution create(String queryStr, Dataset dataset, QuerySolution initialBinding) { checkArg(queryStr); return create(makeQuery(queryStr), dataset, initialBinding); } // ---------------- Remote query execution static public QueryExecution sparqlService(String service, Query query) { checkNotNull(service, "URL for service is null"); checkArg(query); return makeServiceRequest(service, query); } static public QueryExecution sparqlService(String service, Query query, String defaultGraph) { checkNotNull(service, "URL for service is null"); // checkNotNull(defaultGraph, "IRI for default graph is null") ; checkArg(query); QueryEngineHTTP qe = makeServiceRequest(service, query); qe.addDefaultGraph(defaultGraph); return qe; } static public QueryExecution sparqlService(String service, Query query, List defaultGraphURIs, List namedGraphURIs) { checkNotNull(service, "URL for service is null"); // checkNotNull(defaultGraphURIs, "List of default graph URIs is null") // ; // checkNotNull(namedGraphURIs, "List of named graph URIs is null") ; checkArg(query); QueryEngineHTTP qe = makeServiceRequest(service, query); if (defaultGraphURIs != null) qe.setDefaultGraphURIs(defaultGraphURIs); if (namedGraphURIs != null) qe.setNamedGraphURIs(namedGraphURIs); return qe; } // ---------------- Internal routines // Make query static private Query makeQuery(String queryStr) { return QueryFactory.create(queryStr); } // ---- Make executions static private QueryExecution make(Query query) { return make(query, null); } static private QueryExecution make(Query query, Dataset dataset) { return make(query, dataset, null); } static private QueryExecution make(Query query, Dataset dataset, Context context) { return null; } static private QueryEngineHTTP makeServiceRequest(String service, Query query) { return new QueryEngineHTTP(service, query); } static private void checkNotNull(Object obj, String msg) { if (obj == null) throw new IllegalArgumentException(msg); } static private void checkArg(Model model) { checkNotNull(model, "Model is a null pointer"); } static private void checkArg(String queryStr) { checkNotNull(queryStr, "Query string is null"); } static private void checkArg(Query query) { checkNotNull(query, "Query is null"); } }