/** * 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. * * Contributor(s): CIRG, University of Washington, Seattle WA. */ package us.mn.state.health.lims.common.provider.validation; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.validator.GenericValidator; import org.apache.commons.validator.routines.DateValidator; import us.mn.state.health.lims.common.action.IActionConstants; import us.mn.state.health.lims.common.servlet.validation.AjaxServlet; import us.mn.state.health.lims.common.util.DateUtil; import us.mn.state.health.lims.common.util.SystemConfiguration; public class DateValidationProvider extends BaseValidationProvider { public static final String PAST = "past"; public static final String FUTURE = "future"; public DateValidationProvider() { super(); } public DateValidationProvider(AjaxServlet ajaxServlet) { this.ajaxServlet = ajaxServlet; } public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // get id from request String dateString = request.getParameter("date"); String relative = request.getParameter("relativeToNow"); String formField = request.getParameter("field"); String result = INVALID; if (DateUtil.yearSpecified(dateString)) { dateString = DateUtil.normalizeAmbiguousDate(dateString); Date date = getDate(dateString); result = validateDate(date, relative); } ajaxServlet.sendData(formField, result, request, response); } public Date getDate(String date) { Locale locale = SystemConfiguration.getInstance().getDateLocale(); return DateValidator.getInstance().validate(date, locale); } public String validateDate(Date date, String relative) { String result = VALID; if (date == null) { result = INVALID; } else if (!GenericValidator.isBlankOrNull(relative)) { Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date today = calendar.getTime(); int dateDiff = date.compareTo(today); if (relative.equalsIgnoreCase(PAST) && dateDiff > 0) { result = IActionConstants.INVALID_TO_LARGE; } else if (relative.equalsIgnoreCase(FUTURE) && dateDiff < 0) { result = IActionConstants.INVALID_TO_SMALL; } } return result; } }