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
015 package org.apache.tapestry.contrib.valid;
016
017 import org.apache.tapestry.valid.IValidator;
018 import org.apache.tapestry.valid.StringValidator;
019 import org.apache.tapestry.valid.ValidField;
020
021 /**
022 * Backwards compatible version of the 1.0.7 ValidatingTextField component.
023 * <table border=1>
024 * <tr>
025 * <td>Parameter</td>
026 * <td>Type</td>
027 * <td>Read / Write</td>
028 * <td>Required</td>
029 * <td>Default</td>
030 * <td>Description</td>
031 * </tr>
032 * <tr>
033 * <td>text</td>
034 * <td>java.lang.String</td>
035 * <td>R / W</td>
036 * <td>yes</td>
037 * <td> </td>
038 * <td>The text inside the text field.
039 * <p>
040 * When the form is submitted, the binding is only updated if the value is
041 * valid.</td>
042 * </tr>
043 * <tr>
044 * <td>minimumLength</td>
045 * <td>int</td>
046 * <td>R</td>
047 * <td>no</td>
048 * <td>0</td>
049 * <td>The minimum length (number of characters read) for the field. The value
050 * provided in the request is trimmed of leading and trailing whitespace.
051 * <p>
052 * If a field is not required and no value is given, then minimumLength is
053 * ignored. Minimum length only applies if <em>some</em> non-null value is
054 * given.</td>
055 * </tr>
056 * <tr>
057 * <td>required</td>
058 * <td>boolean</td>
059 * <td>R</td>
060 * <td>no</td>
061 * <td>false</td>
062 * <td>If true, then a non-null value must be provided. A value consisting only
063 * of whitespace is considered null.</td>
064 * </tr>
065 * <tr>
066 * <td>displayName</td>
067 * <td>String</td>
068 * <td>R</td>
069 * <td>yes</td>
070 * <td> </td>
071 * <td>A textual name for the field that is used when formulating error
072 * messages.</td>
073 * </tr>
074 * </table>
075 * <p>
076 * May not have a body. May have informal parameters.
077 *
078 * @author Howard Lewis Ship
079 * @since 1.0.8
080 * @see org.apache.tapestry.valid.ValidField
081 */
082
083 public abstract class ValidatingTextField extends ValidField
084 {
085
086 public abstract int getMinimumLength();
087
088 public abstract boolean isRequired();
089
090 public abstract String getText();
091
092 public abstract void setText(String value);
093
094 /*
095 * (non-Javadoc)
096 *
097 * @see org.apache.tapestry.valid.ValidField#getValue()
098 */
099 public Object getValue()
100 {
101 return getText();
102 }
103
104 /*
105 * (non-Javadoc)
106 *
107 * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
108 */
109 public void setValue(Object value)
110 {
111 setText((String) value);
112 }
113
114 /**
115 * Overrides {@link ValidField#getValidator()}to construct a validator on
116 * the fly.
117 */
118 public IValidator getValidator()
119 {
120 StringValidator validator = new StringValidator();
121
122 if (isParameterBound("required")) validator.setRequired(isRequired());
123
124 if (isParameterBound("minimumLength"))
125 validator.setMinimumLength(getMinimumLength());
126
127 return validator;
128 }
129 }