de.qfs.apps.qflog.logview
Class LogFilterTreeModel

java.lang.Object
  |
  +--de.qfs.lib.log.TreeFilter
        |
        +--de.qfs.apps.qflog.logview.LogFilterTreeModel

public class LogFilterTreeModel
extends de.qfs.lib.log.TreeFilter
implements javax.swing.tree.TreeModel, de.qfs.lib.config.Configurable, de.qfs.lib.gui.TableModelFilter

A LogFilterTreeModel manages a tree hierarchy corresponding to the packages, classes and methods that are originators of log messages, managed by a LogTableView.

The LogFilterTreeModel can act as a filter for those messages by assigning levels to the nodes of the tree and removing all messages that correspong to a subnode and have a level higher than the assigned one.

This class implements the Configurable interface to get persistence for the levels assigned to the tree nodes. The saved state has one entry per node on which a level was set.

Version:
$Revision: 1.12 $
Author:
Gregor Schmid

Inner Class Summary
static class LogFilterTreeModel.UnitTest
          Test cases for the LogLevelTreeModel class.
 
Inner classes inherited from class de.qfs.lib.log.TreeFilter
de.qfs.lib.log.TreeFilter.UnitTest
 
Field Summary
protected  FilterNode root
          The root of the tree.
 
Fields inherited from class de.qfs.lib.log.TreeFilter
cache, defaultLevel, levels, msep
 
Constructor Summary
LogFilterTreeModel()
          Create a new LogFilterTreeModel.
 
Method Summary
 void addFilterPackage(FilterNode node)
          Add a package, class or method to filter on.
 void addTableModelFilterListener(de.qfs.lib.gui.TableModelFilterListener listener)
          Add a TableModelFilterListener to the LogFilterTreeModel.
 void addTreeModelListener(javax.swing.event.TreeModelListener listener)
          Add a TreeModelListener to the LogFilterTreeModel.
 void cleanup()
          Try to remove everything that might prevent garbage collection.
 void clearFilterPackages()
          Remove all Packages to filter on.
 boolean filter(de.qfs.lib.log.LogEntry entry)
          Filter a LogEntry.
 boolean filter(javax.swing.table.TableModel model, int row)
          Filter rows of a TableModel.
 void finalize()
          Finalize the LogFilterTreeModel.
 FilterNode findNode(java.lang.String clazz, java.lang.String method)
          Find the node representing a class and method.
 void fireNodesChanged(java.lang.Object[] path)
          Tell the TreeModelListeners that a node was modified.
 void fireNodesInserted(java.lang.Object[] path, int index)
          Tell the TreeModelListeners that a node was inserted.
 void fireNodeStructureChanged(java.lang.Object[] path)
          Tell the TreeModelListeners that the structure changed.
 java.lang.Object getChild(java.lang.Object parent, int index)
          Get a child of a node from the tree.
 int getChildCount(java.lang.Object parent)
          Get number of children of a node.
 java.lang.String getConfigurableName()
          Get the Configurable's name.
 java.util.Properties getConfigurableState()
          Get the Configurable's state.
 int getIndexOfChild(java.lang.Object parent, java.lang.Object child)
          Get the index of node's child.
 java.lang.Integer getLevel(java.lang.Object node)
          Get the level of a node.
 java.lang.Object[] getPath(java.lang.String clazz, java.lang.String method)
          Get the path for a node representing a package, class or method.
 java.lang.Object getRoot()
          Get the root node of the tree.
 java.lang.String getRootName()
          Get the name for the root node.
 boolean isLeaf(java.lang.Object node)
          Check whether a node is a leaf.
 boolean isPackageFilteringEnabled()
          Query whether package filtering is currently enabled.
protected  void methodAdded(java.lang.String clazz, java.lang.String method)
          A method has been added to the TreeFilter.
 void notify(de.qfs.lib.gui.TreeNotification notification)
          Notify the model about changes.
 void registrationChanged(de.qfs.lib.config.Configuration config, java.lang.String name, boolean registered, boolean valuesKept)
          This callback is used to notify the Configurable whenever it is registered with or unregistered from the Configuration, so it can decide whether to notify the Configuration when its state changes.
 void removeFilterPackage(FilterNode node)
          Remove a package, class or method to filter on.
 void removeLevel(javax.swing.tree.TreePath path, boolean recurse)
          Clear the level for one node.
 void removeTableModelFilterListener(de.qfs.lib.gui.TableModelFilterListener listener)
          Remove a TableModelFilterListener from the LogFilterTreeModel.
 void removeTreeModelListener(javax.swing.event.TreeModelListener listener)
          Remove a TreeModelListener from the LogFilterTreeModel.
 void setConfigurableName(java.lang.String configurableName)
          Set the Configurable's name.
 void setConfigurableState(java.util.Properties state)
          Set the Configurable's state.
 void setDefault(int level)
          Set the default level for the filter.
 void setLevel(java.lang.String clazz, java.lang.String method, int level, boolean recurse)
          Set the level for one node.
 void setLevel(javax.swing.tree.TreePath path, int level)
          Set the level for one node.
 void setLoggingEnabled(boolean enable)
          Enable or disable logging output caused directly or indirectly by LogFilterTreeModel methods.
 void setRootName(java.lang.String name)
          Set the name for the root node.
 void togglePackageFiltering()
          Toggle filtering by packages.
 void valueForPathChanged(javax.swing.tree.TreePath path, java.lang.Object newValue)
          Update a node.
 
