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