in broker-core/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java [409:579]
protected Boolean compare(Comparable lv, Comparable rv)
{
Class lc = lv.getClass();
Class rc = rv.getClass();
// If the the objects are not of the same type,
// try to convert up to allow the comparison.
if (lc != rc)
{
if (lc == Byte.class)
{
if (rc == Short.class)
{
lv = ((Number) lv).shortValue();
}
else if (rc == Integer.class)
{
lv = ((Number) lv).intValue();
}
else if (rc == Long.class)
{
lv = ((Number) lv).longValue();
}
else if (rc == Float.class)
{
lv = ((Number) lv).floatValue();
}
else if (rc == Double.class)
{
lv = ((Number) lv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lc == Short.class)
{
if (rc == Integer.class)
{
lv = ((Number) lv).intValue();
}
else if (rc == Long.class)
{
lv = ((Number) lv).longValue();
}
else if (rc == Float.class)
{
lv = ((Number) lv).floatValue();
}
else if (rc == Double.class)
{
lv = ((Number) lv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lc == Integer.class)
{
if (rc == Long.class)
{
lv = ((Number) lv).longValue();
}
else if (rc == Float.class)
{
lv = ((Number) lv).floatValue();
}
else if (rc == Double.class)
{
lv = ((Number) lv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lc == Long.class)
{
if (rc == Integer.class)
{
rv = ((Number) rv).longValue();
}
else if (rc == Float.class)
{
lv = ((Number) lv).floatValue();
}
else if (rc == Double.class)
{
lv = ((Number) lv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lc == Float.class)
{
if (rc == Integer.class)
{
rv = ((Number) rv).floatValue();
}
else if (rc == Long.class)
{
rv = ((Number) rv).floatValue();
}
else if (rc == Double.class)
{
lv = ((Number) lv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lc == Double.class)
{
if (rc == Integer.class)
{
rv = ((Number) rv).doubleValue();
}
else if (rc == Long.class)
{
rv = ((Number) rv).doubleValue();
}
else if (rc == Float.class)
{
rv = ((Number) rv).doubleValue();
}
else
{
return Boolean.FALSE;
}
}
else if (lv instanceof Enum)
{
if (rv instanceof String)
{
try
{
rv = Enum.valueOf(lc, (String) rv);
}
catch (IllegalArgumentException e)
{
return Boolean.FALSE;
}
}
else
{
return Boolean.FALSE;
}
}
else if (lv instanceof String)
{
if (rv instanceof Enum)
{
lv = Enum.valueOf(rc, (String) lv);
}
else
{
return Boolean.FALSE;
}
}
else
{
return Boolean.FALSE;
}
}
return asBoolean(lv.compareTo(rv)) ? Boolean.TRUE : Boolean.FALSE;
}