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