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 by JMeterThread as follows:
while (running && (sampler = controller.next()) != null)
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected int
current
Index of current sub controller or samplerprotected List<TestElement>
subControllersAndSamplers
-
Fields inherited from interface org.apache.jmeter.testelement.TestElement
COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS
-
-
Constructor Summary
Constructors Constructor Description GenericController()
Creates a Generic Controller
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method 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 thecurrent
index, if one exists, from thesubControllersAndSamplers
list.protected int
getIterCount()
protected List<TestElement>
getSubControllers()
Gets the SubControllers attribute of the GenericController objectprotected 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 50032boolean
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 bynext()
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()
protected Object
readResolve()
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 stateprotected void
reInitializeSubController()
Deprecated.replaced by GeneriController#initializeSubControllersprotected void
removeCurrentElement()
void
removeIterationListener(LoopIterationListener iterationListener)
Remove listenerprotected 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 childrenvoid
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, 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
-
-
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 interfaceController
-
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()
istrue
, returns null.Gets the list element using current pointer. If this is
null
, callsnextIsNull()
.If the list element is a
Sampler
, callsnextIsASampler(Sampler)
, otherwise callsnextIsAController(Controller)
If any of the called methods throws
NextIsNullException
, returnsnull
, otherwise the value obtained above is returned.- Specified by:
next
in interfaceController
- 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 interfaceController
- 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 bynext()
if the element is a Controller, and returns the next sampler from the controller. If this isnull
, then updates the current pointer and makes recursive call tonext()
.- 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 bynext()
if the element is a sampler. (May be overriden 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
- 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 interfaceController
-
reInitializeSubController
protected void reInitializeSubController()
Deprecated.replaced by GeneriController#initializeSubControllersCalled to re-initialize a index of controller's elements (Bug 50032)
-
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 thesubControllersAndSamplers
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 interfaceTestElement
- Overrides:
addTestElement
in classAbstractTestElement
-
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 interfaceTestCompilerHelper
- Parameters:
child
- theTestElement
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 interfaceController
- Parameters:
lis
- TheLoopIterationListener
to add
-
removeIterationListener
public void removeIterationListener(LoopIterationListener iterationListener)
Remove listener- Specified by:
removeIterationListener
in interfaceController
- 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()
-
-