package ql.value; import ql.Value; import ql.ast.QLType; import ql.ast.type.QLBoolean; public class BooleanValue implements Value { private final boolean value; @Override public boolean isUndefined() { return false; } @Override public boolean isNumeric() { return false; } public BooleanValue(Boolean value) { this.value = value; } @Override public Boolean getPrimitive() { return this.value; } @Override public QLType getType() { return new QLBoolean(); } @Override public Value add(Value argument) { throw new UnsupportedOperationException("Cannot add to a Boolean."); } @Override public Value addInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value addFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value divide(Value argument) { throw new UnsupportedOperationException("Cannot divideide a Boolean."); } @Override public Value divideInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value divideFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value multiply(Value argument) { throw new UnsupportedOperationException("Cannot multiplytiply by a Boolean."); } @Override public Value multiplyInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value multiplyFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value subtract(Value argument) { throw new UnsupportedOperationException("Cannot subtracttract from a Boolean."); } @Override public Value subtractInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value subtractFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value not() { return new BooleanValue(!getPrimitive()); } @Override public Value positive() { throw new UnsupportedOperationException(); } @Override public Value negative() { throw new UnsupportedOperationException(); } @Override public Value or(Value argument) { return argument.orBoolean(this); } @Override public Value orBoolean(BooleanValue argument) { return new BooleanValue(argument.getPrimitive() || getPrimitive()); } @Override public Value notEqualTo(Value argument) { return argument.notEqualToBoolean(this); } @Override public Value notEqualToBoolean(BooleanValue argument) { return new BooleanValue(argument.getPrimitive() != getPrimitive()); } @Override public Value notEqualToInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualToFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualToString(StringValue argument) { throw new UnsupportedOperationException(); } @Override public Value lowerThan(Value argument) { throw new UnsupportedOperationException(); } @Override public Value lowerThanInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value lowerThanFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value lowerOrEqual(Value argument) { throw new UnsupportedOperationException(); } @Override public Value lowerOrEqualInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value lowerOrEqualFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value greaterThan(Value argument) { throw new UnsupportedOperationException(); } @Override public Value greaterThanInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value greaterThanFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value greaterOrEqual(Value argument) { throw new UnsupportedOperationException(); } @Override public Value greaterOrEqualThanInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value greaterOrEqualThanFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalTo(Value argument) { return argument.equalToBoolean(this); } @Override public Value equalToBoolean(BooleanValue argument) { return new BooleanValue(argument.getPrimitive() == getPrimitive()); } @Override public Value equalToInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalToFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalToString(StringValue argument) { throw new UnsupportedOperationException(); } @Override public Value and(Value argument) { return argument.andBoolean(this); } @Override public Value andBoolean(BooleanValue argument) { return new BooleanValue(argument.getPrimitive() && getPrimitive()); } @Override public int hashCode() { return Boolean.hashCode(value); } @Override public boolean equals(Object obj) { if(obj instanceof BooleanValue) { return getPrimitive().equals(((BooleanValue) obj).getPrimitive()); } return false; } @Override public String toString() { return getPrimitive().toString(); } }