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