package ql.value; import ql.Value; import ql.ast.QLType; import ql.ast.type.QLString; public class StringValue implements Value { private final String value; @Override public boolean isUndefined() { return false; } @Override public boolean isNumeric() { return false; } public StringValue(String value) { this.value = value; } @Override public String getPrimitive() { return value; } @Override public QLType getType() { return new QLString(); } @Override public Value add(Value argument) { throw new UnsupportedOperationException("Cannot add strings."); } @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(); } @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(); } @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(); } @Override public Value subtractInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value subtractFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value not() { throw new UnsupportedOperationException("Cannot negate a StringValue."); } @Override public Value positive() { throw new UnsupportedOperationException(); } @Override public Value negative() { throw new UnsupportedOperationException(); } @Override public Value or(Value argument) { throw new UnsupportedOperationException(); } @Override public Value orBoolean(BooleanValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualTo(Value argument) { return argument.notEqualToString(this); } @Override public Value notEqualToBoolean(BooleanValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualToInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualToFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value notEqualToString(StringValue argument) { return new BooleanValue(!argument.equals(this)); } @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.equalToString(this); } @Override public Value equalToBoolean(BooleanValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalToInteger(IntegerValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalToFloat(FloatValue argument) { throw new UnsupportedOperationException(); } @Override public Value equalToString(StringValue argument) { return new BooleanValue(argument.equals(this)); } @Override public Value and(Value argument) { throw new UnsupportedOperationException(); } @Override public Value andBoolean(BooleanValue argument) { throw new UnsupportedOperationException(); } @Override public int hashCode() { return value.hashCode(); } @Override public boolean equals(Object obj) { if(obj instanceof StringValue) { return getPrimitive().equals(((StringValue) obj).getPrimitive()); } return false; } @Override public String toString() { return "\"" + getPrimitive() + "\""; } }