us.mn.state.health.lims.common.util.validator.FieldChecks.java Source code

Java tutorial

Introduction

Here is the source code for us.mn.state.health.lims.common.util.validator.FieldChecks.java

Source

/**
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/ 
* 
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations under
* the License.
* 
* The Original Code is OpenELIS code.
* 
* Copyright (C) The Minnesota Department of Health.  All Rights Reserved.
*/

package us.mn.state.health.lims.common.util.validator;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericTypeValidator;
import us.mn.state.health.lims.common.util.validator.GenericValidator;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.util.ValidatorUtils;
import us.mn.state.health.lims.common.log.LogEvent;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.util.RequestUtils;
import org.apache.struts.validator.Resources;

import us.mn.state.health.lims.common.util.resources.ResourceLocator;

/**
 * <p>
 * This class contains the default validations that are used in the
 * validator-rules.xml file.
 * </p>
 * <p>
 * In general passing in a null or blank will return a null Object or a false
 * boolean. However, nulls and blanks do not result in an error being added to
 * the errors.
 * </p>
 * 
 * @since Struts 1.1
 */
public class FieldChecks extends org.apache.struts.validator.FieldChecks {

    /**
     * Commons Logging instance.
     */

    /**
     * Checks if the field is a valid date. If the field has a datePattern
     * variable, that will be used to format
     * <code>java.text.SimpleDateFormat</code>. If the field has a
     * datePatternStrict variable, that will be used to format
     * <code>java.text.SimpleDateFormat</code> and the length will be checked
     * so '2/12/1999' will not pass validation with the format 'MM/dd/yyyy'
     * because the month isn't two digits. If no datePattern variable is
     * specified, then the field gets the DateFormat.SHORT format for the
     * locale. The setLenient method is set to <code>false</code> for all
     * variations.
     * 
     * @param bean
     *            The bean validation is being performed on.
     * @param va
     *            The <code>ValidatorAction</code> that is currently being
     *            performed.
     * @param field
     *            The <code>Field</code> object associated with the current
     *            field being validated.
     * @param errors
     *            The <code>ActionMessages</code> object to add errors to if
     *            any validation errors occur.
     * @param validator
     *            The <code>Validator</code> instance, used to access other
     *            field values.
     * @param request
     *            Current request object.
     * @return true if valid, false otherwise.
     */
    public static Object validateDate(Object bean, ValidatorAction va, Field field, ActionMessages errors,
            Validator validator, HttpServletRequest request) {
        Object result = null;
        String value = null;
        if (isString(bean)) {
            value = (String) bean;
        } else {
            value = ValidatorUtils.getValueAsString(bean, field.getProperty());
        }
        String datePattern = field.getVarValue("datePattern");
        String datePatternStrict = field.getVarValue("datePatternStrict");
        Locale locale = RequestUtils.getUserLocale(request, null);

        // this is added to use message key
        String datePatternForResources = ResourceLocator.getInstance().getMessageResources().getMessage(locale,
                datePattern);
        if (datePatternForResources != null) {
            datePattern = datePatternForResources;
        }

        datePatternForResources = ResourceLocator.getInstance().getMessageResources().getMessage(locale,
                datePatternStrict);
        if (datePatternForResources != null) {
            datePatternStrict = datePatternForResources;
        }

        if (GenericValidator.isBlankOrNull(value)) {
            return Boolean.TRUE;
        }

        try {
            if (datePattern != null && datePattern.length() > 0) {
                result = GenericTypeValidator.formatDate(value, datePattern, false);
            } else if (datePatternStrict != null && datePatternStrict.length() > 0) {
                result = GenericTypeValidator.formatDate(value, datePatternStrict, true);
            } else {
                result = GenericTypeValidator.formatDate(value, locale);
            }
        } catch (Exception e) {
            //bugzilla 2154
            LogEvent.logError("FieldChecks", "validateDate()", e.toString());
        }

        if (result == null) {
            errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
        }

        return result == null ? Boolean.FALSE : result;
    }

    /**
     * Checks if the field is a valid time HH:MM. 
     * @return true if valid, false otherwise.
     */
    public static boolean validateTime(Object bean, ValidatorAction va, Field field, ActionMessages errors,
            Validator validator, HttpServletRequest request) {

        String value = null;
        if (isString(bean)) {
            value = (String) bean;
        } else {
            value = ValidatorUtils.getValueAsString(bean, field.getProperty());
        }

        try {
            String hours = value.substring(0, 2);
            String minutes = value.substring(3);

            int hh = Integer.parseInt(hours);
            int mm = Integer.parseInt(minutes);

            if (!GenericValidator.isInRange(hh, 0, 23)) {
                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                return false;
            } else if (!GenericValidator.isInRange(mm, 0, 59)) {
                errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
                return false;
            } else {
                return true;
            }
        } catch (Exception ex) {
            //bugzilla 2154
            LogEvent.logError("FieldChecks", "validateTime()", ex.toString());
            return false;
        }
    }

}