001/*
002 * $Id: IDateEditor.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.beans.PropertyChangeListener;
034import java.util.Date;
035import java.util.Locale;
036
037import javax.swing.JComponent;
038
039/**
040 * All date editors that should be used by a JDateChooser have to implement this
041 * interface.
042 * 
043 * @author Kai Toedter
044 * @version $LastChangedRevision: 105 $
045 * @version $LastChangedDate: 2007-02-16 12:56:29 +0100 (Fr, 16 Feb 2007) $
046 * 
047 */
048public interface IDateEditor {
049
050        /**
051         * 
052         * Returns the date.
053         * 
054         * @return the date
055         */
056        public Date getDate();
057
058        /**
059         * Sets the date. This should be implemented as a bound property, firing the
060         * "date" property.
061         * 
062         * @param date
063         *            the date to set
064         */
065        public void setDate(Date date);
066
067        /**
068         * Sets the date format string, e.g. "MM/dd/yy". If the date format string
069         * is null or invalid, the date format string will be set to the MEDIUM
070         * Simple date format of the current locale.
071         * 
072         * @param dateFormatString
073         *            the date format string
074         */
075        public void setDateFormatString(String dateFormatString);
076
077        /**
078         * Returns tha date format string.
079         * 
080         * @return the date format string
081         */
082        public String getDateFormatString();
083
084        /**
085         * Sets a valid date range for selectable dates. If max is before
086         * min, the default range with no limitation is set.
087         * 
088         * @param min
089         *            the minimum selectable date or null (then the minimum date should be
090         *            set to 01\01\0001)
091         * @param max
092         *            the maximum selectable date or null (then the maximum date should be
093         *            set to 01\01\9999)
094         */
095        public void setSelectableDateRange(Date min, Date max) ;
096
097        /**
098         * Gets the minimum selectable date.
099         * 
100         * @return the minimum selectable date
101         */
102        public Date getMaxSelectableDate();
103        
104        /**
105         * Gets the maximum selectable date.
106         * 
107         * @return the maximum selectable date
108         */
109        public Date getMinSelectableDate();
110
111        /**
112         * Sets the maximum selectable date.
113         * 
114         * @param max maximum selectable date
115         */
116        public void setMaxSelectableDate(Date max);
117
118        /**
119         * Sets the minimum selectable date.
120         * 
121         * @param min minimum selectable date
122         */
123        public void setMinSelectableDate(Date min);
124
125        /**
126         * Returns the UI component, e.g. the actual JTextField implementing the
127         * editor.
128         * 
129         * @return the UI component
130         */
131        public JComponent getUiComponent();
132
133        /**
134         * Sets the locale. Usually this should have impact on the current date
135         * format string.
136         * 
137         * @param locale
138         *            the locale to set
139         */
140        public void setLocale(Locale locale);
141
142        /**
143         * Enables or disables the UI compoment.
144         * 
145         * @param enabled
146         *            true, if the UI component should be enabled.
147         */
148        public void setEnabled(boolean enabled);
149
150        /**
151         * Adds a property change listener that should be added to the implementing
152         * UI component. The UI component should fire a "date" property if the date
153         * changes.
154         * 
155         * @param listener
156         *            the property change listener.
157         */
158        public void addPropertyChangeListener(PropertyChangeListener listener);
159
160        /**
161         * Adds a property change listener that should be added to the implementing
162         * UI component. The UI component should fire a "date" property if the date
163         * changes.
164         * 
165         * @param propertyName
166         *            the property name, e.g. "date"
167         * @param listener
168         *            the property change listener.
169         */
170        public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);
171
172        /**
173         * Removes a property change listener.
174         * 
175         * @param listener
176         *            the property change listener.
177         */
178        public void removePropertyChangeListener(PropertyChangeListener listener);
179
180        /**
181         * Removes the listener from the date editor's property change listeners for the specific property.
182         * 
183         * @param propertyName
184         *            the property to listen for, e.g. "date"
185         * @param listener
186         *            the listener
187         */
188        public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener);
189}