commit 07ec9efc9ee6001b0fab3d5d585588806d10ed0e from: leo date: Wed Feb 27 17:47:02 2002 UTC *** empty log message *** commit - 8bb63b724e7ec65191bef2909874305749e37194 commit + 07ec9efc9ee6001b0fab3d5d585588806d10ed0e blob - ddcc13a6c0c61ba177636e8715b5477bb2ddba83 blob + e718948230f6c5b741d0ad86c2357f6ffa57e44a --- de/mud/jta/Applet.java +++ de/mud/jta/Applet.java @@ -6,11 +6,11 @@ * the Free Software Foundation; either version 2, or (at your option) * any later version. * - * "The Java Telnet Application" is distributed in the hope that it will be + * "The Java Telnet Application" 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 software; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, @@ -18,57 +18,39 @@ */ package de.mud.jta; +import de.mud.jta.event.AppletRequest; +import de.mud.jta.event.FocusStatusListener; import de.mud.jta.event.OnlineStatusListener; -import de.mud.jta.event.SocketRequest; import de.mud.jta.event.ReturnFocusRequest; -import de.mud.jta.event.FocusStatusListener; -import de.mud.jta.event.AppletRequest; +import de.mud.jta.event.SocketRequest; import de.mud.jta.event.SoundListener; -import java.util.Properties; -import java.util.Hashtable; -import java.util.Enumeration; -import java.util.Vector; - -import java.io.IOException; -import java.net.URL; - -import java.awt.Frame; -import java.awt.BorderLayout; -import java.awt.GridLayout; -import java.awt.Panel; -import java.awt.Label; -import java.awt.Button; -import java.awt.Color; -import java.awt.Component; -import java.awt.Menu; -import java.awt.MenuBar; -import java.awt.MenuItem; -import java.awt.MenuShortcut; -import java.awt.PrintJob; - +import java.awt.*; import java.awt.datatransfer.Clipboard; - -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.ActionListener; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; - -import java.lang.reflect.Method; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; +import java.util.Vector; /** * The Java Telnet Applet

* This is the implementation of whole set of applications. It's modular * structure allows to configure the software to act either as a sophisticated - * terminal emulation and/or, adding the network backend, as telnet + * terminal emulation and/or, adding the network backend, as telnet * implementation. Additional modules provide features like scripting or an * improved graphical user interface.

* This software is written entirely in Javatm.

* This is the Applet implementation for the software. It initializes * the system and adds all needed components, such as the telnet backend and - * the terminal front end. + * the terminal front end. *

* Maintainer: Matthias L. Jugel * @@ -102,68 +84,67 @@ public class Applet extends java.applet.Applet { private Clipboard clipboard; private boolean online = false; + private HelpFrame helpFrame = null; + /** * Read all parameters from the applet configuration and * do initializations for the plugins and the applet. */ public void init() { - if(debug > 0) System.err.println("Applet: init()"); - if(pluginLoader == null) { + if (debug > 0) System.err.println("Applet: init()"); + if (pluginLoader == null) { try { options.load(Applet.class - .getResourceAsStream("/de/mud/jta/default.conf")); - } catch(Exception e) { - try { + .getResourceAsStream("/de/mud/jta/default.conf")); + } catch (Exception e) { + try { URL url = new URL(getCodeBase() + "default.conf"); options.load(url.openStream()); - } catch(Exception e1) { - System.err.println("jta: cannot load default.conf"); - System.err.println("jta: try extracting it from the jar file"); - System.err.println("jta: expected file here: " - +getCodeBase()+ "default.conf"); + } catch (Exception e1) { + System.err.println("jta: cannot load default.conf"); + System.err.println("jta: try extracting it from the jar file"); + System.err.println("jta: expected file here: " + + getCodeBase() + "default.conf"); } } String value; // try to load the local configuration and merge it with the defaults - if((value = getParameter("config")) != null) { + if ((value = getParameter("config")) != null) { Properties appletParams = new Properties(); - URL url = null; - try { - url = new URL(value); - } catch(Exception e) { - try { - url = new URL(getCodeBase() + value); - } catch(Exception ce) { - System.err.println("jta: could not find config file: "+ce); - } - } + URL url = null; + try { + url = new URL(value); + } catch (Exception e) { + try { + url = new URL(getCodeBase() + value); + } catch (Exception ce) { + System.err.println("jta: could not find config file: " + ce); + } + } - if(url != null) { - try { - appletParams.load(Applet.class.getResourceAsStream("/de/mud/jta/" + value)); - Enumeration ape = appletParams.keys(); - while(ape.hasMoreElements()) { - String key = (String)ape.nextElement(); - options.put(key, appletParams.getProperty(key)); - } - } catch ( Exception e ) - { - try - { - appletParams.load(url.openStream()); - Enumeration ape = appletParams.keys(); - while(ape.hasMoreElements()) { - String key = (String)ape.nextElement(); - options.put(key, appletParams.getProperty(key)); - } - } catch ( Exception e2 ) - { - System.err.println("jta: could not load config file: "+e2); - } - } - } + if (url != null) { + try { + appletParams.load(Applet.class.getResourceAsStream("/de/mud/jta/" + value)); + Enumeration ape = appletParams.keys(); + while (ape.hasMoreElements()) { + String key = (String) ape.nextElement(); + options.put(key, appletParams.getProperty(key)); + } + } catch (Exception e) { + try { + appletParams.load(url.openStream()); + Enumeration ape = appletParams.keys(); + while (ape.hasMoreElements()) { + String key = (String) ape.nextElement(); + options.put(key, appletParams.getProperty(key)); + } + } catch (Exception e2) { + System.err.println("jta: could not load config file: " + e2); + } + } + } } // see if there are parameters in the html to override properties @@ -174,157 +155,158 @@ public class Applet extends java.applet.Applet { // set the host to our code base, no other hosts are allowed anyway host = options.getProperty("Socket.host"); - if(host == null) + if (host == null) host = getCodeBase().getHost(); port = options.getProperty("Socket.port"); - if(port == null) + if (port == null) port = "23"; - if((new Boolean(options.getProperty("Applet.connect")) - .booleanValue())) - connect = true; - if(!(new Boolean(options.getProperty("Applet.disconnect")) - .booleanValue())) - disconnect = false; + if ((new Boolean(options.getProperty("Applet.connect")) + .booleanValue())) + connect = true; + if (!(new Boolean(options.getProperty("Applet.disconnect")) + .booleanValue())) + disconnect = false; - if(!(new Boolean(options.getProperty("Applet.disconnect.closeWindow")) - .booleanValue())) - disconnectCloseWindow = false; + if (!(new Boolean(options.getProperty("Applet.disconnect.closeWindow")) + .booleanValue())) + disconnectCloseWindow = false; - frameTitle = options.getProperty("Applet.detach.title"); + frameTitle = options.getProperty("Applet.detach.title"); - if((new Boolean(options.getProperty("Applet.detach"))).booleanValue()) { - if(frameTitle == null) - appletFrame = new Frame("jta: "+host+(port.equals("23")?"":" "+port)); - else - appletFrame = new Frame(frameTitle); - } else - appletFrame = this; + if ((new Boolean(options.getProperty("Applet.detach"))).booleanValue()) { + if (frameTitle == null) + appletFrame = new Frame("jta: " + host + (port.equals("23")?"":" " + port)); + else + appletFrame = new Frame(frameTitle); + } else + appletFrame = this; appletFrame.setLayout(new BorderLayout()); Hashtable componentList = pluginLoader.getComponents(); Enumeration names = componentList.keys(); - while(names.hasMoreElements()) { - String name = (String)names.nextElement(); - Component c = (Component)componentList.get(name); - if((value = options.getProperty("layout."+name)) != null) { + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + Component c = (Component) componentList.get(name); + if ((value = options.getProperty("layout." + name)) != null) { appletFrame.add(value, c); } else { - System.err.println("jta: no layout property set for '"+name+"'"); - System.err.println("jta: ignoring '"+name+"'"); - } + System.err.println("jta: no layout property set for '" + name + "'"); + System.err.println("jta: ignoring '" + name + "'"); + } } pluginLoader.registerPluginListener(new SoundListener() { public void playSound(URL audioClip) { - Applet.this.getAudioClip(audioClip).play(); - } + Applet.this.getAudioClip(audioClip).play(); + } }); pluginLoader.broadcast(new AppletRequest(this)); - if(appletFrame != this) { - final String startText = options.getProperty("Applet.detach.startText"); - final String stopText = options.getProperty("Applet.detach.stopText"); - final Button close = new Button(); + if (appletFrame != this) { + final String startText = options.getProperty("Applet.detach.startText"); + final String stopText = options.getProperty("Applet.detach.stopText"); + final Button close = new Button(); - // this works for Netscape only! - Vector privileges = - Common.split(options.getProperty("Applet.Netscape.privilege"), ','); - Class privilegeManager = null; - Method enable = null; + // this works for Netscape only! + Vector privileges = + Common.split(options.getProperty("Applet.Netscape.privilege"), ','); + Class privilegeManager = null; + Method enable = null; try { - privilegeManager = - Class.forName("netscape.security.PrivilegeManager"); - enable = privilegeManager - .getMethod("enablePrivilege", new Class[] { String.class }); - } catch(Exception e) { - System.err.println("Applet: This is not Netscape ..."); + privilegeManager = + Class.forName("netscape.security.PrivilegeManager"); + enable = privilegeManager + .getMethod("enablePrivilege", new Class[]{String.class}); + } catch (Exception e) { + System.err.println("Applet: This is not Netscape ..."); } - if(privilegeManager != null && enable != null && privileges != null) - for(int i = 0; i < privileges.size(); i++) try { - enable.invoke(privilegeManager, - new Object[] { privileges.elementAt(i) }); - System.out.println("Applet: access for '"+ - privileges.elementAt(i)+"' allowed"); + if (privilegeManager != null && enable != null && privileges != null) + for (int i = 0; i < privileges.size(); i++) + try { + enable.invoke(privilegeManager, + new Object[]{privileges.elementAt(i)}); + System.out.println("Applet: access for '" + + privileges.elementAt(i) + "' allowed"); - } catch(Exception e) { - System.err.println("Applet: access for '"+ - privileges.elementAt(i)+"' denied"); - } + } catch (Exception e) { + System.err.println("Applet: access for '" + + privileges.elementAt(i) + "' denied"); + } // set up the clipboard - try { + try { clipboard = appletFrame.getToolkit().getSystemClipboard(); - System.err.println("Applet: acquired system clipboard: "+clipboard); - } catch(Exception e) { - System.err.println("Applet: system clipboard access denied: "+ - ((e instanceof InvocationTargetException) ? - ((InvocationTargetException)e).getTargetException() : e)); - // e.printStackTrace(); + System.err.println("Applet: acquired system clipboard: " + clipboard); + } catch (Exception e) { + System.err.println("Applet: system clipboard access denied: " + + ((e instanceof InvocationTargetException) ? + ((InvocationTargetException) e).getTargetException() : e)); + // e.printStackTrace(); } finally { - if(clipboard == null) { + if (clipboard == null) { System.err.println("Applet: copy & paste only within the JTA"); clipboard = new Clipboard("de.mud.jta.Main"); - } + } } - - if((new Boolean(options.getProperty("Applet.detach.immediately")) - .booleanValue())) { - if((new Boolean(options.getProperty("Applet.detach.fullscreen")) - .booleanValue())) - ((Frame)appletFrame) - .setSize(appletFrame.getToolkit().getScreenSize()); - else - ((Frame)appletFrame).pack(); - ((Frame)appletFrame).show(); - pluginLoader.broadcast(new SocketRequest(host,Integer.parseInt(port))); - pluginLoader.broadcast(new ReturnFocusRequest()); - close.setLabel(startText != null ? stopText : "Disconnect"); - } else - close.setLabel(startText != null ? startText : "Connect"); + if ((new Boolean(options.getProperty("Applet.detach.immediately")) + .booleanValue())) { + if ((new Boolean(options.getProperty("Applet.detach.fullscreen")) + .booleanValue())) + ((Frame) appletFrame) + .setSize(appletFrame.getToolkit().getScreenSize()); + else + ((Frame) appletFrame).pack(); - close.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if(((Frame)appletFrame).isVisible()) { - pluginLoader.broadcast(new SocketRequest()); - ((Frame)appletFrame).setVisible(false); - close.setLabel(startText != null ? startText : "Connect"); - } else { - if(frameTitle == null) - ((Frame)appletFrame) - .setTitle("jta: "+host+(port.equals("23")?"":" "+port)); - if((new Boolean(options.getProperty("Applet.detach.fullscreen")) - .booleanValue())) - ((Frame)appletFrame) - .setSize(appletFrame.getToolkit().getScreenSize()); - else - ((Frame)appletFrame).pack(); - ((Frame)appletFrame).show(); - getAppletContext().showStatus("Trying "+host+" "+port+" ..."); - pluginLoader.broadcast(new SocketRequest(host, - Integer.parseInt(port))); + ((Frame) appletFrame).show(); + pluginLoader.broadcast(new SocketRequest(host, Integer.parseInt(port))); + pluginLoader.broadcast(new ReturnFocusRequest()); + close.setLabel(startText != null ? stopText : "Disconnect"); + } else + close.setLabel(startText != null ? startText : "Connect"); + + close.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + if (((Frame) appletFrame).isVisible()) { + pluginLoader.broadcast(new SocketRequest()); + ((Frame) appletFrame).setVisible(false); + close.setLabel(startText != null ? startText : "Connect"); + } else { + if (frameTitle == null) + ((Frame) appletFrame) + .setTitle("jta: " + host + (port.equals("23")?"":" " + port)); + if ((new Boolean(options.getProperty("Applet.detach.fullscreen")) + .booleanValue())) + ((Frame) appletFrame) + .setSize(appletFrame.getToolkit().getScreenSize()); + else + ((Frame) appletFrame).pack(); + ((Frame) appletFrame).show(); + getAppletContext().showStatus("Trying " + host + " " + port + " ..."); + pluginLoader.broadcast(new SocketRequest(host, + Integer.parseInt(port))); pluginLoader.broadcast(new ReturnFocusRequest()); - close.setLabel(stopText != null ? stopText : "Disconnect"); - } + close.setLabel(stopText != null ? stopText : "Disconnect"); + } } - }); + }); - setLayout(new BorderLayout()); - add("Center", close); + setLayout(new BorderLayout()); + add("Center", close); - // add a menu bar + // add a menu bar MenuBar mb = new MenuBar(); Menu file = new Menu("File"); - file.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); + file.setShortcut(new MenuShortcut(KeyEvent.VK_F, true)); MenuItem tmp; file.add(tmp = new MenuItem("Connect")); tmp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - pluginLoader.broadcast(new SocketRequest(host, - Integer.parseInt(port))); + pluginLoader.broadcast(new SocketRequest(host, + Integer.parseInt(port))); } }); file.add(tmp = new MenuItem("Disconnect")); @@ -333,16 +315,16 @@ public class Applet extends java.applet.Applet { pluginLoader.broadcast(new SocketRequest()); } }); - file.add(new MenuItem("-")); + file.add(new MenuItem("-")); file.add(tmp = new MenuItem("Print")); tmp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - if(pluginLoader.getComponents().get("Terminal") != null) { - PrintJob printJob = - appletFrame.getToolkit() - .getPrintJob((Frame)appletFrame,"JTA Terminal",null); - ((Component)pluginLoader.getComponents().get("Terminal")) - .print(printJob.getGraphics()); + if (pluginLoader.getComponents().get("Terminal") != null) { + PrintJob printJob = + appletFrame.getToolkit() + .getPrintJob((Frame) appletFrame, "JTA Terminal", null); + ((Component) pluginLoader.getComponents().get("Terminal")) + .print(printJob.getGraphics()); printJob.end(); } } @@ -351,106 +333,122 @@ public class Applet extends java.applet.Applet { file.add(tmp = new MenuItem("Exit")); tmp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - ((Frame)appletFrame).setVisible(false); - pluginLoader.broadcast(new SocketRequest()); - close.setLabel(startText != null ? startText : "Connect"); + ((Frame) appletFrame).setVisible(false); + pluginLoader.broadcast(new SocketRequest()); + close.setLabel(startText != null ? startText : "Connect"); } }); - mb.add(file); + mb.add(file); - Menu edit = new Menu("Edit"); - edit.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); + Menu edit = new Menu("Edit"); + edit.setShortcut(new MenuShortcut(KeyEvent.VK_E, true)); edit.add(tmp = new MenuItem("Copy")); tmp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - if(debug > 2) - System.err.println("Applet: copy: "+focussedPlugin); - if(focussedPlugin instanceof VisualTransferPlugin) - ((VisualTransferPlugin)focussedPlugin).copy(clipboard); + if (debug > 2) + System.err.println("Applet: copy: " + focussedPlugin); + if (focussedPlugin instanceof VisualTransferPlugin) + ((VisualTransferPlugin) focussedPlugin).copy(clipboard); } }); edit.add(tmp = new MenuItem("Paste")); tmp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - if(debug > 2) - System.err.println("Applet: paste: "+focussedPlugin); - if(focussedPlugin instanceof VisualTransferPlugin) - ((VisualTransferPlugin)focussedPlugin).paste(clipboard); + if (debug > 2) + System.err.println("Applet: paste: " + focussedPlugin); + if (focussedPlugin instanceof VisualTransferPlugin) + ((VisualTransferPlugin) focussedPlugin).paste(clipboard); } }); mb.add(edit); - Hashtable menuList = pluginLoader.getMenus(); + Hashtable menuList = pluginLoader.getMenus(); names = menuList.keys(); - while(names.hasMoreElements()) { - String name = (String)names.nextElement(); - mb.add((Menu)menuList.get(name)); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + mb.add((Menu) menuList.get(name)); } - // only add the menubar if the property is true - if((new Boolean(options.getProperty("Applet.detach.menuBar")) - .booleanValue())) - ((Frame)appletFrame).setMenuBar(mb); + Menu help = new Menu("Help"); + help.setShortcut(new MenuShortcut(KeyEvent.VK_HELP, true)); + help.add(tmp = new MenuItem("General")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(helpFrame == null) { + helpFrame = new HelpFrame(options.getProperty("Help.url")); + } + helpFrame.setVisible(true); + } + }); + mb.setHelpMenu(help); - // add window closing event handler + // only add the menubar if the property is true + if ((new Boolean(options.getProperty("Applet.detach.menuBar")) + .booleanValue())) + ((Frame) appletFrame).setMenuBar(mb); + + // add window closing event handler try { - ((Frame)appletFrame).addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent evt) { - pluginLoader.broadcast(new SocketRequest()); - ((Frame)appletFrame).setVisible(false); - close.setLabel(startText != null ? startText : "Connect"); - } - }); - } catch(Exception e) { - System.err.println("Applet: could not set up Window event listener"); - System.err.println("Applet: you will not be able to close it"); - } + ((Frame) appletFrame).addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + pluginLoader.broadcast(new SocketRequest()); + ((Frame) appletFrame).setVisible(false); + close.setLabel(startText != null ? startText : "Connect"); + } + }); + } catch (Exception e) { + System.err.println("Applet: could not set up Window event listener"); + System.err.println("Applet: you will not be able to close it"); + } pluginLoader.registerPluginListener(new OnlineStatusListener() { public void online() { - if(debug > 0) System.err.println("Terminal: online"); + if (debug > 0) System.err.println("Terminal: online"); online = true; - if(((Frame)appletFrame).isVisible() == false) - ((Frame)appletFrame).setVisible(true); - } - public void offline() { - if(debug > 0) System.err.println("Terminal: offline"); - online=false; - if(disconnectCloseWindow) { - ((Frame)appletFrame).setVisible(false); - close.setLabel(startText != null ? startText : "Connect"); - } - } + if (((Frame) appletFrame).isVisible() == false) + ((Frame) appletFrame).setVisible(true); + } + + public void offline() { + if (debug > 0) System.err.println("Terminal: offline"); + online = false; + if (disconnectCloseWindow) { + ((Frame) appletFrame).setVisible(false); + close.setLabel(startText != null ? startText : "Connect"); + } + } }); // register a focus status listener, so we know when a plugin got focus pluginLoader.registerPluginListener(new FocusStatusListener() { public void pluginGainedFocus(Plugin plugin) { - if(Applet.debug > 0) - System.err.println("Applet: "+plugin+" got focus"); + if (Applet.debug > 0) + System.err.println("Applet: " + plugin + " got focus"); focussedPlugin = plugin; } + public void pluginLostFocus(Plugin plugin) { // we ignore the lost focus - if(Applet.debug > 0) - System.err.println("Applet: "+plugin+" lost focus"); + if (Applet.debug > 0) + System.err.println("Applet: " + plugin + " lost focus"); } }); } else - // if we have no external frame use this online status listener + // if we have no external frame use this online status listener pluginLoader.registerPluginListener(new OnlineStatusListener() { public void online() { - if(debug > 0) System.err.println("Terminal: online"); + if (debug > 0) System.err.println("Terminal: online"); online = true; } + public void offline() { - if(debug > 0) System.err.println("Terminal: offline"); - online=false; + if (debug > 0) System.err.println("Terminal: offline"); + online = false; } }); - + } } @@ -458,20 +456,20 @@ public class Applet extends java.applet.Applet { * Start the applet. Connect to the remote host. */ public void start() { - if(!online && (appletFrame == this || connect)) { - if(debug > 0) System.err.println("start("+host+", "+port+")"); - getAppletContext().showStatus("Trying "+host+" "+port+" ..."); + if (!online && (appletFrame == this || connect)) { + if (debug > 0) System.err.println("start(" + host + ", " + port + ")"); + getAppletContext().showStatus("Trying " + host + " " + port + " ..."); pluginLoader.broadcast(new SocketRequest(host, Integer.parseInt(port))); pluginLoader.broadcast(new ReturnFocusRequest()); - } + } } /** * Stop the applet and disconnect. */ public void stop() { - if(online && disconnect) { - if(debug > 0) System.err.println("stop()"); + if (online && disconnect) { + if (debug > 0) System.err.println("stop()"); pluginLoader.broadcast(new SocketRequest()); } } @@ -483,10 +481,10 @@ public class Applet extends java.applet.Applet { */ private void parameterOverride(Properties options) { Enumeration e = options.keys(); - while(e.hasMoreElements()) { - String key = (String)e.nextElement(), value = getParameter(key); - if(value != null) { - System.out.println("Applet: overriding value of "+key+" with "+value); + while (e.hasMoreElements()) { + String key = (String) e.nextElement(), value = getParameter(key); + if (value != null) { + System.out.println("Applet: overriding value of " + key + " with " + value); // options.setProperty(key, value); options.put(key, value); } blob - 7625f78d282eb7500f00acee1a064e761369dacb blob + c4c7583567b81f047f070ae14daa2be3e962816e --- de/mud/jta/Main.java +++ de/mud/jta/Main.java @@ -6,11 +6,11 @@ * the Free Software Foundation; either version 2, or (at your option) * any later version. * - * "The Java Telnet Application" is distributed in the hope that it will be + * "The Java Telnet Application" 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 software; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, @@ -18,47 +18,30 @@ */ package de.mud.jta; -import de.mud.jta.event.OnlineStatusListener; import de.mud.jta.event.FocusStatusListener; -import de.mud.jta.event.SocketRequest; +import de.mud.jta.event.OnlineStatusListener; import de.mud.jta.event.ReturnFocusRequest; +import de.mud.jta.event.SocketRequest; -import java.util.Properties; -import java.util.Hashtable; -import java.util.Enumeration; - -import java.io.FileInputStream; -import java.io.IOException; - -import java.net.URL; - -import java.awt.Frame; -import java.awt.PrintJob; -import java.awt.Dialog; -import java.awt.Label; -import java.awt.Button; -import java.awt.Color; -import java.awt.Component; -import java.awt.Menu; -import java.awt.MenuBar; -import java.awt.MenuItem; -import java.awt.MenuShortcut; - -import java.awt.event.ActionListener; +import java.awt.*; +import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; -import java.awt.event.FocusListener; -import java.awt.event.FocusEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; -import java.awt.datatransfer.Clipboard; - /** * The Java Telnet Application

* This is the implementation of whole set of applications. It's modular * structure allows to configure the software to act either as a sophisticated - * terminal emulation and/or, adding the network backend, as telnet + * terminal emulation and/or, adding the network backend, as telnet * implementation. Additional modules provide features like scripting or an * improved graphical user interface.

* This software is written entirely in Javatm.

@@ -85,44 +68,46 @@ public class Main { /** holds the system clipboard or our own */ private static Clipboard clipboard; + private static HelpFrame helpFrame; public static void main(String args[]) { - Properties options = new Properties(); + final Properties options = new Properties(); try { options.load(Main.class.getResourceAsStream("/de/mud/jta/default.conf")); - } catch(IOException e) { + } catch (IOException e) { System.err.println("jta: cannot load default.conf"); } String error = parseOptions(options, args); - if(error != null) { + if (error != null) { System.err.println(error); System.err.println("usage: de.mud.jta.Main [-plugins pluginlist] " - +"[-addplugin plugin] " - +"[-config url_or_file] " - +"[-term id] [host [port]]"); + + "[-addplugin plugin] " + + "[-config url_or_file] " + + "[-term id] [host [port]]"); System.exit(0); } String cfg = options.getProperty("Main.config"); - if(cfg != null) try { - options.load(new URL(cfg).openStream()); - } catch(IOException e) { + if (cfg != null) try { - options.load(new FileInputStream(cfg)); - } catch(Exception fe) { - System.err.println("jta: cannot load "+cfg); + options.load(new URL(cfg).openStream()); + } catch (IOException e) { + try { + options.load(new FileInputStream(cfg)); + } catch (Exception fe) { + System.err.println("jta: cannot load " + cfg); + } } - } final String host = options.getProperty("Socket.host"); final String port = options.getProperty("Socket.port"); - final Frame frame = new Frame("jta: "+host+(port.equals("23")?"":" "+port)); + final Frame frame = new Frame("jta: " + host + (port.equals("23")?"":" " + port)); // set up the clipboard try { clipboard = frame.getToolkit().getSystemClipboard(); - } catch(Exception e) { + } catch (Exception e) { System.err.println("jta: system clipboard access denied"); System.err.println("jta: copy & paste only within the JTA"); clipboard = new Clipboard("de.mud.jta.Main"); @@ -132,9 +117,10 @@ public class Main { final Common setup = new Common(options); setup.registerPluginListener(new OnlineStatusListener() { - public void online() { - frame.setTitle("jta: "+host+(port.equals("23")?"":" "+port)); + public void online() { + frame.setTitle("jta: " + host + (port.equals("23")?"":" " + port)); } + public void offline() { frame.setTitle("jta: offline"); } @@ -143,135 +129,129 @@ public class Main { // register a focus status listener, so we know when a plugin got focus setup.registerPluginListener(new FocusStatusListener() { public void pluginGainedFocus(Plugin plugin) { - if(Main.debug > 0) - System.err.println("Main: "+plugin+" got focus"); + if (Main.debug > 0) + System.err.println("Main: " + plugin + " got focus"); focussedPlugin = plugin; } + public void pluginLostFocus(Plugin plugin) { // we ignore the lost focus - if(Main.debug > 0) - System.err.println("Main: "+plugin+" lost focus"); + if (Main.debug > 0) + System.err.println("Main: " + plugin + " lost focus"); } }); Hashtable componentList = setup.getComponents(); Enumeration names = componentList.keys(); - while(names.hasMoreElements()) { - String name = (String)names.nextElement(); - Component c = (Component)componentList.get(name); - if(options.getProperty("layout."+name) == null) { - System.err.println("jta: no layout property set for '"+name+"'"); - frame.add("South", c); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + Component c = (Component) componentList.get(name); + if (options.getProperty("layout." + name) == null) { + System.err.println("jta: no layout property set for '" + name + "'"); + frame.add("South", c); } else - frame.add(options.getProperty("layout."+name), c); + frame.add(options.getProperty("layout." + name), c); } - if(!personalJava) { + if (!personalJava) { - frame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent evt) { - setup.broadcast(new SocketRequest()); - frame.setVisible(false); - frame.dispose(); - System.exit(0); - } - }); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + setup.broadcast(new SocketRequest()); + frame.setVisible(false); + frame.dispose(); + System.exit(0); + } + }); - // add a menu bar - MenuBar mb = new MenuBar(); - Menu file = new Menu("File"); - file.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); - MenuItem tmp; - file.add(tmp = new MenuItem("Connect")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - setup.broadcast(new SocketRequest(host, Integer.parseInt(port))); - } - }); - file.add(tmp = new MenuItem("Disconnect")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - setup.broadcast(new SocketRequest()); - } - }); - file.add(new MenuItem("-")); - file.add(tmp = new MenuItem("Print")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if(setup.getComponents().get("Terminal") != null) { - PrintJob printJob = - frame.getToolkit().getPrintJob(frame,"JTA Terminal",null); - // return if the user clicked cancel - if(printJob == null) return; - ((Component)setup.getComponents().get("Terminal")) - .print(printJob.getGraphics()); - printJob.end(); - } - } - }); - file.add(new MenuItem("-")); - file.add(tmp = new MenuItem("Exit")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - frame.dispose(); - System.exit(0); - } - }); - mb.add(file); + // add a menu bar + MenuBar mb = new MenuBar(); + Menu file = new Menu("File"); + file.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); + MenuItem tmp; + file.add(tmp = new MenuItem("Connect")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + setup.broadcast(new SocketRequest(host, Integer.parseInt(port))); + } + }); + file.add(tmp = new MenuItem("Disconnect")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + setup.broadcast(new SocketRequest()); + } + }); + file.add(new MenuItem("-")); + file.add(tmp = new MenuItem("Print")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + if (setup.getComponents().get("Terminal") != null) { + PrintJob printJob = + frame.getToolkit().getPrintJob(frame, "JTA Terminal", null); + // return if the user clicked cancel + if (printJob == null) return; + ((Component) setup.getComponents().get("Terminal")) + .print(printJob.getGraphics()); + printJob.end(); + } + } + }); + file.add(new MenuItem("-")); + file.add(tmp = new MenuItem("Exit")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + frame.dispose(); + System.exit(0); + } + }); + mb.add(file); - Menu edit = new Menu("Edit"); - edit.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); - edit.add(tmp = new MenuItem("Copy")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if(focussedPlugin instanceof VisualTransferPlugin) - ((VisualTransferPlugin)focussedPlugin).copy(clipboard); + Menu edit = new Menu("Edit"); + edit.setShortcut(new MenuShortcut(KeyEvent.VK_H, true)); + edit.add(tmp = new MenuItem("Copy")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + if (focussedPlugin instanceof VisualTransferPlugin) + ((VisualTransferPlugin) focussedPlugin).copy(clipboard); + } + }); + edit.add(tmp = new MenuItem("Paste")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + if (focussedPlugin instanceof VisualTransferPlugin) + ((VisualTransferPlugin) focussedPlugin).paste(clipboard); + } + }); + mb.add(edit); + + Hashtable menuList = setup.getMenus(); + names = menuList.keys(); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + mb.add((Menu) menuList.get(name)); } - }); - edit.add(tmp = new MenuItem("Paste")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - if(focussedPlugin instanceof VisualTransferPlugin) - ((VisualTransferPlugin)focussedPlugin).paste(clipboard); - } - }); - mb.add(edit); - Hashtable menuList = setup.getMenus(); - names = menuList.keys(); - while(names.hasMoreElements()) { - String name = (String)names.nextElement(); - mb.add((Menu)menuList.get(name)); - } + Menu help = new Menu("Help"); + help.setShortcut(new MenuShortcut(KeyEvent.VK_HELP, true)); + help.add(tmp = new MenuItem("General")); + tmp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (helpFrame == null) { + helpFrame = new HelpFrame(options.getProperty("Help.url")); + } + helpFrame.setVisible(true); + } + }); + mb.setHelpMenu(help); - Menu help = new Menu("Help"); - help.add(tmp = new MenuItem("About")); - tmp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - final Dialog d = new Dialog(frame, "About JTA", true); - d.add("Center", new Label("Copyright (c) 1996-2000 " - +"Matthias L Jugel, Marcus Meißner")); - Button close = new Button("Close"); - close.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - d.dispose(); - } - }); - d.add("South", close); - d.pack(); - d.setResizable(false); - d.show(); - } - }); - mb.setHelpMenu(help); - frame.setMenuBar(mb); + frame.setMenuBar(mb); } // !personalJava frame.pack(); - if((new Boolean(options.getProperty("Applet.detach.fullscreen")) - .booleanValue())) + if ((new Boolean(options.getProperty("Applet.detach.fullscreen")) + .booleanValue())) frame.setSize(frame.getToolkit().getScreenSize()); else frame.pack(); @@ -288,7 +268,7 @@ public class Main { * with the new values if applicable. *

* This method did not work with jdk 1.1.x as the setProperty() - * method is not available. So it uses now the put() method from + * method is not available. So it uses now the put() method from * Hashtable instead. * * @param options the original options @@ -297,33 +277,35 @@ public class Main { */ private static String parseOptions(Properties options, String args[]) { boolean host = false, port = false; - for(int n = 0; n < args.length; n++) { - if(args[n].equals("-config")) - if(!args[n+1].startsWith("-")) - options.put("Main.config", args[++n]); - else - return "missing parameter for -config"; - else if(args[n].equals("-plugins")) - if(!args[n+1].startsWith("-")) - options.put("plugins", args[++n]); + for (int n = 0; n < args.length; n++) { + if (args[n].equals("-config")) + if (!args[n + 1].startsWith("-")) + options.put("Main.config", args[++n]); else - return "missing parameter for -plugins"; - else if(args[n].equals("-addplugin")) - if(!args[n+1].startsWith("-")) - options.put("plugins", args[++n]+","+options.get("plugins")); + return "missing parameter for -config"; + else if (args[n].equals("-plugins")) + if (!args[n + 1].startsWith("-")) + options.put("plugins", args[++n]); else - return "missing parameter for -addplugin"; - else if(args[n].equals("-term")) - if(!args[n+1].startsWith("-")) + return "missing parameter for -plugins"; + else if (args[n].equals("-addplugin")) + if (!args[n + 1].startsWith("-")) + options.put("plugins", args[++n] + "," + options.get("plugins")); + else + return "missing parameter for -addplugin"; + else if (args[n].equals("-term")) + if (!args[n + 1].startsWith("-")) options.put("Terminal.id", args[++n]); - else - return "missing parameter for -term"; - else if(!host) { - options.put("Socket.host", args[n]); host = true; - } else if(host && !port) { - options.put("Socket.port", args[n]); port = true; + else + return "missing parameter for -term"; + else if (!host) { + options.put("Socket.host", args[n]); + host = true; + } else if (host && !port) { + options.put("Socket.port", args[n]); + port = true; } else - return "unknown parameter '"+args[n]+"'"; + return "unknown parameter '" + args[n] + "'"; } return null; } blob - 766c83593b31c6cb3707afc037da73a326381b6d blob + 0da2e5f8ca87f3808e23b5d661c74dc22b6b5efa --- de/mud/jta/default.conf +++ de/mud/jta/default.conf @@ -31,6 +31,9 @@ layout = BorderLayout layout.Terminal = Center layout.Status = South +# help url/filename +Help.url = /README + # ======================================================================= # Applet defaults # ======================================================================= blob - 033dec9adb4dc67538ab3ae32156bc27a32a00cf blob + b4316a8cdb0514c5dd8361222d3c313e8d479a55 --- de/mud/jta/plugin/Capture.java +++ de/mud/jta/plugin/Capture.java @@ -38,6 +38,7 @@ 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 @@ -59,7 +60,7 @@ import java.net.URLEncoder; * @author Matthias L. Jugel, Marcus Meißner */ public class Capture extends Plugin - implements FilterPlugin, VisualPlugin { + implements FilterPlugin, VisualPlugin,ActionListener { // this enables or disables the compilation of menu entries private final static boolean personalJava = false; @@ -68,10 +69,11 @@ public class Capture extends Plugin private final static int debug = 1; /** The remote storage URL */ - protected URL remoteURL = null; + protected Hashtable remoteUrlList = new Hashtable(); /** The plugin menu */ protected Menu menu; + protected Dialog dialog; /** Whether the capture is currently enabled or not */ protected boolean captureEnabled = false; @@ -103,9 +105,9 @@ public class Capture extends Plugin frame.pack(); // an error dialogue, in case the upload fails - final Dialog dialog = new Dialog(frame); + dialog = new Dialog(frame); dialog.setLayout(new BorderLayout()); - dialog.add(new TextField("Cannot store data on remote server!")); + dialog.add(new Label("Cannot store data on remote server!")); Button close = new Button("Close Dialog"); dialog.add(close); close.addActionListener(new ActionListener() { @@ -165,63 +167,35 @@ public class Capture extends Plugin }); menu.add(view); - save = new MenuItem("Save Protocol"); - save.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (debug > 0) System.err.println("Capture: storing text: " + remoteURL); - try { - URLConnection urlConnection = remoteURL.openConnection(); - DataOutputStream out; - DataInputStream 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"); - // Send POST output. - - // send the data to the url receiver ... - out = new DataOutputStream(urlConnection.getOutputStream()); - String 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 DataInputStream(urlConnection.getInputStream()); - String str; - while (null != ((str = in.readLine()))) { - System.out.println("Capture: "+str); - } - in.close(); - - } catch (IOException ioe) { - dialog.setVisible(true); - System.err.println("Capture: cannot store text on remote server: " + remoteURL); - ioe.printStackTrace(); - } - if (debug > 0) System.err.println("Capture: storage complete: " + remoteURL); - } - }); - save.setEnabled(false); - menu.add(save); } // !personalJava + // configure the remote URL bus.registerPluginListener(new ConfigurationListener() { public void setConfiguration(PluginConfig config) { String tmp; - if ((tmp = config.getProperty("Capture", id, "url")) != null) { + int i = 1; + while ((tmp = config.getProperty("Capture", id, i+".url")) != null) { try { - remoteURL = new URL(tmp); - save.setLabel("Save to: " + tmp); + 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 MenuItem("Save As "+tmp); + } else { + save = new MenuItem("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); } @@ -230,6 +204,55 @@ public class Capture extends Plugin }); } + public void actionPerformed(ActionEvent e) { + String urlID = e.getActionCommand(); + URL url = (URL)remoteUrlList.get(urlID); + + if (debug > 0) System.err.println("Capture: storing text: " + + urlID+": " + + remoteUrlList.get(urlID)); + try { + URLConnection urlConnection = url.openConnection(); + DataOutputStream out; + DataInputStream 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+".param"); + 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 DataInputStream(urlConnection.getInputStream()); + String str; + while (null != ((str = in.readLine()))) { + System.out.println("Capture: "+str); + } + in.close(); + + } catch (IOException ioe) { + dialog.setVisible(true); + System.err.println("Capture: cannot store text on remote server: " + url ); + ioe.printStackTrace(); + } + 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; blob - e5d0a80d439ffc465c75c42323d2a2a3deb79b54 blob + d515570c4964a3fdf9c5b83b3e9889d010fc4105 --- de/mud/jta/plugin/Terminal.java +++ de/mud/jta/plugin/Terminal.java @@ -114,6 +114,7 @@ public class Terminal extends Plugin */ public Terminal(final PluginBus bus, final String id) { super(bus, id); + // initialize colors colors.put("black", Color.black); colors.put("red", Color.red);