# Class ModuleController

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

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

public class ModuleController extends GenericController implements ReplaceableController
The goal of ModuleController is to add modularity to JMeter. The general idea is that web applications consist of small units of functionality (i.e. Logon, Create Account, Logoff...) which consist of requests that implement the functionality. These small units of functionality can be stored in SimpleControllers as modules that can be linked together quickly to form tests. ModuleController facilitates this by acting as a pointer to any controller that sits under the WorkBench. The controller and it's subelements will be substituted in place of the ModuleController at runtime. Config elements can be attached to the ModuleController to alter the functionality (which user logs in, which account is created, etc.) of the module.

See Also:
  - Serialized Form

## Field Summary

### Fields inherited from class GenericController

`current, subControllersAndSamplers`

### Fields inherited from interface TestElement

`COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

## Constructor Summary

Constructors
Constructor
Description
`ModuleController()`
No-arg constructor

## Method Summary

Modifier and Type
Method
Description
`Object`
`clone()`
`List<?>`
`getNodePath()`
`HashTree`
`getReplacementSubTree()`
Used to replace the test execution tree (usually by adding the subelements of the TestElement that is replacing the ReplaceableController.
`JMeterTreeNode`
`getSelectedNode()`
Gets the (@link JMeterTreeNode) for the Controller
`void`
`resolveReplacementSubTree(JMeterTreeNode context)`
Compute the replacement tree.
`void`
`setSelectedNode(JMeterTreeNode tn)`
Sets the (@link JMeterTreeNode) which represents the controller which this object is pointing to.

### Methods inherited from class GenericController

`addIterationListener, addTestElement, addTestElementOnce, currentReturnedNull, fireIterationStart, fireIterEvents, getCurrentElement, getIterCount, getSubControllers, incrementCurrent, incrementIterCount, initialize, initializeSubControllers, isDone, isFirst, next, nextIsAController, nextIsASampler, nextIsNull, readResolve, reInitialize, reInitializeSubController, removeCurrentElement, removeIterationListener, resetCurrent, resetIterCount, setCurrentElement, setDone, setFirst, triggerEndOfLoop`

### Methods inherited from class AbstractTestElement

`addPropertiesValues, addProperty, addProperty, canRemove, clear, clearTemporary, clearTestElementChildren, 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, 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`

## Constructor Details

### ModuleController

public ModuleController()
No-arg constructor

See Also:
  - `Object()`

## Method Details

### clone

public Object clone()

Specified by:
  `clone` in interface `TestElement`
Overrides:
  `clone` in class `AbstractTestElement`

### setSelectedNode

public void setSelectedNode(JMeterTreeNode tn)
Sets the (@link JMeterTreeNode) which represents the controller which this object is pointing to. Used for building the test case upon execution.

Parameters:
  `tn` - JMeterTreeNode
See Also:
  - `JMeterTreeNode`

### getSelectedNode

public JMeterTreeNode getSelectedNode()
Gets the (@link JMeterTreeNode) for the Controller

Returns:
  JMeterTreeNode

### getNodePath

public List<?> getNodePath()

### resolveReplacementSubTree

public void resolveReplacementSubTree(JMeterTreeNode context)
Compute the replacement tree.

Specified by:
  `resolveReplacementSubTree` in interface `ReplaceableController`
Parameters:
  `context` - the starting point of the replacement

### getReplacementSubTree

public HashTree getReplacementSubTree()
Used to replace the test execution tree (usually by adding the subelements of the TestElement that is replacing the ReplaceableController.

Specified by:
  `getReplacementSubTree` in interface `ReplaceableController`
Returns:
  The replaced sub tree
See Also:
  - `HashTree`