psmith 2003/09/01 15:34:13
Modified: src/java/org/apache/log4j/chainsaw
LogPanelLoggerTreeModel.java
Log:
Ensured that all Child nodes appear in case insensitive sorted order.
Revision Changes Path
1.4 +64 -68
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
Index: LogPanelLoggerTreeModel.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LogPanelLoggerTreeModel.java 1 Sep 2003 03:57:33 -0000 1.3
+++ LogPanelLoggerTreeModel.java 1 Sep 2003 22:34:13 -0000 1.4
@@ -54,6 +54,8 @@
import java.awt.Container;
import java.awt.Dimension;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Enumeration;
import java.util.StringTokenizer;
@@ -62,7 +64,9 @@
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeNode;
+import javax.swing.tree.MutableTreeNode;
+
+import org.apache.log4j.helpers.LogLog;
/**
@@ -73,15 +77,23 @@
*/
class LogPanelLoggerTreeModel extends DefaultTreeModel
implements LoggerNameListener {
-
LogPanelLoggerTreeModel() {
- super(new DefaultMutableTreeNode("Root Logger"));
+ super(new LogPanelTreeNode("Root Logger"));
}
/* (non-Javadoc)
* @see
org.apache.log4j.chainsaw.LoggerNameListener#loggerNameAdded(java.lang.String)
*/
- public void loggerNameAdded(String loggerName) {
+ public void loggerNameAdded(final String loggerName) {
+ SwingUtilities.invokeLater(
+ new Runnable() {
+ public void run() {
+ addLoggerNameInDispatchThread(loggerName);
+ }
+ });
+ }
+
+ private void addLoggerNameInDispatchThread(final String loggerName) {
String[] packages = tokenize(loggerName);
/**
@@ -91,31 +103,33 @@
*/
DefaultMutableTreeNode current = (DefaultMutableTreeNode) getRoot();
+
/**
* This label is used to break out when descending the
* current tree hierachy, and it has matched a package name
* with an already existing TreeNode.
*/
-outerFor: for (int i = 0; i < packages.length; i++) {
+outerFor:
+ for (int i = 0; i < packages.length; i++) {
String packageName = packages[i];
Enumeration enum = current.children();
+
while (enum.hasMoreElements()) {
DefaultMutableTreeNode child =
(DefaultMutableTreeNode) enum.nextElement();
String childName = child.getUserObject().toString();
if (childName.equals(packageName)) {
-
/**
* This the current known branch to descend
*/
current = child;
+
/**
* we've found it, so break back to the outer
* for loop to continue processing further
* down the tree
*/
-
continue outerFor;
}
}
@@ -124,30 +138,31 @@
* So we haven't found this index in the current children,
* better create the child
*/
- DefaultMutableTreeNode newChild =
- new DefaultMutableTreeNode(packageName);
- current.add(newChild);
-
- final TreeNode changedNode = current;
- final int[] changedIndices = new int[]{current.getIndex(newChild)};
- SwingUtilities.invokeLater(new Runnable(){
-
- public void run()
- {
- nodesWereInserted(changedNode, changedIndices);
-
- }});
+ final LogPanelTreeNode newChild = new LogPanelTreeNode(packageName);
+
+ final DefaultMutableTreeNode changedNode = current;
+
+ changedNode.add(newChild);
+
+ final int[] changedIndices = new int[changedNode.getChildCount()];
+
+ for (int j = 0; j < changedIndices.length; j++) {
+ changedIndices[j] = j;
+ }
+
+ nodesWereInserted(changedNode, new int[]{changedNode.getIndex(newChild)});
+ nodesChanged(changedNode, changedIndices);
current = newChild;
}
}
/**
- * Takes the loggerName and tokenizes it into it's
- * package name lements returning the elements
- * via the Stirng[]
- * @param loggerName
- * @return array of strings representing the package hierarchy
- */
+ * Takes the loggerName and tokenizes it into it's
+ * package name lements returning the elements
+ * via the Stirng[]
+ * @param loggerName
+ * @return array of strings representing the package hierarchy
+ */
private String[] tokenize(String loggerName) {
StringTokenizer tok = new StringTokenizer(loggerName, ".");
@@ -162,48 +177,29 @@
return tokens;
}
- public static void main(String[] args) {
- try {
- JFrame frame = new JFrame("TestBed");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- Container container = frame.getContentPane();
-
- final LogPanelLoggerTreeModel model = new LogPanelLoggerTreeModel();
- JTree tree = new JTree(model);
-
- container.add(tree);
-
- frame.pack();
- frame.setSize(new Dimension(640,480));
- frame.setVisible(true);
-
- Thread.sleep(2000);
-
- final String[] packageNames =
- new String[] {
- "org.apache.log4j.chainsaw",
- "org.apache.log4j",
- "au.com.lawlex",
- "org",
- "org.apache.log4j.chainsaw.prefs",
- "com.mycompany",
- "org.apache.joran",
- };
-
- final int delay = 500;
-
- for (int i = 0; i < packageNames.length; i++) {
- final int index = i;
- SwingUtilities.invokeLater(
- new Runnable() {
- public void run() {
- model.loggerNameAdded(packageNames[index]);
- }
- });
- }
- } catch (Exception e) {
- e.printStackTrace();
+ private static class LogPanelTreeNode extends DefaultMutableTreeNode {
+ protected static Comparator nodeComparator =
+ new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return o1.toString().compareToIgnoreCase(o2.toString());
+ }
+
+ public boolean equals(Object obj) {
+ return false;
+ }
+ };
+
+ private LogPanelTreeNode(String logName) {
+ super(logName);
+ }
+
+ public void insert(MutableTreeNode newChild, int childIndex) {
+// LogLog.debug("[" + this.getUserObject() + "] inserting child " + newChild +
" @ index " + childIndex);
+// LogLog.debug("Children now: " + this.children);
+ super.insert(newChild, childIndex);
+// LogLog.debug("Children after insert: " + this.children);
+ Collections.sort(this.children, nodeComparator);
+// LogLog.debug("Children after sort: " + this.children);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]