Class Field

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable

    public class Field
    extends java.lang.Object
    implements java.lang.Cloneable, java.io.Serializable
    This contains the list of pluggable validators to run on a field and any message information and variables to perform the validations and generate error messages. Instances of this class are configured with a <field> xml element.

    The use of FastHashMap is deprecated and will be replaced in a future release.

    Version:
    $Revision: 1713331 $
    See Also:
    Form, Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.util.Map<java.lang.String,​Arg>[] args
      Holds Maps of arguments.
      protected boolean clientValidation
      The flag that indicates whether scripting should be generated by the client for client-side validation.
      private static java.lang.String DEFAULT_ARG
      This is the value that will be used as a key if the Arg name field has no value.
      private java.util.List<java.lang.String> dependencyList
      Internal representation of this.depends String as a List.
      protected java.lang.String depends
      A comma separated list of validator's this field depends on.
      protected int fieldOrder
      The order of the Field in the Form.
      protected org.apache.commons.collections.FastHashMap hMsgs
      Deprecated.
      Subclasses should use getMsgMap() instead.
      protected org.apache.commons.collections.FastHashMap hVars
      Deprecated.
      Subclasses should use getVarMap() instead.
      protected java.lang.String indexedListProperty
      The Field's indexed list property name.
      protected java.lang.String indexedProperty
      The Field's indexed property name.
      protected java.lang.String key
      The Field's unique key.
      protected int page
      The Page Number
      protected java.lang.String property
      The Field's property name.
      private static long serialVersionUID  
      protected static java.lang.String TOKEN_END
      The end of a token.
      static java.lang.String TOKEN_INDEXED
      This indicates an indexed property is being referenced.
      protected static java.lang.String TOKEN_START
      The start of a token.
      protected static java.lang.String TOKEN_VAR
      A Vriable token.
    • Constructor Summary

      Constructors 
      Constructor Description
      Field()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addArg​(Arg arg)
      Add an Arg to the replacement argument list.
      void addMsg​(Msg msg)
      Add a Msg to the Field.
      void addVar​(java.lang.String name, java.lang.String value, java.lang.String jsType)
      Add a Var, based on the values passed in, to the Field.
      void addVar​(Var v)
      Add a Var to the Field.
      java.lang.Object clone()
      Creates and returns a copy of this object.
      private void determineArgPosition​(Arg arg)
      Calculate the position of the Arg
      private void ensureArgsCapacity​(Arg arg)
      Ensures that the args array can hold the given arg.
      void generateKey()
      Generate correct key value.
      Arg getArg​(int position)
      Gets the default Arg object at the given position.
      Arg getArg​(java.lang.String key, int position)
      Gets the Arg object at the given position.
      Arg[] getArgs​(java.lang.String key)
      Retrieves the Args for the given validator name.
      java.util.List<java.lang.String> getDependencyList()
      Gets an unmodifiable List of the dependencies in the same order they were defined in parameter passed to the setDepends() method.
      java.lang.String getDepends()
      Gets the validation rules for this field as a comma separated list.
      int getFieldOrder()
      Gets the position of the Field in the validation list.
      java.lang.String getIndexedListProperty()
      Gets the indexed property name of the field.
      java.lang.String getIndexedProperty()
      Gets the indexed property name of the field.
      (package private) java.lang.Object[] getIndexedProperty​(java.lang.Object bean)
      Returns an indexed property from the object we're validating.
      private int getIndexedPropertySize​(java.lang.Object bean)
      Returns the size of an indexed property from the object we're validating.
      java.lang.String getKey()
      Gets a unique key based on the property and indexedProperty fields.
      Msg getMessage​(java.lang.String key)
      Retrieve a message object.
      java.util.Map<java.lang.String,​Msg> getMessages()
      The Field's messages are returned as an unmodifiable Map.
      java.lang.String getMsg​(java.lang.String key)
      Retrieve a message value.
      protected java.util.Map<java.lang.String,​Msg> getMsgMap()
      Returns a Map of String Msg names to Msg objects.
      int getPage()
      Gets the page value that the Field is associated with for validation.
      java.lang.String getProperty()
      Gets the property name of the field.
      Var getVar​(java.lang.String mainKey)
      Retrieve a variable.
      protected java.util.Map<java.lang.String,​Var> getVarMap()
      Returns a Map of String Var names to Var objects.
      java.util.Map<java.lang.String,​Var> getVars()
      The Field's variables are returned as an unmodifiable Map.
      java.lang.String getVarValue​(java.lang.String mainKey)
      Retrieve a variable's value.
      private void handleMissingAction​(java.lang.String name)
      Called when a validator name is used in a depends clause but there is no know ValidatorAction configured for that name.
      boolean isClientValidation()
      Determines whether client-side scripting should be generated for this field.
      boolean isDependency​(java.lang.String validatorName)
      Checks if the validator is listed as a dependency.
      boolean isIndexed()
      If there is a value specified for the indexedProperty field then true will be returned.
      (package private) void process​(java.util.Map<java.lang.String,​java.lang.String> globalConstants, java.util.Map<java.lang.String,​java.lang.String> constants)
      Replace constants with values in fields and process the depends field to create the dependency Map.
      private void processArg​(java.lang.String key, java.lang.String replaceValue)
      Replace the arg Collection key value with the key/value pairs passed in.
      private void processMessageComponents​(java.lang.String key, java.lang.String replaceValue)
      Replace the args key value with the key/value pairs passed in.
      private void processVars​(java.lang.String key, java.lang.String replaceValue)
      Replace the vars value with the key/value pairs passed in.
      private boolean runDependentValidators​(ValidatorAction va, ValidatorResults results, java.util.Map<java.lang.String,​ValidatorAction> actions, java.util.Map<java.lang.String,​java.lang.Object> params, int pos)
      Calls all of the validators that this validator depends on.
      void setClientValidation​(boolean clientValidation)
      Sets the flag that determines whether client-side scripting should be generated for this field.
      void setDepends​(java.lang.String depends)
      Sets the validation rules for this field as a comma separated list.
      void setFieldOrder​(int fieldOrder)
      Sets the position of the Field in the validation list.
      void setIndexedListProperty​(java.lang.String indexedListProperty)
      Sets the indexed property name of the field.
      void setIndexedProperty​(java.lang.String indexedProperty)
      Sets the indexed property name of the field.
      void setKey​(java.lang.String key)
      Sets a unique key for the field.
      void setPage​(int page)
      Sets the page value that the Field is associated with for validation.
      void setProperty​(java.lang.String property)
      Sets the property name of the field.
      java.lang.String toString()
      Returns a string representation of the object.
      ValidatorResults validate​(java.util.Map<java.lang.String,​java.lang.Object> params, java.util.Map<java.lang.String,​ValidatorAction> actions)
      Run the configured validations on this field.
      private boolean validateForRule​(ValidatorAction va, ValidatorResults results, java.util.Map<java.lang.String,​ValidatorAction> actions, java.util.Map<java.lang.String,​java.lang.Object> params, int pos)
      Executes the given ValidatorAction and all ValidatorActions that it depends on.
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • DEFAULT_ARG

        private static final java.lang.String DEFAULT_ARG
        This is the value that will be used as a key if the Arg name field has no value.
        See Also:
        Constant Field Values
      • TOKEN_INDEXED

        public static final java.lang.String TOKEN_INDEXED
        This indicates an indexed property is being referenced.
        See Also:
        Constant Field Values
      • TOKEN_START

        protected static final java.lang.String TOKEN_START
        The start of a token.
        See Also:
        Constant Field Values
      • TOKEN_END

        protected static final java.lang.String TOKEN_END
        The end of a token.
        See Also:
        Constant Field Values
      • TOKEN_VAR

        protected static final java.lang.String TOKEN_VAR
        A Vriable token.
        See Also:
        Constant Field Values
      • property

        protected java.lang.String property
        The Field's property name.
      • indexedProperty

        protected java.lang.String indexedProperty
        The Field's indexed property name.
      • indexedListProperty

        protected java.lang.String indexedListProperty
        The Field's indexed list property name.
      • key

        protected java.lang.String key
        The Field's unique key.
      • depends

        protected java.lang.String depends
        A comma separated list of validator's this field depends on.
      • page

        protected int page
        The Page Number
      • clientValidation

        protected boolean clientValidation
        The flag that indicates whether scripting should be generated by the client for client-side validation.
        Since:
        Validator 1.4
      • fieldOrder

        protected int fieldOrder
        The order of the Field in the Form.
      • dependencyList

        private final java.util.List<java.lang.String> dependencyList
        Internal representation of this.depends String as a List. This List gets updated whenever setDepends() gets called. This List is synchronized so a call to setDepends() (which clears the List) won't interfere with a call to isDependency().
      • hVars

        protected org.apache.commons.collections.FastHashMap hVars
        Deprecated.
        Subclasses should use getVarMap() instead.
      • hMsgs

        protected org.apache.commons.collections.FastHashMap hMsgs
        Deprecated.
        Subclasses should use getMsgMap() instead.
      • args

        protected java.util.Map<java.lang.String,​Arg>[] args
        Holds Maps of arguments. args[0] returns the Map for the first replacement argument. Start with a 0 length array so that it will only grow to the size of the highest argument position.
        Since:
        Validator 1.1
    • Constructor Detail

      • Field

        public Field()
    • Method Detail

      • getPage

        public int getPage()
        Gets the page value that the Field is associated with for validation.
        Returns:
        The page number.
      • setPage

        public void setPage​(int page)
        Sets the page value that the Field is associated with for validation.
        Parameters:
        page - The page number.
      • getFieldOrder

        public int getFieldOrder()
        Gets the position of the Field in the validation list.
        Returns:
        The field position.
      • setFieldOrder

        public void setFieldOrder​(int fieldOrder)
        Sets the position of the Field in the validation list.
        Parameters:
        fieldOrder - The field position.
      • getProperty

        public java.lang.String getProperty()
        Gets the property name of the field.
        Returns:
        The field's property name.
      • setProperty

        public void setProperty​(java.lang.String property)
        Sets the property name of the field.
        Parameters:
        property - The field's property name.
      • getIndexedProperty

        public java.lang.String getIndexedProperty()
        Gets the indexed property name of the field. This is the method name that can take an int as a parameter for indexed property value retrieval.
        Returns:
        The field's indexed property name.
      • setIndexedProperty

        public void setIndexedProperty​(java.lang.String indexedProperty)
        Sets the indexed property name of the field.
        Parameters:
        indexedProperty - The field's indexed property name.
      • getIndexedListProperty

        public java.lang.String getIndexedListProperty()
        Gets the indexed property name of the field. This is the method name that will return an array or a Collection used to retrieve the list and then loop through the list performing the specified validations.
        Returns:
        The field's indexed List property name.
      • setIndexedListProperty

        public void setIndexedListProperty​(java.lang.String indexedListProperty)
        Sets the indexed property name of the field.
        Parameters:
        indexedListProperty - The field's indexed List property name.
      • getDepends

        public java.lang.String getDepends()
        Gets the validation rules for this field as a comma separated list.
        Returns:
        A comma separated list of validator names.
      • setDepends

        public void setDepends​(java.lang.String depends)
        Sets the validation rules for this field as a comma separated list.
        Parameters:
        depends - A comma separated list of validator names.
      • addMsg

        public void addMsg​(Msg msg)
        Add a Msg to the Field.
        Parameters:
        msg - A validation message.
      • getMsg

        public java.lang.String getMsg​(java.lang.String key)
        Retrieve a message value.
        Parameters:
        key - Validation key.
        Returns:
        A validation message for a specified validator.
      • getMessage

        public Msg getMessage​(java.lang.String key)
        Retrieve a message object.
        Parameters:
        key - Validation key.
        Returns:
        A validation message for a specified validator.
        Since:
        Validator 1.1.4
      • getMessages

        public java.util.Map<java.lang.String,​Msg> getMessages()
        The Field's messages are returned as an unmodifiable Map.
        Returns:
        Map of validation messages for the field.
        Since:
        Validator 1.1.4
      • isClientValidation

        public boolean isClientValidation()
        Determines whether client-side scripting should be generated for this field. The default is true
        Returns:
        true for scripting; otherwise false
        Since:
        Validator 1.4
        See Also:
        setClientValidation(boolean)
      • setClientValidation

        public void setClientValidation​(boolean clientValidation)
        Sets the flag that determines whether client-side scripting should be generated for this field.
        Parameters:
        clientValidation - the scripting flag
        Since:
        Validator 1.4
        See Also:
        isClientValidation()
      • addArg

        public void addArg​(Arg arg)
        Add an Arg to the replacement argument list.
        Parameters:
        arg - Validation message's argument.
        Since:
        Validator 1.1
      • determineArgPosition

        private void determineArgPosition​(Arg arg)
        Calculate the position of the Arg
      • ensureArgsCapacity

        private void ensureArgsCapacity​(Arg arg)
        Ensures that the args array can hold the given arg. Resizes the array as necessary.
        Parameters:
        arg - Determine if the args array is long enough to store this arg's position.
      • getArg

        public Arg getArg​(int position)
        Gets the default Arg object at the given position.
        Parameters:
        position - Validation message argument's position.
        Returns:
        The default Arg or null if not found.
        Since:
        Validator 1.1
      • getArg

        public Arg getArg​(java.lang.String key,
                          int position)
        Gets the Arg object at the given position. If the key finds a null value then the default value will be retrieved.
        Parameters:
        key - The name the Arg is stored under. If not found, the default Arg for the given position (if any) will be retrieved.
        position - The Arg number to find.
        Returns:
        The Arg with the given name and position or null if not found.
        Since:
        Validator 1.1
      • getArgs

        public Arg[] getArgs​(java.lang.String key)
        Retrieves the Args for the given validator name.
        Parameters:
        key - The validator's args to retrieve.
        Returns:
        An Arg[] sorted by the Args' positions (i.e. the Arg at index 0 has a position of 0).
        Since:
        Validator 1.1.1
      • addVar

        public void addVar​(Var v)
        Add a Var to the Field.
        Parameters:
        v - The Validator Argument.
      • addVar

        public void addVar​(java.lang.String name,
                           java.lang.String value,
                           java.lang.String jsType)
        Add a Var, based on the values passed in, to the Field.
        Parameters:
        name - Name of the validation.
        value - The Argument's value.
        jsType - The Javascript type.
      • getVar

        public Var getVar​(java.lang.String mainKey)
        Retrieve a variable.
        Parameters:
        mainKey - The Variable's key
        Returns:
        the Variable
      • getVarValue

        public java.lang.String getVarValue​(java.lang.String mainKey)
        Retrieve a variable's value.
        Parameters:
        mainKey - The Variable's key
        Returns:
        the Variable's value
      • getVars

        public java.util.Map<java.lang.String,​Var> getVars()
        The Field's variables are returned as an unmodifiable Map.
        Returns:
        the Map of Variable's for a Field.
      • getKey

        public java.lang.String getKey()
        Gets a unique key based on the property and indexedProperty fields.
        Returns:
        a unique key for the field.
      • setKey

        public void setKey​(java.lang.String key)
        Sets a unique key for the field. This can be used to change the key temporarily to have a unique key for an indexed field.
        Parameters:
        key - a unique key for the field
      • isIndexed

        public boolean isIndexed()
        If there is a value specified for the indexedProperty field then true will be returned. Otherwise it will be false.
        Returns:
        Whether the Field is indexed.
      • generateKey

        public void generateKey()
        Generate correct key value.
      • process

        void process​(java.util.Map<java.lang.String,​java.lang.String> globalConstants,
                     java.util.Map<java.lang.String,​java.lang.String> constants)
        Replace constants with values in fields and process the depends field to create the dependency Map.
      • processVars

        private void processVars​(java.lang.String key,
                                 java.lang.String replaceValue)
        Replace the vars value with the key/value pairs passed in.
      • processMessageComponents

        private void processMessageComponents​(java.lang.String key,
                                              java.lang.String replaceValue)
        Replace the args key value with the key/value pairs passed in.
      • processArg

        private void processArg​(java.lang.String key,
                                java.lang.String replaceValue)
        Replace the arg Collection key value with the key/value pairs passed in.
      • isDependency

        public boolean isDependency​(java.lang.String validatorName)
        Checks if the validator is listed as a dependency.
        Parameters:
        validatorName - Name of the validator to check.
        Returns:
        Whether the field is dependant on a validator.
      • getDependencyList

        public java.util.List<java.lang.String> getDependencyList()
        Gets an unmodifiable List of the dependencies in the same order they were defined in parameter passed to the setDepends() method.
        Returns:
        A list of the Field's dependancies.
      • clone

        public java.lang.Object clone()
        Creates and returns a copy of this object.
        Overrides:
        clone in class java.lang.Object
        Returns:
        A copy of the Field.
      • toString

        public java.lang.String toString()
        Returns a string representation of the object.
        Overrides:
        toString in class java.lang.Object
        Returns:
        A string representation of the object.
      • getIndexedProperty

        java.lang.Object[] getIndexedProperty​(java.lang.Object bean)
                                       throws ValidatorException
        Returns an indexed property from the object we're validating.
        Parameters:
        bean - The bean to extract the indexed values from.
        Throws:
        ValidatorException - If there's an error looking up the property or, the property found is not indexed.
      • getIndexedPropertySize

        private int getIndexedPropertySize​(java.lang.Object bean)
                                    throws ValidatorException
        Returns the size of an indexed property from the object we're validating.
        Parameters:
        bean - The bean to extract the indexed values from.
        Throws:
        ValidatorException - If there's an error looking up the property or, the property found is not indexed.
      • validateForRule

        private boolean validateForRule​(ValidatorAction va,
                                        ValidatorResults results,
                                        java.util.Map<java.lang.String,​ValidatorAction> actions,
                                        java.util.Map<java.lang.String,​java.lang.Object> params,
                                        int pos)
                                 throws ValidatorException
        Executes the given ValidatorAction and all ValidatorActions that it depends on.
        Returns:
        true if the validation succeeded.
        Throws:
        ValidatorException
      • runDependentValidators

        private boolean runDependentValidators​(ValidatorAction va,
                                               ValidatorResults results,
                                               java.util.Map<java.lang.String,​ValidatorAction> actions,
                                               java.util.Map<java.lang.String,​java.lang.Object> params,
                                               int pos)
                                        throws ValidatorException
        Calls all of the validators that this validator depends on. TODO ValidatorAction should know how to run its own dependencies.
        Parameters:
        va - Run dependent validators for this action.
        results -
        actions -
        pos -
        Returns:
        true if all of the dependent validations passed.
        Throws:
        ValidatorException - If there's an error running a validator
      • validate

        public ValidatorResults validate​(java.util.Map<java.lang.String,​java.lang.Object> params,
                                         java.util.Map<java.lang.String,​ValidatorAction> actions)
                                  throws ValidatorException
        Run the configured validations on this field. Run all validations in the depends clause over each item in turn, returning when the first one fails.
        Parameters:
        params - A Map of parameter class names to parameter values to pass into validation methods.
        actions - A Map of validator names to ValidatorAction objects.
        Returns:
        A ValidatorResults object containing validation messages for this field.
        Throws:
        ValidatorException - If an error occurs during validation.
      • handleMissingAction

        private void handleMissingAction​(java.lang.String name)
                                  throws ValidatorException
        Called when a validator name is used in a depends clause but there is no know ValidatorAction configured for that name.
        Parameters:
        name - The name of the validator in the depends list.
        Throws:
        ValidatorException
      • getMsgMap

        protected java.util.Map<java.lang.String,​Msg> getMsgMap()
        Returns a Map of String Msg names to Msg objects.
        Returns:
        A Map of the Field's messages.
        Since:
        Validator 1.2.0
      • getVarMap

        protected java.util.Map<java.lang.String,​Var> getVarMap()
        Returns a Map of String Var names to Var objects.
        Returns:
        A Map of the Field's variables.
        Since:
        Validator 1.2.0