ca.uoguelph.ccs.portal.services.feedback.beans.FeedbackValidator.java Source code

Java tutorial

Introduction

Here is the source code for ca.uoguelph.ccs.portal.services.feedback.beans.FeedbackValidator.java

Source

/*******************************************************************************
* Copyright 2005, The Board of Regents of the University of Wisconsin System.
* All rights reserved.
*
* A non-exclusive worldwide royalty-free license is granted for this Software.
* Permission to use, copy, modify, and distribute this Software and its
* documentation, with or without modification, for any purpose is granted
* provided that such redistribution and use in source and binary forms, with or
* without modification meets the following conditions:
*
* 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. Redistributions of any form whatsoever must retain the following
* acknowledgement:
*
* "This product includes software developed by The Board of Regents of
* the University of Wisconsin System.
*
*THIS SOFTWARE IS PROVIDED BY THE BOARD OF REGENTS OF THE UNIVERSITY OF
*WISCONSIN SYSTEM "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 BOARD OF REGENTS OF
*THE UNIVERSITY OF WISCONSIN SYSTEM 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.
*******************************************************************************/
package ca.uoguelph.ccs.portal.services.feedback.beans;

import java.util.regex.Pattern;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

/**
 * Validator to apply desired requirements for fields in the 
 * Feedback form:
 * 
 * - if the telephone number field is not empty, make sure it matches
 *    the regular expression that defines a valid phone number.
 * - if the email address field is not empty, make sure it matches
 *    the regular expression that defines a valid email address.
 * - verify the subject field contains data
 * - verify the details field contains data
 * 
 * This class also truncates the subject to 68 characters, a limit
 * defined by the format of the email message.
 * 
 * @author nblair@doit.wisc.edu
 * @version $Header: /usr/local/repos/portal/services/feedback/source/ca/uoguelph/ccs/portal/services/feedback/beans/FeedbackValidator.java,v 1.1 2006/07/09 11:28:14 ljairath Exp $
 */
public class FeedbackValidator implements Validator {

    private static final String PHONE_REGEXP = "(\\({0,1})(\\d{3})(\\){0,1})(\\s|-)*(\\d{3})(\\s|-)*(\\d{4})";

    private static final String EMAIL_REGEXP = "^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$";

    private static final int MAX_SUBJECT_LENGTH = 128;

    private static final Pattern phonePattern = Pattern.compile(PHONE_REGEXP);
    private static final Pattern emailPattern = Pattern.compile(EMAIL_REGEXP, Pattern.CASE_INSENSITIVE);

    /* (non-Javadoc)
     * @see org.springframework.validation.Validator#supports(java.lang.Class)
     */
    public boolean supports(Class clazz) {
        return Feedback.class.equals(clazz);
    }

    /* (non-Javadoc)
     * @see org.springframework.validation.Validator#validate(java.lang.Object, org.springframework.validation.Errors)
     */
    public void validate(Object command, Errors errors) {
        Feedback feedback = (Feedback) command;
        //ValidationUtils.rejectIfEmpty(errors, "subject", "required.subject", "Subject is required");
        //ValidationUtils.rejectIfEmpty(errors, "subject", "required.subject", "Channel is required");
        ValidationUtils.rejectIfEmpty(errors, "subject", "required.subject", "Subject is required");
        ValidationUtils.rejectIfEmpty(errors, "details", "required.details", "Feedback is required");
        validateEmail(feedback.getEmailAddress(), errors);

        // TODO check feedback substring call
        // TODO determine if this should be moved to the MessageFormatterImpl
        if (feedback.getSubject().length() >= MAX_SUBJECT_LENGTH) {
            feedback.setSubject(feedback.getSubject().substring(0, MAX_SUBJECT_LENGTH - 1));
        }
    }

    private void validateEmail(String email, Errors errors) {
        if (email != null && !"".equals(email)) {
            if (!emailPattern.matcher(email).matches()) {
                errors.rejectValue("emailAddress", "invalid.email", "Email address is invalid");
            }
        }
    }
}