KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > him > metadata > range > swing > datetimehandling > DateTimeValuePanel


1 /*
2  * The contents of this file are subject to the
3  * Mozilla Public License Version 1.1 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
9  * See the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * The Initial Developer of the Original Code is Simulacra Media Ltd.
13  * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
14  *
15  * All Rights Reserved.
16  *
17  * Contributor(s):
18  */

19 package org.openharmonise.him.metadata.range.swing.datetimehandling;
20
21 import java.awt.*;
22 import java.text.*;
23 import java.util.*;
24
25 import javax.swing.*;
26
27 import org.openharmonise.him.metadata.range.swing.*;
28 import org.openharmonise.swing.datefield.*;
29 import org.openharmonise.vfs.gui.*;
30 import org.openharmonise.vfs.metadata.*;
31 import org.openharmonise.vfs.metadata.range.*;
32
33
34 /**
35  * @author Matthew Large
36  *
37  */

38 public class DateTimeValuePanel
39     extends AbstractRangeDisplay
40     implements RangeDisplay, LayoutManager, DateFieldListener {
41
42     private static final String JavaDoc XSD_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss G";
43     private SimpleDateFormat df =
44         new java.text.SimpleDateFormat JavaDoc(XSD_DATE_FORMAT);
45
46     protected int m_nHeight = 10;
47
48     private String JavaDoc m_sPreviousText = "";
49
50     protected WarningsLabel m_warnings = null;
51
52     protected JLabel m_errorLabel = null;
53
54     private String JavaDoc m_sValue = "";
55
56     private DateTimeRangeDisplay m_display = null;
57     
58     private JDateField m_dateField = null;
59     
60     /**
61      * @param propInstance
62      */

63     public DateTimeValuePanel(
64         DateTimeRangeDisplay display,
65         PropertyInstance propInstance,
66         String JavaDoc sValue) {
67         super(propInstance);
68         this.m_display = display;
69         this.m_sValue = sValue;
70         this.setup();
71     }
72
73     /* (non-Javadoc)
74      * @see com.simulacramedia.contentmanager.metadata.range.swing.RangeDisplay#getPanel()
75      */

76     public JPanel getPanel() {
77         return null;
78     }
79
80     public void setup() {
81         this.setLayout(this);
82         DateTimeRange range =
83             (DateTimeRange) this
84                 .getPropertyInstance()
85                 .getDefinition()
86                 .getRange();
87
88         String JavaDoc sWarning = "";
89
90         this.m_errorLabel = new JLabel();
91         this.m_errorLabel.setIcon(
92             IconManager.getInstance().getIcon("16-message-confirm.gif"));
93         this.add(this.m_errorLabel);
94
95         if (range.getMinimum() != null && range.getMaximum() != null) {
96             sWarning =
97                 "Please enter a date (ccyy/MM/dd HH:mm) between {"
98                     + this.df.format(range.getMinimum())
99                     + "} and {"
100                     + this.df.format(range.getMaximum())
101                     + "}.";
102         } else if (range.getMaximum() != null) {
103             sWarning =
104                 "Please enter a date (ccyy/MM/dd HH:mm) before {"
105                     + this.df.format(range.getMaximum())
106                     + "}.";
107         } else if (range.getMinimum() != null) {
108             sWarning =
109                 "Please enter a date (ccyy/MM/dd HH:mm) after {"
110                     + this.df.format(range.getMinimum())
111                     + "}.";
112         } else {
113             sWarning = "Please enter a date (ccyy/MM/dd HH:mm).";
114         }
115
116         m_warnings = new WarningsLabel(sWarning);
117         this.add(m_warnings);
118         
119         this.m_dateField = new JDateField("yyyy/MM/dd HH:mm G");
120         this.m_dateField.setBorder( BorderFactory.createEtchedBorder() );
121         this.m_dateField.addDateFieldListener(this);
122         this.m_dateField.setMinimumDate(range.getMinimum());
123         this.m_dateField.setMaximumDate(range.getMaximum());
124         if(this.m_sValue!=null && !this.m_sValue.equals("")) {
125             Date dtValue = null;
126             try {
127                 dtValue = df.parse(this.m_sValue);
128             } catch (Exception JavaDoc e) {
129                 //NO-OP
130
}
131             if(dtValue!=null) {
132                 this.m_dateField.setDate(dtValue);
133             }
134         }
135         this.add(this.m_dateField);
136     }
137
138     /* (non-Javadoc)
139      * @see java.awt.Component#getPreferredSize()
140      */

141     public Dimension getPreferredSize() {
142         this.layoutContainer(null);
143         int nWidth = this.m_warnings.getSize().width + this.m_warnings.getLocation().x;
144         if(this.m_dateField.getSize().width>nWidth) {
145             nWidth =this.m_dateField.getSize().width;
146         }
147         nWidth = nWidth + 60;
148         
149         return new Dimension(nWidth, m_nHeight);
150     }
151
152     /* (non-Javadoc)
153      * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)
154      */

155     public void removeLayoutComponent(Component arg0) {
156         // NO-OP
157
}
158
159     /* (non-Javadoc)
160      * @see java.awt.LayoutManager#layoutContainer(java.awt.Container)
161      */

162     public void layoutContainer(Container arg0) {
163         int nWidth = this.getParent().getWidth() - 18;
164
165         m_warnings.setSize(m_warnings.getPreferredSize());
166         m_warnings.setLocation(20, 0);
167         
168         m_nHeight = m_warnings.getPreferredSize().height + 10;
169         
170         int nXpos = 20;
171         
172
173         this.m_dateField.setSize(this.m_dateField.getPreferredSize());
174         this.m_dateField.setLocation(nXpos, m_nHeight);
175         nXpos = nXpos + this.m_dateField.getSize().width + 10;
176         m_nHeight = m_nHeight + m_dateField.getPreferredSize().height + 10;
177         this.m_errorLabel.setLocation(0,0);
178         this.m_errorLabel.setSize(15, 15);
179         this.repaint();
180     }
181
182     /* (non-Javadoc)
183      * @see java.awt.LayoutManager#addLayoutComponent(java.lang.String, java.awt.Component)
184      */

185     public void addLayoutComponent(String JavaDoc arg0, Component arg1) {
186         // NO-OP
187
}
188
189     /* (non-Javadoc)
190      * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)
191      */

192     public Dimension minimumLayoutSize(Container arg0) {
193         return this.getPreferredSize();
194     }
195
196     /* (non-Javadoc)
197      * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)
198      */

199     public Dimension preferredLayoutSize(Container arg0) {
200         return this.getPreferredSize();
201     }
202
203     protected String JavaDoc getValue() {
204         Date dtValue = this.m_dateField.getDate();
205         String JavaDoc sValue = "";
206         try {
207             sValue = this.df.format(dtValue);
208         } catch(Exception JavaDoc e) {
209             //NO-OP
210
}
211              
212         return sValue;
213     }
214
215     /* (non-Javadoc)
216      * @see com.simulacramedia.contentmanager.metadata.range.swing.AbstractRangeDisplay#isValid()
217      */

218     public boolean isMetadataValid() {
219         return !this.m_errorLabel.getIcon().toString().equals(IconManager.getInstance().getIcon("16-message-error.gif").toString());
220     }
221     
222     private JSpinner getDateSpinner(DateTimeRange range, String JavaDoc sValue) {
223         JSpinner spinner = null;
224         Date dtMax = range.getMaximum();
225         Date dtMin = range.getMinimum();
226         
227
228         Date dtNow = null;
229         
230         if(sValue!=null && sValue.length()>0) {
231             try {
232                 dtNow = this.df.parse(sValue);
233             } catch (ParseException e) {
234                 e.printStackTrace();
235                 dtNow = new Date();
236             }
237         } else {
238             dtNow = new Date();
239         }
240         
241         SpinnerModel dateModel = dateModel = new SpinnerDateModel(dtNow,dtMin,dtMax,Calendar.YEAR);
242
243         spinner = new JSpinner(dateModel);
244
245         spinner.setEditor(new JSpinner.DateEditor(spinner, "yyyy/MM/dd"));
246
247         return spinner;
248     }
249     
250     private JSpinner getTimeSpinner(DateTimeRange range, String JavaDoc sValue) {
251         JSpinner spinner = null;
252         Date dtMax = range.getMaximum();
253         Date dtMin = range.getMinimum();
254         
255
256         Date dtNow = null;
257         
258         if(sValue!=null && sValue.length()>0) {
259             try {
260                 dtNow = this.df.parse(sValue);
261             } catch (ParseException e) {
262                 e.printStackTrace();
263                 dtNow = new Date();
264             }
265         } else {
266             dtNow = new Date();
267         }
268         
269         SpinnerModel dateModel = dateModel = new SpinnerDateModel(dtNow,dtMin,dtMax,Calendar.YEAR);
270
271         spinner = new JSpinner(dateModel);
272
273         spinner.setEditor(new JSpinner.DateEditor(spinner, "HH:mm"));
274
275         return spinner;
276     }
277
278     /* (non-Javadoc)
279      * @see com.simulacramedia.swing.datefield.DateFieldListener#validationFailed(com.simulacramedia.swing.datefield.JDateField, int)
280      */

281     public void validationFailed(JDateField source, int nReason) {
282         this.m_errorLabel.setIcon(
283                         IconManager.getInstance().getIcon("16-message-error.gif"));
284         super.validateTab();
285     }
286
287     /* (non-Javadoc)
288      * @see com.simulacramedia.swing.datefield.DateFieldListener#valueChanged(com.simulacramedia.swing.datefield.JDateField)
289      */

290     public void valueChanged(JDateField source) {
291         this.m_errorLabel.setIcon(
292             IconManager.getInstance().getIcon("16-message-confirm.gif"));
293         this.m_display.valueChanged(this.getValue().trim());
294         super.validateTab();
295     }
296
297 }
298
Popular Tags