psmith 2003/11/20 14:10:19 Modified: src/java/org/apache/log4j/chainsaw FileMenu.java FileLoadAction.java Log: added the ability to load remote URLs into Chainsaw Revision Changes Path 1.2 +114 -31 jakarta-log4j/src/java/org/apache/log4j/chainsaw/FileMenu.java Index: FileMenu.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/FileMenu.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- FileMenu.java 25 Jun 2003 04:05:21 -0000 1.1 +++ FileMenu.java 20 Nov 2003 22:10:19 -0000 1.2 @@ -1,4 +1,53 @@ /* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "log4j" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation. For more information on the + * Apache Software Foundation, please see <http://www.apache.org/>. + * + */ + +/* * @author Paul Smith <[EMAIL PROTECTED]> * */ @@ -15,58 +64,92 @@ import javax.swing.JSeparator; import javax.swing.KeyStroke; - /** - * The complete File Menu for the main GUI, containing - * the Load, Save, Close Welcome Tab, and Exit actions - * - * @author Paul Smith <[EMAIL PROTECTED]> - * @author Scott Deboy <[EMAIL PROTECTED]> - */ -class FileMenu extends JMenu { - +/** + * The complete File Menu for the main GUI, containing + * the Load, Save, Close Welcome Tab, and Exit actions + * + * @author Paul Smith <[EMAIL PROTECTED]> + * @author Scott Deboy <[EMAIL PROTECTED]> + */ +class FileMenu extends JMenu { private Action exitAction; private Action loadLog4JAction; private Action loadUtilLoggingAction; + private Action remoteLog4JAction; + private Action remoteUtilLoggingAction; private Action saveAction; private Action saveSettingsAction; - + public FileMenu(final LogUI logUI) { super("File"); setMnemonic(KeyEvent.VK_F); - - loadLog4JAction = new FileLoadAction(logUI, "org.apache.log4j.xml.XMLDecoder", "Load Log4J File..."); - loadUtilLoggingAction = new FileLoadAction(logUI, "org.apache.log4j.xml.UtilLoggingXMLDecoder", "Load Java Util File..."); + + loadLog4JAction = + new FileLoadAction( + logUI, "org.apache.log4j.xml.XMLDecoder", "Load Log4J File...", false); + loadUtilLoggingAction = + new FileLoadAction( + logUI, "org.apache.log4j.xml.UtilLoggingXMLDecoder", + "Load Java Util File...", false); + + remoteLog4JAction = + new FileLoadAction( + logUI, "org.apache.log4j.xml.XMLDecoder", "Load Remote Log4J File...", + true); + remoteUtilLoggingAction = + new FileLoadAction( + logUI, "org.apache.log4j.xml.UtilLoggingXMLDecoder", + "Load Remote Java Util File...", true); + saveAction = new FileSaveAction(logUI); - + JMenuItem loadLog4JFile = new JMenuItem(loadLog4JAction); JMenuItem loadUtilLoggingFile = new JMenuItem(loadUtilLoggingAction); + JMenuItem remoteLog4JFile = new JMenuItem(remoteLog4JAction); + JMenuItem remoteUtilLoggingFile = new JMenuItem(remoteUtilLoggingAction); JMenuItem saveFile = new JMenuItem(saveAction); - exitAction = new AbstractAction() { - - public void actionPerformed(ActionEvent e) { - logUI.exit(); - } - }; - - exitAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK)); + exitAction = + new AbstractAction() { + public void actionPerformed(ActionEvent e) { + logUI.exit(); + } + }; + + exitAction.putValue( + Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK)); exitAction.putValue(Action.SHORT_DESCRIPTION, "Exits the Application"); exitAction.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_X)); exitAction.putValue(Action.NAME, "Exit"); - + JMenuItem menuItemExit = new JMenuItem(exitAction); - + add(loadLog4JFile); add(loadUtilLoggingFile); + addSeparator(); + add(remoteLog4JFile); + add(remoteUtilLoggingFile); + addSeparator(); add(saveFile); - add(new JSeparator()); + addSeparator(); add(menuItemExit); } - - Action getLog4JFileOpenAction() { return loadLog4JAction;} - Action getUtilLoggingJFileOpenAction() { return loadUtilLoggingAction;} - Action getFileSaveAction() { return saveAction;} - Action getExitAction() { return exitAction;} - + + Action getLog4JFileOpenAction() { + return loadLog4JAction; + } + + Action getUtilLoggingJFileOpenAction() { + return loadUtilLoggingAction; + } + + Action getFileSaveAction() { + return saveAction; + } + + Action getExitAction() { + return exitAction; + } } 1.4 +70 -30 jakarta-log4j/src/java/org/apache/log4j/chainsaw/FileLoadAction.java Index: FileLoadAction.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/FileLoadAction.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- FileLoadAction.java 2 Nov 2003 19:53:47 -0000 1.3 +++ FileLoadAction.java 20 Nov 2003 22:10:19 -0000 1.4 @@ -50,6 +50,7 @@ package org.apache.log4j.chainsaw; import org.apache.log4j.Decoder; +import org.apache.log4j.Logger; import org.apache.log4j.chainsaw.icons.ChainsawIcons; import java.awt.event.ActionEvent; @@ -59,6 +60,8 @@ import java.io.File; import java.io.IOException; +import java.net.URL; + import java.util.HashMap; import java.util.Map; import java.util.Vector; @@ -67,6 +70,7 @@ import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JFileChooser; +import javax.swing.JOptionPane; import javax.swing.KeyStroke; import javax.swing.filechooser.FileFilter; @@ -77,9 +81,11 @@ * * @author Paul Smith <[EMAIL PROTECTED]> * @author Scott Deboy <[EMAIL PROTECTED]> - * + * */ class FileLoadAction extends AbstractAction { + private static final Logger LOG = Logger.getLogger(FileLoadAction.class); + /** * This action must have a reference to a LogUI * window so that it can append the events it loads @@ -88,10 +94,12 @@ Decoder decoder = null; private LogUI parent; private JFileChooser chooser = null; + private boolean remoteURL = false; - public FileLoadAction(LogUI parent, String decoder, String title) { + public FileLoadAction( + LogUI parent, String decoder, String title, boolean isRemoteURL) { super(title); - + remoteURL = isRemoteURL; try { Class c = Class.forName(decoder); @@ -124,43 +132,75 @@ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { - if( chooser == null ){ - chooser = new JFileChooser(); - } + String name = ""; + URL url = null; - chooser.setDialogTitle("Load Events from XML file..."); + if (!remoteURL) { + if (chooser == null) { + chooser = new JFileChooser(); + } - chooser.setAcceptAllFileFilterUsed(true); + chooser.setDialogTitle("Load Events from XML file..."); - chooser.setFileFilter( - new FileFilter() { - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".xml")|| f.isDirectory()); - } + chooser.setAcceptAllFileFilterUsed(true); - public String getDescription() { - return "XML files (*.xml)"; - } - }); + chooser.setFileFilter( + new FileFilter() { + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".xml") + || f.isDirectory()); + } - chooser.showOpenDialog(parent); + public String getDescription() { + return "XML files (*.xml)"; + } + }); - File selectedFile = chooser.getSelectedFile(); + chooser.showOpenDialog(parent); - if (selectedFile != null) { - Map additionalProperties = new HashMap(); - additionalProperties.put( - ChainsawConstants.LOG4J_MACHINE_KEY, - "localhost:" + selectedFile.getName()); - decoder.setAdditionalProperties(additionalProperties); + File selectedFile = chooser.getSelectedFile(); try { - Vector events = decoder.decode(selectedFile); - parent.handler.appendBatch(events); - } catch (IOException e1) { - // TODO Handle the error with a nice msg - e1.printStackTrace(); + url = selectedFile.toURL(); + name = "localhost:" + selectedFile.getName(); + } catch (Exception ex) { + // TODO: handle exception + } + } else { + String urltext = + JOptionPane.showInputDialog( + parent, + "<html>Please type in the <b>complete</b> URL to the remote XML source.</html>", + "file://"); + + if (urltext != null) { + try { + url = new URL(urltext); + } catch (Exception ex) { + JOptionPane.showMessageDialog( + parent, "'" + urltext + "' is not a valid URL."); + } } + } + + if (url != null) { + Map additionalProperties = new HashMap(); + additionalProperties.put(ChainsawConstants.LOG4J_MACHINE_KEY, name); + decoder.setAdditionalProperties(additionalProperties); + + final URL urlToUse = url; + new Thread( + new Runnable() { + public void run() { + try { + Vector events = decoder.decode(urlToUse); + parent.handler.appendBatch(events); + } catch (IOException e1) { + // TODO Handle the error with a nice msg + LOG.error(e1); + } + } + }).start(); } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]