package org.linkeddatafragments.solver;
import org.apache.jena.query.Query;
import org.apache.jena.sparql.ARQInternalErrorException;
import org.apache.jena.sparql.algebra.Op;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.engine.Plan;
import org.apache.jena.sparql.engine.QueryEngineFactory;
import org.apache.jena.sparql.engine.QueryEngineRegistry;
import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.main.QueryEngineMain;
import org.apache.jena.sparql.util.Context;
/**
* Created by ldevocht on 4/28/14.
*/
public class LinkedDataFragmentEngine extends QueryEngineMain {
protected Query ldfQuery;
protected DatasetGraph ldfDataset;
protected Binding ldfBinding;
protected Context ldfContext;
public LinkedDataFragmentEngine(Query query, DatasetGraph dataset, Binding input, Context context)
{
super(query, dataset, input, context) ;
this.ldfQuery = query;
this.ldfDataset = dataset;
this.ldfBinding = input;
this.ldfContext = context;
}
public LinkedDataFragmentEngine(Op op, DatasetGraph dataset, Binding input, Context context) {
super(op, dataset, input, context);
}
// ---- Registration of the factory for this query engine class.
// Query engine factory.
// Call LinkedDataFragmentEngine.register() to add to the global query engine registry.
static QueryEngineFactory factory = new LinkedDataFragmentEngineFactory() ;
static public QueryEngineFactory getFactory() {
return factory;
}
static public void register(){
QueryEngineRegistry.addFactory(factory) ;
}
static public void unregister(){
QueryEngineRegistry.removeFactory(factory);
}
static class LinkedDataFragmentEngineFactory implements QueryEngineFactory {
@Override
public boolean accept(Query query, DatasetGraph dataset, Context context) {
return true;
}
@Override
public Plan create(Query query, DatasetGraph dataset, Binding initial, Context context) {
LinkedDataFragmentEngine engine = new LinkedDataFragmentEngine(query, dataset, initial, context);
return engine.getPlan();
}
@Override
public boolean accept(Op op, DatasetGraph dataset, Context context) {
// Refuse to accept algebra expressions directly.
return false;
}
@Override
public Plan create(Op op, DatasetGraph dataset, Binding inputBinding, Context context) {
// Should not be called because accept/Op is false
throw new ARQInternalErrorException("LDFQueryEngine: factory called directly with an algebra expression");
}
}
}