/** * 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.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Locale; import us.mn.state.health.lims.common.log.LogEvent; /** * <p>Perform date validations.</p> * <p> * This class is a Singleton; you can retrieve the instance via the * getInstance() method. * </p> * * @since Validator 1.1 */ public class DateValidator extends org.apache.commons.validator.DateValidator { /** * Protected constructor for subclasses to use. */ protected DateValidator() { super(); } /** * <p>Checks if the field is a valid date. The pattern is used with * <code>java.text.SimpleDateFormat</code>. If strict is true, then 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. * The setLenient method is set to <code>false</code> for all.</p> * * @param value The value validation is being performed on. * @param datePattern The pattern passed to <code>SimpleDateFormat</code>. * @param strict Whether or not to have an exact match of the datePattern. */ public boolean isValid(String value, String datePattern, boolean strict) { if (value == null || datePattern == null || datePattern.length() <= 0) { return false; } //System.out.println("value & datePattern " + value + " " + datePattern); SimpleDateFormat formatter = new SimpleDateFormat(datePattern); formatter.setLenient(false); try { formatter.parse(value); } catch (ParseException e) { //bugzilla 2154 LogEvent.logError("DateValidator","isValid()",e.toString()); return false; } if (strict && (datePattern.length() != value.length())) { return false; } return true; } /** * <p>Checks if the field is a valid date. The <code>Locale</code> is * used with <code>java.text.DateFormat</code>. The setLenient method * is set to <code>false</code> for all.</p> * * @param value The value validation is being performed on. * @param locale The locale to use for the date format, defaults to the default * system default if null. */ public boolean isValid(String value, Locale locale) { if (value == null) { return false; } //System.out.println("value & locale " + value + " " + locale); DateFormat formatter = null; if (locale != null) { formatter = DateFormat.getDateInstance(DateFormat.SHORT, locale); } else { formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); } formatter.setLenient(false); try { formatter.parse(value); } catch (ParseException e) { //bugzilla 2154 LogEvent.logError("DateValidator","isValid()",e.toString()); return false; } return true; } }