///////////////////////////////////////////////////////////////////////////// // Copyright (c) 1998, California Institute of Technology. // ALL RIGHTS RESERVED. U.S. Government Sponsorship acknowledged. // // Please read the full copyright notice in the file COPYRIGHT // in this directory. // // Author: Jake Hamby, NASA/Jet Propulsion Laboratory // Jake.Hamby@jpl.nasa.gov ///////////////////////////////////////////////////////////////////////////// package dods.util.geturl.gui; import dods.dap.*; import java.awt.*; import java.awt.event.*; import java.io.*; /** Geturl frame. */ public class GeturlFrame extends Frame { /** True if we are an applet. */ protected boolean isApplet; /** The TextField containing the URL to retrieve. */ protected TextField urlField; /** The TextArea where output should be written. */ protected TextArea outputArea; /** The "Get DAS", "Get DDS", and "Get Data" buttons. */ protected Button getDASButton, getDDSButton, getDataButton; public GeturlFrame(boolean isApplet) { super("DODS Geturl Applet"); setSize(640, 480); this.isApplet = isApplet; // add URL TextField, buttons, and output TextArea GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); setLayout(gbl); gbc.anchor = GridBagConstraints.EAST; gbc.gridwidth = 1; gbc.gridy = 0; Label urlLabel = new Label("URL:"); gbl.setConstraints(urlLabel, gbc); add(urlLabel); gbc.anchor = GridBagConstraints.WEST; gbc.gridwidth = 4; urlField = new TextField(70); gbl.setConstraints(urlField, gbc); add(urlField); gbc.gridwidth = 1; gbc.gridy = 1; getDASButton = new Button("Get DAS"); getDASButton.addActionListener(new GetDASListener()); gbl.setConstraints(getDASButton, gbc); add(getDASButton); getDDSButton = new Button("Get DDS"); getDDSButton.addActionListener(new GetDDSListener()); gbl.setConstraints(getDDSButton, gbc); add(getDDSButton); getDataButton = new Button("Get Data"); getDataButton.addActionListener(new GetDataListener()); gbl.setConstraints(getDataButton, gbc); add(getDataButton); gbc.gridwidth = 5; gbc.gridy = 2; gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.insets = new Insets(0, 5, 0, 5); // 5 pixel insets on left and right outputArea = new TextArea(100, 200); outputArea.setEditable(false); gbl.setConstraints(outputArea, gbc); add(outputArea); // set listener for window close addWindowListener(new WindowClosedListener(this)); // finally, show window show(); } /** * A helper method to enable or disable the other buttons while the user * is downloading, so they don't click multiple times. * @param b if true, enable the buttons; else, disable them. */ private void setButtonsEnabled(boolean b) { getDASButton.setEnabled(b); getDDSButton.setEnabled(b); getDataButton.setEnabled(b); } private class GetDASListener implements ActionListener, Runnable { public void actionPerformed(ActionEvent evt) { try { // deactivate the other buttons so the user doesn't click them now setButtonsEnabled(false); // run DConnect in a separate thread from AWT event thread Thread runThread = new Thread(this); runThread.start(); } catch (IllegalThreadStateException e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } public void run() { try { DConnect url = new DConnect(urlField.getText()); DAS das = url.getDAS(); CharArrayWriter aw = new CharArrayWriter(); das.print(new PrintWriter(aw)); outputArea.setText(aw.toString()); // reactivate the other buttons setButtonsEnabled(true); } catch (Exception e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } } private class GetDDSListener implements ActionListener, Runnable { public void actionPerformed(ActionEvent evt) { try { // deactivate the other buttons so the user doesn't click them now setButtonsEnabled(false); // run DConnect in a separate thread from AWT event thread Thread runThread = new Thread(this); runThread.start(); } catch (IllegalThreadStateException e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } public void run() { try { DConnect url = new DConnect(urlField.getText()); DDS dds = url.getDDS(); CharArrayWriter aw = new CharArrayWriter(); dds.print(new PrintWriter(aw)); outputArea.setText(aw.toString()); // reactivate the other buttons setButtonsEnabled(true); } catch (Exception e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } } private class GetDataListener implements ActionListener, Runnable { public void actionPerformed(ActionEvent evt) { try { // deactivate the other buttons so the user doesn't click them now setButtonsEnabled(false); // run DConnect in a separate thread from AWT event thread // NOTE: StatusWindow cancel button won't work otherwise! Thread runThread = new Thread(this); runThread.start(); } catch (IllegalThreadStateException e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } public void run() { try { DConnect url = new DConnect(urlField.getText()); DataDDS dds = url.getData(new StatusWindow(urlField.getText())); CharArrayWriter aw = new CharArrayWriter(); dds.printVal(new PrintWriter(aw)); outputArea.setText(aw.toString()); // reactivate the other buttons setButtonsEnabled(true); } catch (Exception e) { outputArea.setText(e.toString()); setButtonsEnabled(true); } } } private class WindowClosedListener extends WindowAdapter { GeturlFrame myFrame; WindowClosedListener(GeturlFrame myFrame) { this.myFrame = myFrame; } public void windowClosing(WindowEvent evt) { myFrame.dispose(); if (myFrame.isApplet == false) System.exit(0); } } }