ModelQueryAdapter.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ostrichemulators.semtool.rdf.query.util.impl;
import com.ostrichemulators.semtool.rdf.query.util.QueryExecutorAdapter;
import org.apache.log4j.Logger;
import org.openrdf.model.Model;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.LinkedHashModel;
import org.openrdf.query.BindingSet;
/**
*
* @author ryan
*/
public class ModelQueryAdapter extends QueryExecutorAdapter<Model> {
public ModelQueryAdapter() {
result = new LinkedHashModel();
}
public ModelQueryAdapter( String sparq ) {
this( sparq, new LinkedHashModel() );
}
public ModelQueryAdapter( String sparql, Model model ) {
super( sparql );
result = model;
}
/**
* Sets the model to fill as the query gets executed
*
* @param m
*/
public void setModel( Model m ) {
result = m;
}
@Override
public void handleTuple( BindingSet set, ValueFactory fac ) {
// we can *sometimes* use a binding set instead of getResult().add(...)
// *) if it has only three elements of the type Resource URI Value,
boolean ok = false;
if ( 3 == set.size() ) {
String[] names = new String[3];
getBindingNames().toArray( names );
Resource subject = null;
URI predicate = null;
Value object = set.getValue( names[2] );
if ( set.hasBinding( names[0] )
&& set.getValue( names[0] ) instanceof Resource ) {
subject = Resource.class.cast( set.getValue( names[0] ) );
}
if ( set.hasBinding( names[1] )
&& set.getValue( names[1] ) instanceof URI ) {
predicate = URI.class.cast( set.getValue( names[1] ) );
}
if ( !( null == subject || null == predicate || null == object ) ) {
ok = true;
result.add( subject, predicate, object );
}
}
if ( !ok ) {
Logger.getLogger( getClass() ).error( "use getResults().add() instead" );
}
}
public static ModelQueryAdapter describe( Resource rsr ) {
String query = "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }";
ModelQueryAdapter mqa = new ModelQueryAdapter( query );
mqa.bind( "s", rsr );
return mqa;
}
}