I've got the code you sent, but I'm not adding anything more till 1.9 is fully
released, which I'll do very soon. After that, I"ll commit the ifController.
-Mike
On 23 Jul 2003 at 11:00, [EMAIL PROTECTED] wrote:
> Could I ask someone with CVS commit privileges to review and add these
> classes in.
>
> Thanks a lot
> Cyrus
>
> ----- Forwarded by Cyrus Montakab/External on 23/07/2003 11:08 -----
>
>
> [EMAIL PROTECTED]
>
> omext.com
>
>
>
>
>
>
>
> 08/07/2003 13:22 To: jmeter-
[EMAIL PROTECTED]
> Please respond to cc: (bcc: Cyrus
Montakab/External)
> "JMeter Subject: New function : IfController
>
> Developers List"
>
>
>
>
>
>
>
>
>
> Please find attached the source code for IfController & IfControllerPanel.
> This is intended to be placed within another controller (or Thread Group).
> A condition is evaluated and if true all the sub-items of the condition is
> executed.
>
>
> For more information please see the attached javadoc.
>
> Also, please note that the following entries needs to be
> added to the message.properties file :
>
> if_controller_title=If Controller
> if_controller_label=Condition
>
> ===============================================
>
>
>
> package org.apache.jmeter.control;
>
> import java.io.Serializable;
> import junit.framework.TestSuite;
> import org.apache.jmeter.samplers.Sampler;
> import org.apache.jmeter.testelement.TestElement;
> import org.apache.jmeter.testelement.property.StringProperty;
> import org.apache.jorphan.logging.LoggingManager;
> import org.apache.log.Logger;
> import org.mozilla.javascript.Context;
> import org.mozilla.javascript.Scriptable;
> import org.apache.jmeter.control.GenericController;
>
> /****************************************
> [EMAIL PROTECTED] Cyrus Montakab
> [EMAIL PROTECTED] $Date: 2003/06/30
> [EMAIL PROTECTED] 1.0
> * This is a Conditional Controller; it will execute the set of statemstns
> * (samplers/controllers, etc)
> * until if the 'condition' is true.
> * In a programming world - this is equivalant of :
> * if (condition) {
> * statements ....
> * }
> * In JMeter you may have :
> * Thread-Group (set to loop a number of times or indefinitely,
> * ... Samplers ... (e.g. Counter )
> * ... Other Controllers ....
> * ... IfController ( condition set to something like -
> ${counter}<10
> * ... staetements to perform if condition is true ...
> * ... Other Controllers /Samplers
> * }
> *
> ***************************************/
>
> public class IfController extends GenericController implements Serializable
> {
>
> private static Logger logger =
> LoggingManager.getLoggerFor("jmeter.controller.IfController");
> private final static String CONDITION = "IfController.condition";
>
> /**
> * constructor
> */
> public IfController() {
> super();
> }
>
> /**
> * constructor
> */
> public IfController(String condition) {
> super();
> this.setCondition(condition);
> }
>
> /**
> * Condition Accessor - this is gonna be like ${count}<10
> */
> public void setCondition(String condition) {
> setProperty(new StringProperty(CONDITION, condition));
> }
>
> /**
> * Condition Accessor - this is gonna be like ${count}<10
> */
> public String getCondition() {
> return getPropertyAsString(CONDITION);
> }
>
> /**
> * evaluate the condition clause
> * Throw Exception If bad condition -
> */
> private boolean evaluateCondition() throws Exception {
>
> // condition string is going to be of the form : ${counter}<10
> // the following replaces the ${xxx} with actual valuess
>
> logger.debug(" getCondition() : [" + getCondition() + "]");
>
> String resultStr = "";
> boolean result = false;
>
> // now evaluate the condition using JavaScript
> Context cx = Context.enter();
> try {
> Scriptable scope = cx.initStandardObjects(null);
> Object cxResultObject =
> cx.evaluateString(scope, getCondition()
> /*** conditionString ***/
> , "<cmd>", 1, null);
> resultStr = Context.toString(cxResultObject);
>
> if (resultStr.equals("false")) {
> result = false;
> } else if (resultStr.equals("true")) {
> result = true;
> } else {
> throw new Exception(" BAD CONDITION :: " +
> getCondition());
> }
>
> logger.debug(
> " >> evaluate Condition - [ "
> + getCondition()
> + "] results is ["
> + result
> + "]");
>
> } finally {
> Context.exit();
> }
>
> return result;
> }
>
> /**
> * This is overriding the parent method.
> * IsDone indicates whether the termination condition is reached.
> * I.e. if the condition evaluates to False - then isDone() returns
> TRUE
> */
> /* public boolean isDone () {
> boolean result = super.isDone();
> // setDone(true);
> return result;
> }
> */
> /**
> * This is overriding the parent method.
> * IsDone indicates whether the termination condition is reached.
> * I.e. if the condition evaluates to False - then isDone() returns
> TRUE
> */
> public boolean isDone() {
>
> boolean result = true;
> try {
> result = !evaluateCondition();
> } catch (Exception e) {
> logger.error(e.getMessage(), e);
> }
> setDone(true);
> return result;
> }
>
> /**
> * @see org.apache.jmeter.control.Controller#next()
> * 'JMeterThread' iterates thru the Controller by calling this
> method.
> * IF a valid 'Sampler' is returned, then it executes the sampler
> * (calls sampler.sampler(xxx) method) .
> * So here we make sure that the samplers belonging to this
> * Controller do not get called
> * - if isDone is true
> * - if its the first time this is run. The first time is special
> * cause it is called prior the iteration even starts !
> */
> public Sampler next() {
> Sampler currentElement = super.next();
>
> // if (!isFirst() && !isDone () ){
> if (!isDone()) {
> return currentElement;
> } else {
> return null;
> }
> }
>
> /**
> * Tester
> */
> public static void main(String args[]) {
> junit.textui.TestRunner.run(suite());
> }
>
> /**
> * For JUnit test
> */
> public static TestSuite suite() {
> TestSuite suite = new TestSuite();
> suite.addTest(new Test("testProcessing"));
> return suite;
> }
>
> /**
> * JUnit test
> */
> public static class Test extends junit.framework.TestCase {
> public Test(String name) {
> super(name);
> }
>
> public void testProcessing() throws Exception {
>
> GenericController controller = new GenericController();
>
> controller.addTestElement(new IfController("false
> ==false"));
> controller.addTestElement(new IfController(" \"a\".equals
> (\"a\")"));
> controller.addTestElement(new IfController("2<100"));
>
> /* GenericController sub_1 = new
> GenericController();
> sub_1.addTestElement(new IfController("3
> ==3"));
> controller.addTestElement(sub_1);
> controller.addTestElement(new IfController
> ("false==true"));
> */
>
> /*
> GenericController controller = new GenericController();
> GenericController sub_1 = new GenericController();
> sub_1.addTestElement(new IfController("10<100"));
> sub_1.addTestElement(new IfController("true==false"));
> controller.addTestElement(sub_1);
> controller.addTestElement(new IfController("false
> ==false"));
>
> IfController sub_2 = new IfController();
> sub_2.setCondition( "10<10000");
> GenericController sub_3 = new GenericController();
>
> sub_2.addTestElement(new IfController( " \"a\".equals
> (\"a\")" ) );
> sub_3.addTestElement(new IfController("2>100"));
> sub_3.addTestElement(new IfController("false==true"));
> sub_2.addTestElement(sub_3);
> sub_2.addTestElement(new IfController("2==3"));
> controller.addTestElement(sub_2);
> */
>
> /* IfController controller = new IfController("12
> ==12");
> controller.initialize();
> */
> logger.debug(">>>>> testProcessing : Starting the
> iteration ");
> TestElement sampler = null;
> while ((sampler = controller.next()) != null) {
> logger.debug(
> " ->>> Gonna assertTrue :"
> + sampler.getClass().getName()
> + " Property is ---->>>"
> +
> sampler.getPropertyAsString(TestElement.NAME));
> }
> }
> }
>
> }
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
========================================================
===========================
>
>
>
> package org.apache.jmeter.control.gui;
>
> import java.awt.BorderLayout;
> import java.awt.event.ActionEvent;
> import java.awt.event.ActionListener;
>
> import javax.swing.Box;
> import javax.swing.JLabel;
> import javax.swing.JPanel;
> import javax.swing.JTextField;
>
> import org.apache.jmeter.control.IfController;
> import org.apache.jmeter.gui.util.FocusRequester;
> import org.apache.jmeter.testelement.TestElement;
> import org.apache.jmeter.util.JMeterUtils;
>
> /**
> * The user interface for a controller which specifies that its
> subcomponents
> * should be executed some number of times in a loop. This component
can
> be
> * used standalone or embedded into some other component.
> * Copyright: 2000
> *
> * @author Cyrus Montakab
> * @version $Revision: 1.10 $
> */
>
> public class IfControllerPanel
> extends AbstractControllerGui
> implements ActionListener
> {
>
> private static final String CONDITION_TITLE = "if_controller_title";
> private static final String CONDITION_LABEL = "if_controller_label";
>
> /**
> * A field allowing the user to specify the number of times the
> controller
> * should loop.
> */
> private JTextField theCondition;
>
> /**
> * Boolean indicating whether or not this component should display its
> * name. If true, this is a standalone component. If false, this
> component
> * is intended to be used as a subpanel for another component.
> */
> private boolean displayName = true;
>
>
> /** The name of the loops field component. */
> private static final String CONDITION = "JS_Condition";
>
> /**
> * Create a new LoopControlPanel as a standalone component.
> */
> public IfControllerPanel() {
> this(true);
> }
>
> /**
> * Create a new LoopControlPanel as either a standalone or an
embedded
> * component.
> *
> * @param displayName indicates whether or not this component should
> * display its name. If true, this is a standalone
> * component. If false, this component is intended
> * to be used as a subpanel for another component.
> */
> public IfControllerPanel (boolean displayName)
> {
> this.displayName = displayName;
> init();
> }
>
> /**
> * A newly created component can be initialized with the contents of
> * a Test Element object by calling this method. The component is
> * responsible for querying the Test Element object for the
> * relevant information to display in its GUI.
> *
> * @param element the TestElement to configure
> */
> public void configure(TestElement element) {
> super.configure(element);
> if (element instanceof IfController) {
> theCondition.setText(((IfController) element).getCondition());
> }
>
> }
>
> /**
> * Implements JMeterGUIComponent.createTestElement()
> */
> public TestElement createTestElement() {
> IfController controller = new IfController();
> modifyTestElement(controller);
> return controller;
> }
>
> /**
> * Implements JMeterGUIComponent.modifyTestElement(TestElement)
> */
> public void modifyTestElement(TestElement controller) {
> configureTestElement(controller);
> if (controller instanceof IfController)
> {
> if (theCondition.getText().length() > 0) {
> ((IfController)
> controller).setCondition(theCondition.getText());
> } else {
> ((IfController) controller).setCondition("");
> }
> }
> }
>
> /**
> * Invoked when an action occurs. This implementation assumes that
the
> * target component is the infinite loops checkbox.
> *
> * @param event the event that has occurred
> */
> public void actionPerformed(ActionEvent event) {
> new FocusRequester(theCondition);
> }
>
> /* Implements JMeterGUIComponent.getStaticLabel() */
> public String getStaticLabel() {
> return JMeterUtils.getResString(CONDITION_TITLE);
> }
>
> /**
> * Initialize the GUI components and layout for this component.
> */
> private void init()
> {
> // Standalone
> if (displayName) {
> setLayout(new BorderLayout(0, 5));
> setBorder(makeBorder());
> add(makeTitlePanel(), BorderLayout.NORTH);
>
> JPanel mainPanel = new JPanel(new BorderLayout());
> mainPanel.add(createConditionPanel(), BorderLayout.NORTH);
> add(mainPanel, BorderLayout.CENTER);
>
> } else {
> // Embedded
> setLayout(new BorderLayout());
> add(createConditionPanel(), BorderLayout.NORTH);
> }
> }
>
>
>
>
>
> /**
> * Create a GUI panel containing the components related to the number
> of
> * loops which should be executed.
> *
> * @return a GUI panel containing the loop count components
> */
> private JPanel createConditionPanel() {
> JPanel conditionPanel = new JPanel(new BorderLayout(5, 0));
>
> // Condition LABEL
> JLabel conditionLabel =
> new JLabel(JMeterUtils.getResString( CONDITION_LABEL ));
> conditionPanel.add(conditionLabel, BorderLayout.WEST);
>
> // TEXT FIELD
> theCondition = new JTextField("");
> theCondition.setName(CONDITION);
> conditionLabel.setLabelFor(theCondition);
> conditionPanel.add(theCondition, BorderLayout.CENTER);
> theCondition.addActionListener(this);
>
> conditionPanel.add(
> Box.createHorizontalStrut( conditionLabel.getPreferredSize
> ().width
> + theCondition.getPreferredSize().width)
> , BorderLayout.NORTH);
>
> return conditionPanel;
> }
> }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
--
Michael Stover
[EMAIL PROTECTED]
Yahoo IM: mstover_ya
ICQ: 152975688
AIM: mstover777
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]