org.apache.jmeter.control

## Class GenericController

- java.lang.Object
- - org.apache.jmeter.testelement.AbstractTestElement
  - - org.apache.jmeter.control.GenericController

- All Implemented Interfaces:
    Serializable, Cloneable, Controller, Searchable, TestElement, TestCompilerHelper
  Direct Known Subclasses:
    CriticalSectionController, ForeachController, IfController, IncludeController, InterleaveControl, LoopController, ModuleController, OnceOnlyController, ProxyControl, RandomOrderController, RecordingController, RunTime, SwitchController, TestFragmentController, ThroughputController, TransactionController, WhileController

      public class GenericController
      extends AbstractTestElement
      implements Controller, Serializable, TestCompilerHelper

  This class is the basis for all the controllers. It also implements SimpleController.

  The main entry point is next(), which is called by JMeterThread as follows:

  `while (running && (sampler = controller.next()) != null)`

  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `current` Index of current sub controller or sampler
    `protected List<TestElement>` | `subControllersAndSamplers`

    - ### Fields inherited from interface org.apache.jmeter.testelement.TestElement

      `COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `GenericController()` Creates a Generic Controller

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addIterationListener(LoopIterationListener lis)` Controllers have to notify listeners of when they begin an iteration through their sub-elements.
    `void` | `addTestElement(TestElement child)`
    `boolean` | `addTestElementOnce(TestElement child)` Add child test element only if it has not already been added.
    `protected void` | `currentReturnedNull(Controller c)` If the controller is done, remove it from the list, otherwise increment to next entry in list.
    `protected void` | `fireIterationStart()`
    `protected void` | `fireIterEvents()`
    `protected TestElement` | `getCurrentElement()` Gets the element indicated by the `current` index, if one exists, from the `subControllersAndSamplers` list.
    `protected int` | `getIterCount()`
    `protected List<TestElement>` | `getSubControllers()` Gets the SubControllers attribute of the GenericController object
    `protected void` | `incrementCurrent()` Increments the current pointer; called by currentReturnedNull to move the controller on to its next child.
    `protected void` | `incrementIterCount()`
    `void` | `initialize()` Called to initialize a controller at the beginning of a test iteration.
    `protected void` | `initializeSubControllers()` (re)Initializes sub controllers See Bug 50032
    `boolean` | `isDone()` Indicates whether the Controller is done delivering Samplers for the rest of the test.
    `protected boolean` | `isFirst()`
    `Sampler` | `next()` Determines the next sampler to be processed.
    `protected Sampler` | `nextIsAController(Controller controller)` Called by `next()` if the element is a Controller, and returns the next sampler from the controller.
    `protected Sampler` | `nextIsASampler(Sampler element)` Increment the current pointer and return the element.
    `protected Sampler` | `nextIsNull()` Called by `next()` when `getCurrentElement()` returns `null`.
    `protected Object` | `readResolve()`
    `protected void` | `reInitialize()` Resets the controller (called after execution of last child of controller): resetCurrent() (i.e.
    `protected void` | `removeCurrentElement()`
    `void` | `removeIterationListener(LoopIterationListener iterationListener)` Remove listener
    `protected void` | `resetCurrent()`
    `protected void` | `resetIterCount()`
    `protected void` | `setCurrentElement(TestElement currentElement)` Empty implementation - does nothing.
    `protected void` | `setDone(boolean done)`
    `void` | `setFirst(boolean b)` If b is true, it means first is reset which means Controller has executed all its children
    `void` | `triggerEndOfLoop()` Trigger end of loop condition on controller (used by Start Next Loop feature)

    - ### Methods inherited from class org.apache.jmeter.testelement.AbstractTestElement

      `addPropertiesValues, addProperty, addProperty, canRemove, clear, clearTemporary, clearTestElementChildren, clone, emptyTemporary, equals, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getSearchableTokens, getThreadContext, getThreadName, hashCode, isEnabled, isRunningVersion, isTemporary, logProperties, mergeIn, propertyIterator, recoverRunningVersion, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse, traverseCollection, traverseMap, traverseProperty`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.jmeter.testelement.TestElement

      `canRemove, clear, clearTestElementChildren, clone, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getThreadContext, getThreadName, isEnabled, isRunningVersion, isTemporary, propertyIterator, recoverRunningVersion, removed, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse`

- - ### Field Detail

    - #### subControllersAndSamplers

          protected transient List<TestElement> subControllersAndSamplers

    - #### current

          protected transient int current

      Index of current sub controller or sampler

  - ### Constructor Detail

    - #### GenericController

          public GenericController()

      Creates a Generic Controller

  - ### Method Detail

    - #### initialize

          public void initialize()

      Description copied from interface: `Controller`
      Called to initialize a controller at the beginning of a test iteration.
      Specified by:
        `initialize` in interface `Controller`

    - #### initializeSubControllers

          protected void initializeSubControllers()

      (re)Initializes sub controllers See Bug 50032

    - #### reInitialize

          protected void reInitialize()

      Resets the controller (called after execution of last child of controller):
      - resetCurrent() (i.e. current=0)
      - increment iteration count
      - sets first=true
      - recoverRunningVersion() to set the controller back to the initial state

    - #### next

          public Sampler next()

      Determines the next sampler to be processed.

      If `isDone()` is `true`, returns null.

      Gets the list element using current pointer. If this is `null`, calls `nextIsNull()`.

      If the list element is a `Sampler`, calls `nextIsASampler(Sampler)`, otherwise calls `nextIsAController(Controller)`

      If any of the called methods throws `NextIsNullException`, returns `null`, otherwise the value obtained above is returned.

      Specified by:
        `next` in interface `Controller`
      Returns:
        the next sampler or `null`

    - #### isDone

          public boolean isDone()

      Description copied from interface: `Controller`
      Indicates whether the Controller is done delivering Samplers for the rest of the test. When the top-level controller returns true to JMeterThread, the thread is complete.
      Specified by:
        `isDone` in interface `Controller`
      Returns:
        boolean
      See Also:
        `Controller.isDone()`

    - #### setDone

          protected void setDone(boolean done)

    - #### isFirst

          protected boolean isFirst()

      Returns:
        true if it's the controller is returning the first of its children

    - #### setFirst

          public void setFirst(boolean b)

      If b is true, it means first is reset which means Controller has executed all its children
      Parameters:
        `b` - The flag, whether first is reseted

    - #### nextIsAController

          protected Sampler nextIsAController(Controller controller)
                                       throws NextIsNullException

      Called by `next()` if the element is a Controller, and returns the next sampler from the controller. If this is `null`, then updates the current pointer and makes recursive call to `next()`.
      Parameters:
        `controller` - the current next element
      Returns:
        the next sampler
      Throws:
        `NextIsNullException` - when the end of the list has already been reached

    - #### nextIsASampler

          protected Sampler nextIsASampler(Sampler element)
                                    throws NextIsNullException

      Increment the current pointer and return the element. Called by `next()` if the element is a sampler. (May be overridden by sub-classes).
      Parameters:
        `element` - the current next element
      Returns:
        input element
      Throws:
        `NextIsNullException` - when the end of the list has already been reached

    - #### nextIsNull

          protected Sampler nextIsNull()
                                throws NextIsNullException

      Called by `next()` when `getCurrentElement()` returns `null`. Reinitialises the controller.
      Returns:
        null (always, for this class)
      Throws:
        `NextIsNullException` - when the end of the list has already been reached

    - #### triggerEndOfLoop

          public void triggerEndOfLoop()

      Trigger end of loop condition on controller (used by Start Next Loop feature)
      Specified by:
        `triggerEndOfLoop` in interface `Controller`

    - #### currentReturnedNull

          protected void currentReturnedNull(Controller c)

      If the controller is done, remove it from the list, otherwise increment to next entry in list.
      Parameters:
        `c` - controller

    - #### getSubControllers

          protected List<TestElement> getSubControllers()

      Gets the SubControllers attribute of the GenericController object
      Returns:
        the SubControllers value

    - #### setCurrentElement

          protected void setCurrentElement(TestElement currentElement)
                                    throws NextIsNullException

      Empty implementation - does nothing.
      Parameters:
        `currentElement` - the current element
      Throws:
        `NextIsNullException` - when the list has been completed already

    - #### getCurrentElement

          protected TestElement getCurrentElement()
                                           throws NextIsNullException

      Gets the element indicated by the `current` index, if one exists, from the `subControllersAndSamplers` list.

      If the `subControllersAndSamplers` list is empty, then set done = true, and throw NextIsNullException.

      Returns:
        the current element - or null if current index too large
      Throws:
        `NextIsNullException` - if list is empty

    - #### removeCurrentElement

          protected void removeCurrentElement()

    - #### incrementCurrent

          protected void incrementCurrent()

      Increments the current pointer; called by currentReturnedNull to move the controller on to its next child.

    - #### resetCurrent

          protected void resetCurrent()

    - #### addTestElement

          public void addTestElement(TestElement child)

      Description copied from class: `AbstractTestElement`
      Specified by:
        `addTestElement` in interface `TestElement`
      Overrides:
        `addTestElement` in class `AbstractTestElement`

    - #### addTestElementOnce

          public final boolean addTestElementOnce(TestElement child)

      Add child test element only if it has not already been added.

      Only for use by TestCompiler.

      Specified by:
        `addTestElementOnce` in interface `TestCompilerHelper`
      Parameters:
        `child` - the `TestElement` to be added
      Returns:
        `true` if the child was added

    - #### addIterationListener

          public void addIterationListener(LoopIterationListener lis)

      Description copied from interface: `Controller`
      Controllers have to notify listeners of when they begin an iteration through their sub-elements.
      Specified by:
        `addIterationListener` in interface `Controller`
      Parameters:
        `lis` - The `LoopIterationListener` to add

    - #### removeIterationListener

          public void removeIterationListener(LoopIterationListener iterationListener)

      Remove listener
      Specified by:
        `removeIterationListener` in interface `Controller`
      Parameters:
        `iterationListener` - `LoopIterationListener`

    - #### fireIterEvents

          protected void fireIterEvents()

    - #### fireIterationStart

          protected void fireIterationStart()

    - #### getIterCount

          protected int getIterCount()

    - #### incrementIterCount

          protected void incrementIterCount()

    - #### resetIterCount

          protected void resetIterCount()

    - #### readResolve

          protected Object readResolve()

Copyright © 1998-2022 Apache Software Foundation. All Rights Reserved.