/* * Copyright (c) 2009 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.sesame; import org.openrdf.query.BooleanQuery; import org.openrdf.query.GraphQuery; import org.openrdf.query.MalformedQueryException; import org.openrdf.query.QueryLanguage; import org.openrdf.query.TupleQuery; import org.openrdf.query.algebra.QueryModel; import org.openrdf.query.parser.BooleanQueryModel; import org.openrdf.query.parser.GraphQueryModel; import org.openrdf.query.parser.QueryParser; import org.openrdf.query.parser.QueryParserFactory; import org.openrdf.query.parser.QueryParserRegistry; import org.openrdf.query.parser.TupleQueryModel; import org.openrdf.repository.RepositoryConnection; import org.openrdf.result.BooleanResult; import org.openrdf.result.GraphResult; import org.openrdf.result.TupleResult; import org.openrdf.store.StoreException; import com.mysema.rdfbean.model.RepositoryException; /** * @author tiwe * */ public final class DirectQuery { private static final ThreadLocal<QueryModel> QUERY_HOLDER = new ThreadLocal<QueryModel>(); private static final QueryLanguage DIRECTQUERY = new QueryLanguage("DIRECTQUERY"); private static final QueryParser DIRECTQUERY_PARSER = new QueryParser() { @Override /** * Returns the thread bound query, ignores the parameters of the method invocation */ public QueryModel parseQuery(String queryStr, String baseURI) { return QUERY_HOLDER.get(); } }; static { QueryParserRegistry.getInstance().add(new QueryParserFactory() { @Override public QueryParser getParser() { return DIRECTQUERY_PARSER; } @Override public QueryLanguage getQueryLanguage() { return DIRECTQUERY; } }); } public static TupleQuery getQuery(RepositoryConnection connection, TupleQueryModel tupleQueryModel, boolean includeInferred) { try { // System.err.println(tupleQueryModel.getTupleExpr()); QUERY_HOLDER.set(tupleQueryModel); TupleQuery tupleQuery = connection.prepareTupleQuery(DirectQuery.DIRECTQUERY, ""); tupleQuery.setIncludeInferred(includeInferred); return tupleQuery; } catch (StoreException e) { throw new RepositoryException(e); } catch (MalformedQueryException e) { throw new RepositoryException(e); } } public static GraphQuery getQuery(RepositoryConnection connection, GraphQueryModel graphQueryModel, boolean includeInferred) { try { QUERY_HOLDER.set(graphQueryModel); GraphQuery graphQuery = connection.prepareGraphQuery(DirectQuery.DIRECTQUERY, ""); graphQuery.setIncludeInferred(includeInferred); return graphQuery; } catch (StoreException e) { throw new RepositoryException(e); } catch (MalformedQueryException e) { throw new RepositoryException(e); } } public static BooleanQuery getQuery(RepositoryConnection connection, BooleanQueryModel booleanQueryModel, boolean includeInferred) { try { QUERY_HOLDER.set(booleanQueryModel); BooleanQuery booleanQuery = connection.prepareBooleanQuery(DirectQuery.DIRECTQUERY, ""); booleanQuery.setIncludeInferred(includeInferred); return booleanQuery; } catch (StoreException e) { throw new RepositoryException(e); } catch (MalformedQueryException e) { throw new RepositoryException(e); } } public static TupleResult query(RepositoryConnection connection, TupleQueryModel tupleQueryModel, boolean includeInferred) throws StoreException { return getQuery(connection, tupleQueryModel, includeInferred).evaluate(); } public static GraphResult query(RepositoryConnection connection, GraphQueryModel graphQueryModel, boolean includeInferred) throws StoreException { return getQuery(connection, graphQueryModel, includeInferred).evaluate(); } public static BooleanResult query(RepositoryConnection connection, BooleanQueryModel booleanQueryModel, boolean includeInferred) throws StoreException { return getQuery(connection, booleanQueryModel, includeInferred).evaluate(); } private DirectQuery() { } }