Package de.mud.jta.plugin

Source Code of de.mud.jta.plugin.Capture

/*
* This file is part of "JTA - Telnet/SSH for the JAVA(tm) platform".
*
* (c) Matthias L. Jugel, Marcus Meißner 1996-2005. All Rights Reserved.
*
* Please visit http://javatelnet.org/ for updates and contact.
*
* --LICENSE NOTICE--
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* --LICENSE NOTICE--
*
*/

package de.mud.jta.plugin;

import de.mud.jta.FilterPlugin;
import de.mud.jta.Plugin;
import de.mud.jta.PluginBus;
import de.mud.jta.PluginConfig;
import de.mud.jta.VisualPlugin;
import de.mud.jta.event.ConfigurationListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Hashtable;

/**
* A capture plugin that captures data and stores it in a
* defined location. The location is specified as a plugin
* configuration option Capture.url and can be used in
* conjunction with the UploadServlet from the tools directory.
* <P>
* Parametrize the plugin carefully:<br>
* <b>Capture.url</b> should contain a unique URL can may have
* parameters for identifying the upload.<br>
* <i>Example:</i> http://mg.mud.de/servlet/UpladServlet?id=12345
* <p>
* The actually captured data will be appended as the parameter
* <b>content</b>.
* <P>
* <B>Maintainer:</B> Matthias L. Jugel
*
* @version $Id: Capture.java 499 2005-09-29 08:24:54Z leo $
* @author Matthias L. Jugel, Marcus Mei�ner
*/
public class Capture extends Plugin
        implements FilterPlugin, VisualPlugin, ActionListener {

  // this enables or disables the compilation of menu entries
  private final static boolean personalJava = false;

  // for debugging output
  private final static int debug = 0;

  /** The remote storage URL */
  protected Hashtable remoteUrlList = new Hashtable();

  /** The plugin menu */
  protected JMenu menu;
  protected JDialog errorDialog;
  protected JDialog fileDialog;
  protected JDialog doneDialog;

  /** Whether the capture is currently enabled or not */
  protected boolean captureEnabled = false;

  // menu entries and the viewing frame/textarea
  private JMenuItem start, stop, clear;
  private JFrame frame;
  private JTextArea textArea;
  private JTextField fileName;

  /**
   * Initialize the Capture plugin. This sets up the menu entries
   * and registers the plugin on the bus.
   */
  public Capture(final PluginBus bus, final String id) {
    super(bus, id);

    if (!personalJava) {

      // set up viewing frame
      frame = new JFrame("Java Telnet Applet: Captured Text");
      frame.getContentPane().setLayout(new BorderLayout());
      frame.getContentPane().add(textArea = new JTextArea(24, 80), BorderLayout.CENTER);
      textArea.setFont(new Font("Monospaced", Font.PLAIN, 12));
      frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          frame.setVisible(false);
        }
      });
      frame.pack();

      // an error dialogue, in case the upload fails
      errorDialog = new JDialog(frame, "Error", true);
      errorDialog.getContentPane().setLayout(new BorderLayout());
      errorDialog.getContentPane().add(new JLabel("Cannot store data on remote server!"), BorderLayout.NORTH);
      JPanel panel = new JPanel();
      JButton button = new JButton("Close Dialog");
      panel.add(button);
      errorDialog.getContentPane().add(panel, BorderLayout.SOUTH);
      button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          errorDialog.setVisible(false);
        }
      });

      // an error dialogue, in case the upload fails
      doneDialog = new JDialog(frame, "Success", true);
      doneDialog.getContentPane().setLayout(new BorderLayout());
      doneDialog.getContentPane().add(new JLabel("Successfully saved data!"), BorderLayout.NORTH);
      panel = new JPanel();
      button = new JButton("Close Dialog");
      panel.add(button);
      doneDialog.getContentPane().add(panel, BorderLayout.SOUTH);
      button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          errorDialog.setVisible(false);
        }
      });


      fileDialog = new JDialog(frame, "Enter File Name", true);
      fileDialog.getContentPane().setLayout(new BorderLayout());
      ActionListener saveFileListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          String params = (String) remoteUrlList.get("URL.file.params.orig");
          params = params == null ? "" : params + "&";
          remoteUrlList.put("URL.file.params", params + "file=" + URLEncoder.encode(fileName.getText()));
          saveFile("URL.file");
          fileDialog.setVisible(false);
        }
      };
      panel = new JPanel();
      panel.add(new JLabel("File Name: "));
      panel.add(fileName = new JTextField(30));
      fileName.addActionListener(saveFileListener);
      fileDialog.getContentPane().add(panel, BorderLayout.CENTER);
      panel = new JPanel();
      panel.add(button = new JButton("Cancel"));
      button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          fileDialog.setVisible(false);
        }
      });
      panel.add(button = new JButton("Save File"));
      button.addActionListener(saveFileListener);
      fileDialog.getContentPane().add(panel, BorderLayout.SOUTH);
      fileDialog.pack();

      // set up menu entries
      menu = new JMenu("Capture");
      start = new JMenuItem("Start");
      start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (debug > 0) System.out.println("Capture: start capturing");
          captureEnabled = true;
          start.setEnabled(false);
          stop.setEnabled(true);
        }
      });
      menu.add(start);

      stop = new JMenuItem("Stop");
      stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (debug > 0) System.out.println("Capture: stop capturing");
          captureEnabled = false;
          start.setEnabled(true);
          stop.setEnabled(false);

        }
      });
      stop.setEnabled(false);
      menu.add(stop);

      clear = new JMenuItem("Clear");
      clear.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (debug > 0) System.out.println("Capture: cleared captured text");
          textArea.setText("");
        }
      });
      menu.add(clear);
      menu.addSeparator();

      JMenuItem view = new JMenuItem("View/Hide Text");
      view.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (debug > 0) System.out.println("view/hide text: " + frame.isVisible());
          if (frame.isVisible()) {
            frame.setVisible(false);
            frame.hide();
          } else {
            frame.setVisible(true);
            frame.show();
          }
        }
      });
      menu.add(view);


    } // !personalJava


    // configure the remote URL
    bus.registerPluginListener(new ConfigurationListener() {
      public void setConfiguration(PluginConfig config) {
        String tmp;

        JMenuItem save = new JMenuItem("Save As File");
        menu.add(save);

        if ((tmp = config.getProperty("Capture", id, "file.url")) != null) {
          try {
            remoteUrlList.put("URL.file", new URL(tmp));
            if ((tmp = config.getProperty("Capture", id, "file.params")) != null) {
              remoteUrlList.put("URL.file.params.orig", tmp);
            }

            save.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                fileDialog.setVisible(true);
              }
            });
            save.setActionCommand("URL.file");
          } catch (MalformedURLException e) {
            System.err.println("capture url invalid: " + e);
          }

        } else {
          save.setEnabled(false);
        }

        int i = 1;
        while ((tmp = config.getProperty("Capture", id, i + ".url")) != null) {
          try {
            String urlID = "URL." + i;
            URL remoteURL = new URL(tmp);
            remoteUrlList.put(urlID, remoteURL);
            if ((tmp = config.getProperty("Capture", id, i + ".params")) != null) {
              remoteUrlList.put(urlID + ".params", tmp);
            }
            // use name if applicable or URL
            if ((tmp = config.getProperty("Capture", id, i + ".name")) != null) {
              save = new JMenuItem("Save As " + tmp);
            } else {
              save = new JMenuItem("Save As " + remoteURL.toString());
            }
            // enable menu entry
            save.setEnabled(true);
            save.addActionListener(Capture.this);
            save.setActionCommand(urlID);
            menu.add(save);
            // count up
            i++;
          } catch (MalformedURLException e) {
            System.err.println("capture url invalid: " + e);
          }
        }
      }
    });

    if (!personalJava) {
    }
  }

  public void actionPerformed(ActionEvent e) {
    String urlID = e.getActionCommand();
    if (debug > 0)
      System.err.println("Capture: storing text: "
                         + urlID + ": "
                         + remoteUrlList.get(urlID));
    saveFile(urlID);
  }

  private void saveFile(String urlID) {
    URL url = (URL) remoteUrlList.get(urlID);
    try {
      URLConnection urlConnection = url.openConnection();
      DataOutputStream out;
      BufferedReader in;

      // Let the RTS know that we want to do output.
      urlConnection.setDoInput(true);
      // Let the RTS know that we want to do output.
      urlConnection.setDoOutput(true);
      // No caching, we want the real thing.
      urlConnection.setUseCaches(false);
      // Specify the content type.
      urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      // retrieve extra arguments
      // Send POST output.
      // send the data to the url receiver ...
      out = new DataOutputStream(urlConnection.getOutputStream());
      String content = (String) remoteUrlList.get(urlID + ".params");
      content = (content == null ? "" : content + "&") + "content=" + URLEncoder.encode(textArea.getText());
      if (debug > 0) System.err.println("Capture: " + content);
      out.writeBytes(content);
      out.flush();
      out.close();

      // retrieve response from the remote host and display it.
      if (debug > 0) System.err.println("Capture: reading response");
      in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
      String str;
      while (null != ((str = in.readLine()))) {
        System.out.println("Capture: " + str);
      }
      in.close();

      doneDialog.pack();
      doneDialog.setVisible(true);

    } catch (IOException ioe) {
      System.err.println("Capture: cannot store text on remote server: " + url);
      ioe.printStackTrace();
      JTextArea errorMsg = new JTextArea(ioe.toString(), 5, 30);
      errorMsg.setEditable(false);
      errorDialog.add(errorMsg, BorderLayout.CENTER);
      errorDialog.pack();
      errorDialog.setVisible(true);
    }
    if (debug > 0) System.err.println("Capture: storage complete: " + url);
  }

  // this is where we get the data from (left side in plugins list)
  protected FilterPlugin source;

  /**
   * The filter source is the plugin where Capture is connected to.
   * In the list of plugins this is the one to the left.
   * @param source the next plugin
   */
  public void setFilterSource(FilterPlugin source) {
    if (debug > 0) System.err.println("Capture: connected to: " + source);
    this.source = source;
  }

  public FilterPlugin getFilterSource() {
    return source;
  }

  /**
   * Read data from the left side plugin, capture the content and
   * pass it on to the next plugin which called this method.
   * @param b the buffer to store data into
   */
  public int read(byte[] b) throws IOException {
    int size = source.read(b);
    if (captureEnabled && size > 0) {
      String tmp = new String(b, 0, size);
      textArea.append(tmp);
    }
    return size;
  }

  /**
   * Write data to the backend but also append it to the capture buffer.
   * @param b the buffer with data to write
   */
  public void write(byte[] b) throws IOException {
    if (captureEnabled) {
      textArea.append(new String(b));
    }
    source.write(b);
  }

  /**
   * The Capture plugin has no visual component that is embedded in
   * the JTA main frame, so this returns null.
   * @return always null
   */
  public JComponent getPluginVisual() {
    return null;
  }

  /**
   * The Capture menu for the menu bar as configured in the constructor.
   * @return the drop down menu
   */
  public JMenu getPluginMenu() {
    return menu;
  }

}
TOP

Related Classes of de.mud.jta.plugin.Capture

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.