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

Code
Comments
Other
Rev Date Author Line
6501 02 Dec 21 nicklas 1 package net.sf.basedb.reggie.plugins.cmd;
6501 02 Dec 21 nicklas 2
6501 02 Dec 21 nicklas 3 import net.sf.basedb.core.DbControl;
6501 02 Dec 21 nicklas 4
6501 02 Dec 21 nicklas 5 /**
6501 02 Dec 21 nicklas 6   A validator implementation for handling null values.
6501 02 Dec 21 nicklas 7   Null valus can either be accepter, cause a warning
6501 02 Dec 21 nicklas 8   or cause an error. A parent validator can be specified
6501 02 Dec 21 nicklas 9   and this is called only if the value is not null.
6501 02 Dec 21 nicklas 10   @since 4.33.5
6501 02 Dec 21 nicklas 11 */
6501 02 Dec 21 nicklas 12 public class NullValidator<F, T>
6501 02 Dec 21 nicklas 13   implements ValueValidator<F, T>
6501 02 Dec 21 nicklas 14
6501 02 Dec 21 nicklas 15 {
6501 02 Dec 21 nicklas 16
6501 02 Dec 21 nicklas 17   /**
6501 02 Dec 21 nicklas 18     Null values are allowed and cause no warning or errors.
6501 02 Dec 21 nicklas 19   */
6501 02 Dec 21 nicklas 20   public static <F, T> NullValidator<F, T> allowNull(Class<F> expectedClass)
6501 02 Dec 21 nicklas 21   {
6501 02 Dec 21 nicklas 22     return new NullValidator<F, T>(null, expectedClass, false, false);
6501 02 Dec 21 nicklas 23   }
6501 02 Dec 21 nicklas 24   
6501 02 Dec 21 nicklas 25   /**
6501 02 Dec 21 nicklas 26     Null values are allowed and cause no warning or errors. The
6501 02 Dec 21 nicklas 27     parent validator is called for non-null values.
6501 02 Dec 21 nicklas 28   */
6501 02 Dec 21 nicklas 29   public static <F, T> NullValidator<F, T> allowNull(ValueValidator<F, T> parent)
6501 02 Dec 21 nicklas 30   {
6501 02 Dec 21 nicklas 31     return new NullValidator<F, T>(parent, null, false, false);
6501 02 Dec 21 nicklas 32   }
6501 02 Dec 21 nicklas 33   
6501 02 Dec 21 nicklas 34   /**
6501 02 Dec 21 nicklas 35     Null values cause a warning.
6501 02 Dec 21 nicklas 36   */
6501 02 Dec 21 nicklas 37   public static <F, T> NullValidator<F, T> warnIfNull(Class<F> expectedClass)
6501 02 Dec 21 nicklas 38   {
6501 02 Dec 21 nicklas 39     return new NullValidator<F, T>(null, expectedClass, true, false);
6501 02 Dec 21 nicklas 40   }
6501 02 Dec 21 nicklas 41
6501 02 Dec 21 nicklas 42   
6501 02 Dec 21 nicklas 43   /**
6501 02 Dec 21 nicklas 44     Null values cause a warning. The parent validator is called for non-null values.
6501 02 Dec 21 nicklas 45   */
6501 02 Dec 21 nicklas 46   public static <F, T> NullValidator<F, T> warnIfNull(ValueValidator<F, T> parent)
6501 02 Dec 21 nicklas 47   {
6501 02 Dec 21 nicklas 48     return new NullValidator<F, T>(parent, null, true, false);
6501 02 Dec 21 nicklas 49   }
6501 02 Dec 21 nicklas 50   
6501 02 Dec 21 nicklas 51   /**
6501 02 Dec 21 nicklas 52     Null values cause an error.
6501 02 Dec 21 nicklas 53   */
6501 02 Dec 21 nicklas 54   public static <F, T> NullValidator<F, T> errorIfNull(Class<F> expectedClass)
6501 02 Dec 21 nicklas 55   {
6501 02 Dec 21 nicklas 56     return new NullValidator<F, T>(null, expectedClass, false, true);
6501 02 Dec 21 nicklas 57   }
6501 02 Dec 21 nicklas 58
6501 02 Dec 21 nicklas 59   /**
6501 02 Dec 21 nicklas 60     Null values cause an error. The parent validator is called for non-null values.
6501 02 Dec 21 nicklas 61   */
6501 02 Dec 21 nicklas 62   public static <F, T> ValueValidator<F, T> errorIfNull(ValueValidator<F, T> parent)
6501 02 Dec 21 nicklas 63   {
6501 02 Dec 21 nicklas 64     return new NullValidator<F, T>(parent, null, false, true);
6501 02 Dec 21 nicklas 65   }
6501 02 Dec 21 nicklas 66   
6501 02 Dec 21 nicklas 67   private final ValueValidator<F, T> parent;
6501 02 Dec 21 nicklas 68   private final Class<F> expectedClass;
6501 02 Dec 21 nicklas 69   private final boolean warn;
6501 02 Dec 21 nicklas 70   private final boolean error;
6501 02 Dec 21 nicklas 71
6501 02 Dec 21 nicklas 72   private NullValidator(ValueValidator<F, T> parent, Class<F> expectedClass, boolean warn, boolean error) 
6501 02 Dec 21 nicklas 73   {
6501 02 Dec 21 nicklas 74     this.parent = parent;
6501 02 Dec 21 nicklas 75     this.expectedClass = parent != null ? parent.getExpectedClass() : expectedClass;
6501 02 Dec 21 nicklas 76     this.warn = warn;
6501 02 Dec 21 nicklas 77     this.error = error;
6501 02 Dec 21 nicklas 78   }
6501 02 Dec 21 nicklas 79   
6501 02 Dec 21 nicklas 80   @Override
6501 02 Dec 21 nicklas 81   public Class<F> getExpectedClass() 
6501 02 Dec 21 nicklas 82   {
6501 02 Dec 21 nicklas 83     return expectedClass;
6501 02 Dec 21 nicklas 84   }
6501 02 Dec 21 nicklas 85
6501 02 Dec 21 nicklas 86   @SuppressWarnings("unchecked")
6501 02 Dec 21 nicklas 87   @Override
6501 02 Dec 21 nicklas 88   public T isValid(DbControl dc, F value, JsonSection section, String entryKey) 
6501 02 Dec 21 nicklas 89   {
6501 02 Dec 21 nicklas 90     if (value != null) 
6501 02 Dec 21 nicklas 91     {
6501 02 Dec 21 nicklas 92       return parent == null ? (T)value : parent.isValid(dc, value, section, entryKey);
6501 02 Dec 21 nicklas 93     }
6501 02 Dec 21 nicklas 94     
6501 02 Dec 21 nicklas 95     if (error)
6501 02 Dec 21 nicklas 96     {
6501 02 Dec 21 nicklas 97       section.addErrorMessage("Missing value in JSON: "+entryKey);
6501 02 Dec 21 nicklas 98     }
6501 02 Dec 21 nicklas 99     else if (warn)
6501 02 Dec 21 nicklas 100     {
6501 02 Dec 21 nicklas 101       section.addWarningMessage("Missing value in JSON: "+entryKey);
6501 02 Dec 21 nicklas 102     }
6501 02 Dec 21 nicklas 103     return null;
6501 02 Dec 21 nicklas 104   }
6501 02 Dec 21 nicklas 105 }