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 ms...@apache.org on 2004/03/24 16:23:37 UTC
cvs commit: jakarta-jmeter/src/jorphan/org/apache/jorphan/collections Data.java HashTree.java ListedHashTree.java SortedHashTree.java
mstover1 2004/03/24 07:23:37
Modified: src/core/org/apache/jmeter/util JMeterVersion.java
src/jorphan/org/apache/jorphan/collections Data.java
HashTree.java ListedHashTree.java
SortedHashTree.java
Log:
improvements to HashTree collections
Revision Changes Path
1.13 +3 -3 jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterVersion.java
Index: JMeterVersion.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterVersion.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- JMeterVersion.java 20 Mar 2004 12:38:33 -0000 1.12
+++ JMeterVersion.java 24 Mar 2004 15:23:37 -0000 1.13
@@ -42,7 +42,7 @@
* pattern: VERSION = <quote>.*<quote>
*
*/
- static final String VERSION = "1.9.20040320";
+ static final String VERSION = "1.9.20040324";
private JMeterVersion() // Not instantiable
{
1.9 +41 -2 jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/Data.java
Index: Data.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/Data.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Data.java 11 Feb 2004 23:46:32 -0000 1.8
+++ Data.java 24 Mar 2004 15:23:37 -0000 1.9
@@ -18,6 +18,9 @@
package org.apache.jorphan.collections;
import java.io.Serializable;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -389,6 +392,42 @@
public boolean next()
{
return (++currentPos < size);
+ }
+
+ /**
+ * Gets a Data object from a ResultSet.
+ *
+ * @param rs ResultSet passed in from a database query
+ * @return a Data object
+ * @throws java.sql.SQLException
+ */
+ public static Data getDataFromResultSet(ResultSet rs) throws SQLException
+ {
+ ResultSetMetaData meta = rs.getMetaData();
+ Data data = new Data();
+
+ int numColumns = meta.getColumnCount();
+ String[] dbCols = new String[numColumns];
+ for (int i = 0; i < numColumns; i++)
+ {
+ dbCols[i] = meta.getColumnName(i + 1);
+ data.addHeader(dbCols[i]);
+ }
+
+ while (rs.next())
+ {
+ data.next();
+ for (int i = 0; i < numColumns; i++)
+ {
+ Object o = rs.getObject(i + 1);
+ if (o instanceof byte[])
+ {
+ o = new String((byte[]) o);
+ }
+ data.addColumnValue(dbCols[i], o);
+ }
+ }
+ return data;
}
/**
1.14 +76 -40 jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTree.java
Index: HashTree.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTree.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- HashTree.java 19 Feb 2004 00:20:01 -0000 1.13
+++ HashTree.java 24 Mar 2004 15:23:37 -0000 1.14
@@ -356,11 +356,7 @@
*/
public void set(Collection values)
{
- Iterator iter = this.list().iterator();
- while (iter.hasNext())
- {
- this.remove(iter.next());
- }
+ clear();
this.add(values);
}
@@ -388,11 +384,17 @@
*
* @param key key to be added to HashTree
*/
- public void add(Object key)
+ public HashTree add(Object key)
{
if (!data.containsKey(key))
{
- data.put(key, createNewTree());
+ HashTree newTree = createNewTree();
+ data.put(key, newTree);
+ return newTree;
+ }
+ else
+ {
+ return getTree(key);
}
}
@@ -928,32 +930,21 @@
*/
public HashTree search(Object key)
{
- HashTree temp = null;
- if (data.containsKey(key))
+ HashTree result = getTree(key);
+ if(result != null)
{
- temp = (HashTree) data.get(key);
+ return result;
}
- else
+ TreeSearcher searcher = new TreeSearcher(key);
+ try
{
- //TODO - what is supposed to be happening here?
- //the loop will only happen once (if at all), and the if/else is redundant
- Iterator it = list().iterator();
- while (it.hasNext())
- {
- if (temp == null)
- {
- temp = ((HashTree) it.next()).search(key);
- break;
- }
- else
- {
- break;
- }
- }
+ traverse(searcher);
}
- return temp;
+ catch(Exception e){
+ //do nothing - means object is found
+ }
+ return searcher.getResult();
}
-
/**
* Method readObject.
*/
@@ -1001,17 +992,21 @@
*/
private void traverseInto(HashTreeTraverser visitor)
{
- Iterator iter = list().iterator();
- while (iter.hasNext())
- {
- Object item = iter.next();
- visitor.addNode(item, getTree(item));
- getTree(item).traverseInto(visitor);
- }
+
if (list().size() == 0)
{
visitor.processPath();
}
+ else
+ {
+ Iterator iter = list().iterator();
+ while (iter.hasNext())
+ {
+ Object item = iter.next();
+ visitor.addNode(item, getTree(item));
+ getTree(item).traverseInto(visitor);
+ }
+ }
visitor.subtractNode();
}
@@ -1023,22 +1018,62 @@
}
protected Map data;
+
+ private class TreeSearcher implements HashTreeTraverser
+ {
+ Object target;
+ HashTree result;
+
+ public TreeSearcher(Object t)
+ {
+ target = t;
+ }
+
+ public HashTree getResult()
+ {
+ return result;
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jorphan.collections.HashTreeTraverser#addNode(java.lang.Object, org.apache.jorphan.collections.HashTree)
+ */
+ public void addNode(Object node, HashTree subTree) {
+ result = subTree.getTree(target);
+ if(result != null)
+ {
+ throw new RuntimeException("found"); //short circuit traversal when found
+ }
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jorphan.collections.HashTreeTraverser#processPath()
+ */
+ public void processPath() {
+ // TODO Auto-generated method stub
+
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jorphan.collections.HashTreeTraverser#subtractNode()
+ */
+ public void subtractNode() {
+ // TODO Auto-generated method stub
+
+ }
+}
private class ConvertToString implements HashTreeTraverser
{
- StringBuffer string = new StringBuffer(getClass().getName());
+ StringBuffer string = new StringBuffer(getClass().getName() + "{");
StringBuffer spaces = new StringBuffer();
int depth = 0;
public void addNode(Object key, HashTree subTree)
{
depth++;
- string.append("\n" + getSpaces() + "{" + key);
+ string.append("\n" + getSpaces() + key + " {");
}
public void subtractNode()
{
- depth--;
string.append("\n" + getSpaces() + "}");
+ depth--;
}
public void processPath()
@@ -1047,6 +1082,7 @@
public String toString()
{
+ string.append("\n}");
return string.toString();
}
1.8 +17 -4 jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java
Index: ListedHashTree.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ListedHashTree.java 18 Feb 2004 00:26:58 -0000 1.7
+++ ListedHashTree.java 24 Mar 2004 15:23:37 -0000 1.8
@@ -148,12 +148,18 @@
return new ListedHashTree(values);
}
- public void add(Object key)
+ public HashTree add(Object key)
{
if (!data.containsKey(key))
{
- data.put(key, createNewTree());
+ HashTree newTree = createNewTree();
+ data.put(key, newTree);
order.add(key);
+ return newTree;
+ }
+ else
+ {
+ return getTree(key);
}
}
@@ -322,5 +328,12 @@
assertFalse(tree3.equals(tree4));
assertFalse(tree4.equals(tree3));
}
+ }
+ /* (non-Javadoc)
+ * @see java.util.Map#clear()
+ */
+ public void clear() {
+ super.clear();
+ order.clear();
}
}
1.7 +80 -9 jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/SortedHashTree.java
Index: SortedHashTree.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/SortedHashTree.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SortedHashTree.java 11 Feb 2004 23:46:32 -0000 1.6
+++ SortedHashTree.java 24 Mar 2004 15:23:37 -0000 1.7
@@ -20,6 +20,7 @@
import java.io.Serializable;
import java.util.Collection;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -43,17 +44,31 @@
public class SortedHashTree extends HashTree implements Serializable
{
//NOTUSED private static Logger log = LoggingManager.getLoggerForClass();
+ protected Comparator comparator;
public SortedHashTree()
{
data = new TreeMap();
}
+
+ public SortedHashTree(Comparator comper)
+ {
+ comparator = comper;
+ data = new TreeMap(comparator);
+ }
public SortedHashTree(Object key)
{
data = new TreeMap();
data.put(key, new SortedHashTree());
}
+
+ public SortedHashTree(Object key,Comparator comper)
+ {
+ comparator = comper;
+ data = new TreeMap(comparator);
+ data.put(key, new SortedHashTree(comparator));
+ }
public SortedHashTree(Collection keys)
{
@@ -64,6 +79,17 @@
data.put(it.next(), new SortedHashTree());
}
}
+
+ public SortedHashTree(Collection keys,Comparator comper)
+ {
+ comparator = comper;
+ data = new TreeMap(comparator);
+ Iterator it = keys.iterator();
+ while (it.hasNext())
+ {
+ data.put(it.next(), new SortedHashTree(comparator));
+ }
+ }
public SortedHashTree(Object[] keys)
{
@@ -73,26 +99,71 @@
data.put(keys[x], new SortedHashTree());
}
}
+
+ public SortedHashTree(Object[] keys,Comparator comper)
+ {
+ comparator = comper;
+ data = new TreeMap(comparator);
+ for (int x = 0; x < keys.length; x++)
+ {
+ data.put(keys[x], new SortedHashTree(comparator));
+ }
+ }
- public HashTree createNewTree()
+ protected HashTree createNewTree()
{
- return new SortedHashTree();
+ if(comparator == null)
+ {
+ return new SortedHashTree();
+ }
+ else
+ {
+ return new SortedHashTree(comparator);
+ }
}
- public HashTree createNewTree(Object key)
+ protected HashTree createNewTree(Object key)
{
- return new SortedHashTree(key);
+ if(comparator == null)
+ {
+ return new SortedHashTree(key);
+ }
+ else
+ {
+ return new SortedHashTree(key,comparator);
+ }
}
- public HashTree createNewTree(Collection values)
+ protected HashTree createNewTree(Collection values)
{
- return new SortedHashTree(values);
+ if(comparator == null)
+ {
+ return new SortedHashTree(values);
+ }
+ else
+ {
+ return new SortedHashTree(values,comparator);
+ }
}
public Object clone()
{
- HashTree newTree = new SortedHashTree();
+ HashTree newTree = null;
+ if(comparator == null)
+ {
+ newTree = new SortedHashTree();
+ }
+ else
+ {
+ newTree = new SortedHashTree(comparator);
+ }
newTree.data = (Map) ((HashMap) data).clone();
return newTree;
+ }
+ /**
+ * @param comparator The comparator to set.
+ */
+ public void setComparator(Comparator comparator) {
+ this.comparator = comparator;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org