FileDocCategorySizeDatePackage
CategoryNodeEditor.javaAPI DocApache log4j 1.2.159569Sat Aug 25 00:09:38 BST 2007org.apache.log4j.lf5.viewer.categoryexplorer

CategoryNodeEditor

public class CategoryNodeEditor extends CategoryAbstractCellEditor
CategoryNodeEditor
author
Michael J. Sikorsky
author
Robert Shaw

Fields Summary
protected CategoryNodeEditorRenderer
_renderer
protected CategoryNode
_lastEditedNode
protected JCheckBox
_checkBox
protected CategoryExplorerModel
_categoryModel
protected JTree
_tree
Constructors Summary
public CategoryNodeEditor(CategoryExplorerModel model)

    _renderer = new CategoryNodeEditorRenderer();
    _checkBox = _renderer.getCheckBox();
    _categoryModel = model;

    _checkBox.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        _categoryModel.update(_lastEditedNode, _checkBox.isSelected());
        stopCellEditing();
      }
    });

    _renderer.addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0) {
          showPopup(_lastEditedNode, e.getX(), e.getY());
        }
        stopCellEditing();
      }
    });
  
Methods Summary
protected voidcollapse(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    _tree.collapsePath(getTreePath(node));
  
protected voidcollapseDescendants(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    Enumeration descendants = node.depthFirstEnumeration();
    CategoryNode current;
    while (descendants.hasMoreElements()) {
      current = (CategoryNode) descendants.nextElement();
      collapse(current);
    }
  
protected javax.swing.JMenuItemcreateCollapseMenuItem(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JMenuItem result = new JMenuItem("Collapse All Descendant Categories");
    result.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        collapseDescendants(node);
      }
    });
    return result;
  
protected javax.swing.JMenuItemcreateExpandMenuItem(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JMenuItem result = new JMenuItem("Expand All Descendant Categories");
    result.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        expandDescendants(node);
      }
    });
    return result;
  
protected javax.swing.JMenuItemcreatePropertiesMenuItem(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JMenuItem result = new JMenuItem("Properties");
    result.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        showPropertiesDialog(node);
      }
    });
    return result;
  
protected javax.swing.JMenuItemcreateRemoveMenuItem()
This featured was moved from the LogBrokerMonitor class to the CategoryNodeExplorer so that the Category tree could be pruned from the Category Explorer popup menu. This menu option only appears when a user right clicks on the Category parent node. See removeUnusedNodes()

    JMenuItem result = new JMenuItem("Remove All Empty Categories");
    result.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        while (removeUnusedNodes() > 0) ;
      }
    });
    return result;
  
protected javax.swing.JMenuItemcreateSelectDescendantsMenuItem(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JMenuItem selectDescendants =
        new JMenuItem("Select All Descendant Categories");
    selectDescendants.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            _categoryModel.setDescendantSelection(node, true);
          }
        }
    );
    return selectDescendants;
  
protected javax.swing.JMenuItemcreateUnselectDescendantsMenuItem(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JMenuItem unselectDescendants =
        new JMenuItem("Deselect All Descendant Categories");
    unselectDescendants.addActionListener(

        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            _categoryModel.setDescendantSelection(node, false);
          }
        }

    );
    return unselectDescendants;
  
protected voidexpand(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    _tree.expandPath(getTreePath(node));
  
protected voidexpandDescendants(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    Enumeration descendants = node.depthFirstEnumeration();
    CategoryNode current;
    while (descendants.hasMoreElements()) {
      current = (CategoryNode) descendants.nextElement();
      expand(current);
    }
  
public java.lang.ObjectgetCellEditorValue()

    return _lastEditedNode.getUserObject();
  
protected java.lang.ObjectgetDisplayedProperties(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    ArrayList result = new ArrayList();
    result.add("Category: " + node.getTitle());
    if (node.hasFatalRecords()) {
      result.add("Contains at least one fatal LogRecord.");
    }
    if (node.hasFatalChildren()) {
      result.add("Contains descendants with a fatal LogRecord.");
    }
    result.add("LogRecords in this category alone: " +
        node.getNumberOfContainedRecords());
    result.add("LogRecords in descendant categories: " +
        node.getNumberOfRecordsFromChildren());
    result.add("LogRecords in this category including descendants: " +
        node.getTotalNumberOfRecords());
    return result.toArray();
  
public java.awt.ComponentgetTreeCellEditorComponent(javax.swing.JTree tree, java.lang.Object value, boolean selected, boolean expanded, boolean leaf, int row)

    _lastEditedNode = (CategoryNode) value;
    _tree = tree;

    return _renderer.getTreeCellRendererComponent(tree,
        value, selected, expanded,
        leaf, row, true);
    // hasFocus ignored
  
protected javax.swing.tree.TreePathgetTreePath(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    return new TreePath(node.getPath());
  
protected intremoveUnusedNodes()
Removes any inactive nodes from the Category tree.

    int count = 0;
    CategoryNode root = _categoryModel.getRootCategoryNode();
    Enumeration enumeration = root.depthFirstEnumeration();
    while (enumeration.hasMoreElements()) {
      CategoryNode node = (CategoryNode) enumeration.nextElement();
      if (node.isLeaf() && node.getNumberOfContainedRecords() == 0
          && node.getParent() != null) {
        _categoryModel.removeNodeFromParent(node);
        count++;
      }
    }

    return count;
  
protected voidshowPopup(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node, int x, int y)

    JPopupMenu popup = new JPopupMenu();
    popup.setSize(150, 400);
    //
    // Configure the Popup
    //
    if (node.getParent() == null) {
      popup.add(createRemoveMenuItem());
      popup.addSeparator();
    }
    popup.add(createSelectDescendantsMenuItem(node));
    popup.add(createUnselectDescendantsMenuItem(node));
    popup.addSeparator();
    popup.add(createExpandMenuItem(node));
    popup.add(createCollapseMenuItem(node));
    popup.addSeparator();
    popup.add(createPropertiesMenuItem(node));
    popup.show(_renderer, x, y);
  
protected voidshowPropertiesDialog(org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode node)

    JOptionPane.showMessageDialog(
        _tree,
        getDisplayedProperties(node),
        "Category Properties: " + node.getTitle(),
        JOptionPane.PLAIN_MESSAGE
    );