Package rife.forms

Class AbstractFormBuilder

java.lang.Object
rife.forms.AbstractFormBuilder
All Implemented Interfaces:
Cloneable, FormBuilder
Direct Known Subclasses:
FormBuilderHtml, FormBuilderXml

public abstract class AbstractFormBuilder extends Object implements FormBuilder
  • Constructor Details

    • AbstractFormBuilder

      public AbstractFormBuilder()
  • Method Details

    • getIdName

      protected abstract String getIdName()
    • getIdAttributes

      protected abstract String getIdAttributes()
    • getIdValue

      protected abstract String getIdValue()
    • getIdMinlength

      protected abstract String getIdMinlength()
    • getIdMaxlength

      protected abstract String getIdMaxlength()
    • getIdRequired

      protected abstract String getIdRequired()
    • getIdChecked

      protected abstract String getIdChecked()
    • getIdOptions

      protected abstract String getIdOptions()
    • getIdSelected

      protected abstract String getIdSelected()
    • getIdLabel

      protected abstract String getIdLabel()
    • getIdDisabled

      protected abstract String getIdDisabled()
    • getIdFormOption

      protected abstract String getIdFormOption()
    • getValueSelected

      protected abstract String getValueSelected()
    • getValueChecked

      protected abstract String getValueChecked()
    • getBuilderTemplateInstance

      protected abstract Template getBuilderTemplateInstance()
    • sanitizeAttributes

      protected abstract String sanitizeAttributes(String value)
    • generateFieldHidden

      protected abstract void generateFieldHidden(Template template, String templateFieldName, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldInput

      protected abstract void generateFieldInput(Template template, String templateFieldName, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldSecret

      protected abstract void generateFieldSecret(Template template, String templateFieldName, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldTextarea

      protected abstract void generateFieldTextarea(Template template, String templateFieldName, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldRadio

      protected abstract void generateFieldRadio(Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldCheckbox

      protected abstract void generateFieldCheckbox(Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • getValidationBuilder

      public abstract ValidationBuilder getValidationBuilder()
      Description copied from interface: FormBuilder
      Returns the ValidationBuilder that is used by this FormBuilder.
      Specified by:
      getValidationBuilder in interface FormBuilder
      Returns:
      this FormBuilder's ValidationBuilder
    • generateForm

      public Collection<String> generateForm(Template template, Class beanClass, Map<String,String[]> values, String prefix) throws BeanUtilsException
      Description copied from interface: FormBuilder
      Generates all the form fields for a bean class.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateForm in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      beanClass - the bean class whose properties will be analyzed for the form generation
      values - a map of name-value pairs that indicate the currently active context for the form that will be generated, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form fields with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
      Throws:
      BeanUtilsException - when errors occurred during the form generation
    • generateForm

      public Collection<String> generateForm(Template template, Object bean, Map<String,String[]> values, String prefix) throws BeanUtilsException
      Description copied from interface: FormBuilder
      Generates all the form fields for a bean instance.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateForm in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      bean - the bean instance whose properties and validation errors will be analyzed for the form generation
      values - a map of name-value pairs that indicate the currently active context for the form that will be generated, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form fields with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
      Throws:
      BeanUtilsException - when errors occurred during the form generation
    • generateForm

      protected Collection<String> generateForm(Template template, Class beanClass, Object bean, Map<String,String[]> values, String prefix) throws BeanUtilsException
      Throws:
      BeanUtilsException
    • generateFormField

      protected void generateFormField(Template template, Constrained constrained, Class propertyType, String propertyName, String[] propertyValues, String prefix, ArrayList<String> setValues)
    • generateField

      public Collection<String> generateField(Template template, ConstrainedProperty property, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      property - the constrained property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • generateField

      public Collection<String> generateField(Template template, Class propertyType, ConstrainedProperty property, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      propertyType - the type of the property
      property - the constrained property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • replaceField

      public Collection<String> replaceField(Template template, String templateFieldName, ConstrainedProperty property, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.

      This method also adds a templateFieldName parameter. It allows you to use another property name for the template values than the one of the actual bean property. You will typically use this when you dynamically generate a form and iterate over the generation of certain fields. So, for example, when you have properties named answer1 and answer2, you can use this template snippet:

       <!--v answers/-->
       <!--b answer-->
       <!--v form:input:answer/-->
       <!--/b-->
       
      By using the replaceField(template, "answer", property, null, null) method call for each answer property and appending the answer block to the answers value, you can benefit from the automatic form field generation but still dynamically aggregate the results into one area.
      Specified by:
      replaceField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      templateFieldName - the name of the form field that will be used to look for supported value tags in the property template
      property - the constrained property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • replaceField

      public Collection<String> replaceField(Template template, String templateFieldName, Class propertyType, ConstrainedProperty property, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.

      The documentation of the previous replaceField method contains more information about the functionality of this method.

      Specified by:
      replaceField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      templateFieldName - the name of the form field that will be used to look for supported value tags in the property template
      propertyType - the type of the property
      property - the constrained property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • generateField

      protected Collection<String> generateField(Template template, String templateFieldName, Class propertyType, ConstrainedProperty property, String[] values, String prefix, ArrayList<String> setValues, boolean replaceExistingValues)
    • generateField

      public Collection<String> generateField(Template template, String name, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property name.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      name - the name of the property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • generateField

      public Collection<String> generateField(Template template, Class propertyType, String name, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property name.

      If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.

      Specified by:
      generateField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      propertyType - the type of the property
      name - the name of the property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
    • replaceField

      public Collection<String> replaceField(Template template, String templateFieldName, String name, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.

      The documentation of the previous replaceField method contains more information about the functionality of this method.

      Specified by:
      replaceField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      templateFieldName - the name of the form field that will be used to look for supported value tags in the property template
      name - the name of the property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
      See Also:
    • replaceField

      public Collection<String> replaceField(Template template, String templateFieldName, Class propertyType, String name, String[] values, String prefix)
      Description copied from interface: FormBuilder
      Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.

      The documentation of the previous replaceField method contains more information about the functionality of this method.

      Specified by:
      replaceField in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the form generation
      templateFieldName - the name of the form field that will be used to look for supported value tags in the property template
      propertyType - the type of the property
      name - the name of the property that the form field will be generated for
      values - the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.
      prefix - the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Returns:
      the collection of template value names that have been generated
      See Also:
    • generateField

      protected Collection<String> generateField(Template template, String templateFieldName, Class propertyType, String name, String[] values, String prefix, ArrayList<String> setValues, boolean replaceExistingValues)
    • generateField

      protected void generateField(Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, ArrayList<String> setValues, boolean replaceExistingValues)
    • generateFieldText

      protected void generateFieldText(String prefix, boolean setValue, boolean valueAsAttribute, boolean limitLength, boolean disableField, boolean requireField, Template template, String templateFieldName, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldCollection

      protected void generateFieldCollection(String prefix, boolean singleValue, Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, Template builderTemplate, List<String> setValues, boolean replaceExistingValues)
    • generateFieldSelect

      protected void generateFieldSelect(Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, Template builderTemplate, ArrayList<String> setValues, boolean replaceExistingValues)
    • generateFieldDisplay

      protected void generateFieldDisplay(Template template, String templateFieldName, Class propertyType, String name, ConstrainedProperty property, String[] values, Template builderTemplate, ArrayList<String> setValues, boolean replaceExistingValues)
    • generateLabel

      protected String generateLabel(Template template, String templateFieldName, String value) throws TemplateException
      Throws:
      TemplateException
    • removeForm

      public void removeForm(Template template, Class beanClass, String prefix) throws BeanUtilsException
      Description copied from interface: FormBuilder
      Removes the content of all the template values that would otherwise be filled in with generated form fields through the FormBuilder.generateForm(Template, Class, Map, String) method.
      Specified by:
      removeForm in interface FormBuilder
      Parameters:
      template - the template instance whose values will be cleared
      beanClass - the bean class whose properties will be analyzed for clearing the form field values
      prefix - the prefix of the bean property names that should be used while clearing the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      Throws:
      BeanUtilsException - when errors occurred during the clearing of the form
      See Also:
    • removeField

      public void removeField(Template template, String name, String prefix)
      Description copied from interface: FormBuilder
      Removes the content of the template value that would otherwise be filled in with a generated form field through a FormBuilder.generateField(rife.template.Template, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String) method.
      Specified by:
      removeField in interface FormBuilder
      Parameters:
      template - the template instance whose values will be cleared
      name - the name of the property for which the template value will be cleared
      prefix - the prefix of the bean property names that should be used while clearing the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names
      See Also:
    • removeField

      public void removeField(Template template, String templateFieldName)
      Description copied from interface: FormBuilder
      Removes the content of the template value that would otherwise be filled in with a generated form field through a FormBuilder.replaceField(rife.template.Template, java.lang.String, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String) method.
      Specified by:
      removeField in interface FormBuilder
      Parameters:
      template - the template instance whose values will be cleared
      templateFieldName - the that is use in the template values to identify the property that has to be cleared
      See Also:
    • selectParameter

      public Collection<String> selectParameter(Template template, String name, String[] values)
      Description copied from interface: FormBuilder
      Generates the required attributes so that an existing form field indicates its checked or selected status.

      This method will check the template for certain value tags and set them to the correct attributes according to the name and the provided values in this method. This is dependent on the template type and currently only makes sense for html templates.

      For example for select boxes, consider the name 'colors', the values 'blue' and 'red', and the following HTML template excerpt:

       <select name="colors">
         <option value="blue"{{v colors:blue:selected}}{{/v}}>Blue</option>
         <option value="orange"{{v colors:orange:selected}}{{/v}}>Orange</option>
         <option value="red"{{v colors:red:selected}}{{/v}}>Red</option>
         <option value="green"{{v colors:green:selected'}}{{/v}}>Green</option>
       </select>

      the result will then be:

       <select name="colors">
         <option value="blue" selected="selected">Blue</option>
         <option value="orange">Orange</option>
         <option value="red" selected="selected">Red</option>
         <option value="green">Green</option>
       </select>

      For example for radio buttons, consider the name 'size', the value 'large' and the following HTML template excerpt:

       <input type="radio" name="size" value="large"{{v size:large:checked}}{{/v}} />
       <input type="radio" name="size" value="small"{{v size:small:checked}}{{/v}} />
       

      the result will then be:

       <input type="radio" name="size" value="large" checked="checked" />
       <input type="radio" name="size" value="small" />
       

      For example for checkboxes, consider the name 'active', the value 'true' and the following HTML template excerpt:

       <input type="checkbox" name="active"{{v active:checked}}{{/v}} />
       <input type="checkbox" name="senditnow"{{v senditnow:checked}}{{/v}} />
       

      the result will then be:

       <input type="checkbox" name="active" checked="checked" />
       <input type="checkbox" name="senditnow" />
       
      Specified by:
      selectParameter in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the generation
      name - the name of the parameter
      values - the values of the parameter
      Returns:
      the collection of template value names that have been generated
    • unselectParameter

      public void unselectParameter(Template template, String name, String[] values)
      Description copied from interface: FormBuilder
      Removes the generated attributes that indicate that an existing form field is checked or selected
      Specified by:
      unselectParameter in interface FormBuilder
      Parameters:
      template - the template instance that will be used for the clearing
      name - the name of the parameter
      values - the values of the parameter
    • clone

      public Object clone()
      Specified by:
      clone in interface FormBuilder
      Overrides:
      clone in class Object