package eu.stratosphere.sopremo.expressions;
import eu.stratosphere.sopremo.EvaluationContext;
import eu.stratosphere.sopremo.EvaluationException;
import eu.stratosphere.sopremo.type.IJsonNode;
/**
* Represents all expressions which are not evaluable.
*/
@OptimizerHints(scope = Scope.ANY)
public class UnevaluableExpression extends EvaluationExpression {
/**
*
*/
private static final long serialVersionUID = 4981486971746131857L;
private final String message;
/**
* Initializes an UnevaluableExpression with the given message.
*
* @param message
* the message of this expression
*/
public UnevaluableExpression(final String message) {
this.message = message;
}
@Override
public boolean equals(final Object obj) {
if (!super.equals(obj))
return false;
final UnevaluableExpression other = (UnevaluableExpression) obj;
return this.message.equals(other.message);
}
@Override
public IJsonNode evaluate(final IJsonNode node, final IJsonNode target, final EvaluationContext context) {
throw new EvaluationException(this.message);
}
/*
* (non-Javadoc)
* @see
* eu.stratosphere.sopremo.expressions.EvaluationExpression#transformRecursively(eu.stratosphere.sopremo.expressions
* .TransformFunction)
*/
@Override
public EvaluationExpression transformRecursively(final TransformFunction function) {
return function.call(this);
}
@Override
public int hashCode() {
return 31 * super.hashCode() + this.message.hashCode();
}
@Override
public void toString(final StringBuilder builder) {
builder.append(this.message);
}
}