001// Copyright 2004, 2005 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry.contrib.valid;
016
017import org.apache.tapestry.valid.IValidator;
018import org.apache.tapestry.valid.StringValidator;
019import org.apache.tapestry.valid.ValidField;
020
021/**
022 * Backwards compatible version of the 1.0.7 ValidatingTextField component. <table border=1>
023 * <tr>
024 * <td>Parameter</td>
025 * <td>Type</td>
026 * <td>Read / Write</td>
027 * <td>Required</td>
028 * <td>Default</td>
029 * <td>Description</td>
030 * </tr>
031 * <tr>
032 * <td>text</td>
033 * <td>java.lang.String</td>
034 * <td>R / W</td>
035 * <td>yes</td>
036 * <td>&nbsp;</td>
037 * <td>The text inside the text field.
038 * <p>
039 * When the form is submitted, the binding is only updated if the value is valid.</td>
040 * </tr>
041 * <tr>
042 * <td>minimumLength</td>
043 * <td>int</td>
044 * <td>R</td>
045 * <td>no</td>
046 * <td>0</td>
047 * <td>The minimum length (number of characters read) for the field. The value provided in the
048 * request is trimmed of leading and trailing whitespace.
049 * <p>
050 * If a field is not required and no value is given, then minimumLength is ignored. Minimum length
051 * only applies if <em>some</em> non-null value is given.</td>
052 * </tr>
053 * <tr>
054 * <td>required</td>
055 * <td>boolean</td>
056 * <td>R</td>
057 * <td>no</td>
058 * <td>false</td>
059 * <td>If true, then a non-null value must be provided. A value consisting only of whitespace is
060 * considered null.</td>
061 * </tr>
062 * <tr>
063 * <td>displayName</td>
064 * <td>String</td>
065 * <td>R</td>
066 * <td>yes</td>
067 * <td>&nbsp;</td>
068 * <td>A textual name for the field that is used when formulating error messages.</td>
069 * </tr>
070 * </table>
071 * <p>
072 * May not have a body. May have informal parameters.
073 * 
074 * @author Howard Lewis Ship
075 * @since 1.0.8
076 * @see org.apache.tapestry.valid.ValidField
077 */
078
079public abstract class ValidatingTextField extends ValidField
080{
081    public abstract int getMinimumLength();
082
083    public abstract boolean isRequired();
084
085    public abstract String getText();
086
087    public abstract void setText(String value);
088
089    /*
090     * (non-Javadoc)
091     * 
092     * @see org.apache.tapestry.valid.ValidField#getValue()
093     */
094    public Object getValue()
095    {
096        return getText();
097    }
098
099    /*
100     * (non-Javadoc)
101     * 
102     * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
103     */
104    public void setValue(Object value)
105    {
106        setText((String) value);
107    }
108
109    /**
110     * Overrides {@link ValidField#getValidator()}to construct a validator on the fly.
111     */
112    public IValidator getValidator()
113    {
114        StringValidator validator = new StringValidator();
115
116        if (isParameterBound("required"))
117            validator.setRequired(isRequired());
118
119        if (isParameterBound("minimumLength"))
120            validator.setMinimumLength(getMinimumLength());
121
122        return validator;
123    }
124}