OneVarListQueryAdapter.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 java.util.List;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.query.BindingSet;
/**
* A query adapter that returns one variable. If no variable is explicitly
* defined, the first binding variable will be returned
*
* @author ryan
* @param <T> the type of class in the returned list
*/
public abstract class OneVarListQueryAdapter<T> extends ListQueryAdapter<T> {
private String varname = null;
public OneVarListQueryAdapter() {
}
public OneVarListQueryAdapter( boolean cos ) {
super( cos );
}
public OneVarListQueryAdapter( String sparq ) {
super( sparq );
}
public OneVarListQueryAdapter( String sparq, boolean cos ) {
super( sparq, cos );
}
public OneVarListQueryAdapter( String sparq, String vname ) {
super( sparq );
}
public OneVarListQueryAdapter( String sparq, boolean cos, String vname ) {
super( sparq, cos );
setVariableName( vname );
}
public final void setVariableName( String name ) {
varname = name;
}
@Override
public void start( List<String> bnames ) {
super.start( bnames );
if ( null == varname && !bnames.isEmpty() ) {
varname = bnames.get( 0 );
}
}
@Override
public void handleTuple( BindingSet set, ValueFactory fac ) {
add( getValue( set.getValue( varname ), fac ) );
}
protected abstract T getValue( Value val, ValueFactory fac );
public static OneVarListQueryAdapter<URI> getUriList( String sparql, String var ) {
return new OneVarListQueryAdapter<URI>( sparql, var ) {
@Override
protected URI getValue( Value value, ValueFactory fac ) {
return URI.class.cast( value );
}
};
}
public static OneVarListQueryAdapter<URI> getUriList( String sparql ) {
return getUriList( sparql, null );
}
public static OneVarListQueryAdapter<String> getStringList( String sparql, String var ) {
return new OneVarListQueryAdapter<String>( sparql, var ) {
@Override
protected String getValue( Value value, ValueFactory fac ) {
return value.stringValue();
}
};
}
public static OneVarListQueryAdapter<String> getStringList( String sparql ) {
return getStringList( sparql, null );
}
public static OneVarListQueryAdapter<String> getLabels( URI subject ) {
OneVarListQueryAdapter<String> query
= getStringList( "SELECT ?label WHERE { ?s rdfs:label ?label }" );
query.bind( "s", subject );
return query;
}
}