mstover1    2003/02/21 08:33:39

  Modified:    src/core/org/apache/jmeter/save SaveService.java
               src/core/org/apache/jmeter/testelement
                        AbstractTestElement.java TestElement.java
               src/protocol/http/org/apache/jmeter/protocol/http/modifier
                        URLRewritingModifier.java
               src/protocol/http/org/apache/jmeter/protocol/http/util
                        HTTPArgument.java
  Added:       src/core/org/apache/jmeter/save TestElementSaver.java
               src/core/org/apache/jmeter/testelement
                        TestElementCloner.java TestElementProperty.java
                        TestElementTraverser.java
               src/protocol/http/org/apache/jmeter/protocol/http/util
                        EncoderCache.java
  Log:
  New TestElementTraverser interface - traversing test elements shouldn't have to be 
rewritten every time
  updated the SaveService to use the traverser, updated cloning of test elements too
  HTTPArgument is simplified, using now a cache, similar to PatternCacheLRU for 
encoded values.
  
  Revision  Changes    Path
  1.16      +45 -4     jakarta-jmeter/src/core/org/apache/jmeter/save/SaveService.java
  
  Index: SaveService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/SaveService.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SaveService.java  6 Feb 2003 14:24:31 -0000       1.15
  +++ SaveService.java  21 Feb 2003 16:33:39 -0000      1.16
  @@ -68,6 +68,7 @@
   import java.util.Iterator;
   import java.util.LinkedList;
   import java.util.List;
  +import java.util.Map;
   import java.util.Properties;
   
   import junit.framework.TestCase;
  @@ -722,7 +723,10 @@
   
       public static Configuration getConfigForTestElement(String named, TestElement 
item)
       {
  -        DefaultConfiguration config = new DefaultConfiguration("testelement", 
"testelement");
  +        TestElementSaver saver = new TestElementSaver(named);
  +        item.traverse(saver);
  +        Configuration config = saver.getConfiguration();
  +       /* DefaultConfiguration config = new DefaultConfiguration("testelement", 
"testelement");
   
           if (named != null)
           {
  @@ -755,7 +759,7 @@
               {
                   config.addChild(createConfigForString(name, value.toString()));
               }
  -        }
  +        }*/
           return config;
       }
   
  @@ -865,6 +869,11 @@
                   element.setProperty(children[i].getAttribute("name"),
                           createCollection(children[i]));
               }
  +            else if(children[i].getName().equals("map"))
  +            {
  +                element.setProperty(children[i].getAttribute("name"),
  +                createMap(children[i]));
  +            }
           }
           return element;
       }
  @@ -894,8 +903,40 @@
               {
                   coll.add(items[i].getValue(""));
               }
  +            else if (items[i].getName().equals("map"))
  +            {
  +                coll.add(createMap(items[i]));
  +            }
           }
           return coll;
  +    }
  +    
  +    private static Map createMap(Configuration config) throws 
