001 /*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2013
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 http://www.gnu.org/licenses.
027 */
028
029 package edu.wisc.ssec.mcidasv.data;
030
031 import static javax.swing.GroupLayout.Alignment.BASELINE;
032 import static javax.swing.GroupLayout.Alignment.LEADING;
033 import static javax.swing.LayoutStyle.ComponentPlacement.RELATED;
034 import static javax.swing.LayoutStyle.ComponentPlacement.UNRELATED;
035
036 import edu.wisc.ssec.mcidasv.Constants;
037 import edu.wisc.ssec.mcidasv.data.adde.sgp4.Time;
038 import edu.wisc.ssec.mcidasv.data.dateChooser.*;
039
040 import java.awt.Dimension;
041 import java.rmi.RemoteException;
042 import java.util.Calendar;
043 import java.util.Date;
044
045 import javax.swing.*;
046
047 import org.slf4j.Logger;
048 import org.slf4j.LoggerFactory;
049
050 import ucar.unidata.data.DataSelection;
051 import ucar.unidata.data.DataSelectionComponent;
052 import ucar.unidata.data.DataSourceImpl;
053
054 import visad.VisADException;
055
056 public class TimeRangeSelection extends DataSelectionComponent implements Constants {
057
058 private static final Logger logger = LoggerFactory.getLogger(TimeRangeSelection.class);
059
060 private JTextField beginTimeFld;
061 private JTextField endTimeFld;
062 private String defaultBegTime = "00:00:00";
063 private String defaultEndTime = "23:59:59";
064 private Date defaultDay = null;
065
066 private JDateChooser begDay = null;
067 private JDateChooser endDay = null;
068
069 protected static final String PROP_BEGTIME = "BeginTime";
070 protected static final String PROP_ENDTIME = "EndTime";
071 protected static final String PROP_BTIME = "BTime";
072 protected static final String PROP_ETIME = "ETime";
073 protected static final String PROP_YEAR = "Year";
074 protected static final String PROP_MONTH = "Month";
075 protected static final String PROP_DAY = "Day";
076 protected static final String PROP_HOURS = "Hours";
077 protected static final String PROP_MINS = "Mins";
078 protected static final String PROP_SECS = "Secs";
079
080 private JPanel timeRangeComp = new JPanel();
081
082 public TimeRangeSelection(DataSourceImpl dataSource)
083 throws VisADException, RemoteException {
084 super("Time Range");
085 }
086
087 protected JComponent doMakeContents() {
088
089 logger.debug("creating the TimeRangeSelection panel...");
090 JLabel begLab = new JLabel(" Begin");
091 JLabel endLab = new JLabel(" End");
092 JLabel begTimeLab = new JLabel(" Time:");
093 JLabel endTimeLab = new JLabel(" Time:");
094 JLabel begDateLab = new JLabel(" Date:");
095 JLabel endDateLab = new JLabel(" Date:");
096 beginTimeFld = new JTextField(defaultBegTime, 8);
097 beginTimeFld.setMaximumSize(new Dimension(80, 40));
098 endTimeFld = new JTextField(defaultEndTime, 8);
099 endTimeFld.setMaximumSize(new Dimension(80, 40));
100 Calendar cal = Calendar.getInstance();
101 defaultDay = cal.getTime();
102 begDay = new JDateChooser(defaultDay);
103 begDay.setMaximumSize(new Dimension(140, 20));
104 endDay = new JDateChooser(defaultDay);
105 endDay.setMaximumSize(new Dimension(140, 20));
106
107 GroupLayout layout = new GroupLayout(timeRangeComp);
108 timeRangeComp.setLayout(layout);
109 layout.setHorizontalGroup(
110 layout.createParallelGroup(LEADING)
111 .addComponent(begLab)
112 .addGroup(layout.createSequentialGroup()
113 .addComponent(begTimeLab)
114 .addGap(GAP_RELATED)
115 .addComponent(beginTimeFld))
116 .addGroup(layout.createSequentialGroup()
117 .addComponent(begDateLab)
118 .addGap(GAP_RELATED)
119 .addComponent(begDay))
120 .addComponent(endLab)
121 .addGroup(layout.createSequentialGroup()
122 .addComponent(endTimeLab)
123 .addGap(GAP_RELATED)
124 .addComponent(endTimeFld))
125 .addGroup(layout.createSequentialGroup()
126 .addComponent(endDateLab)
127 .addGap(GAP_RELATED)
128 .addComponent(endDay))
129 );
130
131 layout.setVerticalGroup(
132 layout.createParallelGroup(LEADING)
133 .addGroup(layout.createSequentialGroup()
134 .addComponent(begLab)
135 .addGroup(layout.createParallelGroup(BASELINE)
136 .addComponent(begTimeLab)
137 .addComponent(beginTimeFld))
138 .addPreferredGap(RELATED)
139 .addGroup(layout.createParallelGroup(BASELINE)
140 .addComponent(begDateLab)
141 .addComponent(begDay))
142 .addPreferredGap(UNRELATED)
143 .addComponent(endLab)
144 .addGroup(layout.createParallelGroup(BASELINE)
145 .addComponent(endTimeLab)
146 .addComponent(endTimeFld))
147 .addPreferredGap(RELATED)
148 .addGroup(layout.createParallelGroup(BASELINE)
149 .addComponent(endDateLab)
150 .addComponent(endDay)))
151 );
152
153 return timeRangeComp;
154 }
155
156 protected JComponent getTimeRangeComponent() {
157 return timeRangeComp;
158 }
159
160 @Override public void applyToDataSelection(DataSelection dataSelection) {
161
162 if (dataSelection == null) {
163 dataSelection = new DataSelection(true);
164 }
165
166 JCalendar cal = begDay.getJCalendar();
167 JDayChooser dayChooser = cal.getDayChooser();
168 int day = dayChooser.getDay();
169 JMonthChooser monthChooser = cal.getMonthChooser();
170 int month = monthChooser.getMonth() + 1;
171 JYearChooser yearChooser = cal.getYearChooser();
172 int year = yearChooser.getYear();
173
174 int hours = 0;
175 int mins = 0;
176 double secs = 0.0;
177 String begTime = beginTimeFld.getText();
178 String[] timeStrings = begTime.split(":");
179 int num = timeStrings.length;
180 if (num > 0)
181 hours = (new Integer(timeStrings[0])).intValue();
182 if (num > 1)
183 mins = (new Integer(timeStrings[1])).intValue();
184 if (num > 2)
185 secs = (new Double(timeStrings[2] + ".0")).doubleValue();
186 if ((hours < 0) || (hours > 23)) hours = 0;
187 if ((mins < 0) || (mins > 59)) mins = 0;
188 if ((secs < 0.0) || (secs > 59.0)) secs = 0.0;
189
190 Time bTime = new Time(year, month, day, hours, mins, secs);
191 double dVal = bTime.getJulianDate();
192 Double bigD = new Double(dVal);
193 String begTimeStr = bigD.toString();
194 dataSelection.putProperty(PROP_BEGTIME, bTime.getDateTimeStr());
195
196 Integer intVal = new Integer(year);
197 dataSelection.putProperty(PROP_YEAR, intVal.toString());
198 intVal = new Integer(month);
199 dataSelection.putProperty(PROP_MONTH, intVal.toString());
200 intVal = new Integer(day);
201 dataSelection.putProperty(PROP_DAY, intVal.toString());
202 intVal = new Integer(hours);
203 dataSelection.putProperty(PROP_HOURS, intVal.toString());
204 intVal = new Integer(mins);
205 dataSelection.putProperty(PROP_MINS, intVal.toString());
206 Double doubleVal = new Double(secs);
207 dataSelection.putProperty(PROP_SECS, doubleVal.toString());
208
209 cal = endDay.getJCalendar();
210 dayChooser = cal.getDayChooser();
211 day = dayChooser.getDay();
212 monthChooser = cal.getMonthChooser();
213 month = monthChooser.getMonth() + 1;
214 yearChooser = cal.getYearChooser();
215 year = yearChooser.getYear();
216
217 String endTime = endTimeFld.getText();
218 timeStrings = endTime.split(":");
219 num = timeStrings.length;
220 if (num > 0)
221 hours = (new Integer(timeStrings[0])).intValue();
222 if (num > 1)
223 mins = (new Integer(timeStrings[1])).intValue();
224 if (num > 2)
225 secs = (new Double(timeStrings[2] + ".0")).doubleValue();
226 if ((hours < 0) || (hours > 23)) hours = 0;
227 if ((mins < 0) || (mins > 59)) mins = 0;
228 if ((secs < 0.0) || (secs > 59.0)) secs = 0.0;
229
230 Time eTime = new Time(year, month, day, hours, mins, secs);
231 dVal = eTime.getJulianDate();
232 bigD = new Double(dVal);
233 String endTimeStr = bigD.toString();
234
235 dataSelection.putProperty(PROP_ENDTIME, eTime.getDateTimeStr());
236 dataSelection.putProperty(PROP_BTIME, begTimeStr);
237 dataSelection.putProperty(PROP_ETIME, endTimeStr);
238 }
239 }