You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/06/16 22:57:10 UTC

cvs commit: jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator TestTranslatorBinding.java

hlship      2005/06/16 13:57:10

  Modified:    .        status.xml
               framework/src/java/org/apache/tapestry/form Form.js
                        TextField.jwc AbstractFormComponentContributor.java
                        TextArea.jwc DatePicker.jwc
                        ValidatableFieldSupportImpl.java
               framework/src/java/org/apache/tapestry/form/translator
                        AbstractTranslator.java StringTranslator.java
                        NumberTranslator.java FormatTranslator.java
                        DateTranslator.java
               framework/src/java/org/apache/tapestry/valid
                        ValidatorBinding.java
               src/documentation/content/xdocs/UsersGuide bindings.xml
               examples/Workbench/src/context/WEB-INF Fields.page
               framework/src/descriptor/META-INF tapestry.form.xml
               examples/Workbench/src/context Fields.html
               src/documentation/content/xdocs links.ent
               framework/src/java/org/apache/tapestry/form/validator
                        StringValidator.js
  Added:       framework/src/java/org/apache/tapestry/form/translator
                        TranslatorBindingFactory.java
                        TranslatorBinding.java
               framework/src/descriptor/META-INF
                        tapestry.form.translator.xml
               framework/src/test/org/apache/tapestry/form/translator
                        TestTranslatorBinding.java
  Log:
  Add translator binding prefix.
  
  Revision  Changes    Path
  1.134     +1 -0      jakarta-tapestry/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/status.xml,v
  retrieving revision 1.133
  retrieving revision 1.134
  diff -u -r1.133 -r1.134
  --- status.xml	16 Jun 2005 18:27:11 -0000	1.133
  +++ status.xml	16 Jun 2005 20:57:10 -0000	1.134
  @@ -82,6 +82,7 @@
           a failure instantiating a component class. </action>
          <action type="add" dev="PF">Refactored and expanded validation functionality to include DatePicker, PropertySelection, RadioGroup, Select, TextArea, TextField, Upload, contrib:Palette, and contrib:MultiplePropertySelection.</action>		
          <action type="update" dev="HLS">Rework form event management to be primarily a client-side concern.</action>
  +       <action type="add" dev="HLS">Add translator binding prefix.</action>
       </release>
       <release version="4.0-alpha-3" date="May 16 2005">
         <action type="add" dev="HLS">Add initial support for the validator: binding prefix.</action>
  
  
  
  1.4       +4 -6      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.js
  
  Index: Form.js
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.js,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Form.js	16 Jun 2005 18:27:11 -0000	1.3
  +++ Form.js	16 Jun 2005 20:57:10 -0000	1.4
  @@ -30,12 +30,10 @@
   
   function focus(field)
   {
  -    field.focus();
  + 	field.focus();
       
       if (field.select)
  -    {
           field.select();
  -    }
   }
   
   function trim(field)
  @@ -157,7 +155,7 @@
   	
   	if (event.abort == false)
   	{
  -	  this.form.mode.value = "cancel";
  +	  // this.form.mode.value = "cancel";
   	  this.form.onsubmit = null;
   	  this.form.submit();
   	}
  @@ -192,7 +190,7 @@
   	if (event.abort)
         return false;
   	  
  -	this.form.mode.value = "submit";
  +	// this.form.mode.value = "submit";
   	
   	return true;
   }
  @@ -228,7 +226,7 @@
   	if (event.abort)
   	  return;
   	  
  -    this.form.mode.value = "refresh";
  +    // this.form.mode.value = "refresh";
   	this.form.onsubmit = null;
   	this.form.submit();
   }
  
  
  
  1.8       +2 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextField.jwc
  
  Index: TextField.jwc
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextField.jwc,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TextField.jwc	16 Jun 2005 09:00:43 -0000	1.7
  +++ TextField.jwc	16 Jun 2005 20:57:10 -0000	1.8
  @@ -24,9 +24,7 @@
     <description>
       A text input field.
     </description>
  -
  -  <bean name="stringTranslator" class="org.apache.tapestry.form.translator.StringTranslator"></bean>
  -  
  + 
     <parameter name="value" required="yes" default-binding="ognl">
       <description>
         The text string to be read and updated.
  @@ -56,7 +54,7 @@
     
     <parameter name="required" default-binding="ognl"/>
     <parameter name="requiredMessage" default-binding="literal"/>
  -  <parameter name="translator" default-binding="ognl" default-value="bean:stringTranslator"/>
  +  <parameter name="translator" default-binding="translator" default-value="string"/>
     <parameter name="validators" default-binding="ognl"/>
     
     <reserved-parameter name="name"/>
  
  
  
  1.4       +11 -0     jakarta-tapestry/framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
  
  Index: AbstractFormComponentContributor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractFormComponentContributor.java	16 Jun 2005 14:46:18 -0000	1.3
  +++ AbstractFormComponentContributor.java	16 Jun 2005 20:57:10 -0000	1.4
  @@ -16,6 +16,7 @@
   
   import org.apache.hivemind.Resource;
   import org.apache.hivemind.util.ClasspathResource;
  +import org.apache.hivemind.util.PropertyUtils;
   import org.apache.tapestry.IForm;
   import org.apache.tapestry.IMarkupWriter;
   import org.apache.tapestry.IRequestCycle;
  @@ -32,6 +33,16 @@
   {
       private String _script = defaultScript();
       
  +    public AbstractFormComponentContributor()
  +    {        
  +    }
  +    
  +    // Needed until HIVEMIND-134 fix is available
  +    public AbstractFormComponentContributor(String initializer)
  +    {
  +        PropertyUtils.configureProperties(this, initializer);
  +    }
  +    
       /**
        * Defines the default JavaScript file used by this contributor
        */
  
  
  
  1.8       +2 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextArea.jwc
  
  Index: TextArea.jwc
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextArea.jwc,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TextArea.jwc	16 Jun 2005 09:00:43 -0000	1.7
  +++ TextArea.jwc	16 Jun 2005 20:57:10 -0000	1.8
  @@ -24,9 +24,7 @@
     <description>
     A multi-line text area.
     </description>
  -  
  -  <bean name="stringTranslator" class="org.apache.tapestry.form.translator.StringTranslator"></bean>
  -  
  +    
     <parameter name="value" default-binding="ognl" required="yes">
         <description>
             The multi-line string to be read and updated.
  @@ -48,7 +46,7 @@
   
     <parameter name="required" default-binding="ognl"/>
     <parameter name="requiredMessage" default-binding="literal"/>
  -  <parameter name="translator" default-binding="ognl" default-value="bean:stringTranslator"/>
  +  <parameter name="translator" default-binding="translator" default-value="string"/>
     <parameter name="validators" default-binding="ognl"/>
   
     <reserved-parameter name="name"/>
  
  
  
  1.10      +1 -5      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.jwc
  
  Index: DatePicker.jwc
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.jwc,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DatePicker.jwc	16 Jun 2005 09:00:43 -0000	1.9
  +++ DatePicker.jwc	16 Jun 2005 20:57:10 -0000	1.10
  @@ -20,10 +20,6 @@
     "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
   
   <component-specification class="org.apache.tapestry.form.DatePicker" allow-body="no">
  -
  -  <bean name="translator" class="org.apache.tapestry.form.translator.DateTranslator">
  -    <set name="pattern" value="'dd MMM yyyy'"/>
  -  </bean>
     
     <parameter name="value" required="yes" default-binding="ognl"/>
     <parameter name="format" required="no" default-binding="ognl"/>
  @@ -34,7 +30,7 @@
     <parameter name="displayName" default-binding="literal"/>
     <parameter name="required" default-binding="ognl"/>
     <parameter name="requiredMessage" default-binding="literal"/>
  -  <parameter name="translator" default-binding="ognl" default-value="bean:translator"/>
  +  <parameter name="translator" default-binding="translator" default-value="date,pattern=dd MMM yyyy"/>
     <parameter name="validators" default-binding="ognl"/>
   
     <asset name="defaultIcon" path="DatePickerIcon.png"/>
  
  
  
  1.3       +1 -6      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java
  
  Index: ValidatableFieldSupportImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ValidatableFieldSupportImpl.java	16 Jun 2005 14:46:18 -0000	1.2
  +++ ValidatableFieldSupportImpl.java	16 Jun 2005 20:57:10 -0000	1.3
  @@ -33,12 +33,7 @@
   public class ValidatableFieldSupportImpl implements ValidatableFieldSupport
   {
       private ValueConverter _converter;
  -    
  -    public ValueConverter getValueConverter()
  -    {
  -        return _converter;
  -    }
  -    
  +
       public void setValueConverter(ValueConverter converter)
       {
           _converter = converter;
  
  
  
  1.3       +42 -24    jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
  
  Index: AbstractTranslator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractTranslator.java	16 Jun 2005 14:46:18 -0000	1.2
  +++ AbstractTranslator.java	16 Jun 2005 20:57:10 -0000	1.3
  @@ -27,90 +27,108 @@
   import org.apache.tapestry.valid.ValidatorException;
   
   /**
  - * Abstract {@link Translator} implementation that provides default behavior for
  - * trimming, null object, and empty text handling.
  + * Abstract {@link Translator} implementation that provides default behavior for trimming, null
  + * object, and empty text handling.
    * 
    * @author Paul Ferraro
    * @since 4.0
    */
  -public abstract class AbstractTranslator extends AbstractFormComponentContributor implements Translator
  +public abstract class AbstractTranslator extends AbstractFormComponentContributor implements
  +        Translator
   {
       private boolean _trim;
  +
       private String _message;
   
  +    public AbstractTranslator()
  +    {
  +    }
  +
  +    // Needed until HIVEMIND-134 fix is available
  +    public AbstractTranslator(String initializer)
  +    {
  +        super(initializer);
  +    }
  +
       /**
  -     * @see org.apache.tapestry.form.translator.Translator#format(org.apache.tapestry.form.IFormComponent, java.lang.Object)
  +     * @see org.apache.tapestry.form.translator.Translator#format(org.apache.tapestry.form.IFormComponent,
  +     *      java.lang.Object)
        */
       public String format(IFormComponent field, Object object)
       {
           return (object != null) ? formatObject(field, object) : "";
       }
  -    
  +
       /**
  -     * @see org.apache.tapestry.form.translator.Translator#parse(org.apache.tapestry.form.IFormComponent, java.lang.String)
  +     * @see org.apache.tapestry.form.translator.Translator#parse(org.apache.tapestry.form.IFormComponent,
  +     *      java.lang.String)
        */
       public Object parse(IFormComponent field, String text) throws ValidatorException
       {
           String value = _trim ? text.trim() : text;
  -        
  +
           return HiveMind.isBlank(value) ? getEmpty() : parseText(field, value);
       }
  -    
  +
       protected abstract String formatObject(IFormComponent field, Object object);
  -    
  -    protected abstract Object parseText(IFormComponent field, String text) throws ValidatorException;
  -    
  +
  +    protected abstract Object parseText(IFormComponent field, String text)
  +            throws ValidatorException;
  +
       protected Object getEmpty()
       {
           return null;
       }
  -    
  +
       protected String buildMessage(IFormComponent field, String key)
       {
           Locale locale = field.getPage().getLocale();
  -        
  -        String pattern = (_message == null) ? ValidationStrings.getMessagePattern(key, locale) : _message;
  -        
  +
  +        String pattern = (_message == null) ? ValidationStrings.getMessagePattern(key, locale)
  +                : _message;
  +
           String name = field.getDisplayName();
  -        
  +
           return MessageFormat.format(pattern, getMessageParameters(locale, name));
       }
   
       protected Object[] getMessageParameters(Locale locale, String label)
       {
  -        return new Object[] { label };
  +        return new Object[]
  +        { label };
       }
   
       /**
  -     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
  +     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IRequestCycle,
  +     *      org.apache.tapestry.form.IFormComponent)
        */
       public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, IFormComponent field)
       {
           super.renderContribution(writer, cycle, field);
  -        
  +
           if (_trim)
           {
               IForm form = field.getForm();
  -            
  +
               addSubmitHandler(form, "trim(document." + form.getName() + "." + field.getName() + ")");
           }
       }
  -    
  +
       public boolean isTrim()
       {
           return _trim;
       }
  -    
  +
       public void setTrim(boolean trim)
       {
           _trim = trim;
       }
  -    
  +
       public String getMessage()
       {
           return _message;
       }
  -    
  +
       public void setMessage(String message)
       {
           _message = message;
  
  
  
  1.3       +22 -7     jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java
  
  Index: StringTranslator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StringTranslator.java	16 Jun 2005 14:46:18 -0000	1.2
  +++ StringTranslator.java	16 Jun 2005 20:57:10 -0000	1.3
  @@ -17,18 +17,31 @@
   import org.apache.tapestry.form.IFormComponent;
   
   /**
  - * A trivial {@link Translator} implementation.  By default, empty text submissions
  - * are interpretted as null.
  + * A trivial {@link Translator} implementation. By default, empty text submissions are interpretted
  + * as null.
    * 
    * @author Paul Ferraro
    * @since 4.0
    */
   public class StringTranslator extends AbstractTranslator
   {
  +
       private String _empty = null;
  -    
  +
  +    public StringTranslator()
  +    {
  +    }
  +
  +    // Needed until HIVEMIND-134 fix is available
  +
  +    public StringTranslator(String initializer)
  +    {
  +        super(initializer);
  +    }
  +
       /**
  -     * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent, java.lang.String)
  +     * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent,
  +     *      java.lang.String)
        */
       protected Object parseText(IFormComponent field, String text)
       {
  @@ -36,20 +49,22 @@
       }
   
       /**
  -     * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent, java.lang.Object)
  +     * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent,
  +     *      java.lang.Object)
        */
       protected String formatObject(IFormComponent field, Object object)
       {
           return object.toString();
       }
  -    
  +
       public Object getEmpty()
       {
           return _empty;
       }
  -    
  +
       public void setEmpty(String empty)
       {
           _empty = empty;
       }
  +
   }
  
  
  
  1.5       +25 -10    jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
  
  Index: NumberTranslator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- NumberTranslator.java	16 Jun 2005 18:27:11 -0000	1.4
  +++ NumberTranslator.java	16 Jun 2005 20:57:10 -0000	1.5
  @@ -34,6 +34,17 @@
    */
   public class NumberTranslator extends FormatTranslator
   {
  +
  +    public NumberTranslator()
  +    {
  +    }
  +
  +    // Needed until HIVEMIND-134 fix is available
  +    public NumberTranslator(String initializer)
  +    {
  +        super(initializer);
  +    }
  +
       /**
        * @see org.apache.tapestry.form.AbstractFormComponentContributor#defaultScript()
        */
  @@ -41,7 +52,7 @@
       {
           return "/org/apache/tapestry/form/translator/NumberTranslator.js";
       }
  -    
  +
       /**
        * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
        */
  @@ -62,7 +73,7 @@
       {
           return new DecimalFormat(getPattern(), new DecimalFormatSymbols(locale));
       }
  -    
  +
       /**
        * @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
        */
  @@ -70,28 +81,32 @@
       {
           return ValidationStrings.INVALID_NUMBER;
       }
  -    
  +
       /**
  -     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale, java.lang.String)
  +     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
  +     *      java.lang.String)
        */
       protected Object[] getMessageParameters(Locale locale, String label)
       {
           String pattern = getDecimalFormat(locale).toLocalizedPattern();
  -        
  -        return new Object[] { label, pattern };
  +
  +        return new Object[]
  +        { label, pattern };
       }
   
       /**
  -     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
  +     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter,
  +     *      org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
        */
       public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, IFormComponent field)
       {
           super.renderContribution(writer, cycle, field);
  -        
  +
           String message = buildMessage(field, getMessageKey());
           IForm form = field.getForm();
  -        
  -        addSubmitHandler(form, "validate_number(event, document." + form.getName() + "." + field.getName() + ",'" + message + "')");
  +
  +        addSubmitHandler(form, "validate_number(event, document." + form.getName() + "."
  +                + field.getName() + ",'" + message + "')");
       }
   
       /**
  
  
  
  1.4       +10 -0     jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
  
  Index: FormatTranslator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FormatTranslator.java	16 Jun 2005 18:27:11 -0000	1.3
  +++ FormatTranslator.java	16 Jun 2005 20:57:10 -0000	1.4
  @@ -81,4 +81,14 @@
       {
           _pattern = pattern;
       }
  +
  +    public FormatTranslator()
  +    {
  +    }
  +
  +    // Needed until HIVEMIND-134 fix is available
  +    public FormatTranslator(String initializer)
  +    {
  +        super(initializer);
  +    }
   }
  
  
  
  1.3       +18 -5     jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
  
  Index: DateTranslator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DateTranslator.java	16 Jun 2005 14:46:18 -0000	1.2
  +++ DateTranslator.java	16 Jun 2005 20:57:10 -0000	1.3
  @@ -30,6 +30,17 @@
    */
   public class DateTranslator extends FormatTranslator
   {
  +
  +    public DateTranslator()
  +    {
  +    }
  +
  +    // Needed until HIVEMIND-134 fix is available
  +    public DateTranslator(String initializer)
  +    {
  +        super(initializer);
  +    }
  +
       /**
        * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
        */
  @@ -58,17 +69,19 @@
       {
           return ValidationStrings.INVALID_DATE;
       }
  -    
  +
       /**
  -     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale, java.lang.String)
  +     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
  +     *      java.lang.String)
        */
       protected Object[] getMessageParameters(Locale locale, String label)
       {
           String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
  -        
  -        return new Object[] { label, pattern };
  +
  +        return new Object[]
  +        { label, pattern };
       }
  -    
  +
       /**
        * @see org.apache.tapestry.form.translator.FormatTranslator#getConstraint()
        */
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java
  
  Index: TranslatorBindingFactory.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.form.translator;
  
  import org.apache.hivemind.ApplicationRuntimeException;
  import org.apache.hivemind.Location;
  import org.apache.hivemind.lib.BeanFactory;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.binding.BindingFactory;
  import org.apache.tapestry.coerce.ValueConverter;
  
  /**
   * Uses the tapestry.form.translator.TranslatorBeanFactory service to obtain configured
   * {@link org.apache.tapestry.form.translator.Translator} instances that are then wrapped as
   * {@link org.apache.tapestry.form.translator.TranslatorBinding}s.
   * 
   * @author Howard Lewis Ship
   * @since 4.0
   */
  public class TranslatorBindingFactory implements BindingFactory
  {
      private BeanFactory _translatorBeanFactory;
  
      private ValueConverter _valueConverter;
  
      public IBinding createBinding(IComponent root, String bindingDescription, String path,
              Location location)
      {
          try
          {
              Translator translator = (Translator) _translatorBeanFactory.get(path);
  
              return new TranslatorBinding(bindingDescription, _valueConverter, location, translator);
          }
          catch (Exception ex)
          {
              throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
          }
      }
  
      public void setTranslatorBeanFactory(BeanFactory translatorBeanFactory)
      {
          _translatorBeanFactory = translatorBeanFactory;
      }
  
      public void setValueConverter(ValueConverter valueConverter)
      {
          _valueConverter = valueConverter;
      }
  }
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBinding.java
  
  Index: TranslatorBinding.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.form.translator;
  
  import org.apache.hivemind.Location;
  import org.apache.hivemind.util.Defense;
  import org.apache.tapestry.binding.AbstractBinding;
  import org.apache.tapestry.coerce.ValueConverter;
  import org.apache.tapestry.valid.IValidator;
  
  /**
   * Implementation of {@link org.apache.tapestry.IBinding} that wraps around a
   * {@link org.apache.tapestry.form.translator.Translator}.
   * 
   * @author Howard Lewis Ship
   * @since 4.0
   */
  public class TranslatorBinding extends AbstractBinding
  {
      private final Translator _translator;
  
      public TranslatorBinding(String description, ValueConverter valueConverter, Location location,
              Translator translator)
      {
          super(description, valueConverter, location);
  
          Defense.notNull(translator, "translator");
  
          _translator = translator;
      }
  
      /**
       * Returns the translator.
       */
  
      public Object getObject()
      {
          return _translator;
      }
  
  }
  
  
  
  1.2       +2 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java
  
  Index: ValidatorBinding.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ValidatorBinding.java	6 May 2005 17:29:10 -0000	1.1
  +++ ValidatorBinding.java	16 Jun 2005 20:57:10 -0000	1.2
  @@ -20,7 +20,7 @@
   import org.apache.tapestry.coerce.ValueConverter;
   
   /**
  - * Implementation of {@link IBinding}that provides {@link org.apache.tapestry.valid.IValidator}
  + * Implementation of {@link IBinding} that provides {@link org.apache.tapestry.valid.IValidator}
    * &nbsp;instances based on a validator bean descriptor. The descriptor is of the form
    * "type[,properties]". The types are values such as "string", "date" or "number" defined in the
    * tapestry.valid.Validators configuration point. The properties are a properties initialization
  @@ -33,7 +33,7 @@
    */
   public class ValidatorBinding extends AbstractBinding
   {
  -    private IValidator _validator;
  +    private final IValidator _validator;
   
       public ValidatorBinding(String description, ValueConverter valueConverter, Location location,
               IValidator validator)
  
  
  
  1.5       +35 -2     jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/bindings.xml
  
  Index: bindings.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/bindings.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- bindings.xml	6 May 2005 17:29:10 -0000	1.4
  +++ bindings.xml	16 Jun 2005 20:57:10 -0000	1.5
  @@ -115,6 +115,13 @@
     </tr>
     
     <tr>
  +    <td>translator</td>
  +    <td>Initializer used to obtain and configure a &Translator; instance.</td>
  +    <td>translator:number,pattern=#</td>
  +    <td></td>
  +  </tr>
  +  
  +  <tr>
       <td>validator</td>
       <td>Initializer used to obtain and configure an &IValidator; instance.</td>
       <td>validator:string,required,minimumLength=5</td>
  @@ -123,13 +130,39 @@
   </table>
   
   <p>
  - Most of these are quite straight forward; the <link href="validation.html#validation.validator-binding">validator:</link> prefix
  - requires some additional description.
  + Most of these are quite straight forward; the 
  +  <link href="validation.html#validation.validator-binding">validator and translator</link> prefixes
  + require some additional description.
   </p>
   
   <note>
     You can define your own prefixes by contributing into the tapestry.bindings.BindingFactories configuration point.
   </note>  
  +
  +<p>
  +  Many of the bindings are driven by a HiveMind configuration; the configuration will
  +  define the available values, and contributing the configuration allows
  +  new values to be defined.
  +</p>
  +
  +<table>
  +  <tr>
  +    <th>Binding Prefix</th>
  +    <th>Configuration</th>
  +  </tr>
  +  <tr>
  +    <td>translator</td>
  +    <td><link href="&hivedoc;/config/tapestry.form.translator.Translators.html">tapestry.form.translator.Translators</link></td>
  +  </tr>
  +  <tr>
  +    <td>state</td>
  +    <td><link href="&hivedoc;/config/tapestry.state.ApplicationObjects.html">tapestry.state.ApplicationObjects</link></td>
  +  </tr>
  +  <tr>
  +    <td>validator</td>
  +    <td><link href="&hivedoc;/config/tapestry.valid.Validators.html">tapestry.valid.Validators</link></td>
  +  </tr>
  +</table>
     
     
   <section id="bindings.default-binding-type">
  
  
  
  1.11      +5 -78     jakarta-tapestry/examples/Workbench/src/context/WEB-INF/Fields.page
  
  Index: Fields.page
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/examples/Workbench/src/context/WEB-INF/Fields.page,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Fields.page	16 Jun 2005 09:00:43 -0000	1.10
  +++ Fields.page	16 Jun 2005 20:57:10 -0000	1.11
  @@ -25,97 +25,36 @@
     
     <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
   
  -  <bean name="dateTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.DateTranslator">
  -    <set name="pattern" value="'MM-dd-yyyy'"/>
  -  </bean>
  -
     <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.form.validator.DateValidator">
       <set name="min" value="new java.util.Date()"/>
     </bean>
     
  -  <!--bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.valid.DateValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  </bean-->
  -
  -  <bean name="intTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.NumberTranslator">
  -    <set name="pattern" value="'#'"/>
  -  </bean>
  -  
     <bean name="intValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
       <set name="min" value="@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
       <set name="max" value="@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
     </bean>
     
  -  <!--bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
  -  	<set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  	<set name="valueType" value="int"/>
  -  </bean-->
  -
  -  <bean name="decimalTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.NumberTranslator">
  -    <set name="pattern" value="'#.#'"/>
  -  </bean>
  -  
     <bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
       <set name="min" value="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
       <set name="max" value="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
     </bean>
  -
  -  <!--bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
  -  	<set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  	<set name="valueType" value="double"/>
  -  </bean-->
     
     <bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
       <set name="min" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
       <set name="max" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
     </bean>
   
  -  <!--bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimum" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
  -  	<set name="maximum" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
  -  	<set name="clientScriptingEnabled" value="clientValidationEnabled"/>
  -  	<set name="valueType" value="java.math.BigDecimal"/>
  -  </bean-->
  -
     <bean name="longValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
       <set name="min" value="@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
       <set name="max" value="@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
     </bean>
   
  -  <!--bean name="longValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
  -  	<set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  	<set name="valueType" value="long"/>
  -  </bean-->
  -
     <bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.form.validator.StringValidator">
     	<set name="minLength" value="@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
     </bean>
   
  -  <!--bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.valid.StringValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimumLength" value="ognl:@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  </bean-->
  -
     <bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.form.validator.EmailValidator"></bean>
   
  -  <!--bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.valid.EmailValidator">
  -  	<set name="required" value="true"/>
  -  	<set name="minimumLength" value="6"/>
  -  	<set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
  -  </bean-->
  -
     <component id="inputEnabled" type="Checkbox">
       <binding name="selected" value="clientValidationEnabled"/> 
       <binding name="onchange" value="'this.form.submit()'"/>
  @@ -127,7 +66,7 @@
   
     <component id="inputDate" type="TextField">
       <binding name="value" value="visit.dateValue"/>
  -    <binding name="translator" value="bean:dateTranslator"/>
  +    <binding name="translator" value="date,pattern=MM-dd-yyyy"/>
       <binding name="required" value="true"/>
       <binding name="validators" value="bean:dateValidator"/>
       <binding name="displayName" value="Date Field"/>
  @@ -141,7 +80,7 @@
   
     <component id="inputInt" type="TextField">
       <binding name="value" value="ognl:visit.intValue"/>
  -    <binding name="translator" value="bean:intTranslator"/>
  +    <binding name="translator" value="number,pattern=#"/>
       <binding name="required" value="true"/>
       <binding name="displayName" value="Integer Field"/>
       <binding name="validators" value="bean:intValidator"/>
  @@ -155,35 +94,23 @@
   
     <component id="inputDouble" type="TextField">
       <binding name="value" value="ognl:visit.doubleValue"/>
  -    <binding name="translator" value="bean:decimalTranslator"/>
  +    <binding name="translator" value="number,pattern=#.#"/>
       <binding name="required" value="true"/>
       <binding name="validators" value="bean:doubleValidator"/>
       <binding name="displayName" value="Double Field"/>
     </component>
   
  -  <!--component id="inputDouble" type="ValidField">
  -    <binding name="validator" value="bean:doubleValidator"/>
  -    <binding name="value" value="visit.doubleValue"/>
  -    <binding name="displayName" value="Double Field"/>
  -  </component-->
  -
     <component id="inputBigDecimal" type="TextField">
       <binding name="value" value="ognl:visit.bigDecimalValue"/>
  -    <binding name="translator" value="bean:decimalTranslator"/>
  +    <binding name="translator" value="number,pattern=#.#"/>
       <binding name="required" value="true"/>
       <binding name="validators" value="bean:bigDecimalValidator"/>
       <binding name="displayName" value="Big Decimal Field"/>
     </component>
   
  -  <!--component id="inputBigDecimal" type="ValidField">
  -    <binding name="value" value="visit.bigDecimalValue"/>
  -    <binding name="validator" value="bean:bigDecimalValidator"/>
  -    <binding name="displayName" value="Big Decimal Field"/>
  -  </component-->
  -
     <component id="inputLong" type="TextField">
       <binding name="value" value="ognl:visit.longValue"/>
  -    <binding name="translator" value="bean:intTranslator"/>
  +    <binding name="translator" value="number,pattern=#"/>
       <binding name="required" value="true"/>
       <binding name="validators" value="bean:longValidator"/>
       <binding name="displayName" value="Long Field"/>
  
  
  
  1.2       +4 -2      jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.xml
  
  Index: tapestry.form.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- tapestry.form.xml	14 Jun 2005 00:30:01 -0000	1.1
  +++ tapestry.form.xml	16 Jun 2005 20:57:10 -0000	1.2
  @@ -17,11 +17,13 @@
   
   <module id="tapestry.form" version="4.0.0" package="org.apache.tapestry.form">
     
  +  <sub-module descriptor="tapestry.form.translator.xml"/>
  +  
     Support for form components.
   
     <service-point id="RequirableFieldSupport" interface="org.apache.tapestry.form.RequirableFieldSupport">
       <invoke-factory>
  -      <construct class="RequirableFieldSupportImpl"></construct>
  +      <construct class="RequirableFieldSupportImpl"/>
       </invoke-factory>
     </service-point>
   
  @@ -32,5 +34,5 @@
         </construct>
       </invoke-factory>
     </service-point>
  -    
  +  
   </module>
  \ No newline at end of file
  
  
  
  1.1                  jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.translator.xml
  
  Index: tapestry.form.translator.xml
  ===================================================================
  <?xml version="1.0"?>
  <!-- 
     Copyright 2005 The Apache Software Foundation
  
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
  
  <module id="tapestry.form.translator" version="4.0.0" package="org.apache.tapestry.form.translator">
    
    Support for input field translators.
    
  
    <configuration-point id="Translators" schema-id="hivemind.lib.BeanFactoryContribution">
      
      Defines the available translators that can be used to validate user input on fields.
      
    </configuration-point>
      
    <contribution configuration-id="Translators">
      <bean name="date" class="DateTranslator"/>
      <bean name="number" class="NumberTranslator"/>
      <bean name="string" class="StringTranslator"/>
    </contribution>   
    
    <service-point id="TranslatorBeanFactory" interface="org.apache.hivemind.lib.BeanFactory">
      <invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
        <factory vend-class="Translator" configuration-id="Translators"/>
      </invoke-factory>
    </service-point> 
    
    <service-point id="TranslatorBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
      
      Factory for the "translator:" binding prefix.
      
      <invoke-factory>
        <construct class="TranslatorBindingFactory">
          <set-service property="translatorBeanFactory" service-id="TranslatorBeanFactory"/>
          <set-object property="valueConverter" value="infrastructure:valueConverter"/>  
        </construct>
      </invoke-factory>
      
    </service-point>
    
    <contribution configuration-id="tapestry.bindings.BindingFactories">
      <binding prefix="translator" service-id="TranslatorBindingFactory"/>
    </contribution>
      
  </module>
  
  
  1.8       +3 -8      jakarta-tapestry/examples/Workbench/src/context/Fields.html
  
  Index: Fields.html
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/examples/Workbench/src/context/Fields.html,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Fields.html	16 Jun 2005 09:00:43 -0000	1.7
  +++ Fields.html	16 Jun 2005 20:57:10 -0000	1.8
  @@ -6,16 +6,11 @@
   code to directly read HTTP parameters.
   
   <p>
  -In addition, Tapestry includes the ValidField component which
  -is part of a framework that allows for complex validation of user input
  -as well as presentation of errors.
  -
  -<p>
   <form jwcid="valid@Form">
   <input jwcid="inputEnabled"/> Enable Client Side Validation
   </form>
   
  -<p>ValidField components can perform validations on the client-side, triggered
  +<p>Input field components can perform validations on the client-side, triggered
   by the user submitting the form.  The checkbox above enables or disables
   this feature.  Input is always rechecked on the server-side (in case the client
   doesn't support JavaScript).
  @@ -63,14 +58,14 @@
   
     <tr>
     	<td></td>
  -  	<td><input jwcid="@ImageSubmit" image="continue"/></td>
  +  	<td><input jwcid="continue@ImageSubmit" image="continue"/></td>
     </tr>    
       
     <tr>
         	<td></td>
     		<td>
         	Or, use a LinkSubmit component:   
  -      	<a jwcid="@LinkSubmit">Continue</a>
  +      	<a jwcid="continueLink@LinkSubmit">Continue</a>
           </td>
     </tr>
     
  
  
  
  1.15      +1 -0      jakarta-tapestry/src/documentation/content/xdocs/links.ent
  
  Index: links.ent
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/links.ent,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- links.ent	1 Jun 2005 14:25:55 -0000	1.14
  +++ links.ent	16 Jun 2005 20:57:10 -0000	1.15
  @@ -110,6 +110,7 @@
   <!ENTITY StaleLinkException 		'<link href="&apiroot;/StaleLinkException.html">StaleLinkException</link>'>
   <!ENTITY StateObjectFactory			'<link href="&apiroot;/engine/state/StateObjectFactory.html">StateObjectFactory</link>'>
   <!ENTITY Tapestry 					'<link href="&apiroot;/Tapestry.html">Tapestry</link>'>
  +<!ENTITY Translator					'<link href="&apiroot;/form/translator/Translator.html">Translator</link>'>
   <!ENTITY ValidationDelegate 		'<link href="&apiroot;/valid/ValidationDelegate.html">ValidationDelegate</link>'>
   <!ENTITY WebRequest					'<link href="&apiroot;/web/WebRequest.html">WebRequest</link>'>
   <!ENTITY WebResponse			    '<link href="&apiroot;/web/WebResponse.html">WebResponse</link>'>
  
  
  
  1.3       +2 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/StringValidator.js
  
  Index: StringValidator.js
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/StringValidator.js,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StringValidator.js	16 Jun 2005 18:27:11 -0000	1.2
  +++ StringValidator.js	16 Jun 2005 20:57:10 -0000	1.3
  @@ -15,11 +15,11 @@
   function validate_min_length(event, field, min, message)
   {
       if (field.value.length < min)
  -      handle_invalid_field(field, message)
  +      handle_invalid_field(event, field, message)
   }
   
   function validate_max_length(event, field, max, message)
   {
       if (field.value.length > max)
  -      handle_invalid_field(field, message)
  +      handle_invalid_field(event, field, message)
   }
  
  
  
  1.1                  jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator/TestTranslatorBinding.java
  
  Index: TestTranslatorBinding.java
  ===================================================================
  // Copyright 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.form.translator;
  
  import org.apache.hivemind.ApplicationRuntimeException;
  import org.apache.hivemind.Location;
  import org.apache.hivemind.lib.BeanFactory;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.binding.BindingTestCase;
  import org.apache.tapestry.coerce.ValueConverter;
  import org.easymock.MockControl;
  
  /**
   * Tests for {@link org.apache.tapestry.form.translator.TranslatorBinding} and
   * {@link org.apache.tapestry.form.translator.TranslatorBindingFactory}.
   * 
   * @author Howard Lewis Ship
   * @since 4.0
   */
  public class TestTranslatorBinding extends BindingTestCase
  {
      public void testCreate()
      {
          Location l = newLocation();
          ValueConverter vc = newValueConverter();
          IComponent component = newComponent();
  
          MockControl bfc = newControl(BeanFactory.class);
          BeanFactory bf = (BeanFactory) bfc.getMock();
  
          Translator translator = (Translator) newMock(Translator.class);
  
          bf.get("string");
          bfc.setReturnValue(translator);
  
          replayControls();
  
          TranslatorBindingFactory f = new TranslatorBindingFactory();
          f.setValueConverter(vc);
          f.setTranslatorBeanFactory(bf);
  
          IBinding binding = f.createBinding(component, "description", "string", l);
  
          assertSame(translator, binding.getObject());
          assertSame(l, binding.getLocation());
          assertTrue(binding.isInvariant());
          assertEquals("description", binding.getDescription());
  
          verifyControls();
      }
  
      public void testFailure()
      {
          Location l = newLocation();
          IComponent component = newComponent();
  
          MockControl bfc = newControl(BeanFactory.class);
          BeanFactory bf = (BeanFactory) bfc.getMock();
  
          Throwable t = new RuntimeException("Boom!");
  
          bf.get("string");
          bfc.setThrowable(t);
  
          replayControls();
  
          TranslatorBindingFactory f = new TranslatorBindingFactory();
          f.setTranslatorBeanFactory(bf);
  
          try
          {
              f.createBinding(component, "description", "string", l);
              unreachable();
          }
          catch (ApplicationRuntimeException ex)
          {
              assertEquals("Boom!", ex.getMessage());
              assertSame(t, ex.getRootCause());
              assertSame(l, ex.getLocation());
          }
  
          verifyControls();
  
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org