001 // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org)
002 // The Molly framework is freely distributable under the terms of an
003 // MIT-style license. For details, see the molly pages web site at:
004 // http://www.mollypages.org/. Use, modify, have fun !
005
006 package fc.web.forms;
007
008 import javax.servlet.*;
009 import javax.servlet.http.*;
010 import java.io.*;
011 import java.util.*;
012 import java.util.regex.*;
013
014 import fc.jdbc.*;
015 import fc.io.*;
016 import fc.util.*;
017
018 /**
019 Validates that a select field has:
020 <ol>
021 <li>some value(s)
022 <li>the values(s) are <b>not</b> a pre-specified value.
023 </ol>
024
025 This is useful to see if the select field (popup) was selected by the user
026 (typically, select fields may be displayed with a dummy default
027 <i><tt>---choose an option---</tt></i> type selection. In that case, we would
028 check to see if the select value was <b>not</b> <i><tt>---choose an
029 option---</tt></i>.
030
031 @author hursh jain
032 **/
033 public final class VSelectValue extends FieldValidator
034 {
035 String errorval;
036
037 /**
038 @param field the parent field
039 @param badSelectValue the select value which will cause the
040 validation to fail
041 @param errorMessage error message for unsuccessful validation error.
042 **/
043 public VSelectValue(
044 Select field, String errorMessage, String badSelectValue)
045 {
046 super(field, errorMessage);
047 this.errorval = badSelectValue;
048 }
049
050 /**
051 Works with the {@link Select} field.
052
053 @throws ClassCastException If the field's {@link Field#getValue} method
054 does not return a collection of
055 {@link Select.Option} objects
056 **/
057 public boolean validate(FormData fd, HttpServletRequest req)
058 {
059 Collection list = ((Select)field).getValue(fd);
060
061 if (list == null || list.size() == 0)
062 return false;
063
064 Iterator it = list.iterator();
065 while (it.hasNext()) {
066 Select.Option item = (Select.Option) it.next();
067 if (item.getValue().equals(errorval))
068 return false;
069 }
070
071 return true;
072 }
073 } //~class VSelectValue
074