Package groovy.util

# Interface Factory

All Known Implementing Classes:
  `AbstractFactory`, `CustomizersFactory`, `ImportCustomizerFactory`, `InlinedASTCustomizerFactory`, `SecureASTCustomizerFactory`, `SourceAwareCustomizerFactory`

public interface Factory
Defines lifecycle hooks used by `FactoryBuilderSupport` when creating nodes.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `isHandlesNodeChildren()`
  Does this factory "Own" its child closure.
  `boolean`
  `isLeaf()`
  `Object`
  `newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes)`
  `void`
  `onFactoryRegistration(FactoryBuilderSupport builder, String registeredName, String registeredGroupName)`
  Called when a factory is registered to a builder
  `boolean`
  `onHandleNodeAttributes(FactoryBuilderSupport builder, Object node, Map attributes)`
  `boolean`
  `onNodeChildren(FactoryBuilderSupport builder, Object node, Closure childContent)`
  Only called if it isLeaf is false and isHandlesNodeChildren is true
  `void`
  `onNodeCompleted(FactoryBuilderSupport builder, Object parent, Object node)`
  `void`
  `setChild(FactoryBuilderSupport builder, Object parent, Object child)`
  Notifies the parent that a child node was created.
  `void`
  `setParent(FactoryBuilderSupport builder, Object parent, Object child)`
  Connects a child node to its parent.

- ## Method Details

  - ### isLeaf

    boolean isLeaf()
    Returns:
      true if no child closures should be processed

  - ### isHandlesNodeChildren

    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

  - ### onFactoryRegistration

    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

  - ### newInstance

    Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) throws InstantiationException, IllegalAccessException
    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
    Throws:
      `InstantiationException` - if attempting to instantiate an interface or abstract class
      `IllegalAccessException` - if the instance can't be created due to a security violation

  - ### onHandleNodeAttributes

    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

  - ### onNodeChildren

    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

  - ### onNodeCompleted

    void onNodeCompleted(FactoryBuilderSupport builder, Object parent, Object node)
    Parameters:
      `builder` - the FactoryBuilder
      `parent` - the parent node (null if 'root')
      `node` - the node just completed

  - ### setParent

    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

  - ### setChild

    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