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