001/*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2024
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas/
009 * 
010 * All Rights Reserved
011 * 
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.  
014 * 
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 * 
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
023 * GNU Lesser Public License for more details.
024 * 
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program.  If not, see https://www.gnu.org/licenses/.
027 */
028
029package edu.wisc.ssec.mcidasv.data.dateChooser;
030
031import java.beans.PropertyChangeListener;
032import java.util.Date;
033import java.util.Locale;
034
035import javax.swing.JComponent;
036
037/**
038 * All date editors that should be used by a JDateChooser have to implement this
039 * interface.
040 * 
041 * @author Kai Toedter
042 * @version $LastChangedRevision: 105 $
043 * @version $LastChangedDate: 2007-02-16 12:56:29 +0100 (Fr, 16 Feb 2007) $
044 * 
045 */
046public interface IDateEditor {
047
048        /**
049         * 
050         * Returns the date.
051         * 
052         * @return the date
053         */
054        public Date getDate();
055
056        /**
057         * Sets the date. This should be implemented as a bound property, firing the
058         * "date" property.
059         * 
060         * @param date
061         *            the date to set
062         */
063        public void setDate(Date date);
064
065        /**
066         * Sets the date format string, e.g. "MM/dd/yy". If the date format string
067         * is null or invalid, the date format string will be set to the MEDIUM
068         * Simple date format of the current locale.
069         * 
070         * @param dateFormatString
071         *            the date format string
072         */
073        public void setDateFormatString(String dateFormatString);
074
075        /**
076         * Returns tha date format string.
077         * 
078         * @return the date format string
079         */
080        public String getDateFormatString();
081
082        /**
083         * Sets a valid date range for selectable dates. If max is before
084         * min, the default range with no limitation is set.
085         * 
086         * @param min
087         *            the minimum selectable date or null (then the minimum date should be
088         *            set to 01\01\0001)
089         * @param max
090         *            the maximum selectable date or null (then the maximum date should be
091         *            set to 01\01\9999)
092         */
093        public void setSelectableDateRange(Date min, Date max) ;
094
095        /**
096         * Gets the minimum selectable date.
097         * 
098         * @return the minimum selectable date
099         */
100        public Date getMaxSelectableDate();
101        
102        /**
103         * Gets the maximum selectable date.
104         * 
105         * @return the maximum selectable date
106         */
107        public Date getMinSelectableDate();
108
109        /**
110         * Sets the maximum selectable date.
111         * 
112         * @param max maximum selectable date
113         */
114        public void setMaxSelectableDate(Date max);
115
116        /**
117         * Sets the minimum selectable date.
118         * 
119         * @param min minimum selectable date
120         */
121        public void setMinSelectableDate(Date min);
122
123        /**
124         * Returns the UI component, e.g. the actual JTextField implementing the
125         * editor.
126         * 
127         * @return the UI component
128         */
129        public JComponent getUiComponent();
130
131        /**
132         * Sets the locale. Usually this should have impact on the current date
133         * format string.
134         * 
135         * @param locale
136         *            the locale to set
137         */
138        public void setLocale(Locale locale);
139
140        /**
141         * Enables or disables the UI compoment.
142         * 
143         * @param enabled
144         *            true, if the UI component should be enabled.
145         */
146        public void setEnabled(boolean enabled);
147
148        /**
149         * Adds a property change listener that should be added to the implementing
150         * UI component. The UI component should fire a "date" property if the date
151         * changes.
152         * 
153         * @param listener
154         *            the property change listener.
155         */
156        public void addPropertyChangeListener(PropertyChangeListener listener);
157
158        /**
159         * Adds a property change listener that should be added to the implementing
160         * UI component. The UI component should fire a "date" property if the date
161         * changes.
162         * 
163         * @param propertyName
164         *            the property name, e.g. "date"
165         * @param listener
166         *            the property change listener.
167         */
168        public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);
169
170        /**
171         * Removes a property change listener.
172         * 
173         * @param listener
174         *            the property change listener.
175         */
176        public void removePropertyChangeListener(PropertyChangeListener listener);
177
178        /**
179         * Removes the listener from the date editor's property change listeners for the specific property.
180         * 
181         * @param propertyName
182         *            the property to listen for, e.g. "date"
183         * @param listener
184         *            the listener
185         */
186        public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener);
187}