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