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 2002/10/17 21:47:20 UTC

cvs commit: jakarta-jmeter/xdocs/usermanual remote-test.xml

mstover1    2002/10/17 12:47:20

  Modified:    .        build.xml
               bin      jmeter.properties
               docs/usermanual remote-test.html
               lib      jorphan.jar
               src/components/org/apache/jmeter/assertions/gui
                        DurationAssertionGui.java
               src/components/org/apache/jmeter/config/gui
                        ArgumentsPanel.java LoginConfigGui.java
               src/components/org/apache/jmeter/control/gui
                        InterleaveControlGui.java LogicControllerGui.java
                        LoopControlPanel.java ModifyControllerGui.java
                        OnceOnlyControllerGui.java RandomControlGui.java
               src/components/org/apache/jmeter/modifiers/gui
                        CounterConfigGui.java
               src/components/org/apache/jmeter/timers/gui
                        ConstantTimerGui.java GaussianRandomTimerGui.java
                        UniformRandomTimerGui.java
               src/components/org/apache/jmeter/visualizers
                        AssertionVisualizer.java GraphAccumVisualizer.java
                        GraphVisualizer.java MailerVisualizer.java
                        SplineVisualizer.java StatVisualizer.java
                        TableVisualizer.java ViewResultsFullVisualizer.java
               src/core/org/apache/jmeter JMeter.java
               src/core/org/apache/jmeter/control/gui WorkBenchGui.java
               src/core/org/apache/jmeter/engine ClientJMeterEngine.java
                        ConvertListeners.java JMeterEngine.java
                        PreCompiler.java RemoteJMeterEngine.java
                        RemoteJMeterEngineImpl.java
                        StandardJMeterEngine.java TreeCloner.java
               src/core/org/apache/jmeter/functions CompoundFunction.java
               src/core/org/apache/jmeter/functions/gui FunctionHelper.java
               src/core/org/apache/jmeter/gui GuiPackage.java
                        MainFrame.java
               src/core/org/apache/jmeter/gui/action AbstractAction.java
                        ActionRouter.java ChangeLanguage.java
                        CheckDirty.java GlobalMouseListener.java Help.java
                        Load.java RemoteStart.java Save.java Start.java
               src/core/org/apache/jmeter/gui/tree JMeterTreeModel.java
               src/core/org/apache/jmeter/gui/util MenuFactory.java
                        PowerTableModel.java
               src/core/org/apache/jmeter/junit JMeterTest.java
               src/core/org/apache/jmeter/reporters ResultCollector.java
               src/core/org/apache/jmeter/save SaveService.java
               src/core/org/apache/jmeter/save/old
                        JMeterNameSpaceHandler.java
               src/core/org/apache/jmeter/save/old/xml XmlHandler.java
               src/core/org/apache/jmeter/threads JMeterThread.java
                        ListenerNotifier.java TestCompiler.java
               src/core/org/apache/jmeter/threads/gui ThreadGroupGui.java
               src/core/org/apache/jmeter/util JMeterUtils.java
               src/protocol/ftp/org/apache/jmeter/protocol/ftp/config/gui
                        FtpConfigGui.java
               src/protocol/ftp/org/apache/jmeter/protocol/ftp/control/gui
                        FtpTestSamplerGui.java
               src/protocol/http/org/apache/jmeter/protocol/http/config/gui
                        HttpDefaultsGui.java MultipartUrlConfigGui.java
               src/protocol/http/org/apache/jmeter/protocol/http/control/gui
                        HttpTestSampleGui.java SoapSamplerGui.java
               src/protocol/http/org/apache/jmeter/protocol/http/gui
                        AuthPanel.java CookiePanel.java
                        HTTPArgumentsPanel.java HeaderPanel.java
               src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui
                        AnchorModifierGui.java ParamModifierGui.java
                        URLRewritingModifierGui.java
                        UserParameterModifierGui.java
               src/protocol/http/org/apache/jmeter/protocol/http/proxy
                        HttpRequestHdr.java
               src/protocol/http/org/apache/jmeter/protocol/http/util
                        HTTPArgument.java
               src/protocol/java/org/apache/jmeter/protocol/java/config/gui
                        JavaConfigGui.java
               src/protocol/java/org/apache/jmeter/protocol/java/control/gui
                        JavaTestSamplerGui.java
               src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui
                        DbConfigGui.java PoolConfigGui.java
                        SqlConfigGui.java
               src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/control/gui
                        JdbcTestSampleGui.java
               src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler
                        JDBCSampler.java
               xdocs/usermanual remote-test.xml
  Added:       src/jorphan/org/apache/jorphan/collections Data.java
                        HashTree.java HashTreeTraverser.java
                        ListedHashTree.java SearchByClass.java
                        SortedHashTree.java
               src/jorphan/org/apache/jorphan/gui ComponentUtil.java
                        JLabeledChoice.java JLabeledField.java
                        JLabeledPasswordField.java JLabeledTextArea.java
                        JLabeledTextField.java
               src/jorphan/org/apache/jorphan/gui/layout
                        VerticalLayout.java
               src/jorphan/org/apache/jorphan/io TextFile.java
               src/jorphan/org/apache/jorphan/logging LoggingManager.java
               src/jorphan/org/apache/jorphan/reflect ClassFinder.java
               src/jorphan/org/apache/jorphan/test AllTests.java
                        UnitTestManager.java
  Log:
  Moving jorphan classes back under JMeter's umbrella
  
  Revision  Changes    Path
  1.74      +21 -1     jakarta-jmeter/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/build.xml,v
  retrieving revision 1.73
  retrieving revision 1.74
  diff -u -r1.73 -r1.74
  --- build.xml	15 Oct 2002 21:41:50 -0000	1.73
  +++ build.xml	17 Oct 2002 19:47:14 -0000	1.74
  @@ -9,6 +9,7 @@
     <property name="build.java" value="build/protocol/java"/>
     <property name="build.components" value="build/components"/>
     <property name="build.functions" value="build/functions"/>
  +  <property name="build.jorphan" value="build/jorphan"/>
     
     <!-- Where the Sources live -->
     <property name="src.dir" value="src"/>
  @@ -19,6 +20,7 @@
     <property name="src.java" value="src/protocol/java"/>
     <property name="src.components" value="src/components"/>
     <property name="src.functions" value="src/functions"/>
  +  <property name="src.jorphan" value="src/jorphan"/>
     
     <!-- Where the API documentation lives -->
     <property name="docs.api.dest.dir" value="docs/api"/>
  @@ -55,6 +57,7 @@
     		<pathelement location="${src.ftp}"/>
     		<pathelement location="${src.jdbc}"/>
     		<pathelement location="${src.java}"/>
  +  		<pathelement location="${src.jorphan}"/>
     </path>
     
     <target name="init">
  @@ -66,6 +69,7 @@
     	<mkdir dir="${build.java}"/>
     	<mkdir dir="${build.components}"/>
     	<mkdir dir="${build.functions}"/>
  +  	<mkdir dir="${build.jorphan}"/>
     </target>
   
   
  @@ -283,7 +287,21 @@
   		</javac>
   	</target>
   	
  -	<target name="compile_protocols" depends="clean,compile_http,compile_ftp,compile_jdbc,compile_java"/>
  +	<target name="compile_jorphan" depends="init,compile_all">
  +		<javac srcdir="${src.jorphan}"
  +				 destdir="${build.jorphan}"
  +				 optimize="${optimize}"
  +				 debug="on"
  +				 target="1.3">
  +		  <include name="**/*.java"/>
  +		  <classpath>
  +		  	<path refid="classpath"/>
  +		  	<pathelement location="${build.dir}"/>
  +		  </classpath>
  +		</javac>
  +	</target>
  +	
  +	<target name="compile_protocols" depends="clean,compile_http,compile_ftp,compile_jdbc,compile_java,compile_jorphan"/>
   	
   	<target name="compile" depends="clean,compile_core,compile_components,compile_functions,compile_protocols"/>
   
  @@ -292,6 +310,7 @@
   	  	<classpath>
   	  		<path refid="classpath"/>      
   	  		<pathelement path="${build.core}"/>
  +	  		<pathelement path="${build.jorphan}"/>
   	  	</classpath>
   	  </rmic>
   	  	
  @@ -339,6 +358,7 @@
   	  <jar jarfile="./lib/ext/ApacheJMeter_ftp.jar" basedir="${build.ftp}"/>
   	  <jar jarfile="./lib/ext/ApacheJMeter_jdbc.jar" basedir="${build.jdbc}"/>
   	  <jar jarfile="./lib/ext/ApacheJMeter_java.jar" basedir="${build.java}"/>
  +	  <jar jarfile="./lib/jorphan.jar" basedir="${build.jorphan}"/>
   	</target>
   
   	<!--
  
  
  
  1.49      +1 -1      jakarta-jmeter/bin/jmeter.properties
  
  Index: jmeter.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/bin/jmeter.properties,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- jmeter.properties	15 Oct 2002 20:28:42 -0000	1.48
  +++ jmeter.properties	17 Oct 2002 19:47:14 -0000	1.49
  @@ -58,7 +58,7 @@
   config.tree.icon=leafnode.gif
   
   # Remote Hosts - comma delimited
  -#remote_hosts=127.0.0.1
  +remote_hosts=127.0.0.1
   
   #Components to not display in JMeter GUI
   not_in_menu=Remote Method Configuration,JNDI Configuration,JNDI Lookup Configuration,JNDI Request,Default Controller,org.apache.jmeter.control.DynamicController, org.apache.jmeter.protocol.http.control.Cookie,org.apache.jmeter.protocol.http.control.Authorization,org.apache.jmeter.config.LoginConfig,Header,org.apache.jmeter.protocol.http.config.MultipartUrlConfig
  
  
  
  1.17      +23 -1     jakarta-jmeter/docs/usermanual/remote-test.html
  
  Index: remote-test.html
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/docs/usermanual/remote-test.html,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- remote-test.html	6 Aug 2002 18:55:23 -0000	1.16
  +++ remote-test.html	17 Oct 2002 19:47:14 -0000	1.17
  @@ -128,7 +128,29 @@
   							  									 				<p	>
   								JMeter uses Remote Method Invocation (RMI) as the remote communication mechanism.  Therefore, you need
   to run the RMI Registry application (which is named, "rmiregistry") that comes with the JDK and is located in the "bin" 
  -directory.  Before running rmiregistry, make sure that the JMeter's core JAR file (JMETER_HOME/lib/ext/ApacheJMeter_core.jar) is in your CLASSPATH environment variable.  The 
  +directory.  Before running rmiregistry, make sure that the following jars are in your system claspath:
  +
  +												<ul	>
  +								
  +	
  +												<li	>
  +								JMETER_HOME/lib/ext/ApacheJMeter_core.jar
  +						</li>
  +									
  +	
  +												<li	>
  +								JMETER_HOME/lib/jorphan.jar
  +						</li>
  +									
  +	
  +												<li	>
  +								JMETER_HOME/lib/logkit-1.0.1
  +						</li>
  +									
  +
  +						</ul>
  +									
  +The 
   rmiregistry application needs access to certain JMeter classes.  Run rmiregistry with no parameters.  By default the 
   application listens to port 1099.
   						</p>
  
  
  
  1.2       +176 -184  jakarta-jmeter/lib/jorphan.jar
  
  	<<Binary file>>
  
  
  1.6       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/assertions/gui/DurationAssertionGui.java
  
  Index: DurationAssertionGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/gui/DurationAssertionGui.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DurationAssertionGui.java	15 Oct 2002 18:53:24 -0000	1.5
  +++ DurationAssertionGui.java	17 Oct 2002 19:47:14 -0000	1.6
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   
   /****************************************
  
  
  
  1.7       +1 -1      jakarta-jmeter/src/components/org/apache/jmeter/config/gui/ArgumentsPanel.java
  
  Index: ArgumentsPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/config/gui/ArgumentsPanel.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ArgumentsPanel.java	15 Oct 2002 18:53:24 -0000	1.6
  +++ ArgumentsPanel.java	17 Oct 2002 19:47:14 -0000	1.7
  @@ -82,7 +82,7 @@
   import org.apache.jmeter.gui.util.TextAreaTableCellEditor;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.collections.Data;
  +import org.apache.jorphan.collections.Data;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +1 -1      jakarta-jmeter/src/components/org/apache/jmeter/config/gui/LoginConfigGui.java
  
  Index: LoginConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/config/gui/LoginConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LoginConfigGui.java	15 Oct 2002 18:53:24 -0000	1.2
  +++ LoginConfigGui.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -61,7 +61,7 @@
   import org.apache.jmeter.config.ConfigTestElement;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/InterleaveControlGui.java
  
  Index: InterleaveControlGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/InterleaveControlGui.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InterleaveControlGui.java	15 Oct 2002 18:53:24 -0000	1.3
  +++ InterleaveControlGui.java	17 Oct 2002 19:47:14 -0000	1.4
  @@ -65,7 +65,7 @@
   import org.apache.jmeter.gui.NamePanel;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/LogicControllerGui.java
  
  Index: LogicControllerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/LogicControllerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LogicControllerGui.java	15 Oct 2002 18:53:24 -0000	1.2
  +++ LogicControllerGui.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -64,7 +64,7 @@
   import org.apache.jmeter.gui.NamePanel;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/LoopControlPanel.java
  
  Index: LoopControlPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/LoopControlPanel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LoopControlPanel.java	15 Oct 2002 18:53:24 -0000	1.2
  +++ LoopControlPanel.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -17,7 +17,7 @@
   import org.apache.jmeter.gui.util.FocusRequester;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/ModifyControllerGui.java
  
  Index: ModifyControllerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/ModifyControllerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ModifyControllerGui.java	15 Oct 2002 18:53:24 -0000	1.2
  +++ ModifyControllerGui.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -68,7 +68,7 @@
   import org.apache.jmeter.gui.util.MenuFactory;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/OnceOnlyControllerGui.java
  
  Index: OnceOnlyControllerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/OnceOnlyControllerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- OnceOnlyControllerGui.java	15 Oct 2002 18:53:24 -0000	1.2
  +++ OnceOnlyControllerGui.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -64,7 +64,7 @@
   import org.apache.jmeter.gui.NamePanel;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/control/gui/RandomControlGui.java
  
  Index: RandomControlGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/control/gui/RandomControlGui.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RandomControlGui.java	15 Oct 2002 18:53:24 -0000	1.3
  +++ RandomControlGui.java	17 Oct 2002 19:47:14 -0000	1.4
  @@ -65,7 +65,7 @@
   import org.apache.jmeter.control.RandomController;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java
  
  Index: CounterConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/modifiers/gui/CounterConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CounterConfigGui.java	15 Oct 2002 18:53:25 -0000	1.2
  +++ CounterConfigGui.java	17 Oct 2002 19:47:14 -0000	1.3
  @@ -6,8 +6,8 @@
   import org.apache.jmeter.modifiers.CounterConfig;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.JLabeledTextField;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.JLabeledTextField;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   /**
    * @author Administrator
    *
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/ConstantTimerGui.java
  
  Index: ConstantTimerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/ConstantTimerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ConstantTimerGui.java	15 Oct 2002 18:53:25 -0000	1.2
  +++ ConstantTimerGui.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -68,7 +68,7 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.timers.ConstantTimer;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/GaussianRandomTimerGui.java
  
  Index: GaussianRandomTimerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/GaussianRandomTimerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- GaussianRandomTimerGui.java	15 Oct 2002 18:53:25 -0000	1.2
  +++ GaussianRandomTimerGui.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.timers.GaussianRandomTimer;
   import org.apache.jmeter.timers.RandomTimer;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/UniformRandomTimerGui.java
  
  Index: UniformRandomTimerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/gui/UniformRandomTimerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UniformRandomTimerGui.java	15 Oct 2002 18:53:25 -0000	1.2
  +++ UniformRandomTimerGui.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.timers.RandomTimer;
   import org.apache.jmeter.timers.UniformRandomTimer;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.5       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/AssertionVisualizer.java
  
  Index: AssertionVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/AssertionVisualizer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AssertionVisualizer.java	15 Oct 2002 18:53:25 -0000	1.4
  +++ AssertionVisualizer.java	17 Oct 2002 19:47:15 -0000	1.5
  @@ -71,7 +71,7 @@
   import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: Jakarta-JMeter Description: Copyright: Copyright (c) 2001 Company:
  
  
  
  1.6       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/GraphAccumVisualizer.java
  
  Index: GraphAccumVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/GraphAccumVisualizer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- GraphAccumVisualizer.java	15 Oct 2002 18:53:25 -0000	1.5
  +++ GraphAccumVisualizer.java	17 Oct 2002 19:47:15 -0000	1.6
  @@ -71,7 +71,7 @@
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   /****************************************
    * This class implements a statistical analyser that plots the accumulated time
    * taken to load each set of pages. The number of plots is equivalent to the
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java
  
  Index: GraphVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- GraphVisualizer.java	15 Oct 2002 18:53:25 -0000	1.3
  +++ GraphVisualizer.java	17 Oct 2002 19:47:15 -0000	1.4
  @@ -76,7 +76,7 @@
   import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * This class implements a statistical analyser that calculates both the average
  
  
  
  1.7       +3 -3      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java
  
  Index: MailerVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/MailerVisualizer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- MailerVisualizer.java	15 Oct 2002 18:53:25 -0000	1.6
  +++ MailerVisualizer.java	17 Oct 2002 19:47:15 -0000	1.7
  @@ -82,7 +82,7 @@
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /*
    * TODO :
  
  
  
  1.4       +4 -4      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/SplineVisualizer.java
  
  Index: SplineVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/SplineVisualizer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SplineVisualizer.java	15 Oct 2002 18:53:25 -0000	1.3
  +++ SplineVisualizer.java	17 Oct 2002 19:47:15 -0000	1.4
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * This class implements a statistical analyser that takes samples to process a
  
  
  
  1.5       +8 -8      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/StatVisualizer.java
  
  Index: StatVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/StatVisualizer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StatVisualizer.java	15 Oct 2002 18:53:25 -0000	1.4
  +++ StatVisualizer.java	17 Oct 2002 19:47:15 -0000	1.5
  @@ -80,7 +80,7 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   /****************************************
    * Title: StatVisualizer.java Description: Aggregrate Table-Based Reporting
    * Visualizer for JMeter Props to the people who've done the other visualizers
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/TableVisualizer.java
  
  Index: TableVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/TableVisualizer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TableVisualizer.java	15 Oct 2002 18:53:25 -0000	1.3
  +++ TableVisualizer.java	17 Oct 2002 19:47:15 -0000	1.4
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * This class implements a statistical analyser that calculates both the average
  
  
  
  1.10      +2 -2      jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
  
  Index: ViewResultsFullVisualizer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ViewResultsFullVisualizer.java	15 Oct 2002 18:53:25 -0000	1.9
  +++ ViewResultsFullVisualizer.java	17 Oct 2002 19:47:15 -0000	1.10
  @@ -81,7 +81,7 @@
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.JLabeledTextArea;
  +import org.apache.jorphan.gui.JLabeledTextArea;
   /****************************************
    * Allows the tester to view the textual response from sampling an Entry. This
    * also allows to "single step through" the sampling process via a nice
  
  
  
  1.6       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/JMeter.java
  
  Index: JMeter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/JMeter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JMeter.java	15 Oct 2002 18:53:26 -0000	1.5
  +++ JMeter.java	17 Oct 2002 19:47:15 -0000	1.6
  @@ -79,8 +79,8 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.gui.ComponentUtil;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.gui.ComponentUtil;
   
   /**
    * @author mstover
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/control/gui/WorkBenchGui.java
  
  Index: WorkBenchGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/control/gui/WorkBenchGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WorkBenchGui.java	15 Oct 2002 18:53:26 -0000	1.2
  +++ WorkBenchGui.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -69,7 +69,7 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.testelement.WorkBench;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.5       +5 -5      jakarta-jmeter/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
  
  Index: ClientJMeterEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ClientJMeterEngine.java	15 Oct 2002 18:53:26 -0000	1.4
  +++ ClientJMeterEngine.java	17 Oct 2002 19:47:15 -0000	1.5
  @@ -61,9 +61,9 @@
   import org.apache.jmeter.testelement.TestListener;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  -import org.jorphan.collections.SearchByClass;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.SearchByClass;
   
   
   /************************************************************
  
  
  
  1.5       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/engine/ConvertListeners.java
  
  Index: ConvertListeners.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/ConvertListeners.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ConvertListeners.java	15 Oct 2002 18:53:26 -0000	1.4
  +++ ConvertListeners.java	17 Oct 2002 19:47:15 -0000	1.5
  @@ -14,8 +14,8 @@
   import org.apache.jmeter.threads.ThreadGroup;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.HashTreeTraverser;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTreeTraverser;
   
   /**
    * @author mstover
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/engine/JMeterEngine.java
  
  Index: JMeterEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/JMeterEngine.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JMeterEngine.java	15 Oct 2002 18:53:26 -0000	1.2
  +++ JMeterEngine.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -54,7 +54,7 @@
    */
   package org.apache.jmeter.engine;
   
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /************************************************************
    *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.7       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/engine/PreCompiler.java
  
  Index: PreCompiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/PreCompiler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PreCompiler.java	15 Oct 2002 18:53:26 -0000	1.6
  +++ PreCompiler.java	17 Oct 2002 19:47:15 -0000	1.7
  @@ -8,8 +8,8 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.HashTreeTraverser;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTreeTraverser;
   /**
    * @author mstover
    *
  
  
  
  1.3       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java
  
  Index: RemoteJMeterEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/RemoteJMeterEngine.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RemoteJMeterEngine.java	15 Oct 2002 18:53:26 -0000	1.2
  +++ RemoteJMeterEngine.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -57,7 +57,7 @@
   import java.rmi.Remote;
   import java.rmi.RemoteException;
   
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /************************************************************
    *  Description of the Interface
  
  
  
  1.6       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
  
  Index: RemoteJMeterEngineImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- RemoteJMeterEngineImpl.java	15 Oct 2002 18:53:26 -0000	1.5
  +++ RemoteJMeterEngineImpl.java	17 Oct 2002 19:47:15 -0000	1.6
  @@ -59,7 +59,7 @@
   
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   
   /************************************************************
  
  
  
  1.15      +5 -5      jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
  
  Index: StandardJMeterEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- StandardJMeterEngine.java	15 Oct 2002 18:53:26 -0000	1.14
  +++ StandardJMeterEngine.java	17 Oct 2002 19:47:15 -0000	1.15
  @@ -75,9 +75,9 @@
   import org.apache.jmeter.threads.ThreadGroup;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  -import org.jorphan.collections.SearchByClass;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.SearchByClass;
   
   /************************************************************
    *  !ToDo (Class description)
  
  
  
  1.3       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/engine/TreeCloner.java
  
  Index: TreeCloner.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/TreeCloner.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TreeCloner.java	15 Oct 2002 18:53:26 -0000	1.2
  +++ TreeCloner.java	17 Oct 2002 19:47:15 -0000	1.3
  @@ -5,9 +5,9 @@
   import org.apache.jmeter.config.Arguments;
   import org.apache.jmeter.control.GenericController;
   import org.apache.jmeter.testelement.PerThreadClonable;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.HashTreeTraverser;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTreeTraverser;
  +import org.apache.jorphan.collections.ListedHashTree;
   
   /**
    * <p>Title: </p>
  
  
  
  1.6       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/functions/CompoundFunction.java
  
  Index: CompoundFunction.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/functions/CompoundFunction.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CompoundFunction.java	15 Oct 2002 18:53:26 -0000	1.5
  +++ CompoundFunction.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -18,7 +18,7 @@
   import org.apache.oro.text.perl.Perl5Util;
   import org.apache.oro.text.regex.PatternCompiler;
   import org.apache.oro.text.regex.Perl5Compiler;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   /**
    * @author mstover
  
  
  
  1.4       +4 -4      jakarta-jmeter/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java
  
  Index: FunctionHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/functions/gui/FunctionHelper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FunctionHelper.java	15 Oct 2002 18:53:27 -0000	1.3
  +++ FunctionHelper.java	17 Oct 2002 19:47:16 -0000	1.4
  @@ -24,10 +24,10 @@
   import org.apache.jmeter.functions.Function;
   import org.apache.jmeter.gui.action.ActionRouter;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.ComponentUtil;
  -import org.jorphan.gui.JLabeledChoice;
  -import org.jorphan.gui.JLabeledTextField;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.gui.ComponentUtil;
  +import org.apache.jorphan.gui.JLabeledChoice;
  +import org.apache.jorphan.gui.JLabeledTextField;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   /**
    * @author Administrator
  
  
  
  1.5       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/GuiPackage.java
  
  Index: GuiPackage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/GuiPackage.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- GuiPackage.java	15 Oct 2002 18:53:27 -0000	1.4
  +++ GuiPackage.java	17 Oct 2002 19:47:16 -0000	1.5
  @@ -59,7 +59,7 @@
   import org.apache.jmeter.gui.tree.JMeterTreeListener;
   import org.apache.jmeter.gui.tree.JMeterTreeModel;
   import org.apache.jmeter.testelement.TestPlan;
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /**
    * Title:        JMeter
  
  
  
  1.6       +4 -4      jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java
  
  Index: MainFrame.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MainFrame.java	15 Oct 2002 18:53:27 -0000	1.5
  +++ MainFrame.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -97,7 +97,7 @@
   import org.apache.jmeter.samplers.Remoteable;
   import org.apache.jmeter.testelement.TestListener;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.ComponentUtil;
  +import org.apache.jorphan.gui.ComponentUtil;
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
    *
  
  
  
  1.4       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/AbstractAction.java
  
  Index: AbstractAction.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/AbstractAction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractAction.java	15 Oct 2002 18:53:27 -0000	1.3
  +++ AbstractAction.java	17 Oct 2002 19:47:16 -0000	1.4
  @@ -7,7 +7,7 @@
   
   import org.apache.jmeter.gui.JMeterGUIComponent;
   import org.apache.jmeter.testelement.TestElement;
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /**
    * @author mstover
  
  
  
  1.7       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/ActionRouter.java
  
  Index: ActionRouter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/ActionRouter.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ActionRouter.java	15 Oct 2002 18:53:27 -0000	1.6
  +++ ActionRouter.java	17 Oct 2002 19:47:16 -0000	1.7
  @@ -67,7 +67,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   /**
    *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.4       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/ChangeLanguage.java
  
  Index: ChangeLanguage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/ChangeLanguage.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ChangeLanguage.java	15 Oct 2002 18:53:27 -0000	1.3
  +++ ChangeLanguage.java	17 Oct 2002 19:47:16 -0000	1.4
  @@ -7,7 +7,7 @@
   
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.logging.LoggingManager;
   /**
    * @author Administrator
    *
  
  
  
  1.4       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/CheckDirty.java
  
  Index: CheckDirty.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/CheckDirty.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CheckDirty.java	15 Oct 2002 18:53:27 -0000	1.3
  +++ CheckDirty.java	17 Oct 2002 19:47:16 -0000	1.4
  @@ -9,9 +9,9 @@
   import org.apache.jmeter.gui.GuiPackage;
   import org.apache.jmeter.gui.JMeterGUIComponent;
   import org.apache.jmeter.gui.tree.JMeterTreeNode;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.HashTreeTraverser;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTreeTraverser;
  +import org.apache.jorphan.collections.ListedHashTree;
   
   /**
    * @author mstover
  
  
  
  1.3       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/GlobalMouseListener.java
  
  Index: GlobalMouseListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/GlobalMouseListener.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- GlobalMouseListener.java	15 Oct 2002 18:53:27 -0000	1.2
  +++ GlobalMouseListener.java	17 Oct 2002 19:47:16 -0000	1.3
  @@ -4,7 +4,7 @@
   
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.logging.LoggingManager;
   /**
    * @author Administrator
    *
  
  
  
  1.6       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Help.java
  
  Index: Help.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Help.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Help.java	15 Oct 2002 18:53:27 -0000	1.5
  +++ Help.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -13,8 +13,8 @@
   import org.apache.jmeter.swing.HtmlPane;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.gui.ComponentUtil;
  -import org.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.gui.ComponentUtil;
  +import org.apache.jorphan.logging.LoggingManager;
   /**
    * @author Administrator
    *
  
  
  
  1.9       +5 -5      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Load.java
  
  Index: Load.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Load.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Load.java	15 Oct 2002 18:53:27 -0000	1.8
  +++ Load.java	17 Oct 2002 19:47:16 -0000	1.9
  @@ -81,8 +81,8 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
   import org.xml.sax.InputSource;
   import org.xml.sax.XMLReader;
   
  
  
  
  1.6       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/RemoteStart.java
  
  Index: RemoteStart.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/RemoteStart.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- RemoteStart.java	15 Oct 2002 18:53:27 -0000	1.5
  +++ RemoteStart.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -69,7 +69,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /****************************************
    * Title: Description: Copyright: Copyright (c) 2001 Company:
  
  
  
  1.6       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Save.java
  
  Index: Save.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Save.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Save.java	15 Oct 2002 18:53:27 -0000	1.5
  +++ Save.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -70,8 +70,8 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.5       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Start.java
  
  Index: Start.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Start.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Start.java	15 Oct 2002 18:53:27 -0000	1.4
  +++ Start.java	17 Oct 2002 19:47:16 -0000	1.5
  @@ -63,7 +63,7 @@
   import org.apache.jmeter.engine.StandardJMeterEngine;
   import org.apache.jmeter.gui.GuiPackage;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTree;
   
   /****************************************
    * Title: Apache JMeter Description: Copyright: Copyright (c) 2000 Company:
  
  
  
  1.6       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java
  
  Index: JMeterTreeModel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JMeterTreeModel.java	15 Oct 2002 18:53:27 -0000	1.5
  +++ JMeterTreeModel.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -68,8 +68,8 @@
   import org.apache.jmeter.gui.NamePanel;
   import org.apache.jmeter.testelement.TestPlan;
   import org.apache.jmeter.testelement.WorkBench;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
    *
  
  
  
  1.10      +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/gui/util/MenuFactory.java
  
  Index: MenuFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/util/MenuFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- MenuFactory.java	15 Oct 2002 18:53:28 -0000	1.9
  +++ MenuFactory.java	17 Oct 2002 19:47:16 -0000	1.10
  @@ -73,7 +73,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.6       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/gui/util/PowerTableModel.java
  
  Index: PowerTableModel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/util/PowerTableModel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- PowerTableModel.java	15 Oct 2002 18:53:28 -0000	1.5
  +++ PowerTableModel.java	17 Oct 2002 19:47:16 -0000	1.6
  @@ -5,7 +5,7 @@
   
   import javax.swing.table.DefaultTableModel;
   
  -import org.jorphan.collections.Data;
  +import org.apache.jorphan.collections.Data;
   /**
    * @author mstover
    *
  
  
  
  1.4       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/junit/JMeterTest.java
  
  Index: JMeterTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/junit/JMeterTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JMeterTest.java	15 Oct 2002 18:53:28 -0000	1.3
  +++ JMeterTest.java	17 Oct 2002 19:47:17 -0000	1.4
  @@ -17,8 +17,8 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.8       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/reporters/ResultCollector.java
  
  Index: ResultCollector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/reporters/ResultCollector.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ResultCollector.java	15 Oct 2002 18:53:28 -0000	1.7
  +++ ResultCollector.java	17 Oct 2002 19:47:17 -0000	1.8
  @@ -82,7 +82,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.io.TextFile;
  +import org.apache.jorphan.io.TextFile;
   import org.xml.sax.SAXException;
   
   /**
  
  
  
  1.9       +2 -2      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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SaveService.java	15 Oct 2002 18:53:28 -0000	1.8
  +++ SaveService.java	17 Oct 2002 19:47:17 -0000	1.9
  @@ -23,8 +23,8 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
   import org.xml.sax.SAXException;
   /**
    * <p>Title: </p>
  
  
  
  1.5       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/save/old/JMeterNameSpaceHandler.java
  
  Index: JMeterNameSpaceHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/old/JMeterNameSpaceHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JMeterNameSpaceHandler.java	15 Oct 2002 18:53:28 -0000	1.4
  +++ JMeterNameSpaceHandler.java	17 Oct 2002 19:47:17 -0000	1.5
  @@ -64,7 +64,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.reflect.ClassFinder;
   import org.xml.sax.Attributes;
   
   /**
  
  
  
  1.5       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/save/old/xml/XmlHandler.java
  
  Index: XmlHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/old/xml/XmlHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XmlHandler.java	15 Oct 2002 18:53:28 -0000	1.4
  +++ XmlHandler.java	17 Oct 2002 19:47:17 -0000	1.5
  @@ -61,8 +61,8 @@
   
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.ListedHashTree;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.SAXParseException;
  
  
  
  1.11      +4 -4      jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterThread.java
  
  Index: JMeterThread.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterThread.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- JMeterThread.java	15 Oct 2002 18:53:28 -0000	1.10
  +++ JMeterThread.java	17 Oct 2002 19:47:17 -0000	1.11
  @@ -70,8 +70,8 @@
   import org.apache.jmeter.timers.Timer;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.SearchByClass;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.SearchByClass;
   /****************************************
    * The JMeter interface to the sampling process, allowing JMeter to see the
    * timing, add listeners for sampling events and to stop the sampling process.
  
  
  
  1.8       +1 -1      jakarta-jmeter/src/core/org/apache/jmeter/threads/ListenerNotifier.java
  
  Index: ListenerNotifier.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/ListenerNotifier.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ListenerNotifier.java	15 Oct 2002 18:53:28 -0000	1.7
  +++ ListenerNotifier.java	17 Oct 2002 19:47:17 -0000	1.8
  @@ -7,7 +7,7 @@
   import org.apache.jmeter.samplers.SampleListener;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.logging.LoggingManager;
   /**
    * @author Administrator
    *
  
  
  
  1.10      +8 -8      jakarta-jmeter/src/core/org/apache/jmeter/threads/TestCompiler.java
  
  Index: TestCompiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/TestCompiler.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- TestCompiler.java	15 Oct 2002 18:53:28 -0000	1.9
  +++ TestCompiler.java	17 Oct 2002 19:47:17 -0000	1.10
  @@ -27,9 +27,9 @@
   import org.apache.jmeter.timers.Timer;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.HashTree;
  -import org.jorphan.collections.HashTreeTraverser;
  -import org.jorphan.collections.ListedHashTree;
  +import org.apache.jorphan.collections.HashTree;
  +import org.apache.jorphan.collections.HashTreeTraverser;
  +import org.apache.jorphan.collections.ListedHashTree;
   
   /****************************************
    * <p>
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/core/org/apache/jmeter/threads/gui/ThreadGroupGui.java
  
  Index: ThreadGroupGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/gui/ThreadGroupGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ThreadGroupGui.java	15 Oct 2002 18:53:29 -0000	1.2
  +++ ThreadGroupGui.java	17 Oct 2002 19:47:17 -0000	1.3
  @@ -75,7 +75,7 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.threads.ThreadGroup;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.9       +3 -3      jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterUtils.java
  
  Index: JMeterUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterUtils.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JMeterUtils.java	15 Oct 2002 18:53:29 -0000	1.8
  +++ JMeterUtils.java	17 Oct 2002 19:47:17 -0000	1.9
  @@ -76,8 +76,8 @@
   import org.apache.jmeter.gui.GuiPackage;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  -import org.jorphan.test.UnitTestManager;
  +import org.apache.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.test.UnitTestManager;
   import org.xml.sax.XMLReader;
   /**
    *  This class contains the static utility methods used by JMeter.
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/Data.java
  
  Index: Data.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  
  package org.apache.jorphan.collections;
  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  
  
  /****************************************************************
   Use this class to store database-like data.  This class uses rows
   and columns to organize its data.  It has some convenience methods
   that allow fast loading and retrieval of the data into and out of
   string arrays.  It is also handy for reading CSV files.
  @author Michael Stover (mstover1 at apache.org)
   ******************************************************************/
  public class Data implements Serializable
  {
    Map data;
    Map iterators = new HashMap();
   // Hashtable dataLine;
    ArrayList header;
    // saves current position in data Vector
    int currentPos,size;
  
  /*******************************************************************
   Constructor - takes no arguments.
  *****************************************************************/
    public Data()
    {
    	header = new ArrayList();
  	 data=new HashMap();
  	 currentPos=-1;
  	 size = currentPos+1;
    }
  
  /***************************************************************
    Replaces the given header name with a new header name.
  @param oldHeader Old header name.
  @param newHeader New header name.
  **************************************************************/
    public void replaceHeader(String oldHeader,String newHeader)
    {
  	 List tempList;
  	 int index=header.indexOf(oldHeader);
  	 header.set(index,newHeader);
  	 tempList = (List)data.remove(oldHeader);
  	 data.put(newHeader,tempList);
    }
  /*************************************************************
  Adds the rows of the given Data object to this Data object.
  @param d data object to be appended to this one.
  **************************************************************/
    public void append(Data d)
    {
  	 boolean valid=true;
  	 String[] headers=getHeaders();
  	 String[] dHeaders=d.getHeaders();
  	 if(headers.length!=dHeaders.length)
  		valid=false;
  	 else
  		for(int count = 0;count<dHeaders.length;count++)
  		  if(!header.contains(dHeaders[count]))
  			 valid=false;
  	 if(valid)
  	 {
  		currentPos=size;
  		d.reset();
  		while(d.next())
  		{
  		  for(int count = 0;count<headers.length;count++)
  			 addColumnValue(headers[count],d.getColumnValue(headers[count]));
  		}
  	 }
    }
  
    /***********************************
  	Get the number of the current row.
  @return  Integer representing the current row.
    *************************************/
    public int getCurrentPos()
    {
  	 return currentPos;
    }// end method
  
    /******************************************************
    Removes the current row.
    ******************************************************/
    public void removeRow()
    {
  	 List tempList;
  	 Iterator it = data.keySet().iterator();
  	 if(currentPos>-1 && currentPos<size)
  	 {
  		while(it.hasNext())
  		{
  		  tempList = (List)data.get(it.next());
  		  tempList.remove(currentPos);
  		}
  		if(currentPos > 0)
  		{
  			currentPos--;
  		}
  		size--;
  	 }
    } // End Method
    
    public void removeRow(int index)
    {
    	if(index < size)
    	{
    		setCurrentPos(index);
    		removeRow();
    	}
    }
    
    public void addRow()
    {
    	String[] headers = getHeaders();
    	List tempList = new ArrayList();
    	for(int i = 0;i < headers.length;i++)
    	{
    		if((tempList = (ArrayList)data.get(header.get(i))) == null)
  	 	{
  			tempList = new ArrayList();
  			data.put(headers[i],tempList);
  	 	}
  	 	tempList.add("");
    	}
    	size = tempList.size();
    	setCurrentPos(size - 1);
    }
  
    /******************************************************
    Sets the current pos. If value sent to method is not a valid number,
    the current position is set to one higher than the maximum.
  @param  r position to set to.
    ******************************************************/
    public void setCurrentPos(int r)
    {
  	 currentPos=r;
    } // End Method
  
    /******************************************************
    Sorts the data using a given row as the sorting criteria.  A boolean
  	value indicates whether to sort ascending or descending.
  @param column Name of column to use as sorting criteria.
  @param asc boolean value indicating whether to sort ascending or descending.  True for
  	asc, false for desc.  Currently this feature is not enabled and all sorts are asc.
    ******************************************************/
    public void sort(String column,boolean asc)
    {
  	 sortData(column,0,size);
    } // End Method
  
    private void swapRows(int row1,int row2)
    {
  	 List temp;
  	 Object o;
  	 Iterator it = data.keySet().iterator();
  	 while(it.hasNext())
  	 {
  		temp = (List)data.get(it.next());
  		o = temp.get(row1);
  		temp.set(row1,temp.get(row2));
  		temp.set(row2,o);
  	 }
    }
  
  	 /************************************************************
  	Private method that implements the quicksort algorithm to sort the rows of the Data object.
  @param column Name of column to use as sorting criteria.
  @param starting index (for quicksort algorithm).
  @param ending index (for quicksort algorithm).
  	***********************************************************/
    private void sortData(String column,int start,int end)
    {
  	 int x=start,y=end-1;
  	 String basis=((List)data.get(column)).get((int)((x+y)/2)).toString();
  	 Object temp;
  	 if(x==y)
  		return;
  	 while(x<=y)
  	 {
  		while(x<end && ((List)data.get(column)).get(x).toString().compareTo(basis)<0)
  		  x++;
  		while(y>=(start-1) && ((List)data.get(column)).get(y).toString().compareTo(basis)>0)
  		  y--;
  		if(x<=y)
  		{
  		  swapRows(x,y);
  		  x++;
  		  y--;
  		}
  	 }
  	 if(x==y)
  		x++;
  	 y=end-x;
  	 if(x>0)
  		sortData(column,start,x);
  	 if(y>0)
  		sortData(column,x,end);
    }
  
    /***********************************
  	Gets the number of rows in the Data object.
  @return   Returns number of rows in Data object.
    *************************************/
    public int size()
    {
  	 return size;
    }// end method
  
    /*******************************************************
  	Adds a value into the Data set at the current row, using a column name
  	to find the column in which to insert the new value.
  @param column The name of the column to set.
  @param value Value to set into column.
    **********************************************************/
    public void addColumnValue(String column,Object value)
    {
  	 ArrayList tempList;
  	 if((tempList = (ArrayList)data.get(column)) == null)
  	 {
  		tempList = new ArrayList();
  		data.put(column,tempList);
  	 }
  	 int s = tempList.size();
  	 if(currentPos==-1)
  		currentPos=size;
  	 if(currentPos>=size)
  		  size = currentPos+1;
  	 while(currentPos>s)
  	 {
  		s++;
  		tempList.add(null);
  	 }
  	 if(currentPos == s)
  		tempList.add(value);
  	 else
  		tempList.set(currentPos,value);
    }// end method
  
  /**************************************************************
  Returns the row number where a certain value is.
  @param column Column to be searched for value.
  @param value object in Search of.
  @return row # where value exists.
  **************************************************************/
    public int findValue(String column,Object value)
    {
  	 List list = (List)data.get(column);
  	 int ret=-1;
  	 ret = list.indexOf(value);
  	 return ret;
    }
  
    /*******************************************************
  	Sets the value in the Data set at the current row, using a column name
  	to find the column in which to insert the new value.
  @param column The name of the column to set.
  @param value Value to set into column.
    **********************************************************/
    public void setColumnValue(String column,Object value)
    {
  	 List tempList;
  	 if((tempList = (List)data.get(column)) == null)
  	 {
  		tempList = new ArrayList();
  		data.put(column,tempList);
  	 }
  	 if(currentPos==-1)
  		currentPos=0;
  	 if(currentPos>=size)
  	 {
  		  size++;
  		  tempList.add(value);
  	 }
  	 else if(currentPos >= tempList.size())
  	 {
  	 	tempList.add(value);
  	 }
  	 else
  		tempList.set(currentPos,value);
    }// end method
  
    /******************************************************
    Checks to see if a column exists in the Data object.
  @param  column Name of column header to check for.
  @return True or False depending on whether the column exists.
    ******************************************************/
    public boolean hasHeader(String column)
    {
  	 return data.containsKey(column);
    } // End Method
  
    /***********************************
  	Sets the current position of the Data set to the next row.
  @return  True if there is another row.  False if there are no more rows.
    *************************************/
    public boolean next()
    {
  	 if(++currentPos>=size)
  		return false;
  	 else return true;
    }// end method
  
    /***********************************
  	Sets the current position of the Data set to the previous row.
  @return  True if there is another row.  False if there are no more rows.
    *************************************/
    public boolean previous()
    {
  	 if(--currentPos<0)
  		return false;
  	 else return true;
    }// end method
  
    /***********************************
    Resets the current position of the data set to just before the first element.
    *************************************/
    public void reset()
    {
  	 currentPos=-1;
    }// end method
  
    /***********************************
    Gets the value in the current row of the given column.
  @param column Name of the column.
  @return Returns an Object which holds the value of the column.
    *************************************/
    public Object getColumnValue(String column)
    {
  
  	 try{
  		if(currentPos<size)
  		  return ((List)data.get(column)).get(currentPos);
  		else
  		  return null;
  	 }catch(Exception e){return null;}
    }// end method
  
  		  /***********************************
    Gets the value in the current row of the given column.
  @param column index of the column (starts at 0).
  @return Returns an Object which holds the value of the column.
    *************************************/
    public Object getColumnValue(int column)
    {
  	 String columnName = (String)header.get(column);
  	 try{
  		if(currentPos<size)
  		  return ((List)data.get(columnName)).get(currentPos);
  		else
  		  return null;
  	 }catch(Exception e){return null;}
    }// end method
    
    public Object getColumnValue(int column,int row)
    {
    	setCurrentPos(row);
    	return getColumnValue(column);
    }
    
    public void removeColumn(int col)
    {
    	String columnName = (String)header.get(col);
    	data.remove(columnName);
    	header.remove(columnName);
    }
  
  
    /*****************************************************************
  	Sets the headers for the data set.  Each header represents a column
  	of data.  Each row's data can be gotten with the column header name,
  	which will always be a string.
  @param h Array of strings representing the column headers.
  	**************************************************************/
    public void setHeaders(String[] h)
    {
  	 int x=0;
  	 header=new ArrayList(h.length);
  	 for(x = 0;x<h.length;x++)
  	 {
  		header.add(h[x]);
  		data.put(h[x],new ArrayList());
  	 }
    }
  
  
    /*****************************************************************
  	 Returns a String array of the column headers.
  @return Array of strings of the column headers.
    *****************************************************************/
    public String[] getHeaders()
    {
  	 String[] r=new String[header.size()];
  	 if ( r.length>0 )
  	 {
  		r=(String[])header.toArray(r);
  	 }
  	 return r;
    } //end of Method
  
    /*****************************************************************
  	 This method will retrieve every entry in a certain column.  It returns an array of Objects
  	from the column.
  @param columnName String value, name of the column.
  @return Array of Objects representing the data.
    *****************************************************************/
    public List getColumnAsObjectArray(String columnName)
    {
  	 return (List)data.get(columnName);
    }// end of Method
  
  
  
    /*****************************************************************
  	 This method will retrieve every entry in a certain column.  It returns an array of strings
  	from the column. Even if the data are not strings, they will be returned as
  	strings in this method.
  @param columnName String value, name of the column.
  @return Array of Strings representing the data.
    *****************************************************************/
    public String[] getColumn(String columnName)
    {
  	 String[] returnValue;
  	 Object o;
  	 List temp=(List)data.get(columnName);
  	 if(temp != null)
  	 {
  		returnValue = new String[temp.size()];
  		Iterator it = temp.iterator();
  		int index = 0;
  		while(it.hasNext())
  		{
  		  o = it.next();
  		  if(o != null)
  		  {
  			 if(o instanceof String)
  				returnValue[index++] = (String)o;
  			 else
  				returnValue[index++] = o.toString();
  		  }
  		}
  	 }
  	 else
  		returnValue = new String[0];
  	 return returnValue;
    }// end of Method
  
    /*****************************************************************
  	 Use this method to set the entire data set.  It takes an array of
  	strings.  It uses the first row as the headers, and the next rows
  	as the data elements.  Delimiter represents the delimiting character(s)
  	that separate each item in a data row.
  @param contents Array of strings, the first element is a list of the column
  	headers, the next elements each represent a single row of data.
  @param delimiter The delimiter character that separates columns within
  	the string array.
  	  *****************************************************************/
    public void setData(String[] contents, String delimiter)
    {
  		setHeaders(contents[0].split(delimiter));
  		int x=1;
  		while(x<contents.length)
  		{
  			setLine(contents[x++].split(delimiter));
  		}
  	 } //end of Method
  
    /*
  	Deletes a header from the Data object.
  	Takes the column name as input.  It will delete the entire
  	column.
  
    public void deleteHeader(String s)
    {
  
    }*/
    
    public void setColumnData(String colName,Object value)
    {
    	List list = this.getColumnAsObjectArray(colName);
    	for(int x = 0;x < list.size();x++)
    	{
    		list.set(x,value);
    	}
    }
    
    public void setColumnData(int col,List data)
    {
    	reset();
    	Iterator iter = data.iterator();
    	String columnName = (String)header.get(col);
    	while(iter.hasNext())
    	{
    		next();
    		setColumnValue(columnName,iter.next());
    	}
    }
  
  
    /***************************************************
  	Adds a header name to the Data object.
  @param s name of header.
  	*************************************************/
    public void addHeader(String s)
    {
  	header.add(s);
  	data.put(s,new ArrayList(size()));
    }
  
    /************************************************************
  	Sets a row of data using an array of strings as input.  Each
  	value in the array represents a column's value in that row.
  	Assumes the order will be the same order in which the headers
  	were added to the data set.
  @param line array of strings representing column values.
  	*********************************************************/
    public void setLine(String[] line)
    {
  	 List tempList;
  	 String[] h = getHeaders();
  	 for(int count = 0;count<h.length;count++)
  	 {
  		tempList = (List)data.get(h[count]);
  		if(count<line.length && line[count].length()>0)
  		  tempList.add(line[count]);
  		else
  		  tempList.add("N/A");
  	 }
  	 size++;
    }
  
    /************************************************************
  	Sets a row of data using an array of strings as input.  Each
  	value in the array represents a column's value in that row.
  	Assumes the order will be the same order in which the headers
  	were added to the data set.
  @param line array of strings representing column values.
  @param deflt Default value to be placed in data if line is not as long as headers.
  	*********************************************************/
    public void setLine(String[] line,String deflt)
    {
  	 List tempList;
  	 String[] h = getHeaders();
  	 for(int count = 0;count<h.length;count++)
  	 {
  		tempList = (List)data.get(h[count]);
  		if(count<line.length && line[count].length()>0)
  		  tempList.add(line[count]);
  		else
  		  tempList.add(deflt);
  	 }
  	 size++;
    }
  
    /******************************************************************
  	Returns all the data in the Data set as an array of strings.  Each
  	array gives a row of data, each column separated by tabs.
  @return array of strings.
  
  	*******************************************************************/
    public String[] getDataAsText()
    {
  	 List tempList;
  	 StringBuffer temp=new StringBuffer("");
  	 String[] line=new String[size+1];
  	 String[] elements = getHeaders();
  	 for(int count = 0;count<elements.length;count++)
  	 {
  		temp.append(elements[count]);
  		if(count+1<elements.length)
  		  temp.append("\t");
  	 }
  	 line[0] = temp.toString();
  	 reset();
  	 int index = 1;
  	 while(next())
  	 {
  		temp = new StringBuffer("");
  		for(int count = 0;count<elements.length;count++)
  		{
  		  temp.append(getColumnValue(count));
  		  if(count+1<elements.length)
  			 temp.append("\t");
  		}
  		line[index++] = temp.toString();
  	 }
  	 return line;
    }
  
    public String toString()
    {
  	 String[] contents = getDataAsText();
  	 StringBuffer sb = new StringBuffer();
  	 boolean first = true;
  	 for(int x = 0;x < contents.length;x++)
  	 {
  		if(!first)
  		  sb.append("\n");
  		else first = false;
  		sb.append(contents[x]);
  	 }
  	 return sb.toString();
    }
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTree.java
  
  Index: HashTree.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  
  
  package org.apache.jorphan.collections;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.util.Arrays;
  import java.util.Collection;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;
  
  import junit.framework.TestCase;
  
  import org.apache.log.Logger;
  import org.apache.jorphan.logging.LoggingManager;
  /**********************************************************************
  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 to add objects and 
  branches, as well as many ways to retrieve. 
  <p>
  HashTree implements the Map interface for convenience reasons.  The main difference between 
  a Map and a HashTree is that the HashTree organizes the data into a recursive tree structure,
  and provides the means to manipulate that structure.
  <p>
  Of special interest is the 
  {@link traverse(HashTreeTraverser)} method, which provides an expedient way to 
  traverse any HashTree by implementing the
  {@link HashTreeTraverser} interface in order to perform some operation on the tree, or to extract
  information from the tree.
  
  @author Michael Stover (mstover1 at apache.org)
  @see HashTreeTraverser
  @see SearchByClass
  ***********************************************************************/
  public class HashTree implements Serializable,Map
  {
  	private static Logger log = LoggingManager.getLoggerFor("jorphan.collections");
  	/**
  	 * Creates an empty new HashTree
  	 */
  	public HashTree()
  	{
  		data = new HashMap();
  	}
  	/**
  	 * Creates a new HashTree and adds the given object as a top-level node.
  	 * @param key
  	 */
  	public HashTree(Object key)
  	{
  		data = new HashMap();
  		data.put(key, new HashTree());
  	}
  	/**
  	 * The Map given must also be a HashTree, otherwise an UnsupportedOperationException
  	 * is thrown.  If it is a HashTree, this is like calling the add(HashTree) method.
  	 * @see add(HashTree)
  	 * @see java.util.Map#putAll(Map)
  	 */
  	public void putAll(Map map)
  	{
  		if(map instanceof HashTree)
  		{
  			this.add((HashTree)map);
  		}
  		else
  		{
  			throw new UnsupportedOperationException("can only putAll other HashTree objects");
  		}
  	}
  	
  	/**
  	 * Exists to satisfy the Map interface.  
  	 * @see java.util.Map#entrySet()
  	 */
  	public Set entrySet()
  	{
  		return data.entrySet();
  	}
  	
  	/**
  	 * Implemented as required by the Map interface, but is not very useful here. All
  	 * 'values' in a HashTree are HashTree's themselves. 
  	 * @param obj Object to be tested as a value.
  	 * @return True if the HashTree contains the value, false otherwise.
  	 * @see java.util.Map#containsValue(Object)
  	 */
  	public boolean containsValue(Object value)
  	{
  		return data.containsValue(value);
  	}
  	
  	/**
  	 * This is the same as calling HashTree.add(key,value).
  	 * @see java.util.Map#put(Object, Object)
  	 */
  	public Object put(Object key,Object value)
  	{
  		Object previous = data.get(key);
  		add(key,value);
  		return previous;
  	}
  	
  	/**
  	 * Clears the HashTree of all contents.
  	 * @see java.util.Map#clear()
  	 */
  	public void clear()
  	{
  		data.clear();
  	}
  	
  	/**
  	 * Returns a collection of all the sub-trees of the current tree.
  	 * @see java.util.Map#values()
  	 */
  	public Collection values()
  	{
  		return data.values();
  	}
  	
  	/****************************************
  	 * Adds a key as a node at the current level and then adds the
  	 * given HashTree to that new node.
  	 *
  	 *@param key      Key to create in this tree
  	 *@param subTree  Sub tree to add to the node created for the first argument.
  	 ***************************************/
  	public void add(Object key,HashTree subTree)
  	{
  		add(key);
  		getTree(key).add(subTree);
  	}
  	
  	/**
  	 * Adds all the nodes and branches of the given tree to this tree.  Is like merging
  	 * two trees.  Duplicates are ignored.
  	 * @param newTree
  	 */
  	public void add(HashTree newTree)
  	{
  		Iterator iter = newTree.list().iterator();
  		while(iter.hasNext())
  		{
  			Object item = iter.next();
  			add(item);
  			getTree(item).add(newTree.getTree(item));
  		}
  	}
  	/**
  	 * Creates a new HashTree and adds all the objects in the given collection as top-level
  	 * nodes in the tree.
  	 * @param keys A collection of objects to be added to the created HashTree.
  	 */
  	public HashTree(Collection keys)
  	{
  		data = new HashMap();
  		Iterator it = keys.iterator();
  		while (it.hasNext())
  			data.put(it.next(), new HashTree());
  	}
  	/**
  	 * Creates a new HashTree and adds all the objects in the given array as top-level
  	 * nodes in the tree.
  	 * @param keys
  	 */
  	public HashTree(Object[] keys)
  	{
  		data = new HashMap();
  		for (int x = 0; x < keys.length; x++)
  			data.put(keys[x], new HashTree());
  	}
  	/************************************************************
  	  If the HashTree contains the given object as a key at the top level, then a
  	  true result is returned, otherwise false.
  	@param obj Object to be tested as a key.
  	@return True if the HashTree contains the key, false otherwise.
  	@see java.util.Map#containsKey()
  	***************************************************************/
  	public boolean containsKey(Object o)
  	{
  		return data.containsKey(o);
  	}
  	/*****************************************************************
  	  If the HashTree is empty, true is returned, false otherwise.
  	@return True if HashTree is empty, false otherwise.
  	***************************************************************/
  	public boolean isEmpty()
  	{
  		return data.isEmpty();
  	}
  	/************************************************************************
  	  Sets a key and it's value in the HashTree.  It actually sets up a key, and then
  	  creates a node for the key and sets the value to the new node, as a key.  Any
  	  previous nodes that existed under the given key are lost.
  	@param key Key to be set up.
  	@param value Value to be set up as a key in the secondary node.
  	*************************************************************************/
  	public void set(Object key, Object value)
  	{
  		data.put(key, createNewTree(value));
  	}
  	/********************************************************************
  	 Sets a key into the current tree and assigns it a HashTree as its subtree.  Any
  	 previous entries under the given key are removed.
  	@param key Key to be set up.
  	@param tree HashTree that the key maps to.
  	**************************************************************************/
  	public void set(Object key, HashTree t)
  	{
  		data.put(key, t);
  	}
  	/************************************************************************
  	Sets a key and it's values in the HashTree.  It sets up a key in the current node, and
  	then creates a node for that key, and sets all the values in the array as keys in
  	 the new node.  Any keys previously held under the given key are lost.
  	@param key Key to be set up.
  	@param values Array of objects to be added as keys in the secondary node.
  	********************************************************************/
  	public void set(Object key, Object[] values)
  	{
  		data.put(key, createNewTree(Arrays.asList(values)));
  	}
  	/********************************************************************
  	 Sets a key and its values in the HashTree.  It sets up a key in the current node, and
  	 then creates a node for that key, and set all the values in the array as keys in
  	 the new node.  Any keys previously held under the given key are removed.
  	@param key Key to be set up.
  	@param values Collection of objects to be added as keys in the secondary node.
  	**************************************************************************/
  	public void set(Object key, Collection values)
  	{
  		data.put(key, createNewTree(values));
  	}
  	/********************************************************************
  	  Sets a series of keys into the HashTree.  It sets up the first object in the
  	  key array as a key in the current node, recurses into the next HashTree node through
  	  that key and adds the second object in the array.  Continues recursing in this
  	  manner until the end of the first array is reached, at which point all the
  	  values of the second array are set as keys to the bottom-most node.  All previous
  	  keys of that bottom-most node are removed.
  	@param treePath Array of keys to put into HashTree.
  	@param values Array of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void set(Object[] treePath, Object[] values)
  	{
  		if(treePath != null && values != null)
  		{
  			set(Arrays.asList(treePath),Arrays.asList(values));
  		}
  	}
  	/********************************************************************
  	  Sets a series of keys into the HashTree.  It sets up the first object in the
  	  key array as a key in the current node, recurses into the next HashTree node through
  	  that key and adds the second object in the array.  Continues recursing in this
  	  manner until the end of the first array is reached, at which point all the
  	  values of the Collection of values are set as keys to the bottom-most node.  Any
  	  keys previously held by the bottom-most node are lost.
  	@param key Array of keys to put into HashTree.
  	@param values Collection of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void set(Object[] treePath, Collection values)
  	{
  		if(treePath != null)
  		{
  			set(Arrays.asList(treePath),values);
  		}
  	}
  	/********************************************************************
  	  Sets a series of keys into the HashTree.  It sets up the first object in the
  	  key list as a key in the current node, recurses into the next HashTree node through
  	  that key and adds the second object in the list.  Continues recursing in this
  	  manner until the end of the first list is reached, at which point all the
  	  values of the array of values are set as keys to the bottom-most node.  Any
  	  previously existing keys of that bottom node are removed.
  	@param treePath List of keys to put into HashTree.
  	@param values Array of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void set(Collection treePath, Object[] values)
  	{
  		HashTree tree = addTreePath(treePath);
  		tree.set(Arrays.asList(values));
  	}
  	/****************************************
  	 * Sets the nodes of the current tree to be the objects of the given collection.  
  	 * Any nodes previously in the tree are removed.
  	 *
  	 *@param values  Collection of objects to set as nodes.
  	 ***************************************/
  	public void set(Collection values)
  	{
  		Iterator iter = this.list().iterator();
  		while(iter.hasNext())
  		{
  			this.remove(iter.next());
  		}
  		this.add(values);
  	}
  	/********************************************************************
  	  Sets a series of keys into the HashTree.  It sets up the first object in the
  	  key list as a key in the current node, recurses into the next HashTree node through
  	  that key and adds the second object in the list.  Continues recursing in this
  	  manner until the end of the first list is reached, at which point all the
  	  values of the Collection of values are set as keys to the bottom-most node.  Any
  	  previously existing keys of that bottom node are lost.
  	@param key List of keys to put into HashTree.
  	@param values Collection of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void set(Collection treePath, Collection values)
  	{
  		HashTree tree = addTreePath(treePath);
  		tree.set(values);
  	}
  	/*********************************************************************
  	Adds an key into the HashTree at the current level.
  	@param key Key to be added to HashTree.
  	*****************************************************************/
  	public void add(Object key)
  	{
  		if (!data.containsKey(key))
  			data.put(key, createNewTree());
  	}
  	/*******************************************************************
  	Adds all the given objects as nodes at the current level.
  	@param keys Array of Keys to be added to HashTree.
  	*******************************************************************/
  	public void add(Object[] keys)
  	{
  		for (int x = 0; x < keys.length; x++)
  			add(keys[x]);
  	}
  	/*******************************************************************
  	Adds a bunch of keys into the HashTree at the current level.
  	@param keys Collection of Keys to be added to HashTree.
  	*******************************************************************/
  	public void add(Collection keys)
  	{
  		Iterator it = keys.iterator();
  		while (it.hasNext())
  			add(it.next());
  	}
  	/************************************************************************
  	* Adds a key and it's value in the HashTree.  The first argument becomes a node 
  	* at the current level, and the second argument becomes a node of it.
  	@param key Key to be added.
  	@param value Value to be added as a key in the secondary node.
  	*************************************************************************/
  	public void add(Object key, Object value)
  	{
  		add(key);
  		getTree(key).add(value);
  	}
  	/************************************************************************
  	Adds a key and it's values in the HashTree.  The first argument becomes a 
  	node at the current level, and adds all the values in the array to
  	 the new node.
  	@param key Key to be added.
  	@param values Array of objects to be added as keys in the secondary node.
  	********************************************************************/
  	public void add(Object key, Object[] values)
  	{
  		add(key);
  		getTree(key).add(values);
  	}
  	/************************************************************************
  	Adds a key as a node at the current level and then adds all the objects in the
  	second argument as nodes of the new node. 
  	@param key Key to be added.
  	@param values Collection of objects to be added as keys in the secondary node.
  	********************************************************************/
  	public void add(Object key, Collection values)
  	{
  		add(key);
  		getTree(key).add(values);
  	}
  	/********************************************************************
  	* Adds a series of nodes into the HashTree using the given path.  The
  	* first argument is an array that represents a path to a specific node in the
  	* tree.  If the path doesn't already exist, it is created (the objects are added 
  	* along the way).  At the path, all the objects in the second argument are added
  	* as nodes.
  	@param treePath An array of objects representing a path.
  	@param values Array of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void add(Object[] treePath, Object[] values)
  	{
  		if(treePath != null)
  		{
  			add(Arrays.asList(treePath), Arrays.asList(values));
  		}
  	}
  	/********************************************************************
  	* Adds a series of nodes into the HashTree using the given path.  The
  	* first argument is an array that represents a path to a specific node in the
  	* tree.  If the path doesn't already exist, it is created (the objects are added 
  	* along the way).  At the path, all the objects in the second argument are added
  	* as nodes.
  	@param treePath An array of objects representing a path.
  	@param values Collection of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void add(Object[] treePath, Collection values)
  	{
  		if(treePath != null)
  		{
  			add(Arrays.asList(treePath), values);
  		}
  	}
  	/********************************************************************
  	*  Adds a series of nodes into the HashTree using the given path.  The
  	* first argument is a List that represents a path to a specific node in the
  	* tree.  If the path doesn't already exist, it is created (the objects are added 
  	* along the way).  At the path, all the objects in the second argument are added
  	* as nodes.
  	@param treePath A list of objects representing a path.
  	@param values Array of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void add(Collection treePath, Object[] values)
  	{
  		HashTree tree = addTreePath(treePath);
  		tree.add(Arrays.asList(values));
  	}
  	/****************************************
  	 * Adds a series of nodes into the HashTree using the given path.  The
  	* first argument is a List that represents a path to a specific node in the
  	* tree.  If the path doesn't already exist, it is created (the objects are added 
  	* along the way).  At the path, the object in the second argument is added
  	* as a node.
  	 *
  	 *@param key     A list of objects representing a path.
  	 *@param value   Object to add as a node to bottom-most node.
  	 ***************************************/
  	public void add(Collection treePath, Object value)
  	{
  		HashTree tree = addTreePath(treePath);
  		tree.add(value);
  	}
  	/********************************************************************
  	* Adds a series of nodes into the HashTree using the given path.  The
  	* first argument is a SortedSet that represents a path to a specific node in the
  	* tree.  If the path doesn't already exist, it is created (the objects are added 
  	* along the way).  At the path, all the objects in the second argument are added
  	* as nodes.
  	@param treePath A SortedSet of objects representing a path.
  	@param values Collection of values to be added as keys to bottom-most node.
  	********************************************************************/
  	public void add(Collection treePath, Collection values)
  	{
  		HashTree tree = addTreePath(treePath);
  		tree.add(values);
  	}
  
  	protected HashTree addTreePath(Collection treePath)
  	{
  		HashTree tree = this;
  		Iterator iter = treePath.iterator();
  		while(iter.hasNext())
  		{
  			Object temp = iter.next();
  			tree.add(temp);
  			tree = tree.getTree(temp);
  		}
  		return tree;
  	}
  	/*********************************************************************
  	Gets the HashTree mapped to the given key.
  	@param key Key used to find appropriate HashTree()
  	********************************************************************/
  	public HashTree getTree(Object key)
  	{
  		return (HashTree) data.get(key);
  	}
  	
  	/**
  	 * Returns the HashTree object associated with the given key.  Same as calling
  	 * getTree(key).
  	 * @see org.apache.jorphan.collections.HashTree#getTree(Object)
  	 * @see java.util.Map#get(Object)
  	 */
  	public Object get(Object key)
  	{
  		return getTree(key);
  	}
  	/*************************************************************
  	Gets the HashTree object mapped to the last key in the array by recursing through
  	the HashTree structure one key at a time.
  	@param treePath Array of keys.
  	@return HashTree at the end of the recursion.
  	**************************************************************/
  	public HashTree getTree(Object[] treePath)
  	{
  		if(treePath != null)
  		{
  			return getTree(Arrays.asList(treePath));
  		}
  		else
  		{
  			return this;
  		}
  	}
  	
  	/**
  	 * Create a clone of this HashTree.  This is not a deep clone (ie, the contents of 
  	 * the tree are not cloned).
  	 * @see java.lang.Object#clone()
  	 */
  	public Object clone()
  	{
  		HashTree newTree = new HashTree();
  		newTree.data = (Map)((HashMap)data).clone();
  		return newTree;
  	}
  	
  	/**
  	 * Creates a new tree.  This method exists to allow inheriting classes to generate the
  	 * appropriate types of nodes.  For instance, when a node is added, it's value is a HashTree.
  	 * Rather than directly calling the HashTree() constructor, the createNewTree() method is
  	 * called.  Inheriting classes should override these methods and create the appropriate
  	 * subclass of HashTree.
  	 * @return HashTree
  	 */
  	protected HashTree createNewTree()
  	{
  		return new HashTree();
  	}
  	
  	/**
  	 * Creates a new tree.  This method exists to allow inheriting classes to generate the
  	 * appropriate types of nodes.  For instance, when a node is added, it's value is a HashTree.
  	 * Rather than directly calling the HashTree() constructor, the createNewTree() method is
  	 * called.  Inheriting classes should override these methods and create the appropriate
  	 * subclass of HashTree.
  	 * @return HashTree
  	 */
  	protected HashTree createNewTree(Object key)
  	{
  		return new HashTree(key);
  	}
  	
  	/**
  	 * Creates a new tree.  This method exists to allow inheriting classes to generate the
  	 * appropriate types of nodes.  For instance, when a node is added, it's value is a HashTree.
  	 * Rather than directly calling the HashTree() constructor, the createNewTree() method is
  	 * called.  Inheriting classes should override these methods and create the appropriate
  	 * subclass of HashTree.
  	 * @return HashTree
  	 */
  	protected HashTree createNewTree(Collection values)
  	{
  		return new HashTree(values);
  	}
  	
  	/*************************************************************
  	Gets the HashTree object mapped to the last key in the SortedSet by recursing through
  	the HashTree structure one key at a time.
  	@param treePath SortedSet of keys.
  	@return HashTree at the end of the recursion.
  	**************************************************************/
  	public HashTree getTree(Collection treePath)
  	{
  		return getTreePath(treePath);
  	}
  	/****************************************************************
  	Gets a Collection of all keys in the current HashTree node.  If the HashTree represented
  	a file system, this would be like getting a collection of all the files in the current
  	folder.
  	@return Set of all keys in this HashTree.
  	*****************************************************************/
  	public Collection list()
  	{
  		return data.keySet();
  	}
  	/***************************************************************
  	  Gets a Set of all keys in the HashTree mapped to the given key of the
  	  current HashTree object (in other words, one level down.  If the HashTree
  	  represented a file system, this would like getting a list of all files in
  	  a sub-directory (of the current directory) specified by the key argument
  	@param key Key used to find HashTree to get list of.
  	@return Set of all keys in found HashTree.
  	***************************************************************/
  	public Collection list(Object key)
  	{
  		HashTree temp = (HashTree) data.get(key);
  		if (temp != null)
  			return temp.list();
  		else
  			return null;
  	}
  	/**
  	 * Removes the entire branch specified by the given key.
  	 * @see java.util.Map#remove(Object)
  	 */
  	public Object remove(Object key)
  	{
  		return data.remove(key);
  	}
  	/*************************************************************
  	Recurses down into the HashTree stucture using each subsequent key in the
  	array of keys, and returns the Set of keys of the HashTree object at the
  	end of the recursion.  If the HashTree represented a file system, this would
  	be like getting a list of all the files in a directory specified by
  	the treePath, relative from the current directory.
  	@param treePath Array of keys used to recurse into HashTree structure.
  	@return Set of all keys found in end HashTree.
  	**************************************************************/
  	public Collection list(Object[] treePath)
  	{
  		if(treePath != null)
  		{
  			return list(Arrays.asList(treePath));
  		}
  		else
  		{
  			return list();
  		}
  	}
  	/*************************************************************
  	Recurses down into the HashTree stucture using each subsequent key in the
  	List of keys, and returns the Set of keys of the HashTree object at the
  	end of the recursion.  If the HashTree represented a file system, this would
  	be like getting a list of all the files in a directory specified by
  	the treePath, relative from the current directory.
  	@param treePath List of keys used to recurse into HashTree structure.
  	@return Set of all keys found in end HashTree.
  	**************************************************************/
  	public Collection list(Collection treePath)
  	{
  		return getTreePath(treePath).list();
  	}
  	/****************************************
  	 * Finds the given current key, and replaces it with the given new key.  Any 
  	 * tree structure found under the original key is moved to the new key.
  	 *
  	 *@param currentKey  !ToDo (Parameter description)
  	 *@param newKey      !ToDo (Parameter description)
  	 ***************************************/
  	public void replace(Object currentKey, Object newKey)
  	{
  		HashTree tree = getTree(currentKey);
  		data.remove(currentKey);
  		data.put(newKey, tree);
  	}
  	/****************************************************************
  	Gets an array of all keys in the current HashTree node.  If the HashTree represented
  	a file system, this would be like getting an array of all the files in the current
  	folder.
  	@return Array of all keys in this HashTree.
  	*****************************************************************/
  	public Object[] getArray()
  	{
  		return data.keySet().toArray();
  	}
  	/***************************************************************
  	  Gets an array of all keys in the HashTree mapped to the given key of the
  	  current HashTree object (in other words, one level down).  If the HashTree
  	  represented a file system, this would like getting a list of all files in
  	  a sub-directory (of the current directory) specified by the key argument
  	@param key Key used to find HashTree to get list of.
  	@return Array of all keys in found HashTree.
  	***************************************************************/
  	public Object[] getArray(Object key)
  	{
  		return getTree(key).getArray();
  	}
  	/*************************************************************
  	Recurses down into the HashTree stucture using each subsequent key in the
  	array of keys, and returns an array of keys of the HashTree object at the
  	end of the recursion.  If the HashTree represented a file system, this would
  	be like getting a list of all the files in a directory specified by
  	the treePath, relative from the current directory.
  	@param keys Array of keys used to recurse into HashTree structure.
  	@return Array of all keys found in end HashTree.
  	**************************************************************/
  	public Object[] getArray(Object[] treePath)
  	{
  		if(treePath != null)
  		{
  			return getArray(Arrays.asList(treePath));
  		}
  		else
  		{
  			return getArray();
  		}
  	}
  	/*************************************************************
  	Recurses down into the HashTree stucture using each subsequent key in the
  	treePath argument, and returns an array of keys of the HashTree object at the
  	end of the recursion.  If the HashTree represented a file system, this would
  	be like getting a list of all the files in a directory specified by
  	the treePath, relative from the current directory.
  	@param treePath List of keys used to recurse into HashTree structure.
  	@return Array of all keys found in end HashTree.
  	**************************************************************/
  	public Object[] getArray(Collection treePath)
  	{
  		HashTree tree = getTreePath(treePath);
  		return tree.getArray();
  	}
  	protected HashTree getTreePath(Collection treePath)
  	{
  		HashTree tree = this;
  		Iterator iter = treePath.iterator();
  		while(iter.hasNext())
  		{
  			Object temp = iter.next();
  			log.debug("Getting tree for " +temp);
  			tree = tree.getTree(temp);
  		}
  		return tree;
  	}
  	/**
  	 * Returns a hashcode for this HashTree.
  	 * @see java.lang.Object#hashCode()
  	 */
  	public int hashCode()
  	{
  		return data.hashCode() * 7;
  	}
  	/**
  	 * Compares all objects in the tree and verifies that the two trees contain
  	 * the same objects at the same tree levels.  Returns true if they do, false otherwise.
  	 * @see java.lang.Object#equals(Object)
  	 */
  	public boolean equals(Object o)
  	{
  		boolean flag = true;
  		if (o instanceof HashTree)
  		{
  			HashTree oo = (HashTree) o;
  			Iterator it = data.keySet().iterator();
  			while (it.hasNext())
  			{
  				if (!oo.containsKey(it.next()))
  				{
  					flag = false;
  					break;
  				}
  			}
  			if (flag)
  			{
  				it = data.keySet().iterator();
  				while (it.hasNext())
  				{
  					Object temp = it.next();
  					flag = get(temp).equals(oo.get(temp));
  					if (!flag)
  						break;
  				}
  			}
  		}
  		else
  			flag = false;
  		return flag;
  	}
  	/**
  	 * Returns a Set of all the keys in the top-level of this HashTree.
  	 * @see java.util.Map#keySet()
  	 */
  	public Set keySet()
  	{
  		return data.keySet();
  	}
  	/*****************************************************
  	Searches the HashTree structure for the given key.  If it finds the key,
  	it returns the HashTree mapped to the key.  If it finds nothing, it returns
  	null.
  	@param key Key to search for.
  	@return HashTree mapped to key, if found, otherwise <B>null</B>.
  	**********************************************************/
  	public HashTree search(Object key)
  	{
  		HashTree temp = null;
  		if (data.containsKey(key))
  			temp = (HashTree) data.get(key);
  		else
  		{
  			Iterator it = list().iterator();
  			while (it.hasNext())
  			{
  				if (temp == null)
  				{
  					temp = ((HashTree) it.next()).search(key);
  					break;
  				}
  				else
  					break;
  			}
  		}
  		return temp;
  	}
  	/**
  	 * Method readObject.
  	 * @param ois
  	 * @throws ClassNotFoundException
  	 * @throws IOException
  	 */
  	void readObject(ObjectInputStream ois)
  		throws ClassNotFoundException, IOException
  	{
  		ois.defaultReadObject();
  	}
  	void writeObject(ObjectOutputStream oos) throws IOException
  	{
  		oos.defaultWriteObject();
  	}
  	/**
  	 * Returns the number of top-level entries in the HashTree.
  	 * @see java.util.Map#size()
  	 */
  	public int size()
  	{
  		return data.size();
  	}
  		/****************************************
  	 * Allows any implementation of the HashTreeTraverser interface to 
  	 * easily traverse (depth-first) all the nodes of the HashTree.  The
  	 * Traverser implementation will be given notification of each node visited.
  	 *
  	 *@param visitor  !ToDo (Parameter description)
  	 * @see org.apache.jorphan.collections.HashTreeTraverser
  	 ***************************************/
  	public void traverse(HashTreeTraverser visitor)
  	{
  		Iterator iter = list().iterator();
  		while(iter.hasNext())
  		{
  			Object item = iter.next();
  			visitor.addNode(item, getTree(item));
  			getTree(item).traverseInto(visitor);
  		}
  	}
  
  	/**
  	 * The recursive method that accomplishes the tree-traversal and performs the 
  	 * callbacks to the HashTreeTraverser.
  	 * @param visitor
  	 */
  	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();
  		}
  		visitor.subtractNode();
  	}
  	
  	public String toString()
  	{
  		ConvertToString converter = new ConvertToString();
  		traverse(converter);
  		return converter.toString();
  	}
  	
  	protected java.util.Map data;
  	
  	private class ConvertToString implements HashTreeTraverser
  	{
  		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);
  		}
  		
  		public void subtractNode()
  		{
  			depth--;
  			string.append("\n"+getSpaces()+"}");
  		}
  		
  		public void processPath()
  		{
  		}
  		
  		public String toString()
  		{
  			return string.toString();
  		}
  		
  		private String getSpaces()
  		{
  			if(spaces.length() < depth * 2)
  			{
  				while(spaces.length() < depth * 2)
  				{
  					spaces.append("  ");
  				}
  			}
  			else if(spaces.length() > depth * 2)
  			{
  				spaces.setLength(depth * 2);
  			}
  			return spaces.toString();
  		}
  	}
  	
  	public static class Test extends TestCase
  	{
  		public Test(String name)
  		{
  			super(name);
  		}
  		
  		public void testAdd1() throws Exception
  		{
  			Collection treePath = Arrays.asList(new String[]{"1","2","3","4"});
  			HashTree tree = new HashTree();
  			log.debug("treePath = "+treePath);
  			tree.add(treePath,new String("value"));
  			log.debug("Now treePath = "+treePath);
  			log.debug(tree.toString());
  			assertEquals(1,tree.list(treePath).size());
  			assertEquals("value",tree.getArray(treePath)[0]);
  		}
  	}
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTreeTraverser.java
  
  Index: HashTreeTraverser.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.collections;
  
  /**
   * By implementing this interface, a class can easily traverse a HashTree object, and be
   * notified via callbacks of certain events.  There are three such events:
   * <ol><li>When a node is first encountered, the traverser's 
   * {@link addNode(Object,HashTree)} method
   *  is called.  It is handed the object at that node, and the entire sub-tree of the node.</li>
   * <li>When a leaf node is encountered, the traverser is notified that a full path has been
   * finished via the {@link processPath()} method.  It is the traversing class's responsibility
   * to know the path that has just finished (this can be done by keeping a simple stack of
   * all added nodes).</li>
   * <li>When a node is retraced, the traverser's {@link subtractNode()} is called.  Again, it is the
   * traverser's responsibility to know which node has been retraced.  </li>
   * </ol>
   * To summarize, as the traversal goes down a tree path, nodes are added.  When the
   * end of the path is reached, the {@link processPath()} call is sent.  As the traversal backs up,
   * nodes are subtracted.
   * <p>
   * The traversal is a depth-first traversal. 
   * @author Michael Stover (mstover1 at apache.org)
   * @see HashTree
   * @see SearchByClass
   */
  
  public interface HashTreeTraverser
  {
  
  	/**
  	 * The tree traverses itself depth-first, calling addNode for each object
  	 * it encounters as it goes.  This is a callback method, and should not be called except
  	 * by a HashTree during traversal.
  	 * 
  	 * @param node The node currently encountered
  	 * @param subTree The HashTree under the node encountered.
  	 */
  	public void addNode(Object node,HashTree subTree);
  
  	/**
  	 * Indicates traversal has moved up a step, and the visitor should remove the
  	 * top node from it's stack structure.  This is a callback method, and should not be called except
  	 * by a HashTree during traversal.
  	 */
  	public void subtractNode();
  
  	/**
  	 * Process path is called when a leaf is reached.  If a visitor wishes to generate
  	 * Lists of path elements to each leaf, it should keep a Stack data structure of
  	 * nodes passed to it with addNode, and removing top items for every subtractNode()
  	 * call.  This is a callback method, and should not be called except
  	 * by a HashTree during traversal.
  	 */
  	public void processPath();
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java
  
  Index: ListedHashTree.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.collections;
  import java.io.*;
  import java.util.*;
  
  /****************************************
   * ListedHashTree is a different implementation of the {@link HashTree} collection class. 
   * In the ListedHashTree,
   * the order in which values are added is preserved (not to be confused with
   * {@link SortedHashTree}, which sorts the order of the values using the compare()
   * function).  Any listing of nodes or iteration through the list of nodes of a
   * ListedHashTree will be given in the order in which the nodes were added to the
   * tree.
   *
   *@author    mstover1 at apache.org
   * @see HashTree
   ***************************************/
  public class ListedHashTree extends HashTree implements Serializable,Cloneable
  {
  
  	private List order;
  
  	public ListedHashTree()
  	{
  		data = new HashMap();
  		order = new LinkedList();
  	}
  	
  	public Object clone()
  	{
  		ListedHashTree newTree = new ListedHashTree();
  		newTree.data = (Map)((HashMap)data).clone();
  		newTree.order = (List)((LinkedList)order).clone();
  		return newTree;
  	}
  
  	public ListedHashTree(Object key)
  	{
  		data = new HashMap();
  		order = new LinkedList();
  		data.put(key, new ListedHashTree());
  		order.add(key);
  	}
  
  	public ListedHashTree(Collection keys)
  	{
  		data = new HashMap();
  		order = new LinkedList();
  		Iterator it = keys.iterator();
  		while(it.hasNext())
  		{
  			Object temp = it.next();
  			data.put(temp, new ListedHashTree());
  			order.add(temp);
  		}
  	}
  
  	public ListedHashTree(Object[] keys)
  	{
  		data = new HashMap();
  		order = new LinkedList();
  		for(int x = 0; x < keys.length; x++)
  		{
  			data.put(keys[x], new ListedHashTree());
  			order.add(keys[x]);
  		}
  	}
  
  	public void set(Object key, Object value)
  	{
  		if(!data.containsKey(key))
  		{
  			order.add(key);
  		}
  		super.set(key,value);
  	}
  
  	public void set(Object key, HashTree t)
  	{
  		if(!data.containsKey(key))
  		{
  			order.add(key);
  		}
  		super.set(key,t);
  	}
  
  	public void set(Object key, Object[] values)
  	{		
  		if(!data.containsKey(key))
  		{
  			order.add(key);
  		}
  		super.set(key,values);
  	}
  
  	public void set(Object key, Collection values)
  	{
  		if(!data.containsKey(key))
  		{
  			order.add(key);
  		}
  		super.set(key,values);
  	}
  
  	public void replace(Object currentKey, Object newKey)
  	{
  		HashTree tree = getTree(currentKey);
  		data.remove(currentKey);
  		data.put(newKey, tree);
  		order.set(order.indexOf(currentKey), newKey);
  	}
  	
  	public HashTree createNewTree()
  	{
  		return new ListedHashTree();
  	}
  	
  	public HashTree createNewTree(Object key)
  	{
  		return new ListedHashTree(key);
  	}
  	
  	public HashTree createNewTree(Collection values)
  	{
  		return new ListedHashTree(values);
  	}
  
  	public void add(Object key)
  	{
  		if(!data.containsKey(key))
  		{
  			data.put(key, createNewTree());
  			order.add(key);
  		}
  	}
  
  	public Collection list()
  	{
  		return order;
  	}
  
  	public Object remove(Object key)
  	{
  		order.remove(key);
  		return data.remove(key);
  	}
  
  	public Object[] getArray()
  	{
  		return order.toArray();
  	}
  
  	public int hashCode()
  	{
  		return data.hashCode() * 7 + 3;
  	}
  
  	public boolean equals(Object o)
  	{
  		boolean flag = true;
  		if(o instanceof ListedHashTree)
  		{
  			ListedHashTree oo = (ListedHashTree)o;
  			Iterator it = order.iterator();
  			Iterator it2 = oo.order.iterator();
  			if(size() != oo.size())
  			{
  				flag = false;
  			}
  			while(it.hasNext() && it2.hasNext() && flag)
  			{
  				if(!it.next().equals(it2.next()))
  				{
  					flag = false;
  				}
  			}
  			if(flag)
  			{
  				it = order.iterator();
  				while(it.hasNext() && flag)
  				{
  					Object temp = it.next();
  					flag = get(temp).equals(oo.get(temp));
  				}
  			}
  		}
  		else
  		{
  			flag = false;
  		}
  		return flag;
  	}
  
  	public Set keySet()
  	{
  		return data.keySet();
  	}
  
  	public int size()
  	{
  		return data.size();
  	}
  
  	void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException
  	{
  		ois.defaultReadObject();
  	}
  
  	void writeObject(ObjectOutputStream oos) throws IOException
  	{
  		oos.defaultWriteObject();
  	}
  
  	public static class Test extends junit.framework.TestCase
  	{
  		/****************************************
  		 * !ToDo (Constructor description)
  		 *
  		 *@param name  !ToDo (Parameter description)
  		 ***************************************/
  		public Test(String name)
  		{
  			super(name);
  		}
  
  		/****************************************
  		 * !ToDo
  		 *
  		 *@exception Exception  !ToDo (Exception description)
  		 ***************************************/
  		public void testAddObjectAndTree() throws Exception
  		{
  			ListedHashTree tree = new ListedHashTree("key");
  			ListedHashTree newTree = new ListedHashTree("value");
  			tree.add("key", newTree);
  			assertEquals(tree.list().size(), 1);
  			assertEquals("key",tree.getArray()[0]);
  			assertEquals(1,tree.getTree("key").list().size());
  			assertEquals(0,tree.getTree("key").getTree("value").size());
  			assertEquals(tree.getTree("key").getArray()[0], "value");
  			this.assertNotNull(tree.getTree("key").get("value"));
  		}
  	}
  
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/SearchByClass.java
  
  Index: SearchByClass.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  
  package org.apache.jorphan.collections;
  import java.util.*;
  /**
   * Useful for finding all nodes in the tree that represent objects of a particular
   * type.  For instance, if your tree contains all strings, and a few StringBuffer objects, 
   * you can use the SearchByClass traverser to find all the StringBuffer objects in your
   * tree.  
   * <p>
   * Usage is simple.  Given a {@link HashTree} object "tree", and a SearchByClass object:
   * <p>
   * <pre>
   * 	HashTree tree = new HashTree();
   * 	// ... tree gets filled with objects
   * 	SearchByClass searcher = new SearchByClass(StringBuffer.class);
   * 	tree.traverse(searcher);
   * 	Iterator iter = searcher.getSearchResults().iterator();
   * 	while(iter.hasNext())
   * 	{
   * 		StringBuffer foundNode = (StringBuffer)iter.next();
   * 		HashTree subTreeOfFoundNode = searcher.getSubTree(foundNode);
   * 		//  .... do something with node and subTree...
   * 	}
   * </pre>
   * @author Michael Stover (mstover1 at apache.org)
   * @see HashTree
   * @see HashTreeTraverser
   */
  public class SearchByClass implements HashTreeTraverser {
  	List objectsOfClass = new LinkedList();
  	Map subTrees = new HashMap();
  	Class searchClass = null;
  	/**
  	 * Creates an instance of SearchByClass.  However, without setting the Class to search
  	 * for, it will be a useless object.
  	 * @see java.lang.Object#Object()
  	 */
  	public SearchByClass() {}
  	/**
  	 * Creates an instance of SearchByClass, and sets the Class to be searched for.
  	 * @param searchClass
  	 */
  	public SearchByClass(Class searchClass) {
  		this.searchClass = searchClass;
  	}
  	/**
  	 * After traversing the HashTree, call this method to get a collection of the
  	 * nodes that were found.
  	 * @return Collection  All found nodes of the requested type
  	 */
  	public Collection getSearchResults() {
  		return objectsOfClass;
  	}
  	/**
  	 * Given a specific found node, this method will return the sub tree of that node.
  	 * @param root The node for which the sub tree is requested.
  	 * @return HashTree
  	 */
  	public HashTree getSubTree(Object root) {
  		return (HashTree)subTrees.get(root);
  	}
  	public void addNode(Object node, HashTree subTree) {
  		if (searchClass.isAssignableFrom(node.getClass())) {
  			objectsOfClass.add(node);
  			ListedHashTree tree = new ListedHashTree(node);
  			tree.set(node, subTree);
  			subTrees.put(node, tree);
  		}
  	}
  	public static class Test extends junit.framework.TestCase {
  		public Test(String name) {
  			super(name);
  		}
  		public void testSearch() throws Exception {
  			ListedHashTree tree = new ListedHashTree();
  			SearchByClass searcher = new SearchByClass(Integer.class);
  			String one = "one";
  			String two = "two";
  			Integer o = new Integer(1);
  			tree.add(one, o);
  			tree.getTree(one).add(o, two);
  			tree.traverse(searcher);
  			assertEquals(1, searcher.getSearchResults().size());
  		}
  	}
  	public void subtractNode() {}
  	public void processPath() {}
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/SortedHashTree.java
  
  Index: SortedHashTree.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  
  package org.apache.jorphan.collections;
  
  import java.io.Serializable;
  import java.util.Collection;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.TreeMap;
  
  import org.apache.log.Logger;
  
  import org.apache.jorphan.logging.LoggingManager;
  
  /**********************************************************************
   * SortedHashTree is a different implementation of the {@link HashTree} collection class. 
   * In the ListedHashTree,
   * The ordering of values in the tree is made explicit via the compare() function of objects
   * added to the tree.  This works in exactly the same fashion as it does for a SortedSet.
   *
   *@author    mstover1 at apache.org
   * @see HashTree
   * @see HashTreeTraverser
  ***********************************************************************/
  public class SortedHashTree extends HashTree implements Serializable
  {
  	
  	private static Logger log = LoggingManager.getLoggerFor("jorphan.collections");
  
    public SortedHashTree()
    {
  	 data = new TreeMap();
    }
  
    public SortedHashTree(Object key)
    {
  	 data = new TreeMap();
  	 data.put(key,new SortedHashTree());
    }
  
    public SortedHashTree(Collection keys)
    {
  	 data = new TreeMap();
  	 Iterator it = keys.iterator();
  	 while(it.hasNext())
  		data.put(it.next(),new SortedHashTree());
    }
  
    public SortedHashTree(Object[] keys)
    {
  	 data = new TreeMap();
  	 for(int x = 0;x < keys.length;x++)
  		data.put(keys[x],new SortedHashTree());
    }
    
    public HashTree createNewTree()
    {
    	return new SortedHashTree();
    }
    
    public HashTree createNewTree(Object key)
  	{
  		return new SortedHashTree(key);
  	}
  
  	public HashTree createNewTree(Collection values)
  	{
  		return new SortedHashTree(values);
  	}
  	
  	public Object clone()
  	{
  		HashTree newTree = new SortedHashTree();
  		newTree.data = (Map)((HashMap)data).clone();
  		return newTree;
  	}
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/ComponentUtil.java
  
  Index: ComponentUtil.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.gui;
  
  /**
   * Title:        Apache JMeter
   * Description:
   * Copyright:    Copyright (c) 2000
   * Company:      Apache Foundation
   * @author bo.regnlin@pc.nu (Bo Regnlin)
   * @version 1.0
   */
  
  import java.awt.Dimension;
  import java.awt.Component;
  
  /**
   * This class is a Util for awt Component and could be
   * used to place them in center of an other.
   *
   *
   * @author  <a href="mailto:bo.regnlin@pc.nu">Bo Regnlin</a>
  * @version 1.0
   */
  public class ComponentUtil
  {
    /**
  		 * Use this static method if you want to center
  	  * and set its proposion compared to the size of
  	  * the current users screen size.
  	  * Valid percent is between +-(0-100) minus is treated
  	  * as plus, bigger than 100 is always set to 100.
  		 *
  		 *@param  component The component you want to center and set
  size on.
  		 *@param  percentOfScreen The percent of the current screensize
  you want
  	  *        the component to be.
  		 */
    public static void centerComponentInWindow(Component component, int
  percentOfScreen)
    {
  	 if(percentOfScreen < 0)
  	 {
  		centerComponentInWindow(component, - percentOfScreen);
  		return;
  	 }
  	 if(percentOfScreen > 100)
  	 {
  		centerComponentInWindow(component, 100);
  		return;
  	 }
  	 double percent = percentOfScreen / 100.d;
  	 Dimension dimension = component.getToolkit().getScreenSize();
  	 component.setSize((int)(dimension.getWidth()*percent),
  							 (int)(dimension.getHeight()*percent));
  	 centerComponentInWindow(component);
    }
  
    /**
  		 * Use this static method if you want to center a component in
  Window.
  		 *
  		 *@param  component The component you want to center in window.
  		 */
    public static void centerComponentInWindow(Component component)
    {
  	 Dimension dimension = component.getToolkit().getScreenSize();
  
  	 component.setLocation((int)((dimension.getWidth()-component.getWidth())/2),
  								  (int)((dimension.getHeight()-component.getHeight
  ())/2));
  	 component.validate();
  	 component.repaint();
    }
  
    /**
  		 * Use this static method if you want to center
  	  * a component over an other component.
  		 *
  		 *@param  parent The component you want to use to place it on.
  		 *@param  toBeCentered The component you want to center.
  		 */
    public static void centerComponentInComponent(Component parent, Component
  toBeCentered)
    {
  	 toBeCentered.setLocation((int)parent.getX() + (int)((parent.getWidth()-
  toBeCentered.getWidth())/2),
  									 (int)parent.getY() + (int)((parent.getHeight()-
  toBeCentered.getHeight())/2));
  
  	 toBeCentered.validate();
  	 toBeCentered.repaint();
    }
  
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/JLabeledChoice.java
  
  Index: JLabeledChoice.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.gui;
  
  import java.util.*;
  import javax.swing.*;
  import java.awt.event.*;
  import java.awt.Component;
  import java.awt.Insets;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.ChangeEvent;
  import java.util.*;
  import javax.swing.plaf.basic.BasicComboBoxEditor;
  
  
  public class JLabeledChoice extends JPanel implements JLabeledField
  {
  	 private JLabel mLabel = new JLabel();
  	 private JComboBox choiceList;
  	 private ArrayList mChangeListeners = new ArrayList(3);  // Maybe move to vector if MT problems occur
  	 private JButton delete,add;
  
  	 /**
  	  * Default constructor, The label and the Text field are left empty.
  	  */
  	 public JLabeledChoice()
  	 {
  		  super();
  		  choiceList = new JComboBox();
  		  init();
  	 }
  
  	 public List getComponentList()
  	 {
  		List comps = new LinkedList();
  		comps.add(mLabel);
  		comps.add(choiceList);
  		return comps;
  	 }
  
  	 /**
  	  * Constructs a new component with the label displaying the
  	  * passed text.
  	  *
  	  * @param pLabel The text to in the label.
  	  */
  	 public JLabeledChoice(String pLabel,String[] items)
  	 {
  		  super();
  		  mLabel.setText(pLabel);
  		  choiceList = new JComboBox(items);
  		choiceList.setEditable(false);
  		  init();
  	 }
  
  	 public JLabeledChoice(String pLabel,String[] items,boolean editable)
  	 {
  		super();
  		  mLabel.setText(pLabel);
  		  choiceList = new JComboBox(items);
  			choiceList.setEditable(editable);
  		  init();
  	 }
  
  	 /**
  	  * Initialises all of the components on this panel.
  	  */
  	 private void init()
  	 {
  		/*if(choiceList.isEditable())
  		{
  			choiceList.addActionListener(new ComboListener());
  		}*/
  		choiceList.setBorder(BorderFactory.createLoweredBevelBorder());
  		  // Register the handler for focus listening. This handler will
  		  // only notify the registered when the text changes from when
  		  // the focus is gained to when it is lost.
  		  choiceList.addItemListener(new ItemListener(){
  
  				/**
  				 * Callback method when the focus to the Text Field component
  				 * is lost.
  				 *
  				 * @param pFocusEvent The focus event that occured.
  				 */
  				public void itemStateChanged(ItemEvent e)
  				{
  					if(e.getStateChange() == e.SELECTED)
  					{
  						notifyChangeListeners();
  					}
  				}
  		  });
  
  		  // Add the sub components
  		  this.add(mLabel);
  		  this.add(choiceList);
  		  if(choiceList.isEditable())
  		  {
  			add = new JButton("Add");
  			add.setMargin(new Insets(1,1,1,1));
  			add.addActionListener(new AddListener());
  			this.add(add);
  			delete = new JButton("Del");
  			delete.setMargin(new Insets(1,1,1,1));
  			delete.addActionListener(new DeleteListener());
  			this.add(delete);
  		  }
  
  	 }
  
  	 /**
  	  * Set the text displayed in the label.
  	  *
  	  * @param pLabel The new label text.
  	  */
  	 public void setLabel(String pLabel)
  	 {
  		  mLabel.setText(pLabel);
  	 }
  
  	 /**
  	  * Set the text displayed in the Text Field.
  	  *
  	  * @param pText The new text to display in the text field.
  	  */
  	 public void setText(String pText)
  	 {
  		  choiceList.setSelectedItem(pText);
  	 }
  
  	 /**
  	  * Returns the text in the Text Field.
  	  *
  	  * @return The text in the Text Field.
  	  */
  	 public String getText()
  	 {
  		  return (String)choiceList.getSelectedItem();
  	 }
  
  	 public Object[] getSelectedItems()
  	 {
  		return choiceList.getSelectedObjects();
  	 }
  
  	 public String[] getItems()
  	 {
  		String[] items = new String[choiceList.getItemCount()];
  		for (int i = 0; i < items.length; i++)
  		{
  			items[i] = (String)choiceList.getItemAt(i);
  		}
  		return items;
  	 }
  
  	 /**
  	  * Returns the text of the label.
  	  *
  	  * @return The text of the label.
  	  */
  	 public String getLabel()
  	 {
  		  return mLabel.getText();
  	 }
  
  	 /**
  	  * Adds a change listener, that will be notified when the text in the
  	  * text field is changed. The ChangeEvent that will be passed
  	  * to registered listeners will contain this object as the source, allowing
  	  * the new text to be extracted using the {@link #getText() getText} method.
  	  *
  	  * @param pChangeListener The listener to add
  	  */
  	 public void addChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.add(pChangeListener);
  	 }
  
  	 /**
  	  * Removes a change listener.
  	  *
  	  * @param pChangeListener The change listener to remove.
  	  */
  	 public void removeChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.remove(pChangeListener);
  	 }
  
  	 /**
  	  * Notify all registered change listeners that the
  	  * text in the text field has changed.
  	  */
  	 private void notifyChangeListeners()
  	 {
  		  ChangeEvent ce = new ChangeEvent(this);
  		  for (int index = 0; index < mChangeListeners.size(); index ++)
  		  {
  				((ChangeListener)mChangeListeners.get(index)).stateChanged(ce);
  		  }
  	 }
  
  	 private class AddListener implements ActionListener
  	 {
  
  		public void actionPerformed(ActionEvent e)
  		{
  			Object item = choiceList.getSelectedItem();
  			int index = choiceList.getSelectedIndex();
  			if(!item.equals(choiceList.getItemAt(index)))
  			{
  				choiceList.addItem(item);
  			}
  			choiceList.setSelectedItem(item);
  			notifyChangeListeners();
  		}
  	 }
  
  
  	 private class DeleteListener implements ActionListener
  	 {
  
  		public void actionPerformed(ActionEvent e)
  		{
  			if(choiceList.getItemCount() > 1)
  			{
  				choiceList.removeItemAt(choiceList.getSelectedIndex());
  				notifyChangeListeners();
  			}
  		}
  	 }
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/JLabeledField.java
  
  Index: JLabeledField.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
   package org.apache.jorphan.gui;
  
  import javax.swing.event.*;
  import java.util.*;
  
  /**
   * Title:
   * Description:
   * Copyright:    Copyright (c) 2000
   * Company:
   * @author
   * @version 1.0
   */
  
  public interface JLabeledField
  {
  
  	public String getText();
  	public void setText(String text);
  	public void setLabel(String pLabel);
  	public void addChangeListener(ChangeListener pChangeListener);
  	public List getComponentList();
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/JLabeledPasswordField.java
  
  Index: JLabeledPasswordField.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
   package org.apache.jorphan.gui;
  
  import javax.swing.JPasswordField;
  
  /**
   * Title:
   * Description:
   * Copyright:    Copyright (c) 2000
   * Company:
   * @author
   * @version 1.0
   */
  
  public class JLabeledPasswordField extends JLabeledTextField
  {
  
  	public JLabeledPasswordField()
  	{
  		super();
  	}
  
  	/**
  	  * Constructs a new component with the label displaying the
  	  * passed text.
  	  *
  	  * @param pLabel The text to in the label.
  	  */
  	 public JLabeledPasswordField(String pLabel)
  	 {
  		  super(pLabel);
  	 }
  
  	 protected void createTextField()
  	 {
  		mTextField = new JPasswordField(30);
  	 }
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/JLabeledTextArea.java
  
  Index: JLabeledTextArea.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
   package org.apache.jorphan.gui;
  
  import javax.swing.*;
  import java.util.*;
  import javax.swing.text.Document;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.ChangeEvent;
  import java.awt.BorderLayout;
  import java.util.ArrayList;
  import java.awt.event.FocusListener;
  import java.awt.event.FocusEvent;
  
  /**
   * A Helper component that wraps a JTextField with a label into
   * a JPanel (this). This component also has an efficient event handling
   * mechanism for handling the text changing in the Text Field. The registered
   * change listeners are only called when the text has changed.
   *
   * @author S.Coleman
   */
  public class JLabeledTextArea extends JPanel implements JLabeledField
  {
  	 private JLabel mLabel = new JLabel();
  	 private JTextArea mTextArea = new JTextArea(4,40);
  	 private ArrayList mChangeListeners = new ArrayList(3);  // Maybe move to vector if MT problems occur
  
  	 /**
  	  * Default constructor, The label and the Text field are left empty.
  	  */
  	 public JLabeledTextArea()
  	 {
  		  super();
  		  init();
  	 }
  
  	 public List getComponentList()
  	 {
  		List comps = new LinkedList();
  		comps.add(mLabel);
  		comps.add(mTextArea);
  		return comps;
  	 }
  
  	 /**
  	  * Constructs a new component with the label displaying the
  	  * passed text.
  	  *
  	  * @param pLabel The text to in the label.
  	  */
  	 public JLabeledTextArea(String pLabel,Document docModel)
  	 {
  		  super();
  		  mLabel.setText(pLabel);
  		  if(docModel != null)
  		  {
  			setDocumentModel(docModel);
  		  }
  		  init();
  	 }
  
  	 public void setDocumentModel(Document docModel)
  	 {
  		mTextArea.setDocument(docModel);
  	 }
  
  	 /**
  	  * Initialises all of the components on this panel.
  	  */
  	 private void init()
  	 {
  		this.setLayout(new BorderLayout());
  		mTextArea.setLineWrap(true);
  		mTextArea.setWrapStyleWord(true);
  		  // Register the handler for focus listening. This handler will
  		  // only notify the registered when the text changes from when
  		  // the focus is gained to when it is lost.
  		  mTextArea.addFocusListener(new FocusListener(){
  
  				String oldValue = ""; // A temporary cache.
  
  				/**
  				 * Callback method when the focus to the Text Field component
  				 * is lost.
  				 *
  				 * @param pFocusEvent The focus event that occured.
  				 */
  				public void focusLost(FocusEvent pFocusEvent)
  				{
  					 // Compare if the value has changed, since we received focus.
  					 if (oldValue.equals(mTextArea.getText()) == false)
  					 {
  						  notifyChangeListeners();
  					 }
  				}
  
  				/**
  				 * Catch what the value was when focus was gained.
  				 */
  				public void focusGained(FocusEvent pFocusEvent)
  				{
  					 oldValue = mTextArea.getText();
  				}
  		  });
  		  mTextArea.setBorder(BorderFactory.createLoweredBevelBorder());
  
  		  // Add the sub components
  		  this.add(mLabel,BorderLayout.NORTH);
  		  this.add(mTextArea,BorderLayout.CENTER);
  	 }
  
  	 /**
  	  * Set the text displayed in the label.
  	  *
  	  * @param pLabel The new label text.
  	  */
  	 public void setLabel(String pLabel)
  	 {
  		  mLabel.setText(pLabel);
  	 }
  
  	 /**
  	  * Set the text displayed in the Text Field.
  	  *
  	  * @param pText The new text to display in the text field.
  	  */
  	 public void setText(String pText)
  	 {
  		  mTextArea.setText(pText);
  	 }
  
  	 /**
  	  * Returns the text in the Text Field.
  	  *
  	  * @return The text in the Text Field.
  	  */
  	 public String getText()
  	 {
  		  return mTextArea.getText();
  	 }
  
  	 /**
  	  * Returns the text of the label.
  	  *
  	  * @return The text of the label.
  	  */
  	 public String getLabel()
  	 {
  		  return mLabel.getText();
  	 }
  
  	 /**
  	  * Adds a change listener, that will be notified when the text in the
  	  * text field is changed. The ChangeEvent that will be passed
  	  * to registered listeners will contain this object as the source, allowing
  	  * the new text to be extracted using the {@link #getText() getText} method.
  	  *
  	  * @param pChangeListener The listener to add
  	  */
  	 public void addChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.add(pChangeListener);
  	 }
  
  	 /**
  	  * Removes a change listener.
  	  *
  	  * @param pChangeListener The change listener to remove.
  	  */
  	 public void removeChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.remove(pChangeListener);
  	 }
  
  	 /**
  	  * Notify all registered change listeners that the
  	  * text in the text field has changed.
  	  */
  	 private void notifyChangeListeners()
  	 {
  		  ChangeEvent ce = new ChangeEvent(this);
  		  for (int index = 0; index < mChangeListeners.size(); index ++)
  		  {
  				((ChangeListener)mChangeListeners.get(index)).stateChanged(ce);
  		  }
  	 }
  
  
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/JLabeledTextField.java
  
  Index: JLabeledTextField.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.gui;
  
  import javax.swing.*;
  import java.util.*;
  import javax.swing.event.ChangeListener;
  import javax.swing.event.ChangeEvent;
  import java.util.ArrayList;
  import java.awt.event.FocusListener;
  import java.awt.event.FocusEvent;
  import java.awt.FlowLayout;
  
  /**
   * A Helper component that wraps a JTextField with a label into
   * a JPanel (this). This component also has an efficient event handling
   * mechanism for handling the text changing in the Text Field. The registered
   * change listeners are only called when the text has changed.
   *
   * @author S.Coleman
   */
  public class JLabeledTextField extends JPanel implements JLabeledField
  {
  	 private JLabel mLabel = new JLabel();
  	 protected JTextField mTextField;
  	 private ArrayList mChangeListeners = new ArrayList(3);  // Maybe move to vector if MT problems occur
  
  	 /**
  	  * Default constructor, The label and the Text field are left empty.
  	  */
  	 public JLabeledTextField()
  	 {
  		  super();
  		  createTextField(20);
  		  init();
  	 }
  
  	 public List getComponentList()
  	 {
  		List comps = new LinkedList();
  		comps.add(mLabel);
  		comps.add(mTextField);
  		return comps;
  	 }
  
  	 protected void createTextField(int size)
  	 {
  		mTextField = new JTextField(size);
  	 }
  
  	 /**
  	  * Constructs a new component with the label displaying the
  	  * passed text.
  	  *
  	  * @param pLabel The text to in the label.
  	  */
  	 public JLabeledTextField(String pLabel)
  	 {
  		  super();
  		  createTextField(20);
  		  mLabel.setText(pLabel);
  		  init();
  	 }
  	 
  	 public JLabeledTextField(String pLabel,int size)
  	 {
  		  super();
  		  createTextField(size);
  		  mLabel.setText(pLabel);
  		  init();
  	 }
  
  	 public void setEnabled(boolean enable)
  	 {
  		super.setEnabled(enable);
  		mTextField.setEnabled(enable);
  	 }
  
  	 /**
  	  * Initialises all of the components on this panel.
  	  */
  	 private void init()
  	 {
  		this.setLayout(new FlowLayout(FlowLayout.LEFT));
  		  // Register the handler for focus listening. This handler will
  		  // only notify the registered when the text changes from when
  		  // the focus is gained to when it is lost.
  		  mTextField.addFocusListener(new FocusListener(){
  
  				String oldValue = ""; // A temporary cache.
  
  				/**
  				 * Callback method when the focus to the Text Field component
  				 * is lost.
  				 *
  				 * @param pFocusEvent The focus event that occured.
  				 */
  				public void focusLost(FocusEvent pFocusEvent)
  				{
  					 // Compare if the value has changed, since we received focus.
  					 if (oldValue.equals(mTextField.getText()) == false)
  					 {
  						  notifyChangeListeners();
  					 }
  				}
  
  				/**
  				 * Catch what the value was when focus was gained.
  				 */
  				public void focusGained(FocusEvent pFocusEvent)
  				{
  					 oldValue = mTextField.getText();
  				}
  		  });
  
  		  // Add the sub components
  		  this.add(mLabel);
  		  this.add(mTextField);
  	 }
  
  	 /**
  	  * Set the text displayed in the label.
  	  *
  	  * @param pLabel The new label text.
  	  */
  	 public void setLabel(String pLabel)
  	 {
  		  mLabel.setText(pLabel);
  	 }
  
  	 /**
  	  * Set the text displayed in the Text Field.
  	  *
  	  * @param pText The new text to display in the text field.
  	  */
  	 public void setText(String pText)
  	 {
  		  mTextField.setText(pText);
  	 }
  
  	 /**
  	  * Returns the text in the Text Field.
  	  *
  	  * @return The text in the Text Field.
  	  */
  	 public String getText()
  	 {
  		  return mTextField.getText();
  	 }
  
  	 /**
  	  * Returns the text of the label.
  	  *
  	  * @return The text of the label.
  	  */
  	 public String getLabel()
  	 {
  		  return mLabel.getText();
  	 }
  
  	 /**
  	  * Adds a change listener, that will be notified when the text in the
  	  * text field is changed. The ChangeEvent that will be passed
  	  * to registered listeners will contain this object as the source, allowing
  	  * the new text to be extracted using the {@link #getText() getText} method.
  	  *
  	  * @param pChangeListener The listener to add
  	  */
  	 public void addChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.add(pChangeListener);
  	 }
  
  	 /**
  	  * Removes a change listener.
  	  *
  	  * @param pChangeListener The change listener to remove.
  	  */
  	 public void removeChangeListener(ChangeListener pChangeListener)
  	 {
  		  mChangeListeners.remove(pChangeListener);
  	 }
  
  	 /**
  	  * Notify all registered change listeners that the
  	  * text in the text field has changed.
  	  */
  	 protected void notifyChangeListeners()
  	 {
  		  ChangeEvent ce = new ChangeEvent(this);
  		  for (int index = 0; index < mChangeListeners.size(); index ++)
  		  {
  				((ChangeListener)mChangeListeners.get(index)).stateChanged(ce);
  		  }
  	 }
  
  
  }
  
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/gui/layout/VerticalLayout.java
  
  Index: VerticalLayout.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
   package org.apache.jorphan.gui.layout;
  import java.awt.Component;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.Insets;
  import java.awt.LayoutManager;
  import java.io.Serializable;
  import java.util.Hashtable;
  /****************************************
   * A vertical layout manager similar to java.awt.FlowLayout. Like FlowLayout
   * components do not expand to fill available space except when the horizontal
   * alignment is <code>BOTH</code> in which case components are stretched
   * horizontally. Unlike FlowLayout, components will not wrap to form another
   * column if there isn't enough space vertically. VerticalLayout can optionally
   * anchor components to the top or bottom of the display area or center them
   * between the top and bottom. Revision date 04 April 1999
   *
   *@author    Colin Mummery e-mail:equitysoft@iname.com
   *      Homepage:www.kagi.com/equitysoft - Based on 'FlexLayout' in Java class
   *      libraries Vol 2 Chan/Lee Addison-Wesley 1998
   *@created   $Date: 2002/10/17 19:47:18 $
   *@version   $Revision: 1.1 $
   ***************************************/
  
  public class VerticalLayout implements LayoutManager, Serializable
  {
  
  	/****************************************
  	 * The horizontal alignment constant that designates centering. Also used to
  	 * designate center anchoring.
  	 ***************************************/
  	public final static int CENTER = 0;
  	/****************************************
  	 * The horizontal alignment constant that designates right justification.
  	 ***************************************/
  	public final static int RIGHT = 1;
  	/****************************************
  	 * The horizontal alignment constant that designates left justification.
  	 ***************************************/
  	public final static int LEFT = 2;
  	/****************************************
  	 * The horizontal alignment constant that designates stretching the component
  	 * horizontally.
  	 ***************************************/
  	public final static int BOTH = 3;
  
  	/****************************************
  	 * The anchoring constant that designates anchoring to the top of the display
  	 * area
  	 ***************************************/
  	public final static int TOP = 1;
  	/****************************************
  	 * The anchoring constant that designates anchoring to the bottom of the
  	 * display area
  	 ***************************************/
  	public final static int BOTTOM = 2;
  	private int vgap;//the vertical vgap between components...defaults to 5
  	private int alignment;//LEFT, RIGHT, CENTER or BOTH...how the components are justified
  	private int anchor;//TOP, BOTTOM or CENTER ...where are the components positioned in an overlarge space
  	private Hashtable comps;
  
  //Constructors
  	/****************************************
  	 * Constructs an instance of VerticalLayout with a vertical vgap of 5 pixels,
  	 * horizontal centering and anchored to the top of the display area.
  	 ***************************************/
  	public VerticalLayout()
  	{
  		this(5, CENTER, TOP);
  	}
  
  	/****************************************
  	 * Constructs a VerticalLayout instance with horizontal centering, anchored to
  	 * the top with the specified vgap
  	 *
  	 *@param vgap  An int value indicating the vertical seperation of the
  	 *      components
  	 ***************************************/
  	public VerticalLayout(int vgap)
  	{
  		this(vgap, CENTER, TOP);
  	}
  
  	/****************************************
  	 * Constructs a VerticalLayout instance anchored to the top with the specified
  	 * vgap and horizontal alignment
  	 *
  	 *@param vgap       An int value indicating the vertical seperation of the
  	 *      components
  	 *@param alignment  An int value which is one of <code>RIGHT, LEFT, CENTER, BOTH</code>
  	 *      for the horizontal alignment.
  	 ***************************************/
  	public VerticalLayout(int vgap, int alignment)
  	{
  		this(vgap, alignment, TOP);
  	}
  
  	/****************************************
  	 * Constructs a VerticalLayout instance with the specified vgap, horizontal
  	 * alignment and anchoring
  	 *
  	 *@param vgap       An int value indicating the vertical seperation of the
  	 *      components
  	 *@param alignment  An int value which is one of <code>RIGHT, LEFT, CENTER, BOTH</code>
  	 *      for the horizontal alignment.
  	 *@param anchor     An int value which is one of <code>TOP, BOTTOM, CENTER</code>
  	 *      indicating where the components are to appear if the display area
  	 *      exceeds the minimum necessary.
  	 ***************************************/
  	public VerticalLayout(int vgap, int alignment, int anchor)
  	{
  		this.vgap = vgap;
  		this.alignment = alignment;
  		this.anchor = anchor;
  	}
  //-----------------------------------------------------------------------------
  	/****************************************
  	 * Lays out the container.
  	 *
  	 *@param parent  !ToDo (Parameter description)
  	 ***************************************/
  	public void layoutContainer(Container parent)
  	{
  		Insets insets = parent.getInsets();
  		Dimension dim = layoutSize(parent, false);
  		synchronized(parent.getTreeLock())
  		{
  			int n = parent.getComponentCount();
  			Dimension pd = parent.getSize();
  			int y = 0;
  //work out the total size
  			for(int i = 0; i < n; i++)
  			{
  				Component c = parent.getComponent(i);
  				Dimension d = c.getPreferredSize();
  				y += d.height + vgap;
  			}
  			y -= vgap;//otherwise there's a vgap too many
  //Work out the anchor paint
  			if(anchor == TOP)
  			{
  				y = insets.top;
  			}
  			else if(anchor == CENTER)
  			{
  				y = (pd.height - y) / 2;
  			}
  			else
  			{
  				y = pd.height - y - insets.bottom;
  			}
  //do layout
  			for(int i = 0; i < n; i++)
  			{
  				Component c = parent.getComponent(i);
  				Dimension d = c.getPreferredSize();
  				int x = insets.left;
  				int wid = d.width;
  				if(alignment == CENTER)
  				{
  					x = (pd.width - d.width) / 2;
  				}
  				else if(alignment == RIGHT)
  				{
  					x = pd.width - d.width - insets.right;
  				}
  				else if(alignment == BOTH)
  				{
  					wid = pd.width - insets.left - insets.right;
  				}
  				c.setBounds(x, y, wid, d.height);
  				y += d.height + vgap;
  			}
  		}
  	}
  //-----------------------------------------------------------------------------
  	/****************************************
  	 * !ToDo (Method description)
  	 *
  	 *@param parent  !ToDo (Parameter description)
  	 *@return        !ToDo (Return description)
  	 ***************************************/
  	public Dimension minimumLayoutSize(Container parent)
  	{
  		return layoutSize(parent, true);
  	}
  //-----------------------------------------------------------------------------
  	/****************************************
  	 * !ToDo (Method description)
  	 *
  	 *@param parent  !ToDo (Parameter description)
  	 *@return        !ToDo (Return description)
  	 ***************************************/
  	public Dimension preferredLayoutSize(Container parent)
  	{
  		return layoutSize(parent, false);
  	}
  //----------------------------------------------------------------------------
  	/****************************************
  	 * Not used by this class
  	 *
  	 *@param name  !ToDo
  	 *@param comp  !ToDo
  	 ***************************************/
  	public void addLayoutComponent(String name, Component comp) { }
  //-----------------------------------------------------------------------------
  	/****************************************
  	 * Not used by this class
  	 *
  	 *@param comp  !ToDo (Parameter description)
  	 ***************************************/
  	public void removeLayoutComponent(Component comp) { }
  //-----------------------------------------------------------------------------
  	/****************************************
  	 * !ToDo (Method description)
  	 *
  	 *@return   !ToDo (Return description)
  	 ***************************************/
  	public String toString()
  	{
  		return getClass().getName() + "[vgap=" + vgap + " align=" + alignment + " anchor=" + anchor + "]";
  	}
  //----------------------------------------------------------------------------
  	private Dimension layoutSize(Container parent, boolean minimum)
  	{
  		Dimension dim = new Dimension(0, 0);
  		Dimension d;
  		synchronized(parent.getTreeLock())
  		{
  			int n = parent.getComponentCount();
  			for(int i = 0; i < n; i++)
  			{
  				Component c = parent.getComponent(i);
  				if(c.isVisible())
  				{
  					d = minimum ? c.getMinimumSize() : c.getPreferredSize();
  					dim.width = Math.max(dim.width, d.width);
  					dim.height += d.height;
  					if(i > 0)
  					{
  						dim.height += vgap;
  					}
  				}
  			}
  		}
  		Insets insets = parent.getInsets();
  		dim.width += insets.left + insets.right;
  		dim.height += insets.top + insets.bottom + vgap + vgap;
  		return dim;
  	}
  }
  
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/io/TextFile.java
  
  Index: TextFile.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.io;
  
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.Writer;
  
  import org.apache.log.Logger;
  
  import org.apache.jorphan.logging.LoggingManager;
  
  /************************************************************
   *  !ToDo (Class description)
   *
   *@author     Giles Cope (gilescope at users.sourceforge.net), Michael Stover (mstover1 at apache.org)
   ***********************************************************/
  public class TextFile extends File
  {
  	
  	transient private static Logger log = LoggingManager.getLoggerFor(
  			"jorphan.io");
  	/************************************************************
  	 *  !ToDo (Constructor description)
  	 *
  	 *@param  filename  !ToDo (Parameter description)
  	 ***********************************************************/
  	public TextFile(File filename)
  	{
  		super(filename.toString());
  	}	
  	
  	public TextFile()
  	{
  		super("");
  	}
  
  	/************************************************************
  	 *  !ToDo (Constructor description)
  	 *
  	 *@param  filename  !ToDo (Parameter description)
  	 ***********************************************************/
  	public TextFile(String filename)
  	{
  		super(filename);
  	}
  
  	/************************************************************
  	 *  !ToDo (Method description)
  	 *
  	 *@param  body  !ToDo (Parameter description)
  	 ***********************************************************/
  	public void setText(String body)
  	{
  		try
  		{
  			Writer writer = new FileWriter(this);
  			writer.write(body);
  			writer.flush();
  			writer.close();
  		}
  		catch (IOException ioe)
  		{
  			log.error("",ioe);
  		}
  	}
  
  	/************************************************************
  	 *  !ToDoo (Method description)
  	 *
  	 *@return    !ToDo (Return description)
  	 ***********************************************************/
  	public String getText()
  	{
  		String lineEnd = System.getProperty("line.separator");
  		StringBuffer sb = new StringBuffer();
  		try
  		{
  			BufferedReader br = new BufferedReader(new FileReader(this));
  			String line = "NOTNULL";
  			while (line != null)
  			{
  				line = br.readLine();
  				if (line != null)
  				{
  					sb.append(line + lineEnd);
  				}
  			}
  		}
  		catch (IOException ioe)
  		{
  			log.error("",ioe);
  		}
  		return sb.toString();
  	}
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/logging/LoggingManager.java
  
  Index: LoggingManager.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  
  package org.apache.jorphan.logging;
  import java.io.FileWriter;
  import java.io.PrintWriter;
  import java.io.Writer;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  
  import org.apache.log.Hierarchy;
  import org.apache.log.LogTarget;
  import org.apache.log.Logger;
  import org.apache.log.Priority;
  import org.apache.log.format.PatternFormatter;
  import org.apache.log.output.NullOutputLogTarget;
  import org.apache.log.output.io.WriterTarget;
  /**
   * @author Michael Stover (mstover1 at apache.org)
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class LoggingManager
  {
  	private static PatternFormatter format =
  		new PatternFormatter("%{time:MM/dd/yyyy h:mm:ss a} %{priority} - %{category}: %{message} %{throwable}\n");
  	private static LogTarget target;
  	public final static String LOG_FILE = "log_file";
  	public final static String LOG_PRIORITY = "log_level";
  	private static LoggingManager logManager = null;
  	
  	static
  	{
  		Map initProps = new HashMap();
  		initProps.put("log_level.jorphan","ERROR");
  		initializeLogging(initProps);
  	}
  	
  	private LoggingManager()
  	{
  		target = new NullOutputLogTarget();
  	}
  	public static LoggingManager getLogManager()
  	{
  		return logManager;
  	}
  	public static void initializeLogging(Map properties)
  	{
  		if (logManager == null)
  		{
  			logManager = new LoggingManager();
  		}
  		setLoggingLevels(properties,(String)properties.get(LOG_FILE));
  	}
  	private static void setLoggingLevels(Map appProperties,String logFile)
  	{
  		WriterTarget tempTarget = null;
  		try
  		{
  			tempTarget = new WriterTarget(new FileWriter(logFile),format);
  		}
  		catch(Exception e){
  			target = new WriterTarget(new PrintWriter(System.out),format);
  		}
  		Iterator names = appProperties.keySet().iterator();
  		while (names.hasNext())
  		{
  			String prop = (String) names.next();
  			if (prop.startsWith(LOG_PRIORITY))
  			{
  				String name = prop.substring(LOG_PRIORITY.length() + 1);
  				logManager.setPriority(
  					Priority.getPriorityForName((String) appProperties.get(prop)),
  					name);
  				if(tempTarget != null)
  				{
  					logManager.setTarget(tempTarget,name);
  				}
  				else
  				{
  					logManager.setTarget(target,name);
  				}
  			}
  		}
  	}
  	public static Logger getLoggerFor(String category)
  	{
  		return Hierarchy.getDefaultHierarchy().getLoggerFor(category);
  	}
  	public void setPriority(Priority p, String category)
  	{
  		Hierarchy.getDefaultHierarchy().getLoggerFor(category).setPriority(p);
  	}
  	
  	public void setTarget(LogTarget target,String category)
  	{
  		Logger logger = getLoggerFor(category);
  		logger.setLogTargets(new LogTarget[]{target});
  	}
  	public void setTarget(Writer targetFile)
  	{
  		if (target == null)
  		{
  			target = new WriterTarget(targetFile, format);
  			Hierarchy.getDefaultHierarchy().setDefaultLogTarget(
  				new WriterTarget(targetFile, format));
  		}
  		else
  		{
  			if(target instanceof WriterTarget)
  			{
  				((WriterTarget)target).close();
  			}
  			target = new WriterTarget(targetFile, format);
  			Hierarchy.getDefaultHierarchy().setDefaultLogTarget(
  				new WriterTarget(targetFile, format));
  		}
  	}
  }
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java
  
  Index: ClassFinder.java
  ===================================================================
  /****************************************************************
  
  Copyright (C) 2002  Michael Stover
  
  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  USA.
  
  Michael Stover can be reached via email at mstover1 at apache.org.
  
  This class first appeared in the Apache JMeter project.  As such, it must retain
  the Apache license and copyright notice.  Please see the file, "apache_notice.txt" for
  that information.
  
  ******************************************************************/
  package org.apache.jorphan.reflect;
  import java.io.File;
  import java.io.FilenameFilter;
  import java.io.IOException;
  import java.lang.reflect.Modifier;
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  import java.util.StringTokenizer;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipFile;
  
  import org.apache.log.Logger;
  
  import org.apache.jorphan.logging.LoggingManager;
  /************************************************************
   *  This class finds classes that implement one or more specified interfaces.
   *  
   *
   *@author     Burt Beckwith, Michael Stover (mstover1 at apache.org)
   ******************************************/
  public class ClassFinder
  {
  	transient private static Logger log =
  		LoggingManager.getLoggerFor("jorphan.reflect");
  	private ClassFinder()
  	{
  	}
  	// static only
  	/************************************************************	
  	 *  Convenience method for <code>findClassesThatExtend(Class[], boolean)</code>	
  	 *  with the option to include inner classes in the search set to false	
  	 *	
  	 *@param  superClasses                Description of Parameter	
  	 *@return                             ArrayList containing discovered classes.	
  	 *@exception  IOException	
  	 *@exception  ClassNotFoundException	
  	 ***********************************************************/
  	public static List findClassesThatExtend(
  		String[] paths,
  		Class[] superClasses)
  		throws IOException, ClassNotFoundException
  	{
  		return findClassesThatExtend(paths, superClasses, false);
  	}
  	/************************************************************	
  	 *  Find classes in the provided path(s)/jar(s) that extend the class(es).	
  	 *	
  	 *@param  superClasses                Description of Parameter	
  	 *@param  innerClasses                indicate whether to include inner classes	
  	 *      in the search	
  	 *@return                             ArrayList containing discovered classes.	
  	 *@exception  IOException
  	 *@exception  ClassNotFoundException	
  	 ***********************************************************/
  	private static String[] addJarsInPath(String[] paths)
  	{
  		Set fullList = new HashSet();
  		for (int i = 0; i < paths.length; i++)
  		{
  			fullList.add(paths[i]);
  			if (!paths[i].endsWith(".jar"))
  			{
  				File dir = new File(paths[i]);
  				if (dir.exists() && dir.isDirectory())
  				{
  					String[] jars = dir.list(new FilenameFilter()
  					{
  						public boolean accept(File f, String name)
  						{
  							if (name.endsWith(".jar"))
  							{
  								return true;
  							}
  							return false;
  						}
  					});
  					for (int x = 0; x < jars.length; x++)
  					{
  						fullList.add(jars[x]);
  					}
  				}
  			}
  		}
  		return (String[]) fullList.toArray(new String[0]);
  	}
  	public static List findClassesThatExtend(
  		String[] strPathsOrJars,
  		Class[] superClasses,
  		boolean innerClasses)
  		throws IOException, ClassNotFoundException
  	{
  		List listPaths = null;
  		ArrayList listClasses = null;
  		List listSuperClasses = null;
  		strPathsOrJars = addJarsInPath(strPathsOrJars);
  		if (log.isDebugEnabled())
  		{
  			for (int k = 0; k < strPathsOrJars.length; k++)
  			{
  				log.debug("strPathsOrJars : " + strPathsOrJars[k]);
  			}
  		}
  		listPaths = getClasspathMatches(strPathsOrJars);
  		if (log.isDebugEnabled())
  		{
  			Iterator tIter = listPaths.iterator();
  			for (; tIter.hasNext();)
  			{
  				log.debug("listPaths : " + tIter.next());
  			}
  		}
  		listClasses = new ArrayList();
  		listSuperClasses = new ArrayList();
  		for (int i = 0; i < superClasses.length; i++)
  		{
  			listSuperClasses.add(superClasses[i].getName());
  		}
  		// first get all the classes
  		findClassesInPaths(listPaths, listClasses);
  		if (log.isDebugEnabled())
  		{
  			Iterator tIter = listClasses.iterator();
  			for (; tIter.hasNext();)
  			{
  				log.debug("listClasses : " + tIter.next());
  			}
  		}
  		List subClassList =
  			findAllSubclasses(listSuperClasses, listClasses, innerClasses);
  		return subClassList;
  	}
  	
  	private static List getClasspathMatches(String[] strPathsOrJars)
  	{
  		ArrayList listPaths = null;
  		StringTokenizer stPaths = null;
  		String strPath = null;
  		int i;
  		listPaths = new ArrayList();
  		log.debug("Classpath = "+System.getProperty("java.class.path"));
  		stPaths =
  			new StringTokenizer(
  				System.getProperty("java.class.path"),
  				System.getProperty("path.separator"));
  		if (strPathsOrJars != null)
  		{
  			strPathsOrJars = fixDotDirs(strPathsOrJars);
  			strPathsOrJars = fixSlashes(strPathsOrJars);
  			strPathsOrJars = fixEndingSlashes(strPathsOrJars);
  		}
  		// find all jar files or paths that end with strPathOrJar
  		while (stPaths.hasMoreTokens())
  		{
  			strPath = fixDotDir((String) stPaths.nextToken());
  			strPath = fixSlashes(strPath);
  			strPath = fixEndingSlashes(strPath);
  			if (strPathsOrJars == null)
  			{
  				listPaths.add(strPath);
  			}
  			else
  			{
  				for (i = 0; i < strPathsOrJars.length; i++)
  				{
  					if (log.isDebugEnabled())
  					{
  						log.debug("strPath(lower) : " + strPath.toLowerCase());
  						log.debug("strPathsOrJars[" + i + "] : " + strPathsOrJars[i]);
  					}
  					if (strPath.endsWith(strPathsOrJars[i]))
  					{
  						log.debug("match!!!");
  						listPaths.add(strPath);
  					}
  				}
  			}
  		}
  		return listPaths;
  	}
  	/************************************************************	
  	 *  Get all interfaces that the class implements, including parent interfaces.
  	 *  This keeps us from having to instantiate and check instanceof, which	
  	 *  wouldn't work anyway since instanceof requires a hard-coded class or	
  	 *  interface name.	
  	 *	
  	 *@param  theClass     the class to get interfaces for	
  	 *@param  hInterfaces  a Map to store the discovered interfaces in	
  	 ***********************************************************/
  	private static void getAllInterfaces(Class theClass, Map hInterfaces)
  	{
  		Class[] interfaces = theClass.getInterfaces();
  		for (int i = 0; i < interfaces.length; i++)
  		{
  			hInterfaces.put(interfaces[i].getName(), interfaces[i]);
  			getAllInterfaces(interfaces[i], hInterfaces);
  		}
  	}
  	private static String[] fixDotDirs(String[] paths)
  	{
  		for (int i = 0; i < paths.length; i++)
  		{
  			paths[i] = fixDotDir(paths[i]);
  		}
  		return paths;
  	}
  	private static String fixDotDir(String path)
  	{
  		if (path != null && path.equals("."))
  		{
  			return System.getProperty("user.dir");
  		}
  		else
  		{
  			return path.trim();
  		}
  	}
  	private static String[] fixEndingSlashes(String[] strings)
  	{
  		String[] strNew = new String[strings.length];
  		for (int i = 0; i < strings.length; i++)
  		{
  			strNew[i] = fixEndingSlashes(strings[i]);
  		}
  		return strNew;
  	}
  	private static String fixEndingSlashes(String string)
  	{
  		if (string.endsWith("/") || string.endsWith("\\"))
  		{
  			string = string.substring(0, string.length() - 1);
  			string = fixEndingSlashes(string);
  		}
  		return string;
  	}
  	private static String[] fixSlashes(String[] strings)
  	{
  		String[] strNew = new String[strings.length];
  		for (int i = 0; i < strings.length; i++)
  		{
  			strNew[i] = fixSlashes(strings[i]) /*.toLowerCase()*/;
  		}
  		return strNew;
  	}
  	private static String fixSlashes(String str)
  	{
  		// replace \ with /
  		str = str.replace('\\', '/');
  		// compress multiples into singles;
  		// do in 2 steps with dummy string
  		// to avoid infinte loop
  		str = replaceString(str, "//", "_____");
  		str = replaceString(str, "_____", "/");
  		return str;
  	}
  	private static String replaceString(
  		String s,
  		String strToFind,
  		String strToReplace)
  	{
  		int index;
  		int currentPos;
  		StringBuffer buffer = null;
  		if (s.indexOf(strToFind) == -1)
  		{
  			return s;
  		}
  		currentPos = 0;
  		buffer = new StringBuffer();
  		while (true)
  		{
  			index = s.indexOf(strToFind, currentPos);
  			if (index == -1)
  			{
  				break;
  			}
  			buffer.append(s.substring(currentPos, index));
  			buffer.append(strToReplace);
  			currentPos = index + strToFind.length();
  		}
  		buffer.append(s.substring(currentPos));
  		return buffer.toString();
  	}
  	/************************************************************	
  	 *  Determine if the class implements the interface.	
  	 *	
  	 *@param  theClass      the class to check	
  	 *@param  theInterface  the interface to look for	
  	 *@return               boolean true if it implements	
  	 ***********************************************************/
  	private static boolean classImplementsInterface(
  		Class theClass,
  		Class theInterface)
  	{
  		HashMap mapInterfaces = new HashMap();
  		String strKey = null;
  		// pass in the map by reference since the method is recursive
  		getAllInterfaces(theClass, mapInterfaces);
  		Iterator iterInterfaces = mapInterfaces.keySet().iterator();
  		while (iterInterfaces.hasNext())
  		{
  			strKey = (String) iterInterfaces.next();
  			if (mapInterfaces.get(strKey) == theInterface)
  			{
  				return true;
  			}
  		}
  		return false;
  	}
  	/************************************************************	
  	 *  Convenience method for <code>findAllSubclasses(List, List, boolean)</code>	
  	 *  with the option to include inner classes in the search set to false	
  	 *	
  	 *@param  listSuperClasses  the base classes to find subclasses for	
  	 *@param  listAllClasses    the collection of classes to search in	
  	 *@return                   ArrayList of the subclasses	
  	 ***********************************************************/
  	private static ArrayList findAllSubclasses(
  		List listSuperClasses,
  		List listAllClasses)
  	{
  		return findAllSubclasses(listSuperClasses, listAllClasses, false);
  	}
  	/************************************************************	
  	 *  Finds all classes that extend the classes in the listSuperClasses	
  	 *  ArrayList, searching in the listAllClasses ArrayList.	
  	 *	
  	 *@param  listSuperClasses  the base classes to find subclasses for	
  	 *@param  listAllClasses    the collection of classes to search in	
  	 *@param  innerClasses      indicate whether to include inner classes in the	
  	 *      search	
  	 *@return                   ArrayList of the subclasses	
  	 ***********************************************************/
  	private static ArrayList findAllSubclasses(
  		List listSuperClasses,
  		List listAllClasses,
  		boolean innerClasses)
  	{
  		Iterator iterClasses = null;
  		ArrayList listSubClasses = null;
  		String strClassName = null;
  		Class tempClass = null;
  		listSubClasses = new ArrayList();
  		iterClasses = listSuperClasses.iterator();
  		while (iterClasses.hasNext())
  		{
  			strClassName = (String) iterClasses.next();
  			// only check classes if they are not inner classes
  			// or we intend to check for inner classes
  			if ((strClassName.indexOf("$") == -1) || innerClasses)
  			{
  				// might throw an exception, assume this is ignorable
  				try
  				{
  					tempClass =
  						Class.forName(
  							strClassName,
  							false,
  							Thread.currentThread().getContextClassLoader());
  					findAllSubclassesOneClass(
  						tempClass,
  						listAllClasses,
  						listSubClasses,
  						innerClasses);
  					// call by reference - recursive
  				}
  				catch (Throwable ignored)
  				{
  				}
  			}
  		}
  		return listSubClasses;
  	}
  	/************************************************************	
  	 *  Convenience method for <code>findAllSubclassesOneClass(Class, List, List,
  	 *  boolean)</code> with option to include inner classes in the search set to	
  	 *  false	
  	 *	
  	 *@param  theClass        the parent class	
  	 *@param  listAllClasses  the collection of classes to search in	
  	 *@param  listSubClasses  the collection of discovered subclasses	
  	 ***********************************************************/
  	private static void findAllSubclassesOneClass(
  		Class theClass,
  		List listAllClasses,
  		List listSubClasses)
  	{
  		findAllSubclassesOneClass(theClass, listAllClasses, listSubClasses, false);
  	}
  	/************************************************************	
  	 *  Finds all classes that extend the class, searching in the listAllClasses	
  	 *  ArrayList.	
  	 *	
  	 *@param  theClass        the parent class	
  	 *@param  listAllClasses  the collection of classes to search in	
  	 *@param  listSubClasses  the collection of discovered subclasses	
  	 *@param  innerClasses    indicates whether inners classes should be included	
  	 *      in the search	
  	 ***********************************************************/
  	private static void findAllSubclassesOneClass(
  		Class theClass,
  		List listAllClasses,
  		List listSubClasses,
  		boolean innerClasses)
  	{
  		Iterator iterClasses = null;
  		String strClassName = null;
  		String strSuperClassName = null;
  		Class c = null;
  		Class cParent = null;
  		boolean bIsSubclass = false;
  		strSuperClassName = theClass.getName();
  		iterClasses = listAllClasses.iterator();
  		while (iterClasses.hasNext())
  		{
  			strClassName = (String) iterClasses.next();
  			// only check classes if they are not inner classes
  			// or we intend to check for inner classes
  			if ((strClassName.indexOf("$") == -1) || innerClasses)
  			{
  				// might throw an exception, assume this is ignorable
  				try
  				{
  					// Class.forName() doesn't like nulls
  					if (strClassName == null)
  						continue;
  					c =
  						Class.forName(
  							strClassName,
  							false,
  							Thread.currentThread().getContextClassLoader());
  					if (!c.isInterface() && !Modifier.isAbstract(c.getModifiers()))
  					{
  						bIsSubclass = theClass.isAssignableFrom(c);
  					}
  					else
  					{
  						bIsSubclass = false;
  					}
  					if (bIsSubclass)
  					{
  						listSubClasses.add(strClassName);
  					}
  				}
  				catch (Throwable ignored)
  				{
  				}
  			}
  		}
  	}
  	/************************************************************	
  	 *  Converts a class file from the text stored in a Jar file to a version that	
  	 *  can be used in Class.forName().	
  	 *	
  	 *@param  strClassName  the class name from a Jar file	
  	 *@return               String the Java-style dotted version of the name	
  	 ***********************************************************/
  	private static String fixClassName(String strClassName)
  	{
  		strClassName = strClassName.replace('\\', '.');
  		strClassName = strClassName.replace('/', '.');
  		strClassName = strClassName.substring(0, strClassName.length() - 6);
  		// remove ".class"
  		return strClassName;
  	}
  	/************************************************************	
  	 *  Description of the Method	
  	 *	
  	 *@param  strPath          Description of Parameter	
  	 *@param  listClasses      Description of Parameter	
  	 *@exception  IOException  Description of Exception	
  	 ***********************************************************/
  	private static void findClassesInOnePath(String strPath, List listClasses)
  		throws IOException
  	{
  		File file = null;
  		String strPathName = null;
  		ZipFile zipFile = null;
  		ZipEntry zipEntry = null;
  		Enumeration entries = null;
  		String strEntry = null;
  		file = new File(strPath);
  		if (file.isDirectory())
  		{
  			findClassesInPathsDir(strPath, file, listClasses);
  		}
  		else if (file.exists())
  		{
  			zipFile = new ZipFile(file);
  			entries = zipFile.entries();
  			while (entries.hasMoreElements())
  			{
  				strEntry = entries.nextElement().toString();
  				if (strEntry.endsWith(".class"))
  				{
  					listClasses.add(fixClassName(strEntry));
  				}
  			}
  		}
  	}
  	/************************************************************	
  	 *  Description of the Method	
  	 *	
  	 *@param  listPaths        Description of Parameter	
  	 *@param  listClasses      Description of Parameter	
  	 *@exception  IOException  Description of Exception	
  	 ***********************************************************/
  	private static void findClassesInPaths(List listPaths, List listClasses)
  		throws IOException
  	{
  		Iterator iterPaths = listPaths.iterator();
  		while (iterPaths.hasNext())
  		{
  			findClassesInOnePath((String) iterPaths.next(), listClasses);
  		}
  	}
  	/************************************************************	
  	 *  Description of the Method	
  	 *	
  	 *@param  strPathElement   Description of Parameter	
  	 *@param  dir              Description of Parameter	
  	 *@param  listClasses      Description of Parameter	
  	 *@exception  IOException  Description of Exception	
  	 ***********************************************************/
  	private static void findClassesInPathsDir(
  		String strPathElement,
  		File dir,
  		List listClasses)
  		throws IOException
  	{
  		File file = null;
  		String[] list = dir.list();
  		for (int i = 0; i < list.length; i++)
  		{
  			file = new File(dir, list[i]);
  			if (file.isDirectory())
  			{
  				findClassesInPathsDir(strPathElement, file, listClasses);
  			}
  			else if (
  				file.exists() && (file.length() != 0) && list[i].endsWith(".class"))
  			{
  				listClasses.add(
  					file
  						.getPath()
  						.substring(
  							strPathElement.length() + 1,
  							file.getPath().lastIndexOf("."))
  						.replace(File.separator.charAt(0), '.'));
  			}
  		}
  	}
  }
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/test/AllTests.java
  
  Index: AllTests.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.test;
  
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.PrintStream;
  import java.util.Iterator;
  import java.util.Properties;
  
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  import org.apache.log.Hierarchy;
  import org.apache.log.Logger;
  import org.apache.jorphan.logging.LoggingManager;
  import org.apache.jorphan.reflect.ClassFinder;
  
  /************************************************************
   *  Provides a quick and easy way to run all <a href="http://junit.sourceforge.net">junit</a> unit tests in your java project.  It will 
   * find all unit test classes and run all their test methods.  There is no need to configure
   * it in any way to find these classes except to give it a path to search.
   * <p>
   * Here is an example Ant target (See Ant at <a href="http://jakarta.apache.org/ant">Apache</a>) that
   * runs all your unit tests:
   * <pre>
   *		&lt;target name="test" depends="compile"&gt;
   *			&lt;java classname="org.apache.jorphan.test.AllTests" fork="yes"&gt; 
   *				&lt;classpath&gt;
   *					&lt;path refid="YOUR_CLASSPATH"/&gt;
   *					&lt;pathelement location="ROOT_DIR_OF_YOUR_COMPILED_CLASSES"/&gt;
   *				&lt;/classpath&gt;
   *				&lt;arg value="SEARCH_PATH/"/&gt;
   *				&lt;arg value="PROPERTY_FILE"/&gt;
   *				&lt;arg value="NAME_OF_UNITTESTMANAGER_CLASS"/&gt;
   *			&lt;/java&gt;
   *		&lt;/target&gt;
   * </pre>
   * 
   * <DL><dt>YOUR_CLASSPATH
   * 	<DD>Refers to the classpath that includes all jars and libraries need to run your unit tests
   *</dd>
   * </dt><dt>ROOT_DIR_OF_YOUR_COMPILED_CLASSES
   * <dd>The classpath should include the directory where all your project's classes are compiled
   * to, if it doesn't already.  </dd></dt>
   * <dt>SEARCH_PATH
   * <dd>The first argument tells AllTests where to 
   * look for unit test classes to execute.  In most cases, it is identical to 
   * ROOT_DIR_OF_YOUR_COMPILED_CLASSES.  You can specify multiple directories or jars to 
   * search by providing a comma-delimited list.</dd></dt>
   * <dt>PROPERTY_FILE
   * <dd>A simple property file that sets logging parameters.  It is optional and is only relevant
   * if you use the same logging packages that JOrphan uses.</dd></dt>
   * <dt>NAME_OF_UNITTESTMANAGER_CLASS
   * <dd>If your system requires some configuration to run correctly, you can implement the
   * {@link UnitTestManager} interface and be given an opportunity to initialize your system from a configuration 
   * file.</dd></dt></dl>
   *
   *@author     Michael Stover (mstover1 at apache.org)
   *@see UnitTestManager
   ***********************************************************/
  public class AllTests
  {
  	transient private static Logger log = Hierarchy.getDefaultHierarchy().getLoggerFor(
  			"jmeter.test");
  	/************************************************************
  	 *  Constructor for the AllTests object
  	 ***********************************************************/
  	public AllTests()
  	{
  	}
  
  	/************************************************************
  	 *  Starts a run through all unit tests found in the specified classpaths.
  	 * The first argument should be a list of paths to search.
  	 * The second argument is optional and specifies a properties file used to
  	 * initialize logging.
  	 * The third argument is also optional, and specifies a class that implements the 
  	 * UnitTestManager interface.  This provides a means of initializing your application
  	 * with a configuration file prior to the start of any unit tests.
  	 *
  	 *@param  args  The command line arguments
  	 ***********************************************************/
  	public static void main(String[] args)
  	{
  		if(args.length < 1)
  		{
  			System.out.println("You must specify a comma-delimited list of paths to search for unit tests");
  			System.exit(0);
  		}
  		initializeLogging(args);
  		initializeManager(args);
  		// end : added - 11 July 2001
  		try
  		{
  			TestSuite suite = suite(args[0]);
  			PrintStream out = new PrintStream(new FileOutputStream("testresults.txt"));
  			junit.textui.TestRunner runner = new junit.textui.TestRunner(out);
  			runner.run(suite);
  			out.close();
  		}
  		catch (FileNotFoundException e)
  		{
  			log.error("",e);
  		}
  		System.exit(0);
  	}
  
  	/**
  	 * An overridable method that initializes the logging for the unit test run, using
  	 * the properties file passed in as the second argument.
  	 * @param args 
  	 */
  	protected static void initializeLogging(String[] args)
  	{
  		if (args.length >= 2)
  		{
  			Properties props = new Properties();
  			try
  			{
  				System.out.println("setting up logging props using file: "+args[1]);
  				props.load(new FileInputStream(args[1]));
  				LoggingManager.initializeLogging(props);
  			}
  			catch (FileNotFoundException e)
  			{
  			}
  			catch (IOException e)
  			{
  			}
  		}
  	}
  
  	/**
  	 * An overridable method that that instantiates a UnitTestManager (if one was
  	 * specified in the command-line arguments), and hands it the name of the 
  	 * properties file to use to configure the system.
  	 * @param args
  	 */
  	protected static void initializeManager(String[] args)
  	{
  		if(args.length >= 3)
  		{
  			try
  			{
  				UnitTestManager um = (UnitTestManager)Class.forName(args[2]).newInstance();
  				um.initializeProperties(args[1]);
  			}
  			catch (Exception e)
  			{
  				System.out.println("Couldn't create: "+args[2]);
  				e.printStackTrace();
  			}
  		}
  	}
  
  	/************************************************************
  	 *  A unit test suite for JUnit
  	 *
  	 *@return    The test suite
  	 ***********************************************************/
  	private static TestSuite suite(String searchPaths)
  	{
  		TestSuite suite = new TestSuite();
  		try
  		{
  			Iterator classes = ClassFinder.findClassesThatExtend(searchPaths.split(","),
  					new Class[]{TestCase.class},true).iterator();
  			while (classes.hasNext())
  			{
  				String name = (String)classes.next();
  				try
  				{
  					suite.addTest(new TestSuite(Class.forName(name)));
  				}
  				catch (Exception ex)
  				{
  					log.error("error adding test :"+ex);
  				}
  			}
  		}
  		catch (IOException e)
  		{
  			log.error("",e);
  		}
  		catch (ClassNotFoundException e)
  		{
  			log.error("",e);
  		}
  		return suite;
  	}
  }
  
  
  
  
  
  1.1                  jakarta-jmeter/src/jorphan/org/apache/jorphan/test/UnitTestManager.java
  
  Index: UnitTestManager.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
   
  package org.apache.jorphan.test;
  /**
   * Implement this interface to work with the AllTests class.  This interface allows
   * AllTests to pass a configuration file to your application before running the 
   * junit unit tests.
   * 
   * @author Michael Stover (mstover at apache.org)
   * @see AllTests
   */
  public interface UnitTestManager
  {
  	/**
  	 * Your implementation will be handed the filename that was provided to AllTests as
  	 * a configuration file.  It can hold whatever properties you need to configure
  	 * your system prior to the unit tests running.
  	 * @param filename
  	 */
  	public void initializeProperties(String filename);
  }
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/ftp/org/apache/jmeter/protocol/ftp/config/gui/FtpConfigGui.java
  
  Index: FtpConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/ftp/org/apache/jmeter/protocol/ftp/config/gui/FtpConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FtpConfigGui.java	15 Oct 2002 18:53:29 -0000	1.2
  +++ FtpConfigGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -66,7 +66,7 @@
   import org.apache.jmeter.protocol.ftp.sampler.FTPSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/ftp/org/apache/jmeter/protocol/ftp/control/gui/FtpTestSamplerGui.java
  
  Index: FtpTestSamplerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/ftp/org/apache/jmeter/protocol/ftp/control/gui/FtpTestSamplerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FtpTestSamplerGui.java	15 Oct 2002 18:53:29 -0000	1.2
  +++ FtpTestSamplerGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -67,7 +67,7 @@
   import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: Apache JMeter Description: Copyright: Copyright (c) 2000 Company:
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/HttpDefaultsGui.java
  
  Index: HttpDefaultsGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/HttpDefaultsGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HttpDefaultsGui.java	15 Oct 2002 18:53:29 -0000	1.2
  +++ HttpDefaultsGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -13,8 +13,8 @@
   import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.JLabeledTextField;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.JLabeledTextField;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   /**
    * @author Administrator
    *
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java
  
  Index: MultipartUrlConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/MultipartUrlConfigGui.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MultipartUrlConfigGui.java	15 Oct 2002 18:53:29 -0000	1.3
  +++ MultipartUrlConfigGui.java	17 Oct 2002 19:47:19 -0000	1.4
  @@ -69,7 +69,7 @@
   import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.4       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
  
  Index: HttpTestSampleGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- HttpTestSampleGui.java	15 Oct 2002 18:53:29 -0000	1.3
  +++ HttpTestSampleGui.java	17 Oct 2002 19:47:19 -0000	1.4
  @@ -72,7 +72,7 @@
   import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +3 -3      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/SoapSamplerGui.java
  
  Index: SoapSamplerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/SoapSamplerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SoapSamplerGui.java	15 Oct 2002 18:53:29 -0000	1.2
  +++ SoapSamplerGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -13,9 +13,9 @@
   import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.JLabeledTextArea;
  -import org.jorphan.gui.JLabeledTextField;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.JLabeledTextArea;
  +import org.apache.jorphan.gui.JLabeledTextField;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /**
    * @author mstover
  
  
  
  1.5       +7 -7      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java
  
  Index: AuthPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AuthPanel.java	15 Oct 2002 18:53:30 -0000	1.4
  +++ AuthPanel.java	17 Oct 2002 19:47:19 -0000	1.5
  @@ -88,7 +88,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Handles input for determining if authentication services are required for a
  
  
  
  1.5       +3 -3      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/CookiePanel.java
  
  Index: CookiePanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/CookiePanel.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CookiePanel.java	15 Oct 2002 18:53:30 -0000	1.4
  +++ CookiePanel.java	17 Oct 2002 19:47:19 -0000	1.5
  @@ -87,7 +87,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Allows the user to specify if she needs cookie services, and give parameters
  
  
  
  1.6       +1 -1      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPArgumentsPanel.java
  
  Index: HTTPArgumentsPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/HTTPArgumentsPanel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HTTPArgumentsPanel.java	15 Oct 2002 18:53:30 -0000	1.5
  +++ HTTPArgumentsPanel.java	17 Oct 2002 19:47:19 -0000	1.6
  @@ -8,7 +8,7 @@
   import org.apache.jmeter.protocol.http.util.HTTPArgument;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.collections.Data;
  +import org.apache.jorphan.collections.Data;
   
   /**
    * @author Administrator
  
  
  
  1.6       +7 -7      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/HeaderPanel.java
  
  Index: HeaderPanel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/gui/HeaderPanel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HeaderPanel.java	15 Oct 2002 18:53:30 -0000	1.5
  +++ HeaderPanel.java	17 Oct 2002 19:47:19 -0000	1.6
  @@ -89,7 +89,7 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Allows the user to specify if she needs HTTP header services, and give
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/AnchorModifierGui.java
  
  Index: AnchorModifierGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/AnchorModifierGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AnchorModifierGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ AnchorModifierGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -64,7 +64,7 @@
   import org.apache.jmeter.protocol.http.modifier.AnchorModifier;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/ParamModifierGui.java
  
  Index: ParamModifierGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/ParamModifierGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParamModifierGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ ParamModifierGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -20,7 +20,7 @@
   import org.apache.jmeter.protocol.http.modifier.ParamModifier;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * A swing panel to allow UI with the ParamModifier class.
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/URLRewritingModifierGui.java
  
  Index: URLRewritingModifierGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/URLRewritingModifierGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- URLRewritingModifierGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ URLRewritingModifierGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -12,8 +12,8 @@
   import org.apache.jmeter.protocol.http.modifier.URLRewritingModifier;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.JLabeledTextField;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.JLabeledTextField;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /**
    * @author mstover
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/UserParameterModifierGui.java
  
  Index: UserParameterModifierGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/modifier/gui/UserParameterModifierGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- UserParameterModifierGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ UserParameterModifierGui.java	17 Oct 2002 19:47:19 -0000	1.3
  @@ -65,7 +65,7 @@
   import org.apache.jmeter.protocol.http.modifier.UserParameterModifier;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   /************************************************************
    *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
    *
  
  
  
  1.6       +3 -3      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
  
  Index: HttpRequestHdr.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HttpRequestHdr.java	15 Oct 2002 18:53:30 -0000	1.5
  +++ HttpRequestHdr.java	17 Oct 2002 19:47:19 -0000	1.6
  @@ -21,7 +21,7 @@
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Logger;
  -import org.jorphan.logging.LoggingManager;
  +import org.apache.jorphan.logging.LoggingManager;
   //
   // Class:     HttpRequestHdr
   // Abstract:  The headers of the client HTTP request.
  
  
  
  1.5       +55 -1     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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HTTPArgument.java	14 Aug 2002 02:52:19 -0000	1.4
  +++ HTTPArgument.java	17 Oct 2002 19:47:20 -0000	1.5
  @@ -1,4 +1,58 @@
  -package org.apache.jmeter.protocol.http.util;
  +/*
  + * ====================================================================
  + * The Apache Software License, Version 1.1
  + *
  + * Copyright (c) 2001 The Apache Software Foundation.  All rights
  + * reserved.
  + *
  + * Redistribution and use in source and binary forms, with or without
  + * modification, are permitted provided that the following conditions
  + * are met:
  + *
  + * 1. Redistributions of source code must retain the above copyright
  + * notice, this list of conditions and the following disclaimer.
  + *
  + * 2. Redistributions in binary form must reproduce the above copyright
  + * notice, this list of conditions and the following disclaimer in
  + * the documentation and/or other materials provided with the
  + * distribution.
  + *
  + * 3. The end-user documentation included with the redistribution,
  + * if any, must include the following acknowledgment:
  + * "This product includes software developed by the
  + * Apache Software Foundation (http://www.apache.org/)."
  + * Alternately, this acknowledgment may appear in the software itself,
  + * if and wherever such third-party acknowledgments normally appear.
  + *
  + * 4. The names "Apache" and "Apache Software Foundation" and
  + * "Apache JMeter" must not be used to endorse or promote products
  + * derived from this software without prior written permission. For
  + * written permission, please contact apache@apache.org.
  + *
  + * 5. Products derived from this software may not be called "Apache",
  + * "Apache JMeter", nor may "Apache" appear in their name, without
  + * prior written permission of the Apache Software Foundation.
  + *
  + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  + * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  + * SUCH DAMAGE.
  + * ====================================================================
  + *
  + * This software consists of voluntary contributions made by many
  + * individuals on behalf of the Apache Software Foundation.  For more
  + * information on the Apache Software Foundation, please see
  + * <http://www.apache.org/>.
  + */
  + package org.apache.jmeter.protocol.http.util;
   
   import junit.framework.TestCase;
   import java.net.URLEncoder;
  
  
  
  1.5       +3 -3      jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/config/gui/JavaConfigGui.java
  
  Index: JavaConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/config/gui/JavaConfigGui.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JavaConfigGui.java	15 Oct 2002 18:53:30 -0000	1.4
  +++ JavaConfigGui.java	17 Oct 2002 19:47:20 -0000	1.5
  @@ -74,8 +74,8 @@
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.gui.layout.VerticalLayout;
  -import org.jorphan.reflect.ClassFinder;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.reflect.ClassFinder;
   
   
   /**
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java
  
  Index: JavaTestSamplerGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavaTestSamplerGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ JavaTestSamplerGui.java	17 Oct 2002 19:47:20 -0000	1.3
  @@ -67,7 +67,7 @@
   import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   
   /**
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/DbConfigGui.java
  
  Index: DbConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/DbConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DbConfigGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ DbConfigGui.java	17 Oct 2002 19:47:20 -0000	1.3
  @@ -68,7 +68,7 @@
   import org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: Description: Copyright: Copyright (c) 2001 Company:
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/PoolConfigGui.java
  
  Index: PoolConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/PoolConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PoolConfigGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ PoolConfigGui.java	17 Oct 2002 19:47:20 -0000	1.3
  @@ -70,7 +70,7 @@
   import org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/SqlConfigGui.java
  
  Index: SqlConfigGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/gui/SqlConfigGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SqlConfigGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ SqlConfigGui.java	17 Oct 2002 19:47:20 -0000	1.3
  @@ -66,7 +66,7 @@
   import org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
  
  
  
  1.3       +2 -2      jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/control/gui/JdbcTestSampleGui.java
  
  Index: JdbcTestSampleGui.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/control/gui/JdbcTestSampleGui.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JdbcTestSampleGui.java	15 Oct 2002 18:53:30 -0000	1.2
  +++ JdbcTestSampleGui.java	17 Oct 2002 19:47:20 -0000	1.3
  @@ -67,7 +67,7 @@
   import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.util.JMeterUtils;
  -import org.jorphan.gui.layout.VerticalLayout;
  +import org.apache.jorphan.gui.layout.VerticalLayout;
   
   /****************************************
    * Title: Description: Copyright: Copyright (c) 2001 Company:
  
  
  
  1.6       +3 -3      jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
  
  Index: JDBCSampler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JDBCSampler.java	15 Oct 2002 18:53:31 -0000	1.5
  +++ JDBCSampler.java	17 Oct 2002 19:47:20 -0000	1.6
  @@ -74,7 +74,7 @@
   import org.apache.jmeter.testelement.TestListener;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
  -import org.jorphan.collections.Data;
  +import org.apache.jorphan.collections.Data;
   /************************************************************
    *  A sampler which understands JDBC database requests
    *
  
  
  
  1.6       +7 -1      jakarta-jmeter/xdocs/usermanual/remote-test.xml
  
  Index: remote-test.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/xdocs/usermanual/remote-test.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- remote-test.xml	18 Jun 2002 01:01:15 -0000	1.5
  +++ remote-test.xml	17 Oct 2002 19:47:20 -0000	1.6
  @@ -34,7 +34,13 @@
   <p><b>Step 1: Start the RMI Registry</b></p>
   <p>JMeter uses Remote Method Invocation (RMI) as the remote communication mechanism.  Therefore, you need
   to run the RMI Registry application (which is named, "rmiregistry") that comes with the JDK and is located in the "bin" 
  -directory.  Before running rmiregistry, make sure that the JMeter's core JAR file (JMETER_HOME/lib/ext/ApacheJMeter_core.jar) is in your CLASSPATH environment variable.  The 
  +directory.  Before running rmiregistry, make sure that the following jars are in your system claspath:
  +<ul>
  +	<li>JMETER_HOME/lib/ext/ApacheJMeter_core.jar</li>
  +	<li>JMETER_HOME/lib/jorphan.jar</li>
  +	<li>JMETER_HOME/lib/logkit-1.0.1</li>
  +</ul>
  +The 
   rmiregistry application needs access to certain JMeter classes.  Run rmiregistry with no parameters.  By default the 
   application listens to port 1099.</p>
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>