extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/plugins/cmd/FloatValidator.java

Code
Comments
Other
Rev Date Author Line
6200 08 Apr 21 nicklas 1 package net.sf.basedb.reggie.plugins.cmd;
6200 08 Apr 21 nicklas 2
6201 09 Apr 21 nicklas 3 import net.sf.basedb.core.DbControl;
6200 08 Apr 21 nicklas 4
6200 08 Apr 21 nicklas 5 /**
6200 08 Apr 21 nicklas 6   Validator for Float values. It supports both numeric and string
6200 08 Apr 21 nicklas 7   values in the JSON. String values are parsed with Float.parseFloat().
6200 08 Apr 21 nicklas 8   @since 4.32
6200 08 Apr 21 nicklas 9 */
6200 08 Apr 21 nicklas 10 public  class FloatValidator
6200 08 Apr 21 nicklas 11   implements ValueValidator<Object, Float>
6200 08 Apr 21 nicklas 12 {
6200 08 Apr 21 nicklas 13   
6205 12 Apr 21 nicklas 14   /**
6205 12 Apr 21 nicklas 15     Allow all values.
6205 12 Apr 21 nicklas 16    */
6200 08 Apr 21 nicklas 17   public static final FloatValidator INSTANCE = new FloatValidator();
6200 08 Apr 21 nicklas 18   
6205 12 Apr 21 nicklas 19   /**
6205 12 Apr 21 nicklas 20     All positive values >= 0.
6205 12 Apr 21 nicklas 21   */
6916 01 Dec 22 nicklas 22   public static final FloatValidator POSITIVE = new FloatValidator(0f, null, true);
6916 01 Dec 22 nicklas 23   
6916 01 Dec 22 nicklas 24   public static final FloatValidator POSITIVE_WARN = new FloatValidator(0f, null, false);
6205 12 Apr 21 nicklas 25
6510 03 Dec 21 nicklas 26   /**
6510 03 Dec 21 nicklas 27     Validator for RIN values that should be between 0 and 10.
6510 03 Dec 21 nicklas 28     @since 4.33.5
6510 03 Dec 21 nicklas 29   */
6916 01 Dec 22 nicklas 30   public static final FloatValidator RIN = new FloatValidator(0f, 10f, true);
6510 03 Dec 21 nicklas 31   
6916 01 Dec 22 nicklas 32   private final Float maxValue;
6916 01 Dec 22 nicklas 33   private final Float minValue;
6916 01 Dec 22 nicklas 34   private final boolean error;
6205 12 Apr 21 nicklas 35   
6200 08 Apr 21 nicklas 36   public FloatValidator() 
6916 01 Dec 22 nicklas 37   {
6916 01 Dec 22 nicklas 38     this(null, null, true);
6916 01 Dec 22 nicklas 39   }
6200 08 Apr 21 nicklas 40   
6205 12 Apr 21 nicklas 41   /**
6205 12 Apr 21 nicklas 42     Allow all values between min and max (inclusive).
6205 12 Apr 21 nicklas 43     Null values are allowed and mean no limit.
6205 12 Apr 21 nicklas 44   */
6916 01 Dec 22 nicklas 45   public FloatValidator(Float min, Float max, boolean error)
6205 12 Apr 21 nicklas 46   {
6205 12 Apr 21 nicklas 47     this.minValue = min;
6205 12 Apr 21 nicklas 48     this.maxValue = max;
6916 01 Dec 22 nicklas 49     this.error = error;
6205 12 Apr 21 nicklas 50   }
6205 12 Apr 21 nicklas 51   
6200 08 Apr 21 nicklas 52   @Override
6201 09 Apr 21 nicklas 53   public Float isValid(DbControl dc, Object value, JsonSection section, String entryKey)
6200 08 Apr 21 nicklas 54   {
6205 12 Apr 21 nicklas 55     Float result = null;
6916 01 Dec 22 nicklas 56     String msg = null;
6200 08 Apr 21 nicklas 57     if (value instanceof Number)
6200 08 Apr 21 nicklas 58     {
6205 12 Apr 21 nicklas 59       result = ((Number)value).floatValue();
6200 08 Apr 21 nicklas 60     }
6200 08 Apr 21 nicklas 61     else
6200 08 Apr 21 nicklas 62     {
6200 08 Apr 21 nicklas 63       try
6200 08 Apr 21 nicklas 64       {
6205 12 Apr 21 nicklas 65         result = Float.parseFloat(value.toString());
6200 08 Apr 21 nicklas 66       }
6200 08 Apr 21 nicklas 67       catch (Exception ex)
6200 08 Apr 21 nicklas 68       {
6916 01 Dec 22 nicklas 69         msg = "Invalid float in JSON: "+entryKey+"="+value;
6200 08 Apr 21 nicklas 70       }
6200 08 Apr 21 nicklas 71     }
6205 12 Apr 21 nicklas 72     if (result != null)
6205 12 Apr 21 nicklas 73     {
6205 12 Apr 21 nicklas 74       if (minValue != null && result < minValue)
6205 12 Apr 21 nicklas 75       {
6916 01 Dec 22 nicklas 76         msg = "Invalid value in JSON: "+entryKey+"="+value+" (expected >="+minValue+")";
6205 12 Apr 21 nicklas 77         result = null;
6205 12 Apr 21 nicklas 78       }
6205 12 Apr 21 nicklas 79       if (maxValue != null && result > maxValue)
6205 12 Apr 21 nicklas 80       {
6916 01 Dec 22 nicklas 81         msg = "Invalid value in JSON: "+entryKey+"="+value+" (expected <="+maxValue+")";
6205 12 Apr 21 nicklas 82         result = null;
6205 12 Apr 21 nicklas 83       }
6205 12 Apr 21 nicklas 84     }
6916 01 Dec 22 nicklas 85     if (msg != null)
6916 01 Dec 22 nicklas 86     {
6916 01 Dec 22 nicklas 87       if (error)
6916 01 Dec 22 nicklas 88       {
6916 01 Dec 22 nicklas 89         section.addErrorMessage(msg);
6916 01 Dec 22 nicklas 90       }
6916 01 Dec 22 nicklas 91       else
6916 01 Dec 22 nicklas 92       {
6916 01 Dec 22 nicklas 93         section.addWarningMessage(msg);
6916 01 Dec 22 nicklas 94       }
6916 01 Dec 22 nicklas 95     }
6205 12 Apr 21 nicklas 96     return result;
6200 08 Apr 21 nicklas 97   }
6200 08 Apr 21 nicklas 98
6200 08 Apr 21 nicklas 99   @Override
6200 08 Apr 21 nicklas 100   public Class<Object> getExpectedClass() 
6200 08 Apr 21 nicklas 101   {
6200 08 Apr 21 nicklas 102     return Object.class;
6200 08 Apr 21 nicklas 103   }
6200 08 Apr 21 nicklas 104
6200 08 Apr 21 nicklas 105 }