
com.weaverplatform.sp4rql.model.restriction.ValuesRestriction Maven / Gradle / Ivy
package com.weaverplatform.sp4rql.model.restriction;
import com.weaverplatform.sp4rql.error.ParseException;
import com.weaverplatform.sp4rql.model.scope.Sp4rqlScope;
import com.weaverplatform.sp4rql.model.token.Sp4rqlToken;
import com.weaverplatform.sp4rql.model.token.VariableToken;
import com.weaverplatform.util.IndentStringBuilder;
import java.util.ArrayList;
import java.util.HashSet;
public class ValuesRestriction implements Sp4rqlRestriction {
private ArrayList variables = new ArrayList<>();
private ArrayList> valueColumns = new ArrayList<>();
private int columnPointer = 0;
private String alias;
private Sp4rqlScope scope;
@Override
public void setAlias(String alias) {
this.alias = alias;
}
@Override
public String getAlias() {
return alias;
}
@Override
public void setInScope(Sp4rqlScope scope) {
this.scope = scope;
}
@Override
public Sp4rqlScope inScope() {
return scope;
}
public void addVariable(VariableToken token) {
if(valueColumns.isEmpty() || !valueColumns.get(0).isEmpty()) {
new ParseException("Can not add variable to a ValuesRestriction after adding values");
}
variables.add(token);
valueColumns.add(new ArrayList<>());
}
public void addValue(Sp4rqlToken value) {
if(valueColumns.isEmpty()) {
throw new ParseException("Can not add value when there is no variable defined");
}
valueColumns.get(columnPointer).add(value);
columnPointer = (columnPointer + 1) % valueColumns.size();
}
public void addRow() {
if(columnPointer != 0) {
throw new ParseException(String.format("Can not add new row, the current row has %d values but should have %d", columnPointer, variables.size()));
}
}
@Override
public HashSet getExposedVariables() {
HashSet tokens = new HashSet<>();
tokens.addAll(variables);
return tokens;
}
public ArrayList getValues(VariableToken binding) {
int index = variables.indexOf(binding);
return valueColumns.get(index);
}
public void buildString(IndentStringBuilder builder) {
builder.append("VALUES ( ");
builder.appendJoin(" ", variables.iterator());
builder.append(" ) { ");
for(int i = 0; i < valueColumns.get(0).size(); i++) {
builder.append("( ");
for(int j = 0; j < variables.size(); j++) {
Sp4rqlToken token = valueColumns.get(j).get(i);
token.buildString(builder);
builder.append(" ");
}
builder.append(") ");
}
builder.append("}");
builder.append(" # ");
builder.append(getAlias());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy