package org.uva.student.calinwouter.qlqls.ql.types; import org.uva.student.calinwouter.qlqls.ql.interfaces.IAllowTypeChecker; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeCallback; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; public class BooleanValue extends Value { public static final ITypeDescriptor BOOL_VALUE_TYPE_DESCRIPTOR = new ITypeDescriptor() { public void callTypeMethod(final ITypeCallback typeCallback) { typeCallback.usesBoolean(); } public BooleanValue getDefaultValue() { return new BooleanValue(false); } public boolean isAllowed(IAllowTypeChecker allowTypeChecker) { return allowTypeChecker.allowsBooleanValue(); } @Override public String toString() { return "Boolean"; } @Override public boolean equals(final Object obj) { if (!(obj instanceof ITypeDescriptor)) { return false; } final ITypeDescriptor otherType = (ITypeDescriptor) obj; final Value otherDefaultValue = otherType.getDefaultValue(); final Value thisDefaultValue = getDefaultValue(); final BooleanValue equalityComparisonValue = otherDefaultValue.valueEquals(thisDefaultValue); return equalityComparisonValue.isTrue(); } }; @Override public Value or(Value value) { return new BooleanValue((Boolean) toJavaObject() || (Boolean) value.toJavaObject()); } @Override public Value and(Value value) { return new BooleanValue((Boolean) toJavaObject() && (Boolean) value.toJavaObject()); } @Override public BooleanValue not() { return new BooleanValue(!(Boolean) toJavaObject()); } @Override public void apply(ITypeCallback typeCallback) { typeCallback.usesBoolean(); } public boolean isTrue() { return (Boolean) toJavaObject(); } public BooleanValue(Boolean value) { super(value); } }