jeremy      2004/07/02 02:17:08

  Modified:    src/blocks/forms/java/org/apache/cocoon/forms/formmodel
                        BooleanField.java
                        BooleanFieldDefinitionBuilder.java
  Log:
  well, no one though anyone would need it, but we did ..... with Bruno's help, 
here is a validatable BooleanField.
  
  Revision  Changes    Path
  1.11      +36 -3     
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java
  
  Index: BooleanField.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BooleanField.java 7 May 2004 13:42:10 -0000       1.10
  +++ BooleanField.java 2 Jul 2004 09:17:08 -0000       1.11
  @@ -23,6 +23,10 @@
   import org.apache.cocoon.xml.XMLUtils;
   import org.xml.sax.ContentHandler;
   import org.xml.sax.SAXException;
  +import org.apache.cocoon.forms.validation.ValidationErrorAware;
  +import org.apache.cocoon.forms.validation.ValidationError;
  +
  +
   
   /**
    * A widget to select a boolean value. Usually rendered as a checkbox.
  @@ -37,13 +41,14 @@
    * 
    * @version $Id$
    */
  -public class BooleanField extends AbstractWidget implements 
ValueChangedListenerEnabled {
  +public class BooleanField extends AbstractWidget implements 
ValidationErrorAware, ValueChangedListenerEnabled {
       // FIXME(SW) : should the initial value be false or null ? This would 
allow
       // event listeners to be triggered at bind time.
       private Boolean value = Boolean.FALSE;
       private final BooleanFieldDefinition definition;
       /** Additional listeners to those defined as part of the widget 
definition (if any). */
       private ValueChangedListener listener;
  +    protected ValidationError validationError;
   
       public BooleanField(BooleanFieldDefinition definition) {
           this.definition = definition;
  @@ -54,6 +59,7 @@
       }
   
       public void readFromRequest(FormContext formContext) {
  +        validationError = null;
           Object oldValue = value;
           String param = 
formContext.getRequest().getParameter(getRequestParameterName());
           if (param != null && param.equalsIgnoreCase("true"))
  @@ -73,12 +79,33 @@
        */
       public boolean validate() {
           // a boolean field is always valid
  -        return true;
  +        //return true;
  +        return super.validate();
  +    }
  +
  +
  +    /**
  +     * Returns the validation error, if any. There will always be a 
validation error in case the
  +     * [EMAIL PROTECTED] #validate()} method returned false.
  +     */
  +    public ValidationError getValidationError() {
  +        return validationError;
  +    }
  +
  +    /**
  +     * Set a validation error on this field. This allows fields to be 
externally marked as invalid by
  +     * application logic.
  +     *
  +     * @param error the validation error
  +     */
  +    public void setValidationError(ValidationError error) {
  +        this.validationError = error;
       }
   
   
       private static final String BOOLEAN_FIELD_EL = "booleanfield";
       private static final String VALUE_EL = "value";
  +    private static final String VALIDATION_MSG_EL = "validation-message";
       
       /**
        * @return "booleanfield"
  @@ -93,6 +120,12 @@
           String stringValue = String.valueOf(value != null && 
value.booleanValue() == true? "true": "false");
           contentHandler.characters(stringValue.toCharArray(), 0, 
stringValue.length());
           contentHandler.endElement(Constants.INSTANCE_NS, VALUE_EL, 
Constants.INSTANCE_PREFIX_COLON + VALUE_EL);
  +        // validation message element: only present if the value is not valid
  +        if (validationError != null) {
  +            contentHandler.startElement(Constants.INSTANCE_NS, 
VALIDATION_MSG_EL, Constants.INSTANCE_PREFIX_COLON + VALIDATION_MSG_EL, 
XMLUtils.EMPTY_ATTRIBUTES);
  +            validationError.generateSaxFragment(contentHandler);
  +            contentHandler.endElement(Constants.INSTANCE_NS, 
VALIDATION_MSG_EL, Constants.INSTANCE_PREFIX_COLON + VALIDATION_MSG_EL);
  +        }
       }
   
       public Object getValue() {
  
  
  
  1.2       +2 -2      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java
  
  Index: BooleanFieldDefinitionBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BooleanFieldDefinitionBuilder.java        9 Mar 2004 10:33:49 -0000       
1.1
  +++ BooleanFieldDefinitionBuilder.java        2 Jul 2004 09:17:08 -0000       
1.2
  @@ -31,7 +31,7 @@
           setLocation(widgetElement, definition);
           setId(widgetElement, definition);
           setDisplayData(widgetElement, definition);
  -        
  +        setValidators(widgetElement, definition);
           Iterator iter = buildEventListeners(widgetElement, 
"on-value-changed", ValueChangedListener.class).iterator();
           while (iter.hasNext()) {
               
definition.addValueChangedListener((ValueChangedListener)iter.next());
  
  
  

Reply via email to