001: /*
002: * The contents of this file are subject to the
003: * Mozilla Public License Version 1.1 (the "License");
004: * you may not use this file except in compliance with the License.
005: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
006: *
007: * Software distributed under the License is distributed on an "AS IS"
008: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
009: * See the License for the specific language governing rights and
010: * limitations under the License.
011: *
012: * The Initial Developer of the Original Code is Simulacra Media Ltd.
013: * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
014: *
015: * All Rights Reserved.
016: *
017: * Contributor(s):
018: */
019: package org.openharmonise.him.metadata.range.swing.range.details;
020:
021: import java.awt.*;
022: import java.awt.event.*;
023: import java.text.*;
024:
025: import javax.swing.*;
026:
027: import org.openharmonise.him.metadata.range.swing.range.*;
028: import org.openharmonise.swing.datefield.*;
029: import org.openharmonise.vfs.metadata.*;
030: import org.openharmonise.vfs.metadata.range.*;
031: import org.openharmonise.vfs.metadata.value.*;
032:
033: /**
034: * @author Matthew Large
035: * @version $Revision: 1.1 $
036: *
037: */
038: public class DateDetails extends AbstractRangeDetails implements
039: ActionListener, LayoutManager, KeyListener, DateFieldListener {
040:
041: private JLabel m_minLabel = null;
042: private JDateField m_minDateField = null;
043:
044: private JLabel m_maxLabel = null;
045: private JDateField m_maxDateField = null;
046:
047: private JLabel m_includeTimeLabel = null;
048: private JCheckBox m_includeTimeCheck = null;
049:
050: private RangeValue m_value = null;
051: private Range m_range = null;
052:
053: /**
054: * @param propInst
055: * @param sTitle
056: */
057: public DateDetails(PropertyInstance propInst) {
058: super (propInst, "Date details");
059: this .setup();
060: }
061:
062: private void setup() {
063: this .setLayout(this );
064:
065: this .m_includeTimeLabel = new JLabel("Include time");
066: this .add(this .m_includeTimeLabel);
067: this .m_includeTimeCheck = new JCheckBox();
068: this .m_includeTimeCheck.addActionListener(this );
069: this .add(this .m_includeTimeCheck);
070:
071: this .m_minLabel = new JLabel("Minimum");
072: this .add(m_minLabel);
073:
074: this .m_maxLabel = new JLabel("Maximum");
075: this .add(m_maxLabel);
076:
077: if (this .getPropertyInstance().getValues().size() > 0) {
078: this .m_value = (RangeValue) this .getPropertyInstance()
079: .getValues().get(0);
080: Range range = (Range) this .m_value.getRange();
081:
082: if (range == null) {
083: this .m_range = (Range) new DateTimeRange();
084: this .m_value
085: .setRange((org.openharmonise.vfs.metadata.Range) m_range);
086: } else {
087: this .m_range = (Range) range;
088: }
089:
090: SimpleDateFormat format = null;
091:
092: if (this .m_range instanceof DateTimeRange) {
093: this .m_minDateField = new JDateField(
094: DateTimeRange.XSD_DATE_FORMAT);
095: this .m_minDateField.addDateFieldListener(this );
096: this .add(m_minDateField);
097:
098: this .m_maxDateField = new JDateField(
099: DateTimeRange.XSD_DATE_FORMAT);
100: this .m_maxDateField.addDateFieldListener(this );
101: this .add(m_maxDateField);
102:
103: format = new SimpleDateFormat(
104: DateTimeRange.XSD_DATE_FORMAT);
105: if (((DateTimeRange) this .m_range).getMinimum() != null) {
106: this .m_minDateField
107: .setDate(((DateTimeRange) this .m_range)
108: .getMinimum());
109: }
110: if (((DateTimeRange) this .m_range).getMaximum() != null) {
111: this .m_maxDateField
112: .setDate(((DateTimeRange) this .m_range)
113: .getMaximum());
114: }
115: this .m_includeTimeCheck.setSelected(true);
116: } else if (this .m_range instanceof DateRange) {
117: this .m_minDateField = new JDateField(
118: DateRange.XSD_DATE_FORMAT);
119: this .m_minDateField.addDateFieldListener(this );
120: this .add(m_minDateField);
121:
122: this .m_maxDateField = new JDateField(
123: DateRange.XSD_DATE_FORMAT);
124: this .m_maxDateField.addDateFieldListener(this );
125: this .add(m_maxDateField);
126:
127: format = new SimpleDateFormat(DateRange.XSD_DATE_FORMAT);
128: if (((DateRange) this .m_range).getMinimum() != null) {
129: this .m_minDateField
130: .setDate(((DateTimeRange) this .m_range)
131: .getMinimum());
132: }
133: if (((DateRange) this .m_range).getMaximum() != null) {
134: this .m_maxDateField
135: .setDate(((DateTimeRange) this .m_range)
136: .getMaximum());
137: }
138: this .m_includeTimeCheck.setSelected(false);
139: }
140: }
141: }
142:
143: /* (non-Javadoc)
144: * @see java.awt.LayoutManager#layoutContainer(java.awt.Container)
145: */
146: public void layoutContainer(Container arg0) {
147:
148: this .m_includeTimeCheck.setSize(this .m_includeTimeCheck
149: .getPreferredSize());
150: this .m_includeTimeCheck.setLocation(20, 20);
151:
152: this .m_includeTimeLabel.setSize(120, this .m_minLabel
153: .getPreferredSize().height);
154: this .m_includeTimeLabel.setLocation(50, 20);
155:
156: this .m_minLabel.setSize(this .m_minLabel.getPreferredSize());
157: this .m_minLabel.setLocation(20, 50);
158:
159: this .m_minDateField.setSize(m_minDateField.getPreferredSize());
160: this .m_minDateField.setLocation(20, 70);
161:
162: this .m_maxLabel.setSize(this .m_maxLabel.getPreferredSize());
163: this .m_maxLabel.setLocation(20, 110);
164:
165: this .m_maxDateField.setSize(m_maxDateField.getPreferredSize());
166: this .m_maxDateField.setLocation(20, 130);
167:
168: }
169:
170: /* (non-Javadoc)
171: * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
172: */
173: public void keyPressed(KeyEvent arg0) {
174: }
175:
176: /* (non-Javadoc)
177: * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
178: */
179: public void keyReleased(KeyEvent ke) {
180: }
181:
182: /* (non-Javadoc)
183: * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
184: */
185: public void keyTyped(KeyEvent arg0) {
186: }
187:
188: /* (non-Javadoc)
189: * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
190: */
191: public void actionPerformed(ActionEvent arg0) {
192: Range currentRange = (Range) this .m_range;
193: Range newRange = null;
194: if (this .m_includeTimeCheck.isSelected()) {
195: DateRange tempCurrRange = (DateRange) currentRange;
196: DateTimeRange tempRange = new DateTimeRange();
197: tempRange.setMaximum(tempCurrRange.getMaximum());
198: tempRange.setMinimum(tempCurrRange.getMinimum());
199: this .m_range = (Range) tempRange;
200: this .m_value
201: .setRange((org.openharmonise.vfs.metadata.Range) this .m_range);
202:
203: JDateField newMinDateField = new JDateField(
204: DateTimeRange.XSD_DATE_FORMAT);
205: newMinDateField.setDate(tempCurrRange.getMinimum());
206: newMinDateField.addDateFieldListener(this );
207:
208: this .remove(this .m_minDateField);
209: this .m_minDateField = newMinDateField;
210: this .add(this .m_minDateField);
211:
212: JDateField newMaxDateField = new JDateField(
213: DateTimeRange.XSD_DATE_FORMAT);
214: newMaxDateField.setDate(tempCurrRange.getMaximum());
215: newMaxDateField.addDateFieldListener(this );
216:
217: this .remove(this .m_maxDateField);
218: this .m_maxDateField = newMaxDateField;
219: this .add(this .m_maxDateField);
220:
221: this .fireRangeDetailsChanged(m_value);
222: this .revalidate();
223: this .repaint();
224: } else {
225: DateTimeRange tempCurrRange = (DateTimeRange) currentRange;
226: DateRange tempRange = new DateRange();
227: tempRange.setMaximum(tempCurrRange.getMaximum());
228: tempRange.setMinimum(tempCurrRange.getMinimum());
229: this .m_range = (Range) tempRange;
230: this .m_value
231: .setRange((org.openharmonise.vfs.metadata.Range) this .m_range);
232:
233: JDateField newMinDateField = new JDateField(
234: DateRange.XSD_DATE_FORMAT);
235: newMinDateField.setDate(tempCurrRange.getMinimum());
236: newMinDateField.addDateFieldListener(this );
237:
238: this .remove(this .m_minDateField);
239: this .m_minDateField = newMinDateField;
240: this .add(this .m_minDateField);
241:
242: JDateField newMaxDateField = new JDateField(
243: DateRange.XSD_DATE_FORMAT);
244: newMaxDateField.setDate(tempCurrRange.getMaximum());
245: newMaxDateField.addDateFieldListener(this );
246:
247: this .remove(this .m_maxDateField);
248: this .m_maxDateField = newMaxDateField;
249: this .add(this .m_maxDateField);
250:
251: this .fireRangeDetailsChanged(m_value);
252: this .revalidate();
253: this .repaint();
254: }
255: }
256:
257: /* (non-Javadoc)
258: * @see com.simulacramedia.swing.datefield.DateFieldListener#validationFailed(com.simulacramedia.swing.datefield.JDateField, int)
259: */
260: public void validationFailed(JDateField source, int nReason) {
261: }
262:
263: /* (non-Javadoc)
264: * @see com.simulacramedia.swing.datefield.DateFieldListener#valueChanged(com.simulacramedia.swing.datefield.JDateField)
265: */
266: public void valueChanged(JDateField source) {
267: if (source == this .m_minDateField) {
268: if (this .m_range instanceof DateRange) {
269: ((DateRange) this .m_range)
270: .setMinimum(this .m_minDateField.getDate());
271: } else {
272: ((DateTimeRange) this .m_range)
273: .setMinimum(this .m_minDateField.getDate());
274: }
275: this .fireRangeDetailsChanged(m_value);
276: } else if (source == this .m_maxDateField) {
277: if (this .m_range instanceof DateRange) {
278: ((DateRange) this .m_range)
279: .setMaximum(this .m_maxDateField.getDate());
280: } else {
281: ((DateTimeRange) this.m_range)
282: .setMaximum(this.m_maxDateField.getDate());
283: }
284: this.fireRangeDetailsChanged(m_value);
285: }
286: }
287:
288: }
|