Package: groovy.util

## [Java] Interface Factory

-     public interface Factory

  Defines lifecycle hooks used by FactoryBuilderSupport when creating nodes.

- - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public boolean` | `isHandlesNodeChildren()` Does this factory "Own" its child closure.
    `` | `public boolean` | `isLeaf()` Returns: true if no child closures should be processed
    `` | `public Object` | `newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes)` Parameters: `builder` - the FactoryBuilder
    `` | `public void` | `onFactoryRegistration(FactoryBuilderSupport builder, String registeredName, String registeredGroupName)` Called when a factory is registered to a builder
    `` | `public boolean` | `onHandleNodeAttributes(FactoryBuilderSupport builder, Object node, Map attributes)` Parameters: `builder` - the FactoryBuilder
    `` | `public boolean` | `onNodeChildren(FactoryBuilderSupport builder, Object node, Closure childContent)` Only called if it isLeaf is false and isHandlesNodeChildren is true
    `` | `public void` | `onNodeCompleted(FactoryBuilderSupport builder, Object parent, Object node)` Parameters: `builder` - the FactoryBuilder
    `` | `public void` | `setChild(FactoryBuilderSupport builder, Object parent, Object child)` Notifies the parent that a child node was created.
    `` | `public void` | `setParent(FactoryBuilderSupport builder, Object parent, Object child)` Connects a child node to its parent.

- - ### Method Detail

    - #### public boolean isHandlesNodeChildren()

      Does this factory "Own" its child closure.

      Returns:
        true if the factory should have onContentClosure() called, false if the builder should handle it

    - #### public boolean isLeaf()

      Returns:
        true if no child closures should be processed

    - #### public Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes)

      throws:
        InstantiationException if attempting to instantiate an interface or abstract class
      throws:
        IllegalAccessException if the instance can't be created due to a security violation
      Parameters:
        `builder` - the FactoryBuilder
        `name` - the name of the node being built
        `value` - the 'value' argument in the build node
        `attributes` - the attributes of the build arg
      Returns:
        the object created for the builder

    - #### public void onFactoryRegistration(FactoryBuilderSupport builder, String registeredName, String registeredGroupName)

      Called when a factory is registered to a builder

      Parameters:
        `builder` - the build the factory has been registered to
        `registeredName` - the name the factory has been registered under

    - #### public boolean onHandleNodeAttributes(FactoryBuilderSupport builder, Object node, Map attributes)

      Parameters:
        `builder` - the FactoryBuilder
        `node` - the node (returned from newINstance) to consider the attributes for
        `attributes` - the attributes, a mutable set
      Returns:
        true if the factory builder should use standard bean property matching for the remaining attributes

    - #### public boolean onNodeChildren(FactoryBuilderSupport builder, Object node, Closure childContent)

      Only called if it isLeaf is false and isHandlesNodeChildren is true

      Parameters:
        `builder` - the FactoryBuilder
        `node` - the node (returned from newINstance) to consider the attributes for
        `childContent` - the child content closure of the builder
      Returns:
        true if the factory builder should apply default node processing to the content child

    - #### public void onNodeCompleted(FactoryBuilderSupport builder, Object parent, Object node)

      Parameters:
        `builder` - the FactoryBuilder
        `parent` - the parent node (null if 'root')
        `node` - the node just completed

    - #### public void setChild(FactoryBuilderSupport builder, Object parent, Object child)

      Notifies the parent that a child node was created.

      Parameters:
        `builder` - the FactoryBuilder
        `parent` - the parent node, or `null` for the root
        `child` - the child node

    - #### public void setParent(FactoryBuilderSupport builder, Object parent, Object child)

      Connects a child node to its parent.

      Parameters:
        `builder` - the FactoryBuilder
        `parent` - the parent node, or `null` for the root
        `child` - the child node