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.chooser; 030 031 032 import static javax.swing.GroupLayout.DEFAULT_SIZE; 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 java.awt.event.ActionEvent; 040 import java.awt.event.ActionListener; 041 import java.awt.event.FocusEvent; 042 import java.awt.event.FocusListener; 043 import java.util.ArrayList; 044 import java.util.Hashtable; 045 import java.util.List; 046 047 import javax.swing.GroupLayout; 048 import javax.swing.JButton; 049 import javax.swing.JComponent; 050 import javax.swing.JLabel; 051 import javax.swing.JPanel; 052 import javax.swing.JTextField; 053 054 import org.w3c.dom.Element; 055 056 import ucar.unidata.idv.chooser.IdvChooser; 057 import ucar.unidata.idv.chooser.IdvChooserManager; 058 import ucar.unidata.util.GuiUtils; 059 import ucar.unidata.util.LogUtil; 060 061 import edu.wisc.ssec.mcidasv.Constants; 062 import edu.wisc.ssec.mcidasv.data.McIdasFrame; 063 import edu.wisc.ssec.mcidasv.data.McIdasXInfo; 064 import edu.wisc.ssec.mcidasv.util.McVGuiUtils; 065 import edu.wisc.ssec.mcidasv.util.McVGuiUtils.Position; 066 import edu.wisc.ssec.mcidasv.util.McVGuiUtils.TextColor; 067 import edu.wisc.ssec.mcidasv.util.McVGuiUtils.Width; 068 069 070 public class McIdasBridgeChooser extends IdvChooser implements Constants { 071 072 /** A widget for the command line text */ 073 private JTextField hostLine = new JTextField(""); 074 private JTextField portLine = new JTextField(""); 075 private JTextField keyLine = new JTextField(""); 076 077 private McIdasXInfo mcidasxInfo; 078 079 /** 080 * Create the chooser with the given manager and xml 081 * 082 * @param mgr The manager 083 * @param root The xml 084 * 085 */ 086 public McIdasBridgeChooser(IdvChooserManager mgr, Element root) { 087 super(mgr, root); 088 089 mcidasxInfo = new McIdasXInfo(); 090 091 loadButton = McVGuiUtils.makeImageTextButton(ICON_ACCEPT_SMALL, getLoadCommandName()); 092 loadButton.setActionCommand(getLoadCommandName()); 093 loadButton.addActionListener(this); 094 } 095 096 public String getHost() { 097 return this.mcidasxInfo.getHostString(); 098 } 099 100 private void setHost() { 101 this.mcidasxInfo.setHostString((hostLine.getText()).trim()); 102 } 103 104 public String getPort() { 105 return this.mcidasxInfo.getPortString(); 106 } 107 108 private void setPort() { 109 this.mcidasxInfo.setPortString((portLine.getText()).trim()); 110 } 111 112 public String getKey() { 113 return this.mcidasxInfo.getPortString(); 114 } 115 116 private void setKey() { 117 this.mcidasxInfo.setKeyString((keyLine.getText()).trim()); 118 } 119 120 /** 121 * Returns a list of the images to load or null if none have been 122 * selected. 123 * 124 * @return list get the list of image descriptors 125 */ 126 public List getFrameList() { 127 List frames = new ArrayList(); 128 List xFrames = this.mcidasxInfo.getFrameNumbers(); 129 if (xFrames.size() < 1) return frames; 130 for (int i = 0; i < xFrames.size(); i++) { 131 Integer frmInt = (Integer)xFrames.get(i); 132 McIdasFrame frame = new McIdasFrame(frmInt.intValue(), this.mcidasxInfo); 133 frames.add(frame); 134 } 135 return frames; 136 } 137 138 /** 139 * Returns a list of the frame numbers to load or null if none have been 140 * selected. 141 * 142 * @return list get the list of frame numbers 143 */ 144 public List getFrameNumbers() { 145 return this.mcidasxInfo.getFrameNumbers(); 146 } 147 148 public int getFrameCount() { 149 return getFrameNumbers().size(); 150 } 151 152 /** 153 * Load in an ADDE point data set based on the 154 * <code>PropertyChangeEvent<code>. 155 * 156 */ 157 public void doLoadInThread() { 158 showWaitCursor(); 159 List frames = getFrameList(); 160 if (frames.size() < 1) { 161 LogUtil.userMessage("Connection to McIDAS-X Bridge Listener at " + getHost() + ":" + getPort() + " failed"); 162 showNormalCursor(); 163 return; 164 } 165 166 Hashtable ht = new Hashtable(); 167 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.FRAME_NUMBERS_KEY, getFrameNumbers()); 168 if (getFrameCount() > 1) { 169 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.DATA_NAME_KEY,"Frame Sequence"); 170 } else { 171 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.DATA_NAME_KEY,"Frame"); 172 } 173 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.REQUEST_HOST, getHost()); 174 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.REQUEST_PORT, getPort()); 175 ht.put(edu.wisc.ssec.mcidasv.chooser.FrameChooser.REQUEST_KEY, this.mcidasxInfo.getKeyString()); 176 //System.out.println(" ht: " + ht); 177 makeDataSource("", "MCIDASX", ht); 178 showNormalCursor(); 179 } 180 181 182 /** 183 * Make the GUI 184 * 185 * @return The GUI 186 */ 187 private JLabel statusLabel = new JLabel("Status"); 188 189 @Override 190 public void setStatus(String statusString, String foo) { 191 if (statusString == null) 192 statusString = ""; 193 statusLabel.setText(statusString); 194 } 195 196 protected JComponent doMakeContents() { 197 JPanel myPanel = new JPanel(); 198 199 200 JLabel hostLabel = McVGuiUtils.makeLabelRight("Host:"); 201 202 hostLine.setText(mcidasxInfo.getHostString()); 203 McVGuiUtils.setComponentWidth(hostLine, Width.DOUBLE); 204 hostLine.addFocusListener(new FocusListener() { 205 public void focusGained(FocusEvent e) {} 206 public void focusLost(FocusEvent e) { setHost(); } 207 }); 208 hostLine.addActionListener(new ActionListener() { 209 public void actionPerformed(ActionEvent ae) { setHost(); } 210 }); 211 212 JLabel portLabel = McVGuiUtils.makeLabelRight("Port:"); 213 214 portLine.setText(mcidasxInfo.getPortString()); 215 McVGuiUtils.setComponentWidth(portLine, Width.DOUBLE); 216 portLine.addFocusListener(new FocusListener() { 217 public void focusGained(FocusEvent e) {} 218 public void focusLost(FocusEvent e) { setPort(); } 219 }); 220 portLine.addActionListener(new ActionListener() { 221 public void actionPerformed(ActionEvent ae) { setPort(); } 222 }); 223 224 JLabel statusLabelLabel = McVGuiUtils.makeLabelRight(""); 225 226 statusLabel.setText("Press \"" + getLoadCommandName() + "\" to connect to the McIDAS-X Bridge Listener"); 227 McVGuiUtils.setLabelPosition(statusLabel, Position.RIGHT); 228 McVGuiUtils.setComponentColor(statusLabel, TextColor.STATUS); 229 230 JButton helpButton = McVGuiUtils.makeImageButton(ICON_HELP, "Show help"); 231 helpButton.setActionCommand(GuiUtils.CMD_HELP); 232 helpButton.addActionListener(this); 233 234 McVGuiUtils.setComponentWidth(loadButton, Width.DOUBLE); 235 236 GroupLayout layout = new GroupLayout(myPanel); 237 myPanel.setLayout(layout); 238 layout.setHorizontalGroup( 239 layout.createParallelGroup(LEADING) 240 .addGroup(layout.createSequentialGroup() 241 .addContainerGap() 242 .addGroup(layout.createParallelGroup(LEADING) 243 .addGroup(layout.createSequentialGroup() 244 .addComponent(hostLabel) 245 .addGap(GAP_RELATED) 246 .addComponent(hostLine)) 247 .addGroup(layout.createSequentialGroup() 248 .addComponent(portLabel) 249 .addGap(GAP_RELATED) 250 .addComponent(portLine)) 251 .addGroup(TRAILING, layout.createSequentialGroup() 252 .addComponent(helpButton) 253 .addPreferredGap(RELATED) 254 .addComponent(loadButton)) 255 .addGroup(layout.createSequentialGroup() 256 .addComponent(statusLabelLabel) 257 .addGap(GAP_RELATED) 258 .addComponent(statusLabel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE))) 259 .addContainerGap()) 260 ); 261 layout.setVerticalGroup( 262 layout.createParallelGroup(LEADING) 263 .addGroup(TRAILING, layout.createSequentialGroup() 264 .addContainerGap() 265 .addGroup(layout.createParallelGroup(BASELINE) 266 .addComponent(hostLine) 267 .addComponent(hostLabel)) 268 .addPreferredGap(RELATED) 269 .addGroup(layout.createParallelGroup(BASELINE) 270 .addComponent(portLine) 271 .addComponent(portLabel)) 272 .addPreferredGap(RELATED, DEFAULT_SIZE, Short.MAX_VALUE) 273 .addGroup(layout.createParallelGroup(BASELINE) 274 .addComponent(statusLabelLabel) 275 .addComponent(statusLabel)) 276 .addPreferredGap(UNRELATED) 277 .addGroup(layout.createParallelGroup(BASELINE) 278 .addComponent(loadButton) 279 .addComponent(helpButton)) 280 .addContainerGap()) 281 ); 282 283 return myPanel; 284 285 } 286 287 }