package uk.ac.imperial.lsds.streamsql.expressions;
import java.util.ArrayList;
import java.util.List;
import uk.ac.imperial.lsds.seep.comm.serialization.DataTuple;
import uk.ac.imperial.lsds.streamsql.conversion.TypeConversion;
import uk.ac.imperial.lsds.streamsql.visitors.ValueExpressionVisitor;
public class ColumnReference<T extends Comparable<T>> implements IValueExpression<T> {
private static final long serialVersionUID = 1L;
private String _column;
private TypeConversion<T> _wrapper;
public ColumnReference(TypeConversion<T> wrapper, String column) {
_column = column;
_wrapper = wrapper;
}
@Override
public void accept(ValueExpressionVisitor vev) {
vev.visit(this);
}
@Override
public void changeValues(int i, IValueExpression<T> newExpr) {
// nothing
}
@Override
public T eval(DataTuple tuple) {
final String value = tuple.getValue(_column).toString();
return _wrapper.fromString(value);
}
@Override
public String evalString(DataTuple tuple) {
return tuple.getValue(_column).toString();
}
public String getColumn() {
return _column;
}
@Override
public List<IValueExpression> getInnerExpressions() {
return new ArrayList<IValueExpression>();
}
@Override
public TypeConversion getType() {
return _wrapper;
}
@Override
public void inverseNumber() {
// nothing
}
@Override
public boolean isNegative() {
return false;
}
public void setColumn(String column) {
_column = column;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
if (_column != null)
sb.append("\"").append(_column).append("\"");
return sb.toString();
}
}