Project: Calendar-Application
/*
 *  DateUtil.java  - Date handling utilities 
 *  Copyright (C) 2006 Kai Toedter 
 *  kai@toedter.com 
 *  www.toedter.com 
 * 
 *  This program is free software; you can redistribute it and/or 
 *  modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. 
 * 
 *  You should have received a copy of the GNU Lesser 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.toedter.calendar; 
 
import java.util.Calendar; 
import java.util.Date; 
 
/**
 *  A utility class for some date operations. 
 *  
 * @author Kai Toedter 
 * @version $LastChangedRevision: 95 $ 
 * @version $LastChangedDate: 2006-05-05 18:43:15 +0200 (Fr, 05 Mai 2006) $ 
 */
 
public class DateUtil { 
 protected Date minSelectableDate; 
 
 protected Date maxSelectableDate; 
 
 protected Date defaultMinSelectableDate; 
 
 protected Date defaultMaxSelectableDate; 
 
 public DateUtil() { 
  Calendar tmpCalendar = Calendar.getInstance(); 
  tmpCalendar.set(10111); 
  defaultMinSelectableDate = tmpCalendar.getTime(); 
  minSelectableDate = defaultMinSelectableDate; 
  tmpCalendar.set(99990111); 
  defaultMaxSelectableDate = tmpCalendar.getTime(); 
  maxSelectableDate = defaultMaxSelectableDate; 
 
 
 /**
  * Sets a valid date range for selectable dates. If max is before min, the 
  * default range with no limitation is set. 
  *  
  * @param min 
  *            the minimum selectable date or null (then the minimum date is 
  *            set to 01\01\0001) 
  * @param max 
  *            the maximum selectable date or null (then the maximum date is 
  *            set to 01\01\9999) 
  */
 
 public void setSelectableDateRange(Date min, Date max) { 
  if (min == null) { 
   minSelectableDate = defaultMinSelectableDate; 
  else { 
   minSelectableDate = min; 
  
  if (max == null) { 
   maxSelectableDate = defaultMaxSelectableDate; 
  else { 
   maxSelectableDate = max; 
  
  if (maxSelectableDate.before(minSelectableDate)) { 
   minSelectableDate = defaultMinSelectableDate; 
   maxSelectableDate = defaultMaxSelectableDate; 
  
 
 
 /**
  * Sets the maximum selectable date. If null, the date 01\01\9999 will be set instead. 
  *  
  * @param max the maximum selectable date 
  *  
  * @return the maximum selectable date 
  */
 
 public Date setMaxSelectableDate(Date max) { 
  if (max == null) { 
   maxSelectableDate = defaultMaxSelectableDate; 
  else { 
   maxSelectableDate = max; 
  
  return maxSelectableDate; 
 
 
 /**
  * Sets the minimum selectable date. If null, the date 01\01\0001 will be set instead. 
  *  
  * @param min the minimum selectable date 
  *  
  * @return the minimum selectable date 
  */
 
 public Date setMinSelectableDate(Date min) { 
  if (min == null) { 
   minSelectableDate = defaultMinSelectableDate; 
  else { 
   minSelectableDate = min; 
  
  return minSelectableDate; 
 
 
 /**
  * Gets the maximum selectable date. 
  *  
  * @return the maximum selectable date 
  */
 
 public Date getMaxSelectableDate() { 
  return maxSelectableDate; 
 
 
 /**
  * Gets the minimum selectable date. 
  *  
  * @return the minimum selectable date 
  */
 
 public Date getMinSelectableDate() { 
  return minSelectableDate; 
 
 
 /**
  * Checks a given date if it is in the formally specified date range. 
  *  
  * @param date 
  *            the date to check 
  * @return true, if the date is within minSelectableDate and 
  *         maxSelectableDate 
  */
 
 public boolean checkDate(Date date) { 
  Calendar calendar = Calendar.getInstance(); 
  calendar.setTime(date); 
  calendar.set(Calendar.HOUR_OF_DAY, 0); 
  calendar.set(Calendar.MINUTE, 0); 
  calendar.set(Calendar.SECOND, 0); 
  calendar.set(Calendar.MILLISECOND, 0); 
 
  Calendar minCal = Calendar.getInstance(); 
  minCal.setTime(minSelectableDate); 
  minCal.set(Calendar.HOUR_OF_DAY, 0); 
  minCal.set(Calendar.MINUTE, 0); 
  minCal.set(Calendar.SECOND, 0); 
  minCal.set(Calendar.MILLISECOND, 0); 
 
  Calendar maxCal = Calendar.getInstance(); 
  maxCal.setTime(maxSelectableDate); 
  maxCal.set(Calendar.HOUR_OF_DAY, 0); 
  maxCal.set(Calendar.MINUTE, 0); 
  maxCal.set(Calendar.SECOND, 0); 
  maxCal.set(Calendar.MILLISECOND, 0); 
   
  return !(calendar.before(minCal) || calendar.after(maxCal)); 
 
 
}