# Class InterleaveControl

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

All Implemented Interfaces:
  `Serializable, Cloneable, Controller, Searchable, TestElement, TestCompilerHelper`

Direct Known Subclasses:
  `RandomController`

public class InterleaveControl extends GenericController implements Serializable
Alternate among each of the children controllers or samplers for each loop iteration

See Also:
  - Serialized Form

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`IGNORE_SUB_CONTROLLERS`
`static final int`
`USE_SUB_CONTROLLERS`

### Fields inherited from class GenericController

`current, subControllersAndSamplers`

### Fields inherited from interface TestElement

`COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

## Constructor Summary

Constructors
Constructor
Description
`InterleaveControl()`
Constructor for the InterleaveControl object

## Method Summary

Modifier and Type
Method
Description
`protected void`
`currentReturnedNull(Controller c)`
If the controller is done, remove it from the list, otherwise increment to next entry in list.
`int`
`getStyle()`
`protected void`
`incrementCurrent()`
Increments the current pointer; called by currentReturnedNull to move the controller on to its next child.
`protected boolean`
`isSkipNext()`
`Sampler`
`next()`
Determines the next sampler to be processed.
`protected Sampler`
`nextIsAController(Controller controller)`
Called by `GenericController.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()`
If the current is null, reset and continue searching.
`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
`protected void`
`setCurrentElement(TestElement currentElement)`
Empty implementation - does nothing.
`protected void`
`setSkipNext(boolean skipNext)`
`void`
`setStyle(int style)`

### Methods inherited from class GenericController

`addIterationListener, addTestElement, addTestElementOnce, fireIterationStart, fireIterEvents, getCurrentElement, getIterCount, getSubControllers, incrementIterCount, initialize, initializeSubControllers, isDone, isFirst, readResolve, reInitializeSubController, removeCurrentElement, removeIterationListener, resetCurrent, resetIterCount, setDone, setFirst, triggerEndOfLoop`

### Methods inherited from class 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 Object

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

### Methods inherited from interface 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, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse`

## Field Details

### IGNORE_SUB_CONTROLLERS

public static final int IGNORE_SUB_CONTROLLERS

See Also:
  - Constant Field Values

### USE_SUB_CONTROLLERS

public static final int USE_SUB_CONTROLLERS

See Also:
  - Constant Field Values

## Constructor Details

### InterleaveControl

public InterleaveControl()
Constructor for the InterleaveControl object

## Method Details

### reInitialize

public 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`

### setStyle

public void setStyle(int style)

### getStyle

public int getStyle()

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

### nextIsAController

protected Sampler nextIsAController(Controller controller) throws NextIsNullException
Called by `GenericController.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 `GenericController.next()`.

Overrides:
  `nextIsAController` in class `GenericController`
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 `GenericController.next()` if the element is a sampler. (May be overriden by sub-classes).

Overrides:
  `nextIsASampler` in class `GenericController`
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()
If the current is null, reset and continue searching. The searchStart attribute will break us off when we start a repeat.

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

Overrides:
  `nextIsNull` in class `GenericController`
Returns:
  null (always, for this class)

### setCurrentElement

protected void setCurrentElement(TestElement currentElement) throws NextIsNullException
Empty implementation - does nothing.

Overrides:
  `setCurrentElement` in class `GenericController`
Parameters:
  `currentElement` - the current element
Throws:
  `NextIsNullException` - when the list has been completed already

### currentReturnedNull

protected void currentReturnedNull(Controller c)
If the controller is done, remove it from the list, otherwise increment to next entry in list.

Overrides:
  `currentReturnedNull` in class `GenericController`
Parameters:
  `c` - controller

### isSkipNext

protected boolean isSkipNext()

### setSkipNext

protected void setSkipNext(boolean skipNext)

### incrementCurrent

protected void incrementCurrent()
Increments the current pointer; called by currentReturnedNull to move the controller on to its next child.

Overrides:
  `incrementCurrent` in class `GenericController`