QueryExecutorAdapter.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;

import com.ostrichemulators.semtool.rdf.engine.api.QueryExecutor;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.List;
import org.apache.log4j.Logger;
import org.openrdf.model.Resource;

/**
 * A class that handles all the housekeeping of the QueryExecutor interface
 *
 * @author ryan
 * @param <T> the type of the result
 */
public abstract class QueryExecutorAdapter<T> extends AbstractBindable
		implements QueryExecutor<T> {

	private static final Logger log = Logger.getLogger( QueryExecutorAdapter.class );

	private final List<String> bindNames = new ArrayList<>();
	protected T result;

	public QueryExecutorAdapter() {
	}

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

	@Override
	public T getResults() {
		return result;
	}

	@Override
	public void start( List<String> bnames ) {
		bindNames.clear();
		bindNames.addAll( bnames );
	}

	public int getNumBindings() {
		return bindNames.size();
	}

	public List<String> getBindingNames() {
		return bindNames;
	}

	@Override
	public void done() {
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, boolean d ) {
		return (QueryExecutorAdapter<T>) super.bind( var, d );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, Date d ) {
		return (QueryExecutorAdapter<T>) super.bind( var, d );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, int d ) {
		return (QueryExecutorAdapter<T>) super.bind( var, d );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, double d ) {
		return (QueryExecutorAdapter<T>) super.bind( var, d );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, String s, String lang ) {
		return (QueryExecutorAdapter<T>) super.bind( var, s, lang );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, Resource r ) {
		return (QueryExecutorAdapter<T>) super.bind( var, r );
	}

	@Override
	public QueryExecutorAdapter<T> bind( String var, String s ) {
		return (QueryExecutorAdapter<T>) super.bind( var, s );
	}

	@Override
	public QueryExecutorAdapter<T> bindURI( String var, String basename, String localname ) {
		return (QueryExecutorAdapter<T>) super.bindURI( var, basename, localname );
	}

	@Override
	public QueryExecutorAdapter<T> bindURI( String var, String uri ) {
		return (QueryExecutorAdapter<T>) super.bindURI( var, uri );
	}

	public static XMLGregorianCalendar getCal( Date date ) {
		GregorianCalendar gCalendar = new GregorianCalendar();
		gCalendar.setTime( date );
		XMLGregorianCalendar xmlCalendar = null;
		try {
			xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar( gCalendar );
		}
		catch ( DatatypeConfigurationException ex ) {
			log.error( ex );
		}
		return xmlCalendar;
	}

	public static Date getDate( XMLGregorianCalendar cal ) {
		return cal.toGregorianCalendar().getTime();
	}
}