dwinterfeldt 01/09/25 10:59:14 Modified: contrib/validator/src/share/com/wintecinc/struts/validation Field.java Log: Added some methods and functionality to support indexed validation. Revision Changes Path 1.3 +75 -0 jakarta-struts/contrib/validator/src/share/com/wintecinc/struts/validation/Field.java Index: Field.java =================================================================== RCS file: /home/cvs/jakarta-struts/contrib/validator/src/share/com/wintecinc/struts/validation/Field.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Field.java 2001/08/17 17:40:49 1.2 +++ Field.java 2001/09/25 17:59:14 1.3 @@ -79,11 +79,16 @@ */ public final static String ARG_DEFAULT = "com.wintecinc.struts.validation.Field.DEFAULT"; + public final static String TOKEN_INDEXED = "[]"; + protected final static String TOKEN_START = "${"; protected final static String TOKEN_END = "}"; protected final static String TOKEN_VAR = "var:"; protected String property = null; + protected String indexedProperty = null; + protected String indexedListProperty = null; + protected String key = null; protected String depends = null; protected int page = 0; protected int fieldOrder = 0; @@ -143,8 +148,44 @@ public void setProperty(String property) { this.property = property; } + + /** + * Gets the indexed property name of the field. This + * is the method name that can take an <code>int</code> as + * a parameter for indexed property value retrieval. + */ + public String getIndexedProperty() { + return indexedProperty; + } + + + /** + * Sets the indexed property name of the field. + */ + public void setIndexedProperty(String indexedProperty) { + this.indexedProperty = indexedProperty; + } + + /** + * Gets the indexed property name of the field. This + * is the method name that will return an array or a + * <code>Collection</code> used to retrieve the + * list and then loop through the list performing the specified + * validations. + */ + public String getIndexedListProperty() { + return indexedListProperty; + } + /** + * Sets the indexed property name of the field. + */ + public void setIndexedListProperty(String indexedListProperty) { + this.indexedListProperty = indexedListProperty; + } + + /** * Gets the validation rules for this field. */ public String getDepends() { @@ -347,8 +388,35 @@ public Map getVars() { return Collections.unmodifiableMap(hVars); } + + /** + * Gets a unique key based on the property and indexedProperty fields. + */ + public String getKey() { + return key; + } + + /** + * Sets a unique key for the field. This can be used to change + * the key temporarily to have a unique key for an indexed field. + */ + public void setKey(String key) { + this.key = key; + } /** + * If there is a value specified for the indexedProperty field then + * <code>true</code> will be returned. Otherwise it will be <code>false</code>. + */ + public boolean isIndexed() { + if ((indexedProperty != null && indexedProperty.length() > 0) && + (indexedListProperty != null && indexedListProperty.length() > 0)) + return true; + else + return false; + } + + /** * Replace constants with values in fields and process the depends field * to create the dependency <code>Map</code>. */ @@ -359,6 +427,13 @@ hArg2.setFast(true); hArg3.setFast(true); hVars.setFast(true); + + // If the field is indexed, combine property and + // indexedProperty to make a unique key. + if (isIndexed()) + key = indexedProperty + TOKEN_INDEXED + "." + property; + else + key = property; // Process FormSet Constants for (Iterator i = constants.keySet().iterator(); i.hasNext(); ) {