public Bindings process(final Triple triple, final boolean failOnBlank,
final int id) {
final Bindings bindings = this.bindingsFactory.createInstance();
Literal literal = null;
// process all items of this triple pattern
for (int i = 0; i < 3; i++) {
if (this.bloomFilters != null) {
if (this.bloomFilters[i] != null) {
if (!this.bloomFilters[i]
.get((Math.abs(triple.getPos(i).hashCode()) % SIPFilterOperator.NUMBEROFBITSFORBLOOMFILTER))) {
return null;
}
}
}
// if the triple's node at the current position is a blank
// one which is not allowed due to the current configuration
// return null to indicate this problem
if (failOnBlank && triple.getPos(i).isBlank()) {
return null;
}
// if the item is a variable
if (this.items[i].isVariable()) {
// if the item is an unbound variable
final Variable item = triple.getVariable((Variable) this.items[i]);
if ((literal = bindings.get(item)) == null) {
bindings.add(item, triple.getPos(i));
}
// if the item is a variable which is already bound
// and the value differs from the value of the triple
// which would be used as binding, a conflict was
// detected
else if (!literal.valueEquals(triple.getPos(i))) {
return null; // join within triple pattern!
}
}
// if the item is no variable ...