OneValueQueryAdapter.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 java.util.List;
import org.openrdf.model.Literal;
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 a single value for the variable. If no variable
* is explicitly defined, the first binding variable will be returned. If the
* query returns many tuples, only the first one returned.
*
* @author ryan
* @param <T> the type of class in the returned list
*/
public abstract class OneValueQueryAdapter<T> extends QueryExecutorAdapter<T> {
private String varname = null;
public OneValueQueryAdapter() {
}
public OneValueQueryAdapter( String sparq ) {
super( sparq );
}
public OneValueQueryAdapter( String sparq, String vname ) {
super( sparq );
}
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 ) {
if ( null == result ) {
result = getValue( set.getValue( varname ), fac );
}
}
protected abstract T getValue( Value val, ValueFactory fac );
public static OneValueQueryAdapter<URI> getUri( String sparql, String var ) {
return new OneValueQueryAdapter<URI>( sparql, var ) {
@Override
protected URI getValue( Value value, ValueFactory fac ) {
return URI.class.cast( value );
}
};
}
public static OneValueQueryAdapter<URI> getUri( String sparql ) {
return getUri( sparql, null );
}
public static OneValueQueryAdapter<String> getString( String sparql, String var ) {
return new OneValueQueryAdapter<String>( sparql, var ) {
@Override
protected String getValue( Value value, ValueFactory fac ) {
return value.stringValue();
}
};
}
public static OneValueQueryAdapter<String> getString( String sparql ) {
return getString( sparql, null );
}
public static OneValueQueryAdapter<Double> getDouble( String sparql, String var ) {
return new OneValueQueryAdapter<Double>( sparql, var ) {
@Override
protected Double getValue( Value value, ValueFactory fac ) {
return Literal.class.cast( value ).doubleValue();
}
};
}
public static OneValueQueryAdapter<Double> getDouble( String sparql ) {
return getDouble( sparql, null );
}
public static OneValueQueryAdapter<Boolean> getBoolean( String sparql, String var ) {
return new OneValueQueryAdapter<Boolean>( sparql, var ) {
@Override
protected Boolean getValue( Value value, ValueFactory fac ) {
return ( null == value ? false : Literal.class.cast( value ).booleanValue() );
}
};
}
public static OneValueQueryAdapter<Boolean> getBoolean( String sparql ) {
return getBoolean( sparql, null );
}
}