You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2009/05/08 01:03:13 UTC

svn commit: r772802 - /jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java

Author: sebb
Date: Thu May  7 23:03:13 2009
New Revision: 772802

URL: http://svn.apache.org/viewvc?rev=772802&view=rev
Log:
Improve toString() output; log errors

Modified:
    jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java

Modified: jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java?rev=772802&r1=772801&r2=772802&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java (original)
+++ jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/collections/HashTree.java Thu May  7 23:03:13 2009
@@ -30,6 +30,10 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.jmeter.testelement.TestElement;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.log.Logger;
+
 /**
  * This class is used to create a tree structure of objects. Each element in the
  * tree is also a key to the next node down in the tree. It provides many ways
@@ -49,13 +53,12 @@
  * @see SearchByClass
  */
 public class HashTree implements Serializable, Map, Cloneable {
+
     // GetLoggerForClass() uses ClassContext, which
     // causes a Security violation in RemoteJMeterImpl
-    // Currently log is only used by test code, so moved there.
-    // N.B. Can still add logging, but would beed to use getLoggerFor() instead
-    // private static Logger log =
-    // LoggingManager.getLoggerForClass();
-
+    // so we use getLoggerFor() instead
+    private static final Logger log = LoggingManager.getLoggerFor(HashTree.class.getName());
+    
     // Used for the RuntimeException to short-circuit the traversal
     private static final String FOUND = "found"; // $NON-NLS-1$
 
@@ -981,24 +984,38 @@
             Iterator iter = list().iterator();
             while (iter.hasNext()) {
                 Object item = iter.next();
-                visitor.addNode(item, getTree(item));
-                getTree(item).traverseInto(visitor);
+                final HashTree treeItem = getTree(item);
+                visitor.addNode(item, treeItem);
+                if (treeItem != null){
+                    treeItem.traverseInto(visitor);
+                } else {
+                    log.warn("Null tree for "+item, new Throwable());
+                }
             }
         }
         visitor.subtractNode();
     }
 
+    /**
+     * Generate a printable representation of the tree.
+     * 
+     * @return a representation of the tree
+     */
     public String toString() {
         ConvertToString converter = new ConvertToString();
-        traverse(converter);
+        try {
+            traverse(converter);
+        } catch (Exception e) { // Just in case
+            converter.reportError(e);
+        }
         return converter.toString();
     }
 
     private static class TreeSearcher implements HashTreeTraverser {
 
-        Object target;
+        private final Object target;
 
-        HashTree result;
+        private HashTree result;
 
         public TreeSearcher(Object t) {
             target = t;
@@ -1008,12 +1025,7 @@
             return result;
         }
 
-        /*
-         * (non-Javadoc)
-         *
-         * @see org.apache.jorphan.collections.HashTreeTraverser#addNode(java.lang.Object,
-         *      org.apache.jorphan.collections.HashTree)
-         */
+        /** {@inheritDoc} */
         public void addNode(Object node, HashTree subTree) {
             result = subTree.getTree(target);
             if (result != null) {
@@ -1022,35 +1034,31 @@
             }
         }
 
-        /*
-         * (non-Javadoc)
-         *
-         * @see org.apache.jorphan.collections.HashTreeTraverser#processPath()
-         */
+        /** {@inheritDoc} */
         public void processPath() {
             // Not used
         }
 
-        /*
-         * (non-Javadoc)
-         *
-         * @see org.apache.jorphan.collections.HashTreeTraverser#subtractNode()
-         */
+        /** {@inheritDoc} */
         public void subtractNode() {
             // Not used
         }
     }
 
     private static class ConvertToString implements HashTreeTraverser {
-        StringBuffer string = new StringBuffer(getClass().getName() + "{");
+        private final StringBuffer string = new StringBuffer(getClass().getName() + "{");
 
-        StringBuffer spaces = new StringBuffer();
+        private final StringBuffer spaces = new StringBuffer();
 
-        int depth = 0;
+        private int depth = 0;
 
         public void addNode(Object key, HashTree subTree) {
             depth++;
-            string.append("\n" + getSpaces() + key + " {");
+            string.append("\n").append(getSpaces()).append(key);
+            if (key instanceof TestElement){
+                string.append(" ").append(((TestElement)key).getName());
+            }
+            string.append(" {");
         }
 
         public void subtractNode() {
@@ -1066,6 +1074,10 @@
             return string.toString();
         }
 
+        void reportError(Throwable t){
+            string.append("Error: ").append(t.toString());
+        }
+
         private String getSpaces() {
             if (spaces.length() < depth * 2) {
                 while (spaces.length() < depth * 2) {



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