SesameJenaImposter.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.util.RDFDatatypeTools;
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 class to mimic the legacy SesameJenaSelectWrapper class to ease the
 * transition
 *
 * @author ryan
 */
public class SesameJenaImposter extends ListQueryAdapter<Object[]> {

	public SesameJenaImposter() {
	}

	public SesameJenaImposter( String sparq ) {
		super( sparq );
	}

	@Override
	public void handleTuple( BindingSet set, ValueFactory fac ) {
		Object[] vals = new Object[getNumBindings()];
		int idx = 0;
		for ( String name : getBindingNames() ) {
			Value v = set.getValue( name );
			vals[idx] = convertToBaseObject( v );

			idx++;
		}
		add( vals );
	}

	private static Object convertToBaseObject( Value v ) {
		if ( null == v || v instanceof URI ) {
			return v;
		}

		if ( v instanceof Literal ) {
			Literal l = Literal.class.cast( v );
			return RDFDatatypeTools.getObjectFromValue( l );
		}
		return v;
	}

	public String[] getVariables() {
		return this.getBindingNames().toArray( new String[0] );
	}
}