You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by sd...@apache.org on 2006/02/25 03:42:30 UTC

svn commit: r380883 - in /logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw: ./ help/ receivers/ version/ vfs/

Author: sdeboy
Date: Fri Feb 24 18:42:27 2006
New Revision: 380883

URL: http://svn.apache.org/viewcvs?rev=380883&view=rev
Log:
- Added LogFileXMLReceiver, VFSLogFilePatternReceiver samples to log4j-receiver-sample.xml
- Added LogFileXMLReceiver support to receiver creation panel
- Created new VisualReceiver interface to allow receivers to get a container reference for gui purposes (parent of dialogs, etc)
- Supporting an optional GUI login window for VFSLogFilePatternReceiver when 'promptForUserInfo' is set to true

Added:
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java
Modified:
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/help/release-notes.html
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/log4j-receiver-sample.xml
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/known.receivers
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/version/VersionManager.java
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/help/release-notes.html
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/help/release-notes.html?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/help/release-notes.html (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/help/release-notes.html Fri Feb 24 18:42:27 2006
@@ -10,6 +10,12 @@
 <b>NOTE:</b> The mechanism and format used to persist settings in Chainsaw is subject to change during this alpha phase.  If you are experiencing problems displaying events in Chainsaw, please delete everything in the $user.dir/.chainsaw directory.
 <br>
 <h1>1.99.99</h2>
+<h2>25 February 2006</h2>
+<ul>
+<li>Added a GUI option for VFSLogFilePatternReceiver, enabled by setting the 'promptForUserInfo' param to true.</li>
+<li>Added support for creating LogFileXMLReceivers from the receiver pane.</li>
+<li>Added VFSLogFilePatternReceiver, LogFileXMLReceiver examples to sample receiver config (available from Welcome tab).</li>
+</ul>
 <h2>24 February 2006</h2>
 <ul>
 <li>Added ZeroConf plugin, allowing simple point-n-click connection to detected appenders.  See the <B>ZeroConf</B> tab inside

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/log4j-receiver-sample.xml
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/log4j-receiver-sample.xml?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/log4j-receiver-sample.xml (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/log4j-receiver-sample.xml Fri Feb 24 18:42:27 2006
@@ -23,11 +23,34 @@
       <param name="Address" value="224.1.1.1"/>      
    </plugin>
 
+   <plugin name="LogFileXMLReceiver" class="org.apache.log4j.xml.LogFileXMLReceiver">
+     <param name="fileURL" value="file:///c:/sample.xml"/>
+     <param name="name" value="sampleLogFileXMLReceiver"/>
+     <param name="tailing" value="true"/> 
+   </plugin>
+
    <plugin name="LogFileReceiver" class="org.apache.log4j.varia.LogFilePatternReceiver">
      <param name="fileURL" value="file:///c:/sample.log"/>
      <param name="timestampFormat" value="yyyy-MM-dd HH:mm:ss,SSS"/> 
      <param name="logFormat" value="TIMESTAMP LEVEL [LOGGER] MESSAGE"/> 
-     <param name="name" value="sampleLogFileReceiver"/>
+     <param name="name" value="sampleLogFilePatternReceiver"/>
+     <param name="tailing" value="true"/> 
+   </plugin>
+
+   <plugin name="VFSLogFilePatternReceiverWithUserInfoPrompt" class="org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver">
+     <param name="fileURL" value="sftp://192.168.0.100:///c:/sample.log"/>
+     <param name="timestampFormat" value="yyyy-MM-dd HH:mm:ss,SSS"/> 
+     <param name="logFormat" value="TIMESTAMP LEVEL [LOGGER] MESSAGE"/> 
+     <param name="name" value="sampleLogFilePatternReceiver"/>
+     <param name="promptForUserInfo" value="true"/>
+     <param name="tailing" value="true"/> 
+   </plugin>
+
+   <plugin name="VFSLogFilePatternReceiverNoUserInfoPrompt" class="org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver">
+     <param name="fileURL" value="sftp://user:password@192.168.0.100:///c:/sample.log"/>
+     <param name="timestampFormat" value="yyyy-MM-dd HH:mm:ss,SSS"/> 
+     <param name="logFormat" value="TIMESTAMP LEVEL [LOGGER] MESSAGE"/> 
+     <param name="name" value="sampleLogFilePatternReceiver"/>
      <param name="tailing" value="true"/> 
    </plugin>
 

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java Fri Feb 24 18:42:27 2006
@@ -70,12 +70,14 @@
 import org.apache.log4j.chainsaw.messages.MessageCenter;
 import org.apache.log4j.net.SocketNodeEventListener;
 import org.apache.log4j.net.SocketReceiver;
-import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggerRepositoryEx;
 import org.apache.log4j.plugins.Pauseable;
 import org.apache.log4j.plugins.Plugin;
+import org.apache.log4j.plugins.PluginEvent;
+import org.apache.log4j.plugins.PluginListener;
 import org.apache.log4j.plugins.PluginRegistry;
 import org.apache.log4j.plugins.Receiver;
+import org.apache.log4j.spi.LoggerRepository;
+import org.apache.log4j.spi.LoggerRepositoryEx;
 
 
 /**
@@ -83,7 +85,7 @@
  *
  *
  * @author Paul Smith <ps...@apache.org>
- * @author Scott Debogy <sd...@apache.org>
+ * @author Scott Deboy <sd...@apache.org>
  */
 public class ReceiversPanel extends JPanel {
   final Action newReceiverButtonAction;
@@ -113,6 +115,24 @@
     if (repo instanceof LoggerRepositoryEx) {
        pluginRegistry = ((LoggerRepositoryEx) repo).getPluginRegistry();
        pluginRegistry.addPluginListener(model);
+
+       //iterate over visual receivers and call setcontainer
+       Collection c = pluginRegistry.getPlugins(VisualReceiver.class);
+       for (Iterator iter = c.iterator();iter.hasNext();) {
+    	   ((VisualReceiver)iter.next()).setContainer(this);
+       }
+       
+       pluginRegistry.addPluginListener(new PluginListener() {
+		public void pluginStarted(PluginEvent e) {
+			//if we get a plugin started callback, set the container
+			if (e.getPlugin() instanceof VisualReceiver) {
+				((VisualReceiver)e.getPlugin()).setContainer(ReceiversPanel.this);
+			}
+		}
+
+		public void pluginStopped(PluginEvent e) {
+		}
+       });
     } else {
        pluginRegistry = null;
     }

Added: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java?rev=380883&view=auto
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java (added)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java Fri Feb 24 18:42:27 2006
@@ -0,0 +1,39 @@
+/*
+ * Copyright 1999,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.chainsaw.receivers;
+
+import java.awt.Container;
+
+/**
+ * If a receiver has a visual component, implement this interface and Chainsaw will call 
+ * 'setContainer' passing in a container that the receiver can use.
+ * <p>
+ * For example, VFSLogFilePatternReceiver provides an optional 'promptForUserInfo', that
+ * when set to true, will allow a login dialog to be displayed on top of the Chainsaw window.
+ * 
+ * @author Scott Deboy<sd...@apache.org>
+ *
+ */
+
+public interface VisualReceiver {
+	/**
+	 * Provides access to a container.
+	 * 
+	 * @param container
+	 */
+	void setContainer(Container container);
+}

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/known.receivers
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/receivers/known.receivers?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
Binary files - no diff available.

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/version/VersionManager.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/version/VersionManager.java?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/version/VersionManager.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/version/VersionManager.java Fri Feb 24 18:42:27 2006
@@ -10,7 +10,7 @@
 
     private static final VersionManager instance = new VersionManager();
     
-    private static final String VERSION_INFO = "1.99.99 (24 February 2006)";
+    private static final String VERSION_INFO = "1.99.99 (25 February 2006)";
     
     public static final VersionManager getInstance() {
         return instance;

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java Fri Feb 24 18:42:27 2006
@@ -16,15 +16,33 @@
 
 package org.apache.log4j.chainsaw.vfs;
 
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
 import org.apache.commons.vfs.FileObject;
 import org.apache.commons.vfs.FileSystemException;
 import org.apache.commons.vfs.FileSystemManager;
 import org.apache.commons.vfs.VFS;
 import org.apache.commons.vfs.provider.URLFileName;
+import org.apache.log4j.chainsaw.receivers.VisualReceiver;
 import org.apache.log4j.varia.LogFilePatternReceiver;
 
 /**
@@ -34,6 +52,32 @@
  * LoggingEvents.  If the file doesn't exist when the receiver is initialized, the
  * receiver will look for the file once every 10 seconds.
  * <p>
+ * See the Chainsaw page (http://logging.apache.org/log4j/docs/chainsaw.html) for information
+ * on how to set up Chainsaw with VFS.
+ * <p>
+ * See http://jakarta.apache.org/commons/vfs/filesystems.html for a list of VFS-supported
+ * file systems and the URIs needed to access the file systems.
+ * <p>
+ * Because some VFS file systems allow you to provide username/password, this receiver
+ * provides an optional GUI dialog for entering the username/password fields instead 
+ * of requiring you to hard code usernames and passwords into the URI.
+ * <p>
+ * If the 'promptForUserInfo' param is set to true (default is false), 
+ * the receiver will wait for a call to 'setContainer', and then display 
+ * a username/password dialog.
+ * <p>
+ * If you are using this receiver without a GUI, don't set promptForUserInfo 
+ * to true - it will block indefinitely waiting for a visual component.
+ * <p> 
+ * If the 'promptForUserInfo' param is set to true, the fileURL should -leave out- 
+ * the username/password portion of the VFS-supported URI.  Examples:
+ * <p>
+ * An sftp URI that would be used with promptForUserInfo=true:
+ * sftp://192.168.1.100:22/home/thisuser/logfile.txt
+ * <p>
+ * An sftp URI that would be used with promptForUserInfo=false:
+ * sftp://username:password@192.168.1.100:22/home/thisuser/logfile.txt
+ * <p>
  * This receiver relies on ORO Perl5 features to perform the parsing of text in the 
  * log file, however the only regular expression field explicitly supported is 
  * a glob-style wildcard used to ignore fields in the log file if needed.  All other
@@ -45,6 +89,7 @@
  * - specify the pattern (logFormat) used in the log file using keywords, a wildcard character (*) and fixed text<br>
  * - 'tail' the file (allows the contents of the file to be continually read and new events processed)<br>
  * - supports the parsing of multi-line messages and exceptions
+ * - to access 
  *<p>
  * <b>Keywords:</b><br>
  * TIMESTAMP<br>
@@ -103,6 +148,7 @@
  * param: "logFormat" value="RELATIVETIME [THREAD] LEVEL LOGGER * - MESSAGE"<br>
  * param: "fileURL" value="file:///c:/events.log"<br>
  * param: "tailing" value="true"
+ * param: "promptForUserInfo" value="false"
  *<p>
  * This configuration will be able to process these sample events:<br>
  * 710    [       Thread-0] DEBUG                   first.logger first - <test>   <test2>something here</test2>   <test3 blah=something/>   <test4>       <test5>something else</test5>   </test4></test><br>
@@ -113,14 +159,19 @@
  *
  *@author Scott Deboy
  */
-public class VFSLogFilePatternReceiver extends LogFilePatternReceiver {
+public class VFSLogFilePatternReceiver extends LogFilePatternReceiver implements VisualReceiver {
 
   private Reader reader;
+  private boolean promptForUserInfo = false;
+  private Container container;
+  private Object waitForContainerLock = new Object();
+  
   public VFSLogFilePatternReceiver() {
     super();
   }
 
   public void shutdown() {
+	container = null;
     if (reader != null) {
       try {
         reader.close();
@@ -132,40 +183,197 @@
   }
   
   /**
+   * If set to true, will cause the receiver to block indefinitely until 'setContainer' has been called, 
+   * at which point a username/password dialog will appear.
+   * 
+   * @param promptForUserInfo
+   */
+  public void setPromptForUserInfo(boolean promptForUserInfo) {
+	  this.promptForUserInfo = promptForUserInfo;
+  }
+  
+  public boolean isPromptForUserInfo() {
+	  return promptForUserInfo;
+  }
+
+  /**
+   * Implementation of VisualReceiver interface - allows this receiver to provide
+   * a username/password dialog.
+   */
+  public void setContainer(Container container) {
+      if (promptForUserInfo) {
+    	  synchronized(waitForContainerLock) {
+    		  this.container=container;
+    		  waitForContainerLock.notify();
+    	  }
+      }
+  }
+
+  /**
    * Read and process the log file.
    */
   public void activateOptions() {
-    new Thread(new Runnable() {
-      public void run() {
-      while (reader == null) {
-        getLogger().info("attempting to load file: " + getFileURL());
-        try {
-          FileSystemManager fileSystemManager = VFS.getManager();
-          FileObject fileObject = fileSystemManager.resolveFile(getFileURL());
-          reader = new InputStreamReader(fileObject.getContent().getInputStream());
-          //now that we have a reader, remove additional portions of the file url (sftp passwords, etc.)
-          //check to see if the name is a URLFileName..if so, set file name to not include username/pass
-          if (fileObject.getName() instanceof URLFileName) {
-            URLFileName urlFileName = (URLFileName)fileObject.getName();
-        	setHost(urlFileName.getHostName());
-        	setPath(urlFileName.getPath());
-          }
-        } catch (FileSystemException fse) {
-          getLogger().info("file not available - will try again in 10 seconds");
-          synchronized(this) {
-            try {
-              wait(10000);
-            } catch (InterruptedException ie){}
-          }
-      } 
-      }
-      initialize();
-      
-      try {
-        process(reader);
-      } catch (IOException ioe) {
-        getLogger().info("stream closed");
+	  
+      if (promptForUserInfo) {
+    	  /*
+    	  if promptforuserinfo is true, wait for a reference to the container 
+    	  (via the VisualReceiver callback).
+    	  
+    	  We need to display a login dialog on top of the container, so we must then
+    	  wait until the container has been added to a frame
+    	  */
+
+    	  //get a reference to the container
+    	  new Thread(new Runnable() {
+    		  public void run() {
+    	  synchronized(waitForContainerLock) {
+    		  while (container == null) {
+    			  try {
+    				  waitForContainerLock.wait();
+    			  } catch (InterruptedException ie){}
+    		  }
+    	  }
+ 
+    	  Frame containerFrame1;
+    	  synchronized(waitForContainerLock) {
+    		  //loop until the container has a frame
+    		  while ((containerFrame1 = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, container)) == null) {
+    			  try {
+    				  waitForContainerLock.wait(1000);
+    			  } catch (InterruptedException ie) {}
+    		  }
+    	  }
+    	  final Frame containerFrame = containerFrame1;
+
+    	  //create the dialog
+		  SwingUtilities.invokeLater(new Runnable() {
+    		  public void run() {
+    			  final UserNamePasswordDialog f = new UserNamePasswordDialog(containerFrame);
+    			  f.pack();
+    			  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+    			  f.setLocation(d.width /2, d.height/2);
+    			  f.setVisible(true);
+					if (null == f.getUserName() || null == f.getPassword()) {
+						getLogger().warn("No username or password provided - not loading file " + getFileURL());
+					} else {
+						int index = getFileURL().indexOf("://");
+						String firstPart = getFileURL().substring(0, index);
+						String lastPart = getFileURL().substring(index + "://".length());
+						setFileURL(firstPart + "://" + f.getUserName()+ ":" + new String(f.getPassword()) + "@" + lastPart);
+					      new Thread(new VFSReader()).start();
+					}
+    			  }
+    		  });
+    		  }}).start();
+      } else {
+    	  new Thread(new VFSReader()).start();
       }
-      }}).start();
    }
+  
+  private class VFSReader implements Runnable {
+	  public void run() {
+      while (reader == null) {
+          getLogger().info("attempting to load file: " + getFileURL());
+          try {
+            FileSystemManager fileSystemManager = VFS.getManager();
+            FileObject fileObject = fileSystemManager.resolveFile(getFileURL());
+            reader = new InputStreamReader(fileObject.getContent().getInputStream());
+            //now that we have a reader, remove additional portions of the file url (sftp passwords, etc.)
+            //check to see if the name is a URLFileName..if so, set file name to not include username/pass
+            if (fileObject.getName() instanceof URLFileName) {
+              URLFileName urlFileName = (URLFileName)fileObject.getName();
+          	setHost(urlFileName.getHostName());
+          	setPath(urlFileName.getPath());
+            }
+          } catch (FileSystemException fse) {
+            getLogger().info("file not available - will try again in 10 seconds");
+            synchronized(this) {
+              try {
+                wait(10000);
+              } catch (InterruptedException ie){}
+            }
+        } 
+        }
+        initialize();
+        
+        try {
+          process(reader);
+        } catch (IOException ioe) {
+          getLogger().info("stream closed");
+        }
+	  }
+  }
+  
+  public class UserNamePasswordDialog extends JDialog{
+	  private String userName;
+	  private char[] password;
+	  private UserNamePasswordDialog(Frame containerFrame) {
+		  super(containerFrame, "Login", true);
+	      JPanel panel = new JPanel(new GridBagLayout());
+	      GridBagConstraints gc = new GridBagConstraints();
+	      gc.fill=GridBagConstraints.NONE;
+
+	      gc.anchor=GridBagConstraints.NORTH;
+	      gc.gridx=0;
+	      gc.gridy=0;
+	      gc.gridwidth=3;
+	      gc.insets=new Insets(7, 7, 7, 7);
+	      panel.add(new JLabel("URI: " + getFileURL()), gc);
+	      
+	      gc.gridx=0;
+	      gc.gridy=1;
+	      gc.gridwidth=1;
+	      gc.insets=new Insets(2, 2, 2, 2);
+	      panel.add(new JLabel("Username"), gc);
+
+		  gc.gridx=1;
+		  gc.gridy=1;
+		  gc.gridwidth=2;
+		  gc.weightx=1.0;
+	      gc.fill=GridBagConstraints.HORIZONTAL;
+
+		  final JTextField userNameTextField = new JTextField(15);
+		  panel.add(userNameTextField, gc);
+		  
+		  gc.gridx=0;
+		  gc.gridy=2;
+		  gc.gridwidth=1;
+	      gc.fill=GridBagConstraints.NONE;
+
+		  panel.add(new JLabel("Password"), gc);
+
+		  gc.gridx=1;
+		  gc.gridy=2;
+		  gc.gridwidth=2;
+	      gc.fill=GridBagConstraints.HORIZONTAL;
+
+		  final JPasswordField passwordTextField = new JPasswordField(15);
+		  panel.add(passwordTextField, gc);
+		  
+		  gc.gridy=3;
+		  gc.anchor=GridBagConstraints.SOUTH;
+	      gc.fill=GridBagConstraints.NONE;
+
+		  JButton submitButton = new JButton("Submit");
+		  panel.add(submitButton, gc);
+
+		  getContentPane().add(panel);
+		  submitButton.addActionListener(new ActionListener(){
+			  public void actionPerformed(ActionEvent evt) {
+				  userName = userNameTextField.getText();
+				  password = passwordTextField.getPassword();
+				  getContentPane().setVisible(false);
+				  UserNamePasswordDialog.this.dispose();
+			  }
+		  });
+	  }
+	 
+	  public String getUserName() {
+		  return userName;
+	  }
+	  
+	  public char[] getPassword() {
+		  return password;
+	  }
+  }
 }

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java?rev=380883&r1=380882&r2=380883&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java Fri Feb 24 18:42:27 2006
@@ -39,6 +39,8 @@
         new PropertyDescriptor("tailing", VFSLogFilePatternReceiver.class),
         new PropertyDescriptor(
           "filterExpression", VFSLogFilePatternReceiver.class),
+          new PropertyDescriptor(
+                  "promptForUserInfo", VFSLogFilePatternReceiver.class),
       };
     } catch (Exception e) {
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org