Java tutorial
/* * 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); } } } }