package net.enilink.komma.internal.rdf4j.result; import java.util.List; import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.QueryEvaluationException; import org.eclipse.rdf4j.query.TupleQueryResult; import com.google.inject.Inject; import net.enilink.komma.core.IBindings; import net.enilink.komma.core.ITupleResult; import net.enilink.komma.core.IValue; import net.enilink.komma.core.LinkedHashBindings; import net.enilink.komma.rdf4j.RDF4JValueConverter; public class RDF4JTupleResult extends RDF4JResult<BindingSet, IBindings<IValue>> implements ITupleResult<IBindings<IValue>> { protected RDF4JValueConverter valueConverter; public RDF4JTupleResult(TupleQueryResult result) { super(result); } @Override protected IBindings<IValue> convert(BindingSet element) throws Exception { LinkedHashBindings<IValue> result = new LinkedHashBindings<IValue>( element.size()); for (String name : getBindingNames()) { IValue value = valueConverter.fromRdf4j(element.getValue(name)); if (value != null) { result.put(name, value); } } return result; } @Override public List<String> getBindingNames() { try { return ((TupleQueryResult) delegate).getBindingNames(); } catch (QueryEvaluationException e) { throw new RuntimeException(e); } } @Inject public void setValueConverter(RDF4JValueConverter valueConverter) { this.valueConverter = valueConverter; } }