package org.neo4j.rdf.sparql; import java.util.LinkedList; import java.util.List; import name.levering.ryan.sparql.common.RdfBindingRow; import name.levering.ryan.sparql.common.RdfBindingSet; import name.levering.ryan.sparql.common.Variable; import org.neo4j.graphmatching.PatternElement; import org.neo4j.graphmatching.PatternMatch; import org.openrdf.model.Value; public class Neo4jBindingRow implements RdfBindingRow { private Neo4jRdfBindingSet bindingSet; private PatternMatch match; Neo4jBindingRow( Neo4jRdfBindingSet bindingSet, PatternMatch match ) { this.bindingSet = bindingSet; this.match = match; } public RdfBindingSet getParentSet() { return this.bindingSet; } public Value getValue( Variable variable ) { Neo4jVariable neo4jVariable = this.getNeo4jVariable( variable ); for ( PatternElement element : this.match.getElements() ) { if ( element.getPatternNode().getLabel().equals( neo4jVariable.getNode().getLabel() ) ) { if ( element.getNode().hasProperty( neo4jVariable.getProperty() ) ) { return new Neo4jValue( element.getNode().getProperty( neo4jVariable.getProperty() ) ); } // Value was optional so just break and return "" break; } } return new Neo4jValue( "" ); } private Neo4jVariable getNeo4jVariable( Variable variable ) { if ( variable instanceof Neo4jVariable ) { return ( Neo4jVariable ) variable; } for ( Neo4jVariable neo4jVariable : this.bindingSet.getVariables() ) { if ( neo4jVariable.getName().equals( variable.getName() ) ) { return neo4jVariable; } } throw new RuntimeException( "variable not found." ); } public List<Value> getValues() { List<Value> values = new LinkedList<Value>(); for ( Neo4jVariable variable : ( List<Neo4jVariable> ) this.getVariables() ) { for ( PatternElement element : this.match.getElements() ) { if ( variable.getNode().getLabel().equals( element.getPatternNode().getLabel() ) ) { values.add( new Neo4jValue( element.getNode().getProperty( variable.getProperty() ) ) ); break; } } } return values; } public List<? extends Variable> getVariables() { return this.bindingSet.getVariables(); } static class Neo4jValue implements Value { Object value; Neo4jValue( Object value ) { this.value = value; } @Override public String toString() { if ( value == null ) { return ""; } return value.toString(); } } }