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 certain conditions in one or more fields in the form 020 require other conditions of some other fields in that form. 021 <p> 022 Since the pre/post conditions can be arbitrary, this class defines 023 abstract methods called {@link #preConditionMet} and {@link 024 #postConditionMet}. If the pre condition is true, the post condition must 025 also be true. Subclasses should implement both methods as appropriate. 026 027 @author hursh jain 028 **/ 029 public abstract class VConditional extends FormValidator 030 { 031 public VConditional(Form f, String name, String errorMessage) 032 { 033 super(f, name, errorMessage); 034 } 035 036 /** 037 Returns the value returned by {@link #postConditionMet} 038 <i>if</i> the pre conditions were met. ({@link 039 #preConditionMet} returned true). If the pre condition was 040 <i>not</i> met, there is no need for further validation and 041 this method will return true. 042 */ 043 public boolean validate(FormData fd, HttpServletRequest req) 044 { 045 if (! preConditionMet(fd, req) ) 046 return true; 047 048 return postConditionMet(fd, req); 049 } 050 051 052 /** 053 Subclasses should implement this method to check that certain fields or 054 pre-conditions have been met. Only gf these conditions have been met will 055 there be a check to see that the post conditions are also true. 056 057 @return true if the pre-conditions have been met, false otherwise 058 */ 059 public abstract boolean preConditionMet(FormData fd, HttpServletRequest req); 060 061 062 /** 063 Subclasses should implement this method to check that 064 certain post conditions have been met. This method will 065 only be called if the {@link #preConditionMet} method 066 returns true. 067 068 @return true if the post-conditions have been met, false otherwise 069 */ 070 public abstract boolean postConditionMet(FormData fd, HttpServletRequest req); 071 072 } //~class VConditional 073