📄 capture.java
字号:
/* * This file is part of "The Java Telnet Application". * * (c) Matthias L. Jugel, Marcus Mei遪er 1996-2002. 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,v 1.8 2002/05/06 07:24:20 leo Exp $ * @author Matthias L. Jugel, Marcus Mei遪er */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; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -