Package: groovy.util

## [Java] Class BuilderSupport

- groovy.util.BuilderSupport

-     public abstract class BuilderSupport
      extends GroovyObjectSupport

  Base class for creating arbitrary nested trees of objects or events.

- - ### Constructor Summary

    Constructors
    Constructor and description
    `BuilderSupport()`
    `BuilderSupport(BuilderSupport proxyBuilder)`
    `BuilderSupport(Closure nameMappingClosure, BuilderSupport proxyBuilder)`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `protected abstract Object` | `createNode(Object name)`
    `` | `protected abstract Object` | `createNode(Object name, Object value)`
    `` | `protected abstract Object` | `createNode(Object name, Map attributes)`
    `` | `protected abstract Object` | `createNode(Object name, Map attributes, Object value)`
    `` | `protected Object` | `doInvokeMethod(String methodName, Object name, Object args)`
    `` | `protected Object` | `getCurrent()`
    `` | `protected Object` | `getName(String methodName)` A hook to allow names to be converted into some other object such as a QName in XML or ObjectName in JMX.
    `` | `public Object` | `invokeMethod(String methodName)` Convenience method when no arguments are required.
    `` | `public Object` | `invokeMethod(String methodName, Object args)`
    `` | `protected void` | `nodeCompleted(Object parent, Object node)` A hook to allow nodes to be processed once they have had all of their children applied.
    `` | `protected Object` | `postNodeCompletion(Object parent, Object node)` A hook to allow nodes to be processed once they have had all of their children applied and allows the actual node object that represents the Markup element to be changed.
    `` | `protected void` | `setClosureDelegate(Closure closure, Object node)` A strategy method to allow derived builders to use builder-trees and switch in different kinds of builders.
    `` | `protected void` | `setCurrent(Object current)`
    `` | `protected abstract void` | `setParent(Object parent, Object child)`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class GroovyObjectSupport` | `getMetaClass, setMetaClass`

- - ### Constructor Detail

    - #### public BuilderSupport()

    - #### public BuilderSupport(BuilderSupport proxyBuilder)

    - #### public BuilderSupport(@ClosureParams(value=SimpleType.class, options="java.lang.String")
      Closure nameMappingClosure, BuilderSupport proxyBuilder)

  - ### Method Detail

    - #### protected abstract Object createNode(Object name)

    - #### protected abstract Object createNode(Object name, Object value)

    - #### protected abstract Object createNode(Object name, Map attributes)

    - #### protected abstract Object createNode(Object name, Map attributes, Object value)

    - #### protected Object doInvokeMethod(String methodName, Object name, Object args)

    - #### protected Object getCurrent()

    - #### protected Object getName(String methodName)

      A hook to allow names to be converted into some other object such as a QName in XML or ObjectName in JMX.

      Parameters:
        `methodName` - the name of the desired method
      Returns:
        the object representing the name

    - #### public Object invokeMethod(String methodName)

      Convenience method when no arguments are required.

      Parameters:
        `methodName` - the name of the method to invoke
      Returns:
        the result of the call

    - #### @Override
      public Object invokeMethod(String methodName, Object args)

    - #### protected void nodeCompleted(Object parent, Object node)

      A hook to allow nodes to be processed once they have had all of their children applied.

      Parameters:
        `node` - the current node being processed
        `parent` - the parent of the node being processed

    - #### protected Object postNodeCompletion(Object parent, Object node)

      A hook to allow nodes to be processed once they have had all of their children applied and allows the actual node object that represents the Markup element to be changed.

      Parameters:
        `node` - the current node being processed
        `parent` - the parent of the node being processed
      Returns:
        the node, possibly new, that represents the markup element

    - #### protected void setClosureDelegate(Closure closure, Object node)

      A strategy method to allow derived builders to use builder-trees and switch in different kinds of builders. This method should call the setDelegate() method on the closure which by default passes in this but if node is-a builder we could pass that in instead (or do something wacky too).

      Parameters:
        `closure` - the closure on which to call setDelegate()
        `node` - the node value that we've just created, which could be a builder

    - #### protected void setCurrent(Object current)

    - #### protected abstract void setParent(Object parent, Object child)