dwinterfeldt 01/07/08 21:31:54 Modified: contrib/validator/src/share/com/wintecinc/struts/action ValidatorForm.java Log: Added insertValidator method to make it easier to subclass the ValidatorForm. Revision Changes Path 1.2 +192 -175 jakarta-struts/contrib/validator/src/share/com/wintecinc/struts/action/ValidatorForm.java Index: ValidatorForm.java =================================================================== RCS file: /home/cvs/jakarta-struts/contrib/validator/src/share/com/wintecinc/struts/action/ValidatorForm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ValidatorForm.java 2001/07/09 03:18:56 1.1 +++ ValidatorForm.java 2001/07/09 04:31:53 1.2 @@ -1,175 +1,192 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 1999 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Struts", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact [EMAIL PROTECTED] - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * <http://www.apache.org/>. - */ - - -package com.wintecinc.struts.action; - -import java.io.Serializable; -import java.util.Locale; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import com.wintecinc.struts.validation.Validator; -import com.wintecinc.struts.validation.ValidatorException; -import com.wintecinc.struts.validation.ValidatorResources; -import com.wintecinc.struts.validation.ValidatorUtil; - - -/** - * <p>This class extends <strong>ActionForm</strong> and provides - * basic field validation based on an XML file. </p> - * - * <ul><li>See /WEB-INF/validation.xml for validation rules.</li></ul> - * - * @author David Winterfeldt - * @see org.apache.struts.action.ActionForm -*/ - -public class ValidatorForm extends ActionForm implements Serializable { - /** - * Used to indicate the current page of a multi-page form. - */ - protected int page = 0; - - /** - * Gets page. - */ - public int getPage() { - return page; - } - - /** - * Sets page. - */ - public void setPage(int page) { - this.page = page; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an <code>ActionErrors</code> object that encapsulates any - * validation errors that have been found. If no errors are found, return - * <code>null</code> or an <code>ActionErrors</code> object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, - HttpServletRequest request) { - - ServletContext application = getServlet().getServletContext(); - ValidatorResources resources = ValidatorUtil.getValidatorResources(application); - Locale locale = ValidatorUtil.getLocale(request); - ActionErrors errors = new ActionErrors(); - - Validator validator = new Validator(resources, mapping.getAttribute()); - - //validator.setDebug(getServlet().getDebug()); - validator.setPage(getPage()); - - validator.addResource(Validator.SERVLET_CONTEXT_KEY, application); - validator.addResource(Validator.HTTP_SERVLET_REQUEST_KEY, request); - validator.addResource(Validator.LOCALE_KEY, locale); - validator.addResource(Validator.ACTION_ERRORS_KEY, errors); - validator.addResource(Validator.BEAN_KEY, this); - - try { - validator.validate(); - } catch (ValidatorException e) { - log("ValidatorForm::validate() - " + e.getMessage(), e); - } - - return errors; - } - - /** - * Convenience method that call the comparable servlet log method and writes - * an explanatory message and a stack trace for a given Throwable exception to the - * servlet log file. - * - * @param message String that describes the error or exception - */ - protected void log(String message) { - if (getServlet().getDebug() >= 1) - getServlet().log(message); - } - - /** - * Convenience method that call the comparable servlet log method and writes - * an explanatory message and a stack trace for a given Throwable exception to the - * servlet log file. - * - * @param message String that describes the error or exception - * @param throwable Throwable error or exception - */ - protected void log(String message, Throwable throwable) { - if (getServlet().getDebug() >= 1) - getServlet().log(message, throwable); - } - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - page = 0; - } - -} +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Struts", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + + +package com.wintecinc.struts.action; + +import java.io.Serializable; +import java.util.Locale; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import org.apache.struts.action.ActionErrors; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionMapping; +import com.wintecinc.struts.validation.Validator; +import com.wintecinc.struts.validation.ValidatorException; +import com.wintecinc.struts.validation.ValidatorResources; +import com.wintecinc.struts.validation.ValidatorUtil; + + +/** + * <p>This class extends <strong>ActionForm</strong> and provides + * basic field validation based on an XML file. The key passed into the + * validator is the action element's 'name' attribute from the + * struts-config.xml which should match the form element's name attribute + * in the validation.xml.</p> + * + * <ul><li>See /WEB-INF/validation.xml for validation rules.</li></ul> + * + * @author David Winterfeldt + * @see org.apache.struts.action.ActionForm +*/ + +public class ValidatorForm extends ActionForm implements Serializable { + /** + * Used to indicate the current page of a multi-page form. + */ + protected int page = 0; + + /** + * Gets page. + */ + public int getPage() { + return page; + } + + /** + * Sets page. + */ + public void setPage(int page) { + this.page = page; + } + + /** + * Validate the properties that have been set from this HTTP request, + * and return an <code>ActionErrors</code> object that encapsulates any + * validation errors that have been found. If no errors are found, return + * <code>null</code> or an <code>ActionErrors</code> object with no + * recorded error messages. + * + * @param mapping The mapping used to select this instance + * @param request The servlet request we are processing + */ + public ActionErrors validate(ActionMapping mapping, + HttpServletRequest request) { + + ActionErrors errors = new ActionErrors(); + Validator validator = initValidator(mapping.getAttribute(), request, errors); + + try { + validator.validate(); + } catch (ValidatorException e) { + log("ValidatorForm::validate() - " + e.getMessage(), e); + } + + return errors; + } + + /** + * Initialize the <code>Validator</code> to perform validation. + * + * @param key The key that the validation rules are under + * (the form elements name attribute). + * @param request The current request object. + * @param errors The object any errors will be stored in. + */ + protected Validator initValidator(String key, HttpServletRequest request, ActionErrors errors) { + ServletContext application = getServlet().getServletContext(); + ValidatorResources resources = ValidatorUtil.getValidatorResources(application); + Locale locale = ValidatorUtil.getLocale(request); + + Validator validator = new Validator(resources, key); + + //validator.setDebug(getServlet().getDebug()); + validator.setPage(getPage()); + + validator.addResource(Validator.SERVLET_CONTEXT_KEY, application); + validator.addResource(Validator.HTTP_SERVLET_REQUEST_KEY, request); + validator.addResource(Validator.LOCALE_KEY, locale); + validator.addResource(Validator.ACTION_ERRORS_KEY, errors); + validator.addResource(Validator.BEAN_KEY, this); + + return validator; + } + + /** + * Convenience method that call the comparable servlet log method and writes + * an explanatory message and a stack trace for a given Throwable exception to the + * servlet log file. + * + * @param message String that describes the error or exception + */ + protected void log(String message) { + if (getServlet().getDebug() >= 1) + getServlet().log(message); + } + + /** + * Convenience method that call the comparable servlet log method and writes + * an explanatory message and a stack trace for a given Throwable exception to the + * servlet log file. + * + * @param message String that describes the error or exception + * @param throwable Throwable error or exception + */ + protected void log(String message, Throwable throwable) { + if (getServlet().getDebug() >= 1) + getServlet().log(message, throwable); + } + + /** + * Reset all properties to their default values. + * + * @param mapping The mapping used to select this instance + * @param request The servlet request we are processing + */ + public void reset(ActionMapping mapping, HttpServletRequest request) { + super.reset(mapping, request); + page = 0; + } + +}