ConfigurationException, ClassNotFoundException,
  +    IllegalAccessException, InstantiationException
  +    {
  +        Map map = (Map) Class.forName((String) 
config.getAttribute("class")).newInstance();
  +                Configuration[] items = config.getChildren();
  +
  +                for (int i = 0; i < items.length; i++)
  +                {
  +                    if (items[i].getName().equals("property"))
  +                    {
  +                        
map.put(items[i].getAttribute("name"),items[i].getValue(""));
  +                    }
  +                    else if (items[i].getName().equals("testelement"))
  +                    {
  +                        
map.put(items[i].getAttribute("name"),createTestElement(items[i]));
  +                    }
  +                    else if (items[i].getName().equals("collection"))
  +                    {
  +                        
map.put(items[i].getAttribute("name"),createCollection(items[i]));
  +                    }
  +                    else if (items[i].getName().equals("map"))
  +                    {
  +                        map.put(items[i].getAttribute("name"),createMap(items[i]));
  +                    }
  +                }
  +                return map;
       }
   
       private static HashTree generateNode(Configuration config)
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/save/TestElementSaver.java
  
  Index: TestElementSaver.java
  ===================================================================
  package org.apache.jmeter.save;
  
  import java.util.Collection;
  import java.util.LinkedList;
  import java.util.Map;
  import java.util.NoSuchElementException;
  
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.DefaultConfiguration;
  import org.apache.jmeter.testelement.TestElement;
  import org.apache.jmeter.testelement.TestElementTraverser;
  
  /**
   * @author Administrator
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class TestElementSaver implements TestElementTraverser, SaveServiceConstants
  {
      String name;
      LinkedList stack = new LinkedList();
  
      DefaultConfiguration rootConfig = null;
  
      public TestElementSaver(String name)
      {
          this.name = name;
      }
  
      public Configuration getConfiguration()
      {
          return rootConfig;
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startTestElement(org.apache.jmeter.testelement.TestElement)
       */
      public void startTestElement(TestElement el)
      {
          DefaultConfiguration config = new DefaultConfiguration("testelement", 
"testelement");
          config.setAttribute("class", el.getClass().getName());
          if (rootConfig == null)
          {
              rootConfig = config;
              if(name != null && name.length() > 0)
              {
                  rootConfig.setAttribute("name", name);
              }
          }
          else
          {
              setConfigName(config);
          }
          stack.add(config);
      }
  
      public void setConfigName(DefaultConfiguration config)
      {
          if (!(stack.getLast() instanceof Configuration))
          {
              Object key = stack.removeLast();
              config.setAttribute("name", key.toString());
          }
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endTestElement(org.apache.jmeter.testelement.TestElement)
       */
      public void endTestElement(TestElement el)
      {
          simplePropertyValue(stack.removeLast());
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startProperty(java.lang.Object)
       */
      public void startProperty(Object key)
      {
          stack.add(key);
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endProperty(java.lang.Object)
       */
      public void endProperty(Object key)
      {
          DefaultConfiguration config = (DefaultConfiguration) stack.getLast();
          if(config.getName().equals("property"))
          {
              stack.removeLast();
              ((DefaultConfiguration) stack.getLast()).addChild(config);
          }
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#simplePropertyValue(java.lang.Object)
       */
      public void simplePropertyValue(Object value)
      {
          try
          {
              Object parent = stack.getLast();
              if (!(parent instanceof Configuration))
              {
                  DefaultConfiguration config = new DefaultConfiguration("property", 
"property");
                  config.setValue(value != null ? value.toString() : "");
                  config.setAttribute("name", parent.toString());
                  config.setAttribute(XML_SPACE, PRESERVE);
                  stack.removeLast();
                  stack.add(config);
              }
              if (parent instanceof DefaultConfiguration && value instanceof 
Configuration)
              {
                  ((DefaultConfiguration) parent).addChild((Configuration) value);
              }
              else if (parent instanceof DefaultConfiguration && !(value instanceof 
Configuration))
              {
                  DefaultConfiguration config = new DefaultConfiguration("string", 
"string");
                  config.setValue(value.toString());
                  config.setAttribute(XML_SPACE, PRESERVE);
                  ((DefaultConfiguration) parent).addChild(config);
              }
          }
          catch (NoSuchElementException e)
          {}
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startMap(java.util.Map)
       */
      public void startMap(Map map)
      {
          DefaultConfiguration config = new DefaultConfiguration("map", "map");
          config.setAttribute("class", map.getClass().getName());
          setConfigName(config);
          stack.add(config);
      }
  
      /**
       * @see org.apache.jmeter.testelement.TestElementTraverser#endMap(java.util.Map)
       */
      public void endMap(Map map)
      {
          simplePropertyValue(stack.removeLast());
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startCollection(java.util.Collection)
       */
      public void startCollection(Collection col)
      {
          DefaultConfiguration config = new DefaultConfiguration("collection", 
"collection");
          config.setAttribute("class", col.getClass().getName());
          setConfigName(config);
          stack.add(config);
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endCollection(java.util.Collection)
       */
      public void endCollection(Collection col)
      {
          simplePropertyValue(stack.removeLast());
      }
  
  }
  
  
  
  1.9       +68 -12    
jakarta-jmeter/src/core/org/apache/jmeter/testelement/AbstractTestElement.java
  
  Index: AbstractTestElement.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testelement/AbstractTestElement.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AbstractTestElement.java  20 Feb 2003 02:59:15 -0000      1.8
  +++ AbstractTestElement.java  21 Feb 2003 16:33:39 -0000      1.9
  @@ -33,17 +33,9 @@
        ***************************************/
       public Object clone()
       {
  -        try
  -        {
  -            TestElement newObject = (TestElement)this.getClass().newInstance();
  -            configureClone(newObject);
  -            return newObject;
  -        }
  -        catch(Exception e)
  -        {
  -            log.error("",e);
  -        }
  -        return null;
  +        TestElementCloner cloner = new TestElementCloner();
  +        this.traverse(cloner);
  +        return cloner.getClonedElement();
       }
   
       public void removeProperty(String key)
  @@ -126,6 +118,70 @@
       public Collection getPropertyNames()
       {
           return testInfo.keySet();
  +    }
  +    
  +    public void traverse(TestElementTraverser traverser)
  +    {
  +        Iterator iter = getPropertyNames().iterator();
  +        traverser.startTestElement(this);
  +        while (iter.hasNext())
  +        {
  +            String key = (String)iter.next();
  +            Object value = getProperty(key);
  +            traverseObject(traverser, key,value);
  +        }
  +        traverser.endTestElement(this);
  +    }
  +
  +    protected void traverseObject(TestElementTraverser traverser, Object key,Object 
value)
  +    {
  +        traverser.startProperty(key);
  +        traverseObject(traverser, value);
  +        traverser.endProperty(key);
  +    }
  +
  +    protected void traverseObject(TestElementTraverser traverser, Object value)
  +    {
  +        if(value instanceof TestElement)
  +        {
  +            ((TestElement)value).traverse(traverser);
  +        }
  +        else if(value instanceof Collection)
  +        {            
  +            traverseCollection((Collection)value,traverser);
  +        }
  +        else if(value instanceof Map)
  +        {
  +            traverseMap((Map)value,traverser);
  +        }
  +        else
  +        {
  +            traverser.simplePropertyValue(value);
  +        }
  +    }
  +    
  +    protected void traverseMap(Map map,TestElementTraverser traverser)
  +    {
  +        traverser.startMap(map);
  +        Iterator iter = map.keySet().iterator();
  +        while (iter.hasNext())
  +        {
  +            Object key = iter.next();
  +            Object value = map.get(key);
  +            traverseObject(traverser,key,value);            
  +        }
  +        traverser.endMap(map);
  +    }
  +    
  +    protected void traverseCollection(Collection col,TestElementTraverser traverser)
  +    {
  +        traverser.startCollection(col);
  +        Iterator iter = col.iterator();
  +        while (iter.hasNext())
  +        {
  +            traverseObject(traverser,iter.next());           
  +        }
  +        traverser.endCollection(col);
       }
   
       /****************************************
  
  
  
  1.3       +7 -1      
jakarta-jmeter/src/core/org/apache/jmeter/testelement/TestElement.java
  
  Index: TestElement.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testelement/TestElement.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestElement.java  5 Feb 2003 05:12:09 -0000       1.2
  +++ TestElement.java  21 Feb 2003 16:33:39 -0000      1.3
  @@ -75,4 +75,10 @@
         *@return   !ToDo (Return description)
         ***************************************/
        public Object clone();
  +    
  +    /**
  +     * Convenient way to traverse a test element
  +     * @param traverser
  +     */
  +    public void traverse(TestElementTraverser traverser);
   }
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/testelement/TestElementCloner.java
  
  Index: TestElementCloner.java
  ===================================================================
  package org.apache.jmeter.testelement;
  
  import java.util.Collection;
  import java.util.LinkedList;
  import java.util.Map;
  import java.util.NoSuchElementException;
  
  /**
   * @author Administrator
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class TestElementCloner implements TestElementTraverser
  {
      LinkedList stack = new LinkedList();
      Object currentProperty;
  
      TestElement clonedRoot = null;
      
      public TestElement getClonedElement()
      {
          return clonedRoot;
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startTestElement(org.apache.jmeter.testelement.TestElement)
       */
      public void startTestElement(TestElement el)
      {
          try
          {
              if (clonedRoot == null)
              {
                  clonedRoot = (TestElement) el.getClass().newInstance();
                  stack.add(clonedRoot);
  
              }
              else
              {
                  stack.add(el.getClass().newInstance());
              }
          }
          catch (InstantiationException e)
          {}
          catch (IllegalAccessException e)
          {}
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endTestElement(org.apache.jmeter.testelement.TestElement)
       */
      public void endTestElement(TestElement el)
      {
          simplePropertyValue(stack.removeLast());
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startProperty(java.lang.Object)
       */
      public void startProperty(Object key)
      {
          stack.add(new TestElementProperty(key));
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endProperty(java.lang.Object)
       */
      public void endProperty(Object key)
      {
          TestElementProperty prop = (TestElementProperty)stack.removeLast();
          addProperty(prop,stack.getLast());
      }
      
      private void addProperty(TestElementProperty prop,Object parent)
      {
          if(parent instanceof TestElement)
          {
              
((TestElement)parent).setProperty(prop.getKey().toString(),prop.getValue());
          }
          else if(parent instanceof Map)
          {
              ((Map)parent).put(prop.getKey(),prop.getValue());
          }
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#simplePropertyValue(java.lang.Object)
       */
      public void simplePropertyValue(Object value)
      {
          try
          {
              Object parent = stack.getLast();
              if(parent instanceof TestElementProperty)
              {
                  ((TestElementProperty)parent).setValue(value);
              }
              else if(parent instanceof Collection)
              {
                  ((Collection)parent).add(value);
              }
          }
          catch (NoSuchElementException e)
          {}
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startMap(java.util.Map)
       */
      public void startMap(Map map)
      {
          try
          {
              stack.add(map.getClass().newInstance());
          }
          catch (InstantiationException e)
          {}
          catch (IllegalAccessException e)
          {}
      }
  
      /**
       * @see org.apache.jmeter.testelement.TestElementTraverser#endMap(java.util.Map)
       */
      public void endMap(Map map)
      {
          Map cloned = (Map)stack.removeLast();
          simplePropertyValue(cloned);        
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#startCollection(java.util.Collection)
       */
      public void startCollection(Collection col)
      {
          try
          {
              stack.add(col.getClass().newInstance());
          }
          catch (InstantiationException e)
          {}
          catch (IllegalAccessException e)
          {}
      }
  
      /**
       * @see 
org.apache.jmeter.testelement.TestElementTraverser#endCollection(java.util.Collection)
       */
      public void endCollection(Collection col)
      {
          Collection cloned = (Collection)stack.removeLast();
          simplePropertyValue(cloned);
      }
  
  }
  
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/testelement/TestElementProperty.java
  
  Index: TestElementProperty.java
  ===================================================================
  package org.apache.jmeter.testelement;
  
  /**
   * @author Administrator
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class TestElementProperty
  {
      Object key;
      Object value;
      
      public TestElementProperty()
      {
      }
      
      public TestElementProperty(Object key, Object value)
      {
          setKey(key);
          setValue(value);
      }
      
      public TestElementProperty(Object key)
      {
          setKey(key);
      }
      /**
       * Returns the key.
       * @return Object
       */
      public Object getKey()
      {
          return key;
      }
  
      /**
       * Returns the value.
       * @return Object
       */
      public Object getValue()
      {
          return value;
      }
  
      /**
       * Sets the key.
       * @param key The key to set
       */
      public void setKey(Object key)
      {
          this.key = key;
      }
  
      /**
       * Sets the value.
       * @param value The value to set
       */
      public void setValue(Object value)
      {
          this.value = value;
      }
  
  }
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/testelement/TestElementTraverser.java
  
  Index: TestElementTraverser.java
  ===================================================================
  package org.apache.jmeter.testelement;
  
  import java.util.Collection;
  import java.util.Map;
  
  /**
   * For traversing Test Elements, which contain property that can be other test
   * elements, strings, collections, maps, objects
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public interface TestElementTraverser
  {
  
      /**
       * Notification that a new test element is about to be traversed.  
       * @param el
       */
      public void startTestElement(TestElement el);
      
      /**
       * Notification that the test element is now done.
       * @param el
       */
      public void endTestElement(TestElement el);
      
      /**
       * Notification that a property is starting.  This could be a test element
       * property or a Map property - depends on the context.
       * @param key
       * @param value
       */
      public void startProperty(Object key);
      
      /**
       * Notification that a property is ending.  Again, this could be a test
       * element or a Map property, dependig on the context.
       * @param key
       */
      public void endProperty(Object key);
      
      /**
       * Notification of the occurence of a property value that is a simple
       * object, such as a String, or Integer, etc.  Which property it relates to
       * is dependent on the context.
       * @param value
       */
      public void simplePropertyValue(Object value);
      
      /**
       * Notification that a Map object is starting.
       * @param map
       */
      public void startMap(Map map);
      
      /**
       * Notification that a Map object is ending.
       * @param map
       */
      public void endMap(Map map);
      
      /**
       * Notification that a collection object is starting.
       */
      public void startCollection(Collection col);
      
      /**
       * Notification that a collection object is ending.
       * @param col
       */
      public void endCollection(Collection col);
  }
  
  
  
  1.7       +3 -3      
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/URLRewritingModifier.java
  
  Index: URLRewritingModifier.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/URLRewritingModifier.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- URLRewritingModifier.java 16 Oct 2002 00:38:41 -0000      1.6
  +++ URLRewritingModifier.java 21 Feb 2003 16:33:39 -0000      1.7
  @@ -131,7 +131,7 @@
                public void testGrabSessionId() throws Exception
                {
                        String html =
  -                             "location: 
http://server.com/index.html?session_id=jfdkjdkf%jddkfdfjkdjfdf";;
  +                             "location: 
http://server.com/index.html?session_id=jfdkjdkf%20jddkfdfjkdjfdf%22";;
                        response = new SampleResult();
                        response.setResponseData(html.getBytes());
                        URLRewritingModifier mod = new URLRewritingModifier();
  @@ -145,10 +145,10 @@
                        mod.modifyEntry(sampler, response);
                        Arguments args = sampler.getArguments();
                        assertEquals(
  -                             "jfdkjdkf%jddkfdfjkdjfdf",
  +                             "jfdkjdkf jddkfdfjkdjfdf\"",
                                ((Argument) args.getArguments().get(0)).getValue());
                        assertEquals(
  -                             
"http://server.com:80/index.html?session_id=jfdkjdkf%jddkfdfjkdjfdf";,
  +                             
"http://server.com:80/index.html?session_id=jfdkjdkf+jddkfdfjkdjfdf%22";,
                                sampler.toString());
                }
                public void testGrabSessionId2() throws Exception
  
  
  
  1.6       +17 -93    
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/util/HTTPArgument.java
  
  Index: HTTPArgument.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/util/HTTPArgument.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HTTPArgument.java 17 Oct 2002 19:47:20 -0000      1.5
  +++ HTTPArgument.java 21 Feb 2003 16:33:39 -0000      1.6
  @@ -54,14 +54,13 @@
    */
    package org.apache.jmeter.protocol.http.util;
   
  -import junit.framework.TestCase;
  -import java.net.URLEncoder;
  +import java.io.Serializable;
   import java.net.URLDecoder;
  -
  -import java.util.List;
  -import java.util.LinkedList;
   import java.util.Iterator;
  -import java.io.Serializable;
  +import java.util.LinkedList;
  +import java.util.List;
  +
  +import junit.framework.TestCase;
   
   import org.apache.jmeter.config.Argument;
   import org.apache.jmeter.config.Arguments;
  @@ -74,9 +73,9 @@
    */
   public class HTTPArgument extends Argument  implements Serializable {
        
  -     private static final String ENCODED_NAME = "HTTPArgument.encoded_name";
  -     private static final String ENCODED_VALUE = "HTTPArgument.encoded_value";
        private static final String ALWAYS_ENCODE = "HTTPArgument.always_encode";
  +    
  +    private static EncoderCache cache = new EncoderCache(1000);
        
        
        /****************************************
  @@ -92,15 +91,6 @@
                this.setMetaData(metadata);
        }
        
  -     private void encodeName(String name)
  -     {
  -             if(getAlwaysEncode())
  -             {
  -                     name = URLEncoder.encode(name);
  -             }
  -             setProperty(ENCODED_NAME,name);
  -     }
  -     
        public void setAlwaysEncode(boolean ae)
        {
                setProperty(ALWAYS_ENCODE,new Boolean(ae));
  @@ -110,18 +100,7 @@
        {
                return getPropertyAsBoolean(ALWAYS_ENCODE);
        }
  -     
  -     private void encodeValue(Object value)
  -     {
  -             if(value != null)
  -             {
  -                     if(getAlwaysEncode())
  -                     {
  -                             value = URLEncoder.encode(value.toString());
  -                     }
  -                     setProperty(ENCODED_VALUE,value.toString());
  -             }
  -     }
  +    
        /****************************************
         * Constructor for the Argument object
         *
  @@ -136,55 +115,13 @@
        public HTTPArgument(String name, Object value, boolean alreadyEncoded)
        {
                setAlwaysEncode(true);
  -             if(alreadyEncoded)
  -             {
  -                     try
  -                     {
  -                             setName(URLDecoder.decode(name));
  -                     }
  -                     catch(IllegalArgumentException e)
  -                     {
  -                             setName(name);
  -                     }
  -                     try
  -                     {
  -                             setValue(URLDecoder.decode(value.toString()));
  -                     }
  -                     catch(IllegalArgumentException e)
  -                     {
  -                             setValue(value.toString());
  -                     }
  -                     setProperty(ENCODED_NAME,name);
  -                     setProperty(ENCODED_VALUE,value.toString());
  -             }
  -             else
  -             {
  -                     setName(name);
  -                     setValue(value);
  -             }
  -     }
  -     
  -     public void setProperty(String key,Object value)
  -     {
  -             if(value == null || !value.equals(getProperty(key)))
  -             {
  -                     if(Argument.NAME.equals(key))
  -                     {
  -                             if(value == null)
  -                             {
  -                                     encodeName("");
  -                             }
  -                             else
  -                             {
  -                                     encodeName(value.toString());
  -                             }
  -                     }
  -                     else if(Argument.VALUE.equals(key))
  -                     {
  -                             encodeValue(value);
  -                     }
  -                     super.setProperty(key,value);
  -             }
  +        if(alreadyEncoded)
  +        {
  +            name = URLDecoder.decode(name);
  +            value = URLDecoder.decode(value.toString());
  +        }
  +             setName(name);
  +             setValue(value);
        }
        
        public HTTPArgument(String name,Object value,Object metaData,boolean 
alreadyEncoded)
  @@ -218,25 +155,12 @@
        
        public String getEncodedValue()
        {
  -             return getPropertyAsString(ENCODED_VALUE);
  +             return cache.getEncoded(getValue().toString());
        }
        
        public String getEncodedName()
        {
  -             return getPropertyAsString(ENCODED_NAME);
  -     }
  -
  -     /****************************************
  -      * Sets the Value attribute of the Argument object
  -      *
  -      *@param newValue  The new Value value
  -      ***************************************/
  -     public void setValue(Object newValue)
  -     {
  -             if(newValue == null || !newValue.equals(getValue()))
  -             {
  -                     super.setValue(newValue);
  -             }
  +             return cache.getEncoded(getName());
        }
        
        public static void convertArgumentsToHTTP(Arguments args)
  
  
  
  1.1                  
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/util/EncoderCache.java
  
  Index: EncoderCache.java
  ===================================================================
  package org.apache.jmeter.protocol.http.util;
  
  import java.net.URLEncoder;
  
  import org.apache.oro.util.Cache;
  import org.apache.oro.util.CacheLRU;
  
  /**
   * @author Administrator
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class EncoderCache
  {
      Cache cache;
  
      public EncoderCache(int cacheSize)
      {
         cache = new CacheLRU(cacheSize);
      }
      
      public String getEncoded(String k)
      {
          Object encodedValue = cache.getElement(k);
          if(encodedValue != null)
          {
              return (String)encodedValue;
          }
          encodedValue = URLEncoder.encode(k);
          cache.addElement(k,encodedValue);
          return (String)encodedValue;
      }
      
      
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to