Methods inherited from class de.qfs.lib.log.TreeFilter
clearCache, filter, filter, getDefault, getLevel, getParentLevel, removeChildren, removeLevel
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

root

protected FilterNode root
The root of the tree.
Constructor Detail

LogFilterTreeModel

public LogFilterTreeModel()
Create a new LogFilterTreeModel.
Method Detail

cleanup

public void cleanup()
Try to remove everything that might prevent garbage collection.

finalize

public void finalize()
Finalize the LogFilterTreeModel.
Overrides:
finalize in class java.lang.Object

getRootName

public final java.lang.String getRootName()
Get the name for the root node.
Returns:
The root node's name.

setRootName

public final void setRootName(java.lang.String name)
Set the name for the root node.
Parameters:
name - The root node's new name.

setLoggingEnabled

public final void setLoggingEnabled(boolean enable)
Enable or disable logging output caused directly or indirectly by LogFilterTreeModel methods. If logging is disabled, all calls to methods that might create log messages will be protected with de.qfs.lib.log.Log.excludeThread. This is necessary, if the LogFilterTreeModel is used inside the application whose logs it is supposed to filter.

The default value is false.

Parameters:
enable - True to enable logging, false to disable it.

getPath

public java.lang.Object[] getPath(java.lang.String clazz,
                                  java.lang.String method)
Get the path for a node representing a package, class or method.
Parameters:
clazz - The package/class part.
method - The method, may be null.
Returns:
The path for the node or null.

setDefault

public void setDefault(int level)
Set the default level for the filter.
Overrides:
setDefault in class de.qfs.lib.log.TreeFilter
Parameters:
level - The level to set.

setLevel

public void setLevel(java.lang.String clazz,
                     java.lang.String method,
                     int level,
                     boolean recurse)
Set the level for one node.
Overrides:
setLevel in class de.qfs.lib.log.TreeFilter
Parameters:
clazz - The class to filter.
method - The method to filter.
level - The level to set.
recurse - Whether to update child nodes.

setLevel

public void setLevel(javax.swing.tree.TreePath path,
                     int level)
Set the level for one node.
Parameters:
path - The path of the node.
level - The level to set.

removeLevel

public void removeLevel(javax.swing.tree.TreePath path,
                        boolean recurse)
Clear the level for one node.
Parameters:
path - The path of the node.
recurse - Whether to clear child nodes as well.

methodAdded

protected void methodAdded(java.lang.String clazz,
                           java.lang.String method)
A method has been added to the TreeFilter.
Overrides:
methodAdded in class de.qfs.lib.log.TreeFilter
Parameters:
clazz - The added Class.
method - The added Method.

getConfigurableName

public java.lang.String getConfigurableName()
Get the Configurable's name.
Specified by:
getConfigurableName in interface de.qfs.lib.config.Configurable
Returns:
The Configurable's name.

setConfigurableName

public void setConfigurableName(java.lang.String configurableName)
Set the Configurable's name.
Specified by:
setConfigurableName in interface de.qfs.lib.config.Configurable
Parameters:
configurableName - The name to set.

getConfigurableState

public java.util.Properties getConfigurableState()
Get the Configurable's state.
Specified by:
getConfigurableState in interface de.qfs.lib.config.Configurable
Returns:
A Properties object with one property per node with a non-null level.

setConfigurableState

public void setConfigurableState(java.util.Properties state)
Set the Configurable's state.
Specified by:
setConfigurableState in interface de.qfs.lib.config.Configurable
Parameters:
state - The state to set.

registrationChanged

public void registrationChanged(de.qfs.lib.config.Configuration config,
                                java.lang.String name,
                                boolean registered,
                                boolean valuesKept)
This callback is used to notify the Configurable whenever it is registered with or unregistered from the Configuration, so it can decide whether to notify the Configuration when its state changes. This implementation does nothing.
Specified by:
registrationChanged in interface de.qfs.lib.config.Configurable
Parameters:
config - The affected Configuration.
name - The registration name of the Configurable which may be different from the Configurable's name.
registered - True if the Configurable was just registered, false if it was unregistered.
valuesKept - Whether the Configurable's values were kept, if it was just unregistered.

addTreeModelListener

public void addTreeModelListener(javax.swing.event.TreeModelListener listener)
Add a TreeModelListener to the LogFilterTreeModel.
Specified by:
addTreeModelListener in interface javax.swing.tree.TreeModel
Parameters:
listener - The listener to add.

removeTreeModelListener

public void removeTreeModelListener(javax.swing.event.TreeModelListener listener)
Remove a TreeModelListener from the LogFilterTreeModel.
Specified by:
removeTreeModelListener in interface javax.swing.tree.TreeModel
Parameters:
listener - The listener to remove.

getChild

public java.lang.Object getChild(java.lang.Object parent,
                                 int index)
Get a child of a node from the tree.
Specified by:
getChild in interface javax.swing.tree.TreeModel
Parameters:
parent - The parent node.
index - The index of the child in the parent.
Returns:
The child node.

getChildCount

public int getChildCount(java.lang.Object parent)
Get number of children of a node.
Specified by:
getChildCount in interface javax.swing.tree.TreeModel
Parameters:
parent - The parent node.
Returns:
The number of children of the parent node.

getIndexOfChild

public int getIndexOfChild(java.lang.Object parent,
                           java.lang.Object child)
Get the index of node's child.
Specified by:
getIndexOfChild in interface javax.swing.tree.TreeModel
Parameters:
parent - The parent node.
child - The child node.
Returns:
The index of the child node in the param node.

getRoot

public java.lang.Object getRoot()
Get the root node of the tree.
Specified by:
getRoot in interface javax.swing.tree.TreeModel
Returns:
The root node.

isLeaf

public boolean isLeaf(java.lang.Object node)
Check whether a node is a leaf.
Specified by:
isLeaf in interface javax.swing.tree.TreeModel
Parameters:
node - The node to check.
Returns:
True for package and class nodes, false for method nodes.

valueForPathChanged

public void valueForPathChanged(javax.swing.tree.TreePath path,
                                java.lang.Object newValue)
Update a node. This is a noop, since the tree is not editable.
Specified by:
valueForPathChanged in interface javax.swing.tree.TreeModel
Parameters:
path - The path of the changed node.
newValue - The new value of the node.

notify

public void notify(de.qfs.lib.gui.TreeNotification notification)
Notify the model about changes.
Parameters:
notification - Details of the change.

fireNodesInserted

public void fireNodesInserted(java.lang.Object[] path,
                              int index)
Tell the TreeModelListeners that a node was inserted.
Parameters:
path - The path of the parent node.
index - The index of the new child.

fireNodesChanged

public void fireNodesChanged(java.lang.Object[] path)
Tell the TreeModelListeners that a node was modified.
Parameters:
path - The path of the modified node.

fireNodeStructureChanged

public void fireNodeStructureChanged(java.lang.Object[] path)
Tell the TreeModelListeners that the structure changed.
Parameters:
path - The path to the root of the structure change.

getLevel

public java.lang.Integer getLevel(java.lang.Object node)
Get the level of a node.
Parameters:
node - The node to query.
Returns:
The level of the node.

filter

public boolean filter(javax.swing.table.TableModel model,
                      int row)
Filter rows of a TableModel.
Specified by:
filter in interface de.qfs.lib.gui.TableModelFilter
Parameters:
model - The TableModel.
row - The row to filter.
Returns:
True if the row should be displayed.

addTableModelFilterListener

public void addTableModelFilterListener(de.qfs.lib.gui.TableModelFilterListener listener)
Add a TableModelFilterListener to the LogFilterTreeModel.
Specified by:
addTableModelFilterListener in interface de.qfs.lib.gui.TableModelFilter
Parameters:
listener - The TableModelFilterListener to add.

removeTableModelFilterListener

public void removeTableModelFilterListener(de.qfs.lib.gui.TableModelFilterListener listener)
Remove a TableModelFilterListener from the LogFilterTreeModel.
Specified by:
removeTableModelFilterListener in interface de.qfs.lib.gui.TableModelFilter
Parameters:
listener - The TableModelFilterListener to remove.

filter

public boolean filter(de.qfs.lib.log.LogEntry entry)
Filter a LogEntry.
Overrides:
filter in class de.qfs.lib.log.TreeFilter
Parameters:
entry - The LogEntry to filter.
Returns:
True if the LogEntry should be displayed.

togglePackageFiltering

public void togglePackageFiltering()
Toggle filtering by packages.

addFilterPackage

public void addFilterPackage(FilterNode node)
Add a package, class or method to filter on.
Parameters:
cl - The class or package to filter on.
method - The method to filter on.

removeFilterPackage

public void removeFilterPackage(FilterNode node)
Remove a package, class or method to filter on.
Parameters:
cl - The class or package to remove.
method - The method to remove.

clearFilterPackages

public void clearFilterPackages()
Remove all Packages to filter on.

isPackageFilteringEnabled

public boolean isPackageFilteringEnabled()
Query whether package filtering is currently enabled.
Returns:
True if package filtering is enabled.

findNode

public FilterNode findNode(java.lang.String clazz,
                           java.lang.String method)
Find the node representing a class and method.
Parameters:
clazz - The name of the class.
method - The name of the method.