org.apache.jmeter.control

## Class LoopController

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

All Implemented Interfaces:
  Serializable, Cloneable, Controller, IteratingController, LoopIterationListener, Searchable, TestElement, TestCompilerHelper

    public class LoopController
    extends GenericController
    implements Serializable, IteratingController, LoopIterationListener

Class that implements the Loop Controller, ie iterate infinitely or a configured number of times

See Also:
  Serialized Form

### Field Summary

Fields
`static int` `INFINITE_LOOP_COUNT`
`static String` `LOOPS`

### Fields inherited from class org.apache.jmeter.control.GenericController

`current, subControllersAndSamplers`

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

`COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

### Constructor Summary

Constructors
Constructor and Description
`LoopController()`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `breakLoop()` Break loop ("break" keyword equivalent)
`protected int` `getIterCount()`
`int` `getLoops()`
`String` `getLoopString()`
`protected void` `incrementLoopCount()`
`void` `iterationStart(LoopIterationEvent iterEvent)` Called when a loop iteration is about to start.
`Sampler` `next()` Determines the next sampler to be processed.
`protected Sampler` `nextIsNull()` Called by `GenericController.next()` when `GenericController.getCurrentElement()` returns `null`.
`protected void` `reInitialize()` Resets the controller (called after execution of last child of controller): resetCurrent() (i.e.
`protected void` `resetLoopCount()`
`void` `setContinueForever(boolean forever)` Determines whether the loop will return any samples if it is rerun.
`protected void` `setDone(boolean done)`
`void` `setLoops(int loops)`
`void` `setLoops(String loopValue)`
`void` `startNextLoop()` Start next iteration
`void` `triggerEndOfLoop()` Trigger end of loop condition on controller (used by Start Next Loop feature)

### Methods inherited from class org.apache.jmeter.control.GenericController

`addIterationListener, addTestElement, addTestElementOnce, currentReturnedNull, fireIterationStart, fireIterEvents, getCurrentElement, getSubControllers, incrementCurrent, incrementIterCount, initialize, initializeSubControllers, isDone, isFirst, nextIsAController, nextIsASampler, readResolve, removeCurrentElement, removeIterationListener, resetCurrent, resetIterCount, setCurrentElement, setFirst`

### 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.control.IteratingController

`updateIterationIndex`

### 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

#### INFINITE_LOOP_COUNT

    public static final int INFINITE_LOOP_COUNT

See Also:
  Constant Field Values

#### LOOPS

    public static final String LOOPS

See Also:
  Constant Field Values

### Constructor Detail

#### LoopController

    public LoopController()

### Method Detail

#### setLoops

    public void setLoops(int loops)

#### setLoops

    public void setLoops(String loopValue)

#### getLoops

    public int getLoops()

#### getLoopString

    public String getLoopString()

#### setContinueForever

    public void setContinueForever(boolean forever)

Determines whether the loop will return any samples if it is rerun.

Parameters:
  `forever` - true if the loop must be reset after ending a run

#### next

    public Sampler next()

Determines the next sampler to be processed.

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

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

If the list element is a `Sampler`, calls `GenericController.nextIsASampler(Sampler)`, otherwise calls `GenericController.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`
Overrides:
  `next` in class `GenericController`
Returns:
  the next sampler or `null`

#### setDone

    protected void setDone(boolean done)

Overrides:
  `setDone` in class `GenericController`

#### nextIsNull

    protected Sampler nextIsNull()
                          throws NextIsNullException

Called by `GenericController.next()` when `GenericController.getCurrentElement()` returns `null`. Reinitialises the controller.

Overrides:
  `nextIsNull` in class `GenericController`
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`
Overrides:
  `triggerEndOfLoop` in class `GenericController`

#### incrementLoopCount

    protected void incrementLoopCount()

#### resetLoopCount

    protected void resetLoopCount()

#### getIterCount

    protected int getIterCount()

Overrides:
  `getIterCount` in class `GenericController`

#### 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

Overrides:
  `reInitialize` in class `GenericController`

#### startNextLoop

    public void startNextLoop()

Start next iteration

Specified by:
  `startNextLoop` in interface `IteratingController`

#### breakLoop

    public void breakLoop()

Description copied from interface: `IteratingController`
Break loop ("break" keyword equivalent)

Specified by:
  `breakLoop` in interface `IteratingController`

#### iterationStart

    public void iterationStart(LoopIterationEvent iterEvent)

Description copied from interface: `LoopIterationListener`
Called when a loop iteration is about to start.

Specified by:
  `iterationStart` in interface `LoopIterationListener`
Parameters:
  `iterEvent` - the event