Package com.adito.input.validators

Source Code of com.adito.input.validators.StringValidator

        /*
*  Adito
*
*  Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU General Public License
*  as published by the Free Software Foundation; either version 2 of
*  the License, or (at your option) any later version.
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public
*  License along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
     
package com.adito.input.validators;

import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.adito.boot.CodedException;
import com.adito.boot.PropertyDefinition;
import com.adito.boot.PropertyValidator;
import com.adito.boot.Util;
import com.adito.core.CoreException;

/**
* {@link PropertyValidator} implementation that validates string input and
* accepts a number of <i>Validator properties</i>.
* <ul>
* <li><b>minLength</b> - The minimum string length. This defaults to
* <code>zero</code></li>
* <li><b>maxLength</b> - The maximum string value. This defaults to
* <code>255</code>
* <li><b>regExp</b> - A regular expression to validate against. By default no
* pattern is matched</li>
* <li><b>pattern</b> - A pattern to validate against. By default no pattern
* is matched</li>
* <li><b>trim</b> - Boolean indicating whether to trim before validating
* (defaults to true)
* </ul>
*/
public class StringValidator implements PropertyValidator {

  final static Log log = LogFactory.getLog(IntegerValidator.class);

  private int minLength = 0;
  private int maxLength = 255;
  private String regExp = "", pattern = "";
  private boolean trim;
 
  //
  protected int regExpErrCode = ErrorConstants.ERR_STRING_DOESNT_MATCH_REGEXP;

  /**
   * Constructor.
   *
   * @param minLength minimum length
   * @param maxLength maximum length
   * @param regExp regular expression or <code>null</code> not to check
   * @param pattern simple pattern or <code>null</code> not to check
   * @param trim trim string before validating
   */
  public StringValidator(int minLength, int maxLength, String regExp, String pattern, boolean trim) {
    this.minLength = minLength;
    this.maxLength = maxLength;
    this.regExp = regExp;
    this.pattern = pattern;
    this.trim = trim;
  }

  /**
   * Constructor. By default uses <code>zero</code> and <code>255</code>.
   *
   */
  public StringValidator() {
  }

  /*
   * (non-Javadoc)
   *
   * @see com.adito.boot.PropertyValidator#validate(com.adito.boot.PropertyDefinition,
   *      java.lang.String, java.util.Properties)
   */
  public void validate(PropertyDefinition definition, String value, Properties properties) throws CodedException {
    //
    if ("true".equalsIgnoreCase(properties == null ? "true" : properties.getProperty("trim", String.valueOf(trim)))) {
      value = value.trim();
    }

    // Get the range
    int min = minLength;
    try {
      if (properties != null && properties.containsKey("minLength"))
        min = Integer.parseInt(properties.getProperty("minLength"));
    } catch (NumberFormatException nfe) {
      log.error("Failed to get minimum value for validator.", nfe);
      throw new CoreException(ErrorConstants.ERR_INTERNAL_ERROR,
              ErrorConstants.CATEGORY_NAME,
              ErrorConstants.BUNDLE_NAME,
              null,
              value);
    }
    int max = maxLength;
    try {
      if (properties != null && properties.containsKey("maxLength"))
        max = Integer.parseInt(properties.getProperty("maxLength"));
    } catch (NumberFormatException nfe) {
      log.error("Failed to get maximum value for validator.", nfe);
      throw new CoreException(ErrorConstants.ERR_INTERNAL_ERROR,
              ErrorConstants.CATEGORY_NAME,
              ErrorConstants.BUNDLE_NAME,
              null,
              value);
    }

    // Validate
    if (value.length() < min) {
      throw new CoreException(ErrorConstants.ERR_STRING_TOO_SHORT,
              ErrorConstants.CATEGORY_NAME,
              ErrorConstants.BUNDLE_NAME,
              null,
              String.valueOf(min),
              String.valueOf(max),
              value,
              null);
    }
    if (value.length() > max) {
      throw new CoreException(ErrorConstants.ERR_STRING_TOO_LONG,
              ErrorConstants.CATEGORY_NAME,
              ErrorConstants.BUNDLE_NAME,
              null,
              String.valueOf(min),
              String.valueOf(max),
              value,
              null);
    }

    // Regular expression
    String regExp = properties == null ? this.regExp : Util.trimmedOrBlank(properties.getProperty("regExp", this.regExp));
    if (regExp != null && !regExp.equals("") && !value.matches(regExp)) {
      throw new CoreException(regExpErrCode,
              ErrorConstants.CATEGORY_NAME,
              ErrorConstants.BUNDLE_NAME,
              null,
              String.valueOf(regExp),
              value,
              null,
              null);

    }

    // Simple pattern
    String pattern = Util.trimmedOrBlank(properties == null ? this.pattern : properties.getProperty("pattern", this.pattern));
    if (!pattern.equals("")) {
      pattern = Util.parseSimplePatternToRegExp(pattern);
      if(!value.matches(pattern)) {
        throw new CoreException(ErrorConstants.ERR_STRING_DOESNT_MATCH_SIMPLE_PATTERN,
                ErrorConstants.CATEGORY_NAME,
                ErrorConstants.BUNDLE_NAME,
                null,
                String.valueOf(pattern),
                value,
                null,
                null);
      }
    }
  }

}
TOP

Related Classes of com.adito.input.validators.StringValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.