protected Boolean compare()

in artemis-selector/src/main/java/org/apache/activemq/artemis/selector/filter/ComparisonExpression.java [402: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) {
                  rv = Boolean.valueOf((String) rv);
               } 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 || 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 || rc == Long.class || rc == Float.class) {
                  rv = ((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;
   }