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 ps...@apache.org on 2004/05/19 02:11:08 UTC

cvs commit: logging-log4j/src/java/org/apache/log4j/chainsaw/vfs VFSNode.java FileObjectTable.java DirectoryListTableModel.java FileSystemTreePanel.java VFSPlugin.java

psmith      2004/05/18 17:11:08

  Modified:    src/java/org/apache/log4j/chainsaw/vfs
                        FileSystemTreePanel.java VFSPlugin.java
  Added:       src/java/org/apache/log4j/chainsaw/vfs VFSNode.java
                        FileObjectTable.java DirectoryListTableModel.java
  Log:
  VFSPlugin now looking a bit better, although still no actual functionality yet
  
  This plugin automatically adds a 'local' VFS file system node to the tree just for testing purposes.
  
  Eventually one will be able to browse the file system root to find the children, and navigate
  a directory hierachy, and then select a file to view in the detail table.
  
  I will also add a 'preview' panel below the table which, hopefully, will be able to display
  the first X lines of text in the file.
  
  Revision  Changes    Path
  1.2       +55 -17    logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/FileSystemTreePanel.java
  
  Index: FileSystemTreePanel.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/FileSystemTreePanel.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FileSystemTreePanel.java	15 May 2004 06:31:48 -0000	1.1
  +++ FileSystemTreePanel.java	19 May 2004 00:11:08 -0000	1.2
  @@ -1,33 +1,71 @@
   package org.apache.log4j.chainsaw.vfs;
   
   import java.awt.BorderLayout;
  +import java.awt.Dimension;
   
   import javax.swing.JPanel;
  +import javax.swing.JScrollPane;
   import javax.swing.JTree;
  +import javax.swing.SwingUtilities;
   import javax.swing.tree.DefaultMutableTreeNode;
  +import javax.swing.tree.DefaultTreeCellRenderer;
   import javax.swing.tree.DefaultTreeModel;
  +import javax.swing.tree.TreePath;
  +
  +import org.apache.commons.vfs.FileObject;
  +import org.apache.log4j.chainsaw.icons.ChainsawIcons;
   
   /**
    * @author psmith
    *
    */
   class FileSystemTreePanel extends JPanel {
  - 
  -  private final JTree tree = new JTree();
  -  
  -  FileSystemTreePanel(){
  -    initGUI();
  -  }
  -
  -  /**
  -   * 
  -   */
  -  private void initGUI() {
  -    
  -    tree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("VFS")));
  -    
  -    setLayout(new BorderLayout());
  +	
  +	private final DefaultTreeModel treeModel;
  +	private final JTree tree = new JTree();
  +	private final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("VFS");
  +	
  +	private static final String TOOLTIP = "Displays all the known VFS repositories";
       
  -    add(tree, BorderLayout.CENTER);  }
  -  
  +	FileSystemTreePanel(){
  +		treeModel = new DefaultTreeModel(rootNode);
  +		initGUI();
  +	}
  +	
  +	/**
  +	 * 
  +	 */
  +	private void initGUI() {
  +		tree.setModel(treeModel);
  +        tree.expandPath(new TreePath(rootNode.getPath()));
  +        
  +		tree.setRootVisible(false);
  +		setLayout(new BorderLayout());
  +		setPreferredSize(new Dimension(150,400));
  +		add(new JScrollPane(tree), BorderLayout.CENTER);
  +		
  +        // We make the Leaf Icons a nice Server-style icon to represent the repository.
  +        DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();
  +        renderer.setLeafIcon(ChainsawIcons.ICON_SERVER);
  +        
  +		setToolTipText(TOOLTIP);
  +		tree.setToolTipText(TOOLTIP);
  +	}
  +	
  +	/**
  +     * Adds a FileObject with a label to the list of known VFS repositories, and makes sure the 
  +     * Tree gets updated.
  +	 * @param fileObject
  +	 */
  +	public void addFileObject(String name, FileObject fileObject) {
  +		VFSNode vfsNode = new VFSNode(name, fileObject);
  +		final DefaultMutableTreeNode node = new DefaultMutableTreeNode(vfsNode);
  +		SwingUtilities.invokeLater(new Runnable() {
  +			
  +			public void run() {
  +				rootNode.add(node);
  +                tree.makeVisible(new TreePath(node.getPath()));
  +			}});
  +	}
  +	
   }
  
  
  
  1.2       +90 -68    logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/VFSPlugin.java
  
  Index: VFSPlugin.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/VFSPlugin.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- VFSPlugin.java	15 May 2004 06:31:48 -0000	1.1
  +++ VFSPlugin.java	19 May 2004 00:11:08 -0000	1.2
  @@ -1,11 +1,13 @@
   package org.apache.log4j.chainsaw.vfs;
   
   import java.awt.BorderLayout;
  +import java.io.File;
   import java.util.HashSet;
   import java.util.Set;
   
  -import javax.swing.JLabel;
  +import javax.swing.JSplitPane;
   
  +import org.apache.commons.vfs.FileObject;
   import org.apache.commons.vfs.FileSystemException;
   import org.apache.commons.vfs.VFS;
   import org.apache.commons.vfs.impl.StandardFileSystemManager;
  @@ -23,73 +25,93 @@
    *
    */
   public class VFSPlugin extends GUIPluginSkeleton {
  -
  -  
  -  private final FileSystemTreePanel fileSystemTree = new FileSystemTreePanel();
  -  
  -  private StandardFileSystemManager fileSystemManager;
  -
  -  private Set supportedSchemes = new HashSet();
  -  
  -  public VFSPlugin() {
  -    setName("VFS");
  -    initGUI();
  -  }
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.plugins.Plugin#shutdown()
  -   */
  -  public void shutdown() {
  -  }
  -
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.spi.OptionHandler#activateOptions()
  -   */
  -  public void activateOptions() {
  -    try {
  -      this.fileSystemManager = (StandardFileSystemManager) VFS.getManager();
  -      
  -    } catch (FileSystemException e) {
  -      LogLog.error("Failed to initialise VFS", e);
  -      e.printStackTrace();
  -      setActive(false);
  -      return;
  -    }
  -    
  -    determineSupportedFileSystems();
  -    
  -    setActive(true);
  -  }
  -
  -  /**
  -   * Works out which of the supported File Systems are available.
  -   */
  -  private void determineSupportedFileSystems() {
  -//    TODO This seems really lame to have to do this, but there you go...
  -    String[] schemes = new String[] {"file","zip", "jar", "sftp", "http", "https", "ftp", "CIFS" };
  -    for (int i = 0; i < schemes.length; i++) {
  -      String scheme = schemes[i];
  -      try {
  -        if(fileSystemManager.hasProvider(scheme)) {
  -          supportedSchemes.add(scheme);
  -          LogLog.info("VFS scheme '" + scheme + "' supported");
  -        }else {
  -          LogLog.error("VFS scheme '" + scheme + "' NOT supported");
  -        }
  -      } catch (Exception e) {
  -        LogLog.error("Failed test for VFS scheme '" + scheme + "'", e);
  -      }
  -    }
  -  }
  -  /**
  -   * 
  -   */
  -  private void initGUI() {
  +	
  +	
  +	private final FileSystemTreePanel fileSystemTree = new FileSystemTreePanel();
  +	private final FileObjectTable fileObjectTable = new FileObjectTable();
  +	private final JSplitPane splitPane = new JSplitPane();
       
  -    setLayout(new BorderLayout());
  +	private StandardFileSystemManager fileSystemManager;
  +	
  +	private Set supportedSchemes = new HashSet();
  +	
  +	public VFSPlugin() {
  +		setName("VFS");
  +		initGUI();
  +	}
       
  -    add(new JLabel("Work In Progress"), BorderLayout.CENTER);
  -    add(fileSystemTree, BorderLayout.WEST);
  -  }
  -  
  -  
  +	/* (non-Javadoc)
  +	 * @see org.apache.log4j.plugins.Plugin#shutdown()
  +	 */
  +	public void shutdown() {
  +	}
  +	
  +	/* (non-Javadoc)
  +	 * @see org.apache.log4j.spi.OptionHandler#activateOptions()
  +	 */
  +	public void activateOptions() {
  +		try {
  +			this.fileSystemManager = (StandardFileSystemManager) VFS.getManager();
  +			
  +		} catch (FileSystemException e) {
  +			LogLog.error("Failed to initialise VFS", e);
  +			e.printStackTrace();
  +			setActive(false);
  +			return;
  +		}
  +		
  +		determineSupportedFileSystems();
  +		loadLocalFileSystem();
  +		setActive(true);
  +	}
  +	
  +	/**
  +	 * Ensures that there is at least a Local FileSystem with the Current directory loaded.
  +     * 
  +     * This probably shouldn't be here after we've completed all the VFS preference loading stuff.
  +     * 
  +	 */
  +	private void loadLocalFileSystem() {
  +		try {
  +			FileObject fileObject = this.fileSystemManager.createVirtualFileSystem(new File("").toURL().toExternalForm());
  +			
  +			this.fileSystemTree.addFileObject("local", fileObject);
  +		} catch (Exception e) {
  +			LogLog.error("error creating local VFS",e);
  +		}
  +		
  +	}
  +	/**
  +	 * Works out which of the supported File Systems are available.
  +	 */
  +	private void determineSupportedFileSystems() {
  +//		TODO This seems really lame to have to do this, but there you go...
  +		String[] schemes = new String[] {"file","zip", "jar", "sftp", "http", "https", "ftp", "CIFS" };
  +		for (int i = 0; i < schemes.length; i++) {
  +			String scheme = schemes[i];
  +			try {
  +				if(fileSystemManager.hasProvider(scheme)) {
  +					supportedSchemes.add(scheme);
  +					LogLog.info("VFS scheme '" + scheme + "' supported");
  +				}else {
  +					LogLog.error("VFS scheme '" + scheme + "' NOT supported");
  +				}
  +			} catch (Exception e) {
  +				LogLog.error("Failed test for VFS scheme '" + scheme + "'", e);
  +			}
  +		}
  +	}
  +	/**
  +	 * 
  +	 */
  +	private void initGUI() {
  +		
  +		setLayout(new BorderLayout());
  +
  +        splitPane.add(this.fileSystemTree, JSplitPane.LEFT);
  +        splitPane.add(this.fileObjectTable, JSplitPane.RIGHT);
  +		add(splitPane, BorderLayout.CENTER);
  +	}
  +	
  +	
   }
  
  
  
  1.1                  logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/VFSNode.java
  
  Index: VFSNode.java
  ===================================================================
  package org.apache.log4j.chainsaw.vfs;
  
  import org.apache.commons.vfs.FileObject;
  
  /**
   * @author psmith
   *
   */
  public class VFSNode {
      
      private String name="";
      private FileObject fileObject;
      
  	/**
  	 * @return Returns the fileObject.
  	 */
  	public final FileObject getFileObject() {
  		return fileObject;
  	}
  	/**
  	 * @return Returns the name.
  	 */
  	public final String getName() {
  		return name;
  	}
      
      public String toString() {
          // TODO display name, but with Schema too
       return getName();   
      }
      
  	/**
  	 * @param name
  	 * @param fileObject
  	 */
  	public VFSNode(String name, FileObject fileObject) {
  		super();
  		this.name = name;
  		this.fileObject = fileObject;
  	}
  }
  
  
  
  1.1                  logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/FileObjectTable.java
  
  Index: FileObjectTable.java
  ===================================================================
  package org.apache.log4j.chainsaw.vfs;
  
  import java.awt.BorderLayout;
  
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTable;
  
  /**
   * @author psmith
   *
   */
  public class FileObjectTable extends JPanel {
      
      private final DirectoryListTableModel tableModel = new DirectoryListTableModel();
      private final JTable table = new JTable(tableModel);
      private final JScrollPane scrollPane = new JScrollPane(table);
      
      public FileObjectTable(){
       initGUI();   
      }
  
  
  	/**
  	 * 
  	 */
  	private void initGUI() {
  		setLayout(new BorderLayout());
          add(scrollPane, BorderLayout.CENTER);
  	}
  	/**
  	 * @return Returns the tableModel.
  	 */
  	public final DirectoryListTableModel getTableModel() {
  		return tableModel;
  	}
  }
  
  
  
  1.1                  logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/DirectoryListTableModel.java
  
  Index: DirectoryListTableModel.java
  ===================================================================
  package org.apache.log4j.chainsaw.vfs;
  
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.List;
  
  import javax.swing.table.AbstractTableModel;
  
  import org.apache.commons.vfs.FileObject;
  import org.apache.log4j.helpers.LogLog;
  
  /**
   * @author psmith
   *
   */
  public class DirectoryListTableModel extends AbstractTableModel {
  
      private final String[] COLUMN_NAMES = new String[] {"Name", "Size", "Last Modified"};
      
      private List data = new ArrayList();
      
  	/* (non-Javadoc)
  	 * @see javax.swing.table.TableModel#getColumnCount()
  	 */
  	public int getColumnCount() {
          return COLUMN_NAMES.length;
  	}
  
  	/* (non-Javadoc)
  	 * @see javax.swing.table.TableModel#getRowCount()
  	 */
  	public int getRowCount() {
  		return data.size();
  	}
  
  	/* (non-Javadoc)
  	 * @see javax.swing.table.TableModel#getValueAt(int, int)
  	 */
  	public Object getValueAt(int rowIndex, int columnIndex) {
          FileObject fileObject = (FileObject) data.get(rowIndex);
          
          try {
  			switch (columnIndex) {
  				case 0 :
  					return fileObject.getName();
  				case 1 :
  					return new Long(fileObject.getContent().getSize());
  				case 2 :
  					return new Date(fileObject.getContent()
  							.getLastModifiedTime());
  			}
  		} catch (Exception e) {
  			LogLog.error("error determining value", e);
  		}
          return "{Error}";
          
  	}
  	/* (non-Javadoc)
  	 * @see javax.swing.table.TableModel#getColumnName(int)
  	 */
  	public String getColumnName(int column) {
  		return COLUMN_NAMES[column];
  	}
  }
  
  
  

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