Class GenericController

java.lang.Object
org.apache.jmeter.testelement.AbstractTestElement
org.apache.jmeter.control.GenericController
All Implemented Interfaces:
Serializable, Cloneable, Controller, Searchable, org.apache.jmeter.testelement.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:
  • Field Details

    • subControllersAndSamplers

      protected transient List<org.apache.jmeter.testelement.TestElement> subControllersAndSamplers
    • current

      protected transient int current
      Index of current sub controller or sampler
  • Constructor Details

    • GenericController

      public GenericController()
      Creates a Generic Controller
  • Method Details

    • getSchema

      public org.apache.jmeter.control.GenericControllerSchema getSchema()
      Specified by:
      getSchema in interface org.apache.jmeter.testelement.TestElement
    • getProps

      public org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends GenericController,? extends org.apache.jmeter.control.GenericControllerSchema> getProps()
      Specified by:
      getProps in interface org.apache.jmeter.testelement.TestElement
    • 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:
    • 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<org.apache.jmeter.testelement.TestElement> getSubControllers()
      Gets the SubControllers attribute of the GenericController object
      Returns:
      the SubControllers value
    • setCurrentElement

      protected void setCurrentElement(org.apache.jmeter.testelement.TestElement currentElement) throws NextIsNullException
      Empty implementation - does nothing.
      Parameters:
      currentElement - the current element
      Throws:
      NextIsNullException - when the list has been completed already
    • getCurrentElement

      protected org.apache.jmeter.testelement.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(org.apache.jmeter.testelement.TestElement child)
      Description copied from class: AbstractTestElement
      Specified by:
      addTestElement in interface org.apache.jmeter.testelement.TestElement
      Overrides:
      addTestElement in class AbstractTestElement
    • addTestElementOnce

      public final boolean addTestElementOnce(org.apache.jmeter.testelement.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()