groovytools.builder
Class CollectionSchemaNode
java.lang.Object
groovy.util.Node
groovytools.builder.SchemaNode
groovytools.builder.CollectionSchemaNode
- All Implemented Interfaces:
- Factory, Serializable
public class CollectionSchemaNode
- extends SchemaNode
- implements Factory
SchemaNode
sub-class that handles certain collection behaviors.
- Version:
- $Id: CollectionSchemaNode.java 62 2009-07-28 07:32:10Z didge $
- Author:
- didge
- See Also:
- Serialized Form
Method Summary |
void |
checkDef(FactoryBuilderSupport builder,
Object collectionParent)
|
void |
checkSize(Object collectionParent)
|
SchemaNode |
deepCopy()
|
Object |
getParentBean()
Returns the build-time parent of the collection. |
boolean |
isHandlesNodeChildren()
|
boolean |
isLeaf()
|
protected Object |
key(Object keyAttr,
Object child)
Returns the key that may be used to add a child to the collection. |
Object |
newInstance(FactoryBuilderSupport builder,
Object name,
Object value,
Map attributes)
|
void |
onFactoryRegistration(FactoryBuilderSupport builder,
String registerdName,
String registeredGroupName)
|
boolean |
onHandleNodeAttributes(FactoryBuilderSupport builder,
Object node,
Map attributes)
|
boolean |
onNodeChildren(FactoryBuilderSupport builder,
Object node,
Closure childContent)
|
void |
onNodeCompleted(FactoryBuilderSupport builder,
Object parent,
Object node)
|
void |
setChild(FactoryBuilderSupport builder,
Object parent,
Object child)
Sets the child on the parent . |
void |
setParent(FactoryBuilderSupport builder,
Object parent,
Object child)
|
protected Object |
size(Object sizeAttr,
Object parent)
|
Methods inherited from class groovy.util.Node |
append, attribute, attributes, breadthFirst, children, depthFirst, get, getAt, iterator, name, print, remove, setValue, text, toString, value |
CollectionSchemaNode
public CollectionSchemaNode(SchemaNode parent,
Object name)
CollectionSchemaNode
public CollectionSchemaNode(SchemaNode parent,
Object name,
Object value)
CollectionSchemaNode
public CollectionSchemaNode(SchemaNode parent,
Object name,
Map attributes)
CollectionSchemaNode
public CollectionSchemaNode(SchemaNode parent,
Object name,
Map attributes,
Object value)
isLeaf
public boolean isLeaf()
- Specified by:
isLeaf
in interface Factory
newInstance
public Object newInstance(FactoryBuilderSupport builder,
Object name,
Object value,
Map attributes)
throws InstantiationException,
IllegalAccessException
- Specified by:
newInstance
in interface Factory
- Throws:
InstantiationException
IllegalAccessException
onHandleNodeAttributes
public boolean onHandleNodeAttributes(FactoryBuilderSupport builder,
Object node,
Map attributes)
- Specified by:
onHandleNodeAttributes
in interface Factory
onNodeCompleted
public void onNodeCompleted(FactoryBuilderSupport builder,
Object parent,
Object node)
- Specified by:
onNodeCompleted
in interface Factory
setParent
public void setParent(FactoryBuilderSupport builder,
Object parent,
Object child)
- Specified by:
setParent
in interface Factory
getParentBean
public Object getParentBean()
- Returns the build-time parent of the collection.
- Returns:
- see above
key
protected Object key(Object keyAttr,
Object child)
- Returns the key that may be used to add a child to the collection.
- Parameters:
keyAttr
- may be a property name or closure accepting the child as the only argumentchild
- the child
- Returns:
- see above
setChild
public void setChild(FactoryBuilderSupport builder,
Object parent,
Object child)
- Sets the
child
on the parent
.
By default, reflection is used to find collection on the parent
using the
name of the schema. For example, if the schema's name is foos
then this method will attempt to access
the collection using the method, foos()
. The access method of the collection may be overridden with the
attribute, collection
. If collection
is a String
, then the collection is accessed
as a property of the parent
using the collection
value as the property's name. However, if the
collection
attribute value is a Closure
where the first argument is the parent
,
then the closure will be used to access the collection.
When the collection object is not accessible or updateable, the add
attribute must be used to specify the name of an
alternate method accepting a single argument (the child
) or a Closure
accepting two arguments (the parent
and the child
).
For example, if foos()
is not available or does not return an updateable collection, then 'add' maybe set to either
addFoo
or { p, c -> p.addFoo(c) }
.
When using the attribute
the collection
attribute is ignored since it is superflous.
In either case, if the collection is a Map
, then the key
attribute must be specified in order
to retrieve the child
's key. The key
may either specify a property name or a Closure
accepting one argument (the child
).
The value returned by calling key
on the child
, if it exists, is to put the
child
into the parent
's collection.
The following shows the different ways in which to use the attributes described above:
parent {
collections {
listOfChildren { // simple example of a collection of child objects
child()
}
listOfChildren2(collection: 'listOfChildren') { // uses the collection above
child()
}
listOfChildren3(collection: { p -> p.getListOfChildren() } ) {
child()
}
listOfChildren4(add: 'addChild' ) {
child()
}
listOfChildren5(add: { p, c -> p.addChild(c) } ) {
child()
}
mapOfChildren(key: 'name') { // simple example of a Map of child objects, using getName() as the key
child(name: 'Jer')
}
mapOfChildren2(collection: 'mapOfChildren', key: 'name') {
child(name: 'Joe')
}
mapOfChildren3(collection: { p -> getMapOfChildren() }, key: 'name') {
child(name: 'Jen')
}
mapOfChildren4(add: 'addChild', key: 'name') { // note, addChild called like this: p.addChild(key, child)
child(name: 'Jay')
}
mapOfChildren5(add: { p, k, c -> p.addChild(k, c) }, key: 'name') {
child(name: 'Jan')
}
mapOfChildren6(add: { p, c -> p.addChild(c.getName(), c) }) {
child(name: 'Jon')
}
}
- Specified by:
setChild
in interface Factory
- Parameters:
builder
- parent
- child
-
size
protected Object size(Object sizeAttr,
Object parent)
checkDef
public void checkDef(FactoryBuilderSupport builder,
Object collectionParent)
checkSize
public void checkSize(Object collectionParent)
isHandlesNodeChildren
public boolean isHandlesNodeChildren()
onFactoryRegistration
public void onFactoryRegistration(FactoryBuilderSupport builder,
String registerdName,
String registeredGroupName)
onNodeChildren
public boolean onNodeChildren(FactoryBuilderSupport builder,
Object node,
Closure childContent)
deepCopy
public SchemaNode deepCopy()
- Overrides:
deepCopy
in class SchemaNode
Copyright © 2008 FoundryLogic, LLC. All Rights Reserved.