001 /*
002 * $Id: AddeFrontChooser.java,v 1.24 2012/02/19 17:35:35 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.chooser.adde;
032
033 import static javax.swing.GroupLayout.DEFAULT_SIZE;
034 import static javax.swing.GroupLayout.Alignment.BASELINE;
035 import static javax.swing.GroupLayout.Alignment.LEADING;
036
037 import java.awt.Dimension;
038 import java.util.ArrayList;
039 import java.util.Hashtable;
040 import java.util.List;
041 import java.util.Vector;
042
043 import javax.swing.GroupLayout;
044 import javax.swing.JComponent;
045 import javax.swing.JLabel;
046 import javax.swing.JPanel;
047 import javax.swing.JRadioButton;
048 import javax.swing.ListSelectionModel;
049
050 import org.w3c.dom.Element;
051
052 import ucar.unidata.data.DataSource;
053 import ucar.unidata.idv.chooser.IdvChooserManager;
054 import ucar.unidata.ui.ChooserList;
055 import ucar.unidata.util.GuiUtils;
056
057 import edu.wisc.ssec.mcidasv.util.McVGuiUtils;
058
059 /**
060 * A chooser for adde front products
061 *
062 *
063 *
064 * @author IDV development team
065 * @version $Revision: 1.24 $Date: 2012/02/19 17:35:35 $
066 */
067 public class AddeFrontChooser extends AddeChooser {
068 /** for gui */
069 ChooserList timesList;
070
071 /** for gui */
072 JRadioButton forecastBtn;
073
074 /** for gui */
075 JRadioButton observedBtn;
076
077 /**
078 * Make a new one
079 *
080 * @param mgr The manager
081 * @param root The xml element that defined this object
082 *
083 */
084 public AddeFrontChooser(IdvChooserManager mgr, Element root) {
085 super(mgr, root);
086
087 addServerComp(loadButton);
088
089 }
090
091 public void readTimes() {
092 if (canAccessServer())
093 setState(STATE_CONNECTED);
094 else
095 setState(STATE_UNCONNECTED);
096 }
097
098
099 /**
100 * update the buttons
101 */
102 protected void updateStatus() {
103 super.updateStatus();
104 setHaveData(true);
105 }
106
107 /**
108 * Update the widget with the latest data.
109 *
110 * @throws Exception On badness
111 */
112 @Override public void handleUpdate() throws Exception {
113 // updateServerList();
114 readTimes();
115 updateStatus();
116 showNormalCursor();
117 saveServerState();
118 }
119
120 protected boolean haveDescriptorSelected() {
121 return true;
122 }
123
124 /**
125 * Make the UI for this selector.
126 *
127 * @return The gui
128 */
129 public JComponent doMakeContents() {
130 JPanel myPanel = new JPanel();
131
132 JLabel frontLabel = new JLabel();
133 observedBtn = new JRadioButton("Analysis Fronts", true);
134 forecastBtn = new JRadioButton("Forecast Fronts", false);
135
136 frontLabel = McVGuiUtils.makeLabelRight("Latest:");
137
138 GuiUtils.buttonGroup(observedBtn, forecastBtn);
139
140 frontLabel.setEnabled(false);
141 observedBtn.setEnabled(false);
142 forecastBtn.setEnabled(false);
143
144 addServerComp(frontLabel);
145 addServerComp(observedBtn);
146 addServerComp(forecastBtn);
147
148 timesList = new ChooserList();
149 timesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
150 Vector items = new Vector();
151 for (int i = 0; i < 10; i++) {
152 if (i == 0) {
153 items.add("Most recent day");
154 } else {
155 items.add((i + 1) + " most recent days");
156 }
157 }
158 timesList.setListData(items);
159 timesList.setSelectedIndex(0);
160 timesList.getScroller().setPreferredSize(new Dimension(200, 100));
161 // comps.add(GuiUtils.rLabel("Days:"));
162 // comps.add(GuiUtils.left(timesList.getScroller()));
163
164 GroupLayout layout = new GroupLayout(myPanel);
165 myPanel.setLayout(layout);
166 layout.setHorizontalGroup(
167 layout.createParallelGroup(LEADING)
168 .addGroup(layout.createSequentialGroup()
169 .addComponent(frontLabel)
170 .addGap(GAP_RELATED)
171 .addComponent(observedBtn)
172 .addGap(GAP_RELATED)
173 .addComponent(forecastBtn)
174 .addContainerGap(DEFAULT_SIZE, Short.MAX_VALUE))
175 );
176 layout.setVerticalGroup(
177 layout.createParallelGroup(LEADING)
178 .addGroup(layout.createSequentialGroup()
179 .addGroup(layout.createParallelGroup(BASELINE)
180 .addComponent(frontLabel)
181 .addComponent(observedBtn)
182 .addComponent(forecastBtn))
183 .addGap(GAP_UNRELATED))
184 );
185
186 setInnerPanel(myPanel);
187 return super.doMakeContents();
188 }
189
190
191 /**
192 * User said go, we go. Simply get the list of images
193 * from the imageChooser and create the ADDE.IMAGE
194 * DataSource
195 *
196 */
197 public void doLoadInThread() {
198 List urls = new ArrayList();
199 int index = timesList.getSelectedIndex();
200 String server = getAddeServer().getName();
201 String type = (forecastBtn.isSelected()
202 ? "SRP"
203 : "SUS&wmo=ASUS01");
204 for (int i = 0; i <= index; i++) {
205 String url = "adde://" + server
206 + "/wxtext?group=RTWXTEXT&apro=COD&astn=" + type
207 + "&day=%DAY-" + i + "%";
208 urls.add(url);
209 }
210 Hashtable ht = new Hashtable();
211 //TODO: Change the name, maybe add the date
212 ht.put(DataSource.PROP_TITLE, (forecastBtn.isSelected()
213 ? "Forecast Front"
214 : "Analysis Fronts"));
215 makeDataSource(urls, "TEXT.FRONT", ht);
216 saveServerState();
217 }
218
219 /**
220 * get the adde server grup type to use
221 *
222 * @return group type
223 */
224 @Override protected String getGroupType() {
225 return "text";
226 }
227
228 public String getDataType() {
229 return "TEXT";
230 }
231 }
232