001/* 002 * $Id: AddeLightningDataChooser.java,v 1.7 2011/03/24 16:06:32 davep Exp $ 003 * 004 * This file is part of McIDAS-V 005 * 006 * Copyright 2007-2011 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 031package edu.wisc.ssec.mcidasv.chooser.adde; 032 033 034import java.util.ArrayList; 035import java.util.Date; 036import java.util.List; 037 038import javax.swing.ListSelectionModel; 039 040import org.w3c.dom.Element; 041 042import ucar.unidata.data.AddeUtil; 043import ucar.unidata.idv.chooser.IdvChooserManager; 044import ucar.unidata.util.TwoFacedObject; 045import ucar.visad.UtcDate; 046import visad.DateTime; 047 048import edu.wisc.ssec.mcidas.McIDASUtil; 049 050/** 051 * Selection widget for ADDE point data 052 * 053 * @author MetApps Development Team 054 * @version $Revision: 1.7 $ $Date: 2011/03/24 16:06:32 $ 055 */ 056public class AddeLightningDataChooser extends AddePointDataChooser { 057 058 059 /** 060 * Create a new <code>AddeLightningDataChooser</code> with the preferred 061 * list of ADDE servers. 062 * 063 * 064 * @param mgr The chooser manager 065 * @param root The chooser.xml node 066 */ 067 public AddeLightningDataChooser(IdvChooserManager mgr, Element root) { 068 super(mgr, root); 069 } 070 071 072 /** 073 * Get the default station model for this chooser. 074 * @return name of default station model 075 */ 076 public String getDefaultStationModel() { 077 return "flash"; 078 } 079 080 /** 081 * This allows derived classes to provide their own name for labeling, etc. 082 * 083 * @return the dataset name 084 */ 085 public String getDataName() { 086 return "Lightning Data"; 087 } 088 089 /** 090 * Get the request string for times particular to this chooser 091 * 092 * @return request string 093 * protected String getTimesRequest() { 094 * StringBuffer buf = getGroupUrl(REQ_POINTDATA, getGroup()); 095 * appendKeyValue(buf, PROP_DESCR, getDescriptor()); 096 * // this is hokey, but take a smattering of stations. 097 * //appendKeyValue(buf, PROP_SELECT, "'CO US'"); 098 * appendKeyValue(buf, PROP_POS, "0"); 099 * appendKeyValue(buf, PROP_NUM, "ALL"); 100 * appendKeyValue(buf, PROP_PARAM, "DAY TIME"); 101 * return buf.toString(); 102 * } 103 */ 104 105 /** 106 * Get the default datasets for the chooser. The objects are 107 * a descriptive name and the ADDE group/descriptor 108 * 109 * @return default datasets. 110 */ 111 protected TwoFacedObject[] getDefaultDatasets() { 112 return new TwoFacedObject[] { new TwoFacedObject("NLDN", "LGT/NLDN"), 113 new TwoFacedObject("USPLN", 114 "LGT/USPLN") }; 115 } 116 117 /** 118 * Get the increment between times for relative time requests 119 * 120 * @return time increment (hours) 121 */ 122 public float getRelativeTimeIncrement() { 123 return .5f; 124 } 125 126 /** 127 * Create the date time selection string for the "select" clause 128 * of the ADDE URL. 129 * 130 * @return the select day and time strings 131 */ 132 protected String getDayTimeSelectString() { 133 StringBuffer buf = new StringBuffer(); 134 if (getDoAbsoluteTimes()) { 135 buf.append("time "); 136 List times = getSelectedAbsoluteTimes(); 137 DateTime dt = (DateTime) times.get(0); 138 buf.append(UtcDate.getHMS(dt)); 139 buf.append(" "); 140 dt = (DateTime) times.get(times.size() - 1); 141 buf.append(UtcDate.getHMS(dt)); 142 } else { 143 buf.append(getRelativeTimeId()); 144 } 145 return buf.toString(); 146 } 147 148 /** 149 * Get the identifier for relative time. Subclasses can override. 150 * @return the identifier 151 */ 152 protected String getRelativeTimeId() { 153 return AddeUtil.RELATIVE_TIME_RANGE; 154 } 155 156 /** 157 * Get the selection mode for the absolute times panel. Subclasses 158 * can override. 159 * 160 * @return the list selection mode 161 */ 162 protected int getAbsoluteTimeSelectMode() { 163 return ListSelectionModel.SINGLE_INTERVAL_SELECTION; 164 } 165 166 167 /** 168 * Set the list of available times. 169 */ 170 public void readTimes() { 171 clearTimesList(); 172 ArrayList uniqueTimes = new ArrayList(); 173 174 setState(STATE_CONNECTING); 175 try { 176 float hours = getRelativeTimeIncrement(); 177 int numTimes = (int) (24f / hours); 178 DateTime currentDay = new DateTime(new Date()); 179 int day = Integer.parseInt(UtcDate.formatUtcDate(currentDay, 180 "yyyyMMdd")); 181 for (int i = 0; i < numTimes; i++) { 182 int hour = McIDASUtil.mcDoubleToPackedInteger(i * hours); 183 try { 184 DateTime dt = 185 new DateTime(McIDASUtil.mcDayTimeToSecs(day, hour)); 186 uniqueTimes.add(dt); 187 } catch (Exception e) {} 188 } 189 setState(STATE_CONNECTED); 190 //System.out.println( 191 // "found " + uniqueTimes.size() + " unique times"); 192 } catch (Exception excp) { 193 handleConnectionError(excp); 194 return; 195 } 196 if (getDoAbsoluteTimes()) { 197 if ( !uniqueTimes.isEmpty()) { 198 setAbsoluteTimes(new ArrayList(uniqueTimes)); 199 } 200 int selectedIndex = getAbsoluteTimes().size() - 1; 201 setSelectedAbsoluteTime(selectedIndex); 202 } 203 } 204 205 206} 207