001/*
002 * $Id: DateUtil.java,v 1.2 2011/03/24 16:06:33 davep Exp $
003 *
004 * This file is part of McIDAS-V
005 *
006 * Copyright 2007-2011
007 * Space Science and Engineering Center (SSEC)
008 * University of Wisconsin - Madison
009 * 1225 W. Dayton Street, Madison, WI 53706, USA
010 * https://www.ssec.wisc.edu/mcidas
011 * 
012 * All Rights Reserved
013 * 
014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015 * some McIDAS-V source code is based on IDV and VisAD source code.  
016 * 
017 * McIDAS-V is free software; you can redistribute it and/or modify
018 * it under the terms of the GNU Lesser Public License as published by
019 * the Free Software Foundation; either version 3 of the License, or
020 * (at your option) any later version.
021 * 
022 * McIDAS-V is distributed in the hope that it will be useful,
023 * but WITHOUT ANY WARRANTY; without even the implied warranty of
024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
025 * GNU Lesser Public License for more details.
026 * 
027 * You should have received a copy of the GNU Lesser Public License
028 * along with this program.  If not, see http://www.gnu.org/licenses.
029 */
030
031package edu.wisc.ssec.mcidasv.data.dateChooser;
032
033import java.util.Calendar;
034import java.util.Date;
035
036/**
037 *  A utility class for some date operations.
038 * 
039 * @author Kai Toedter
040 * @version $LastChangedRevision: 95 $
041 * @version $LastChangedDate: 2006-05-05 18:43:15 +0200 (Fr, 05 Mai 2006) $
042 */
043public class DateUtil {
044        protected Date minSelectableDate;
045
046        protected Date maxSelectableDate;
047
048        protected Date defaultMinSelectableDate;
049
050        protected Date defaultMaxSelectableDate;
051
052        public DateUtil() {
053                Calendar tmpCalendar = Calendar.getInstance();
054                tmpCalendar.set(1, 0, 1, 1, 1);
055                defaultMinSelectableDate = tmpCalendar.getTime();
056                minSelectableDate = defaultMinSelectableDate;
057                tmpCalendar.set(9999, 0, 1, 1, 1);
058                defaultMaxSelectableDate = tmpCalendar.getTime();
059                maxSelectableDate = defaultMaxSelectableDate;
060        }
061
062        /**
063         * Sets a valid date range for selectable dates. If max is before min, the
064         * default range with no limitation is set.
065         * 
066         * @param min
067         *            the minimum selectable date or null (then the minimum date is
068         *            set to 01\01\0001)
069         * @param max
070         *            the maximum selectable date or null (then the maximum date is
071         *            set to 01\01\9999)
072         */
073        public void setSelectableDateRange(Date min, Date max) {
074                if (min == null) {
075                        minSelectableDate = defaultMinSelectableDate;
076                } else {
077                        minSelectableDate = min;
078                }
079                if (max == null) {
080                        maxSelectableDate = defaultMaxSelectableDate;
081                } else {
082                        maxSelectableDate = max;
083                }
084                if (maxSelectableDate.before(minSelectableDate)) {
085                        minSelectableDate = defaultMinSelectableDate;
086                        maxSelectableDate = defaultMaxSelectableDate;
087                }
088        }
089
090        /**
091         * Sets the maximum selectable date. If null, the date 01\01\9999 will be set instead.
092         * 
093         * @param max the maximum selectable date
094         * 
095         * @return the maximum selectable date
096         */
097        public Date setMaxSelectableDate(Date max) {
098                if (max == null) {
099                        maxSelectableDate = defaultMaxSelectableDate;
100                } else {
101                        maxSelectableDate = max;
102                }
103                return maxSelectableDate;
104        }
105
106        /**
107         * Sets the minimum selectable date. If null, the date 01\01\0001 will be set instead.
108         * 
109         * @param min the minimum selectable date
110         * 
111         * @return the minimum selectable date
112         */
113        public Date setMinSelectableDate(Date min) {
114                if (min == null) {
115                        minSelectableDate = defaultMinSelectableDate;
116                } else {
117                        minSelectableDate = min;
118                }
119                return minSelectableDate;
120        }
121
122        /**
123         * Gets the maximum selectable date.
124         * 
125         * @return the maximum selectable date
126         */
127        public Date getMaxSelectableDate() {
128                return maxSelectableDate;
129        }
130
131        /**
132         * Gets the minimum selectable date.
133         * 
134         * @return the minimum selectable date
135         */
136        public Date getMinSelectableDate() {
137                return minSelectableDate;
138        }
139
140        /**
141         * Checks a given date if it is in the formally specified date range.
142         * 
143         * @param date
144         *            the date to check
145         * @return true, if the date is within minSelectableDate and
146         *         maxSelectableDate
147         */
148        public boolean checkDate(Date date) {
149                Calendar calendar = Calendar.getInstance();
150                calendar.setTime(date);
151                calendar.set(Calendar.HOUR_OF_DAY, 0);
152                calendar.set(Calendar.MINUTE, 0);
153                calendar.set(Calendar.SECOND, 0);
154                calendar.set(Calendar.MILLISECOND, 0);
155
156                Calendar minCal = Calendar.getInstance();
157                minCal.setTime(minSelectableDate);
158                minCal.set(Calendar.HOUR_OF_DAY, 0);
159                minCal.set(Calendar.MINUTE, 0);
160                minCal.set(Calendar.SECOND, 0);
161                minCal.set(Calendar.MILLISECOND, 0);
162
163                Calendar maxCal = Calendar.getInstance();
164                maxCal.setTime(maxSelectableDate);
165                maxCal.set(Calendar.HOUR_OF_DAY, 0);
166                maxCal.set(Calendar.MINUTE, 0);
167                maxCal.set(Calendar.SECOND, 0);
168                maxCal.set(Calendar.MILLISECOND, 0);
169
170                return !(calendar.before(minCal) || calendar.after(maxCal));
171        }
172
173}