in activemq-client/src/main/java/org/apache/activemq/filter/ComparisonExpression.java [398:515]
protected Boolean compare(Comparable lv, Comparable rv) {
Class<? extends Comparable> lc = lv.getClass();
Class<? extends Comparable> rc = rv.getClass();
// If the the objects are not of the same type,
// try to convert up to allow the comparison.
if (lc != rc) {
try {
if (lc == Boolean.class) {
if (convertStringExpressions && rc == String.class) {
lv = Boolean.valueOf((String) lv);
} else {
return Boolean.FALSE;
}
} else 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 if (convertStringExpressions && rc == String.class) {
rv = Byte.valueOf((String)rv);
} 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 if (convertStringExpressions && rc == String.class) {
rv = Short.valueOf((String)rv);
} 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 if (convertStringExpressions && rc == String.class) {
rv = Integer.valueOf((String)rv);
} 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 if (convertStringExpressions && rc == String.class) {
rv = Long.valueOf((String)rv);
} 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 if (convertStringExpressions && rc == String.class) {
rv = Float.valueOf((String)rv);
} 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 = (float) ((Number) rv).doubleValue();
} else if (convertStringExpressions && rc == String.class) {
rv = Double.valueOf((String)rv);
} else {
return Boolean.FALSE;
}
} else if (convertStringExpressions && lc == String.class) {
if (rc == Boolean.class) {
lv = Boolean.valueOf((String)lv);
} else if (rc == Byte.class) {
lv = Byte.valueOf((String)lv);
} else if (rc == Short.class) {
lv = Short.valueOf((String)lv);
} else if (rc == Integer.class) {
lv = Integer.valueOf((String)lv);
} else if (rc == Long.class) {
lv = Long.valueOf((String)lv);
} else if (rc == Float.class) {
lv = Float.valueOf((String)lv);
} else if (rc == Double.class) {
lv = Double.valueOf((String)lv);
} else {
return Boolean.FALSE;
}
} else {
return Boolean.FALSE;
}
} catch(NumberFormatException e) {
return Boolean.FALSE;
}
}
return asBoolean(lv.compareTo(rv)) ? Boolean.TRUE : Boolean.FALSE;
}