public boolean apply(ObjectName name) throws InvalidApplicationException, BadBinaryOpValueExpException, BadStringOperationException, BadAttributeValueExpException {
ValueExp testFirst = first.apply(name);
ValueExp testSecond = second.apply(name);
if (testFirst instanceof NumberValueExp)
{
switch (operation)
{
case Query.GT:
return ((NumberValueExp)testFirst).getDoubleValue() >
((NumberValueExp)testSecond).getDoubleValue();
case Query.GE:
return ((NumberValueExp)testFirst).getDoubleValue() >=
((NumberValueExp)testSecond).getDoubleValue();
case Query.LT:
return ((NumberValueExp)testFirst).getDoubleValue() <
((NumberValueExp)testSecond).getDoubleValue();
case Query.LE:
return ((NumberValueExp)testFirst).getDoubleValue() < =
((NumberValueExp)testSecond).getDoubleValue();
case Query.EQ:
return ((NumberValueExp)testFirst).getDoubleValue() ==
((NumberValueExp)testSecond).getDoubleValue();
}
}
else if (testFirst instanceof StringValueExp)
{
switch (operation)
{
case Query.GT:
return ((StringValueExp)testFirst).toString().compareTo(
((StringValueExp)testSecond).toString()) > 0;
case Query.GE:
return ((StringValueExp)testFirst).toString().compareTo(
((StringValueExp)testSecond).toString()) >= 0;
case Query.LT:
return ((StringValueExp)testFirst).toString().compareTo(
((StringValueExp)testSecond).toString()) < 0;
case Query.LE:
return ((StringValueExp)testFirst).toString().compareTo(
((StringValueExp)testSecond).toString()) < = 0;
case Query.EQ:
return ((StringValueExp)testFirst).toString().compareTo(
((StringValueExp)testSecond).toString()) == 0;
}
throw new BadStringOperationException("TODO");
}
else if (testFirst instanceof SingleValueExpSupport)
{
switch (operation)
{
case Query.EQ:
return ((SingleValueExpSupport)testFirst).getValue().equals(
((SingleValueExpSupport)testSecond).getValue());
}
}
// Review What happens now?
throw new BadBinaryOpValueExpException(testFirst);
}
|