package nl.uva.polyql.ast.values;
import nl.uva.polyql.ast.Question;
import nl.uva.polyql.ast.expressions.operations.BinaryOperator;
import nl.uva.polyql.ast.expressions.operations.UnaryOperator;
import nl.uva.polyql.view.NumberValueView;
import nl.uva.polyql.view.QuestionView;
public class NumberValue extends Value<Double> {
public NumberValue(final Double value) {
super(value);
}
@Override
public Type getType() {
return Type.NUMBER;
}
@Override
public QuestionView getView(final Question question) {
return new NumberValueView(question);
}
@Override
public void setViewValue(final QuestionView view) {
view.setComponentValue(this);
}
@Override
public Value<?> performOperationOnLeft(final BinaryOperator operator, final Value<?> rightValue) {
return rightValue.performOperationOnRight(this, operator);
}
@Override
public Value<?> performOperationOnRight(final NumberValue leftValue, final BinaryOperator operator) {
return operator.performOperation(leftValue, this);
}
@Override
public Value<?> performOperationOnRight(final StringValue leftValue, final BinaryOperator operator) {
return operator.performOperation(leftValue, this);
}
@Override
public Value<?> performUnaryOperation(final UnaryOperator operator) {
return operator.performOperation(this);
}
/**
* Parses the given user input as a number.
*
* @param input
* The user input
*
* @return The number value
*
* @throws NumberFormatException
* Thrown when the input could not be parsed as a number
*/
public static NumberValue parse(final String input) throws NumberFormatException {
return new NumberValue(Double.parseDouble(input));
}
}