/* * 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.GraphQueryResult; import org.openrdf.query.MalformedQueryException; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.QueryLanguage; import org.openrdf.query.TupleQuery; import org.openrdf.query.TupleQueryResult; import org.openrdf.query.parser.ParsedBooleanQuery; import org.openrdf.query.parser.ParsedGraphQuery; import org.openrdf.query.parser.ParsedQuery; import org.openrdf.query.parser.ParsedTupleQuery; import org.openrdf.query.parser.ParsedUpdate; import org.openrdf.query.parser.QueryParser; import org.openrdf.query.parser.QueryParserFactory; import org.openrdf.query.parser.QueryParserRegistry; import org.openrdf.repository.RepositoryConnection; import com.mysema.rdfbean.model.RepositoryException; /** * @author tiwe * */ public final class DirectQuery { private static final ThreadLocal<ParsedQuery> QUERY_HOLDER = new ThreadLocal<ParsedQuery>(); private static final QueryLanguage DIRECTQUERY = new QueryLanguage("DIRECTQUERY"); private static final QueryParser DIRECTQUERY_PARSER = new QueryParser() { @Override public ParsedQuery parseQuery(String queryStr, String baseURI) { return QUERY_HOLDER.get(); } @Override public ParsedUpdate parseUpdate(String arg0, String arg1) throws MalformedQueryException { throw new UnsupportedOperationException(); } }; 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, ParsedTupleQuery 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 (MalformedQueryException e) { throw new RepositoryException(e); } catch (org.openrdf.repository.RepositoryException e) { throw new RepositoryException(e); } } public static GraphQuery getQuery(RepositoryConnection connection, ParsedGraphQuery graphQueryModel, boolean includeInferred) { try { QUERY_HOLDER.set(graphQueryModel); GraphQuery graphQuery = connection.prepareGraphQuery(DirectQuery.DIRECTQUERY, ""); graphQuery.setIncludeInferred(includeInferred); return graphQuery; } catch (MalformedQueryException e) { throw new RepositoryException(e); } catch (org.openrdf.repository.RepositoryException e) { throw new RepositoryException(e); } } public static BooleanQuery getQuery(RepositoryConnection connection, ParsedBooleanQuery booleanQueryModel, boolean includeInferred) { try { QUERY_HOLDER.set(booleanQueryModel); BooleanQuery booleanQuery = connection.prepareBooleanQuery(DirectQuery.DIRECTQUERY, ""); booleanQuery.setIncludeInferred(includeInferred); return booleanQuery; } catch (MalformedQueryException e) { throw new RepositoryException(e); } catch (org.openrdf.repository.RepositoryException e) { throw new RepositoryException(e); } } public static TupleQueryResult query(RepositoryConnection connection, ParsedTupleQuery tupleQueryModel, boolean includeInferred) throws org.openrdf.repository.RepositoryException, QueryEvaluationException { return getQuery(connection, tupleQueryModel, includeInferred).evaluate(); } public static GraphQueryResult query(RepositoryConnection connection, ParsedGraphQuery graphQueryModel, boolean includeInferred) throws org.openrdf.repository.RepositoryException, QueryEvaluationException { return getQuery(connection, graphQueryModel, includeInferred).evaluate(); } public static boolean query(RepositoryConnection connection, ParsedBooleanQuery booleanQueryModel, boolean includeInferred) throws org.openrdf.repository.RepositoryException, QueryEvaluationException { return getQuery(connection, booleanQueryModel, includeInferred).evaluate(); } private DirectQuery() { } }