class ShadowRemapper extends java.lang.Object implements Remapper
Remapper
interface which is used to
hold changes made by application during batch editing session. It uses real
back-end to retrieve unchanged data and holds changed data in memory. When
application accesses the data they are present as if all changes are
actually made in the real back-end.
General concept of used approach is rather simple: hold all changes which are necessary to convert backend into new state. While changes are not applied, information about these changes is used to handle requests so users of this class see backend as if all changes are already applied.
Internally all changes are stored in three maps - changed nodes, removed nodes and moved nodes. Changed nodes are those which were created or their content was changed. Removed nodes contains all nodes which were explicitly or implicitly (for example by moving) removed. And moved nodes map contains nodes which were moved on user request to the new location.
When changes are applied implementation performs operations in particular order which guarantees that operations are compatible. For example, when it moves node to the new location it adds all necessary intermediate nodes present in changed nodes map or when subtree is deleted, leaf nodes are deleted first, then deleted their parents, then parents of parents and so forth.
Modifier and Type | Field and Description |
---|---|
private Remapper |
backend
Real back-end with data
|
private java.util.Map<java.lang.String,DirNode> |
changed
Changed nodes
|
private static java.util.logging.Logger |
LOG
The logger instance.
|
private java.util.Map<java.lang.String,java.lang.String> |
moved
Moved nodes
|
protected java.lang.Object |
mutex
Object which is used for instance data access synchronization
|
private java.util.Map<java.lang.String,DirNode> |
removed
Removed nodes
|
Constructor and Description |
---|
ShadowRemapper(Remapper backend)
Construct an instance of the XmlRemapper for a given file.
|
Modifier and Type | Method and Description |
---|---|
private boolean |
addChangedNode(java.lang.String nodeId)
Add node with specified ID from list of changed nodes.
|
boolean |
addNode(java.lang.String nodeId,
java.lang.String nodeClass,
java.lang.String[] names,
java.lang.Object[] values)
Add new node of specified class with specified ID.
|
boolean |
addNodeBitField(java.lang.String nodeId,
java.lang.String name,
BitField value)
Add new
BitField value to the attribute. |
boolean |
addNodeBitSelector(java.lang.String nodeId,
java.lang.String name,
BitSelector value)
Add new
BitSelector value to the attribute. |
boolean |
addNodeBoolean(java.lang.String nodeId,
java.lang.String name,
boolean value)
Add new
boolean value to the attribute. |
boolean |
addNodeByteArray(java.lang.String nodeId,
java.lang.String name,
byte[] value)
Add new
byte array value to the attribute. |
boolean |
addNodeDate(java.lang.String nodeId,
java.lang.String name,
DateValue value)
Add new
DateValue value to the attribute. |
boolean |
addNodeDouble(java.lang.String nodeId,
java.lang.String name,
double value)
Add new
double value to the attribute. |
boolean |
addNodeInteger(java.lang.String nodeId,
java.lang.String name,
int value)
Add new
int value to the attribute. |
boolean |
addNodeString(java.lang.String nodeId,
java.lang.String name,
java.lang.String value)
Add new
String value to the attribute. |
boolean |
addNodeTime(java.lang.String nodeId,
java.lang.String name,
TimeValue value)
Add new
TimeValue value to the attribute. |
private boolean |
addNodeValue(java.lang.String nodeId,
java.lang.String name,
java.lang.Object value)
Worker routine for all addNodeXXX() methods.
|
private boolean |
applyChangedNodes()
Apply changed nodes to backend.
|
(package private) boolean |
applyChanges()
Apply changes to main back-end.
|
private boolean |
applyDeletedNodes(java.util.Collection<java.lang.String> forDelete)
Removed specified nodes to backend.
|
private boolean |
applyMovedNodes()
Apply moved nodes to backend.
|
boolean |
bind()
Initialise back-end and open session.
|
(package private) boolean |
commit(java.lang.String batchId,
java.lang.String backupId)
Perform all steps necessary to safely commit changes into backend.
|
(package private) boolean |
createBackup(java.lang.String baseId)
Create backup of all affected nodes.
|
boolean |
deleteNode(java.lang.String nodeId)
Remove specified node from the directory (unless node has children).
|
boolean |
deleteNodeAttribute(java.lang.String nodeId,
java.lang.String name)
Remove whole node attribute.
|
boolean |
deleteNodeAttributeValue(java.lang.String nodeId,
java.lang.String name,
int index)
Remove particular value from the node attribute.
|
AttributeDefinition[] |
enumerateNodeAttributes(java.lang.String nodeId)
Return list of all node attribute definitions.
|
java.lang.String[] |
enumerateNodes(java.lang.String nodeId)
Get direct list of children nodes for current node.
|
private java.util.Collection<java.lang.String> |
getChangedList()
Get list of all changed nodes.
|
AttributeDefinition[] |
getClassDefinition(java.lang.String className)
Get definitions for all class attributes.
|
java.lang.String[] |
getClassNames()
Get list of names of all defined classes.
|
private java.util.Collection<java.lang.String> |
getDeletedList()
Get list of all deleted nodes.
|
private java.util.Collection<java.lang.String> |
getMovedList()
Get list of all moved nodes.
|
private <T> T |
getNodeAttributeValue(java.lang.String nodeId,
java.lang.String name,
int index)
Return value of specified variable of node attribute.
|
BitField |
getNodeBitField(java.lang.String nodeId,
java.lang.String name,
int index)
Get
BitField attribute value for specified node ID and
index. |
BitSelector |
getNodeBitSelector(java.lang.String nodeId,
java.lang.String name,
int index)
Get
BitSelector attribute value for specified node ID and
index. |
java.lang.Boolean |
getNodeBoolean(java.lang.String nodeId,
java.lang.String name,
int index)
Get
Boolean attribute value for specified node ID and
index. |
byte[] |
getNodeByteArray(java.lang.String nodeId,
java.lang.String name,
int index)
Get
byte array attribute value for specified node ID and
index. |
java.lang.String |
getNodeClassName(java.lang.String nodeId)
Return class name for the specified node.
|
DateValue |
getNodeDate(java.lang.String nodeId,
java.lang.String name,
int index)
Get
DateValue attribute value for specified node ID and
index. |
java.lang.Double |
getNodeDouble(java.lang.String nodeId,
java.lang.String name,
int index)
Get
Double attribute value for specified node ID and
index. |
java.lang.Integer |
getNodeInteger(java.lang.String nodeId,
java.lang.String name,
int index)
Get
Integer attribute value for specified node ID and
index. |
java.lang.String |
getNodeString(java.lang.String nodeId,
java.lang.String name,
int index)
Get
String attribute value for specified node ID and
index. |
TimeValue |
getNodeTime(java.lang.String nodeId,
java.lang.String name,
int index)
Get
TimeValue attribute value for specified node ID and
index. |
private ObjectClass |
getObjClass(java.lang.String nodeClass)
Return ObjectClass for a given name.
|
protected boolean |
isBound()
Verifies that calling thread is properly bound.
|
boolean |
isClassImmutable(java.lang.String className)
Class is immutable if the back-end does not allow any change to its
state.
|
boolean |
isClassLeaf(java.lang.String className)
Class is leaf if no other object can be created under objects of the
class.
|
private DirNode |
loadNode(java.lang.String nodeId)
Load node data from real back-end.
|
private DirNode |
locateNode(java.lang.String nodeId,
boolean preload)
Find node in the local list of changed nodes or load it from real
back-end.
|
private static void |
logWarning(java.lang.String nodeId,
java.lang.String msg)
Logs a warning message.
|
boolean |
moveNode(java.lang.String nodeId,
java.lang.String newId)
Moves or renames the existing object, specified by nodeId to different
location.
|
boolean |
refresh()
No-op implementation.
|
(package private) boolean |
rollback(java.lang.String batchId,
java.lang.String backupId)
Roll back the changes made in source directory, using backup subtree as
an authoritative source of information.
|
private boolean |
rollbackWorker(java.lang.String batchId,
java.lang.String backupId)
Rollback worker method.
|
private static java.util.ArrayList<java.lang.String> |
selectChildNodes(java.lang.String baseId,
java.util.Collection<java.lang.String> source)
Select nodes which start from a given path.
|
boolean |
setNodeBitField(java.lang.String nodeId,
java.lang.String name,
int index,
BitField value)
Set
BitField attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeBitSelector(java.lang.String nodeId,
java.lang.String name,
int index,
BitSelector value)
Set
BitSelector attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeBoolean(java.lang.String nodeId,
java.lang.String name,
int index,
boolean value)
Set
boolean attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeByteArray(java.lang.String nodeId,
java.lang.String name,
int index,
byte[] value)
Set
byte array attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeDate(java.lang.String nodeId,
java.lang.String name,
int index,
DateValue value)
Set
DateValue attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeDouble(java.lang.String nodeId,
java.lang.String name,
int index,
double value)
Set
double attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeInteger(java.lang.String nodeId,
java.lang.String name,
int index,
int value)
Set
int attribute value for specified node ID, attribute
name and index. |
boolean |
setNodeString(java.lang.String nodeId,
java.lang.String name,
int index,
java.lang.String value)
Set
String attribute value for specified node ID,
attribute name and index. |
boolean |
setNodeTime(java.lang.String nodeId,
java.lang.String name,
int index,
TimeValue value)
Set
TimeValue attribute value for specified node ID,
attribute name and index. |
private boolean |
setNodeValue(java.lang.String nodeId,
java.lang.String name,
int index,
java.lang.Object value)
Set attribute value for specified node ID, attribute name and index.
|
private static java.lang.String[] |
toArray(java.util.Collection<java.lang.String> coll)
Convenience method which produces array of strings from any given string
collection.
|
boolean |
unbind()
Close session and shutdown back-end.
|
boolean |
update()
Update external storage.
|
private DirNode |
validateNode(java.lang.String nodeName,
java.lang.String nodeClass,
java.lang.String[] names,
java.lang.Object[] values)
Verify node initialisation data and make sure that such a node can be
created and it will be valid.
|
private static java.util.logging.Logger LOG
protected java.lang.Object mutex
private Remapper backend
private java.util.Map<java.lang.String,DirNode> changed
private java.util.Map<java.lang.String,DirNode> removed
private java.util.Map<java.lang.String,java.lang.String> moved
ShadowRemapper(Remapper backend)
backend
- private static void logWarning(java.lang.String nodeId, java.lang.String msg)
nodeId
- Node name that will become part of the resulting warning message.msg
- The message to log.public boolean addNode(java.lang.String nodeId, java.lang.String nodeClass, java.lang.String[] names, java.lang.Object[] values)
public boolean addNodeBitField(java.lang.String nodeId, java.lang.String name, BitField value)
BitField
value to the attribute.addNodeBitField
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeBitSelector(java.lang.String nodeId, java.lang.String name, BitSelector value)
BitSelector
value to the attribute.addNodeBitSelector
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeBoolean(java.lang.String nodeId, java.lang.String name, boolean value)
boolean
value to the attribute.addNodeBoolean
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeByteArray(java.lang.String nodeId, java.lang.String name, byte[] value)
byte array
value to the attribute.addNodeByteArray
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeDate(java.lang.String nodeId, java.lang.String name, DateValue value)
DateValue
value to the attribute.addNodeDate
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeDouble(java.lang.String nodeId, java.lang.String name, double value)
double
value to the attribute.addNodeDouble
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeInteger(java.lang.String nodeId, java.lang.String name, int value)
int
value to the attribute.addNodeInteger
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeString(java.lang.String nodeId, java.lang.String name, java.lang.String value)
String
value to the attribute.addNodeString
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean addNodeTime(java.lang.String nodeId, java.lang.String name, TimeValue value)
TimeValue
value to the attribute.addNodeTime
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean bind()
public boolean refresh()
public boolean deleteNode(java.lang.String nodeId)
deleteNode
in interface Remapper
nodeId
- Node identifier.true
if operation was successful and
false
otherwise.public boolean deleteNodeAttribute(java.lang.String nodeId, java.lang.String name)
deleteNodeAttribute
in interface Remapper
nodeId
- Node name.name
- Attribute name.true
if operation was successful and
false
otherwise.public boolean deleteNodeAttributeValue(java.lang.String nodeId, java.lang.String name, int index)
deleteNodeAttributeValue
in interface Remapper
nodeId
- Node name.name
- Attribute name.index
- Attribute value index.true
if operation was successful and
false
otherwise.public AttributeDefinition[] enumerateNodeAttributes(java.lang.String nodeId)
enumerateNodeAttributes
in interface Remapper
nodeId
- Node for which list of attributes is requested.public java.lang.String[] enumerateNodes(java.lang.String nodeId)
enumerateNodes
in interface Remapper
nodeId
- Node for which list of nodes is requested.public AttributeDefinition[] getClassDefinition(java.lang.String className)
getClassDefinition
in interface Remapper
className
- Name of the class.public java.lang.String[] getClassNames()
getClassNames
in interface Remapper
public BitField getNodeBitField(java.lang.String nodeId, java.lang.String name, int index)
BitField
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not BitField
then null
is returned.getNodeBitField
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public BitSelector getNodeBitSelector(java.lang.String nodeId, java.lang.String name, int index)
BitSelector
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not BitSelector
then
null
is returned.getNodeBitSelector
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public java.lang.Boolean getNodeBoolean(java.lang.String nodeId, java.lang.String name, int index)
Boolean
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not Boolean
then null
is returned.getNodeBoolean
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public byte[] getNodeByteArray(java.lang.String nodeId, java.lang.String name, int index)
byte array
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not byte array
then
null
is returned.getNodeByteArray
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public java.lang.String getNodeClassName(java.lang.String nodeId)
getNodeClassName
in interface Remapper
nodeId
- Node for which class name is requested.public DateValue getNodeDate(java.lang.String nodeId, java.lang.String name, int index)
DateValue
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not DateValue
then null
is returned.getNodeDate
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public java.lang.Double getNodeDouble(java.lang.String nodeId, java.lang.String name, int index)
Double
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not Double
then null
is returned.getNodeDouble
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public java.lang.Integer getNodeInteger(java.lang.String nodeId, java.lang.String name, int index)
Integer
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not Integer
then null
is returned.getNodeInteger
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public java.lang.String getNodeString(java.lang.String nodeId, java.lang.String name, int index)
String
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not String
then null
is returned.getNodeString
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public TimeValue getNodeTime(java.lang.String nodeId, java.lang.String name, int index)
TimeValue
attribute value for specified node ID and
index. If wrong parameter (node ID, attribute name or index) are passed
or attribute type is not TimeValue
then null
is returned.getNodeTime
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.public boolean isClassImmutable(java.lang.String className)
isClassImmutable
in interface Remapper
className
- Name of the class.true
if class is read-only.public boolean isClassLeaf(java.lang.String className)
isClassLeaf
in interface Remapper
className
- Name of the class.true
if class is leaf.public boolean moveNode(java.lang.String nodeId, java.lang.String newId)
public boolean setNodeBitField(java.lang.String nodeId, java.lang.String name, int index, BitField value)
BitField
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeBitField
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeBitSelector(java.lang.String nodeId, java.lang.String name, int index, BitSelector value)
BitSelector
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeBitSelector
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeBoolean(java.lang.String nodeId, java.lang.String name, int index, boolean value)
boolean
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeBoolean
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeByteArray(java.lang.String nodeId, java.lang.String name, int index, byte[] value)
byte array
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeByteArray
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeDate(java.lang.String nodeId, java.lang.String name, int index, DateValue value)
DateValue
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeDate
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeDouble(java.lang.String nodeId, java.lang.String name, int index, double value)
double
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeDouble
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeInteger(java.lang.String nodeId, java.lang.String name, int index, int value)
int
attribute value for specified node ID, attribute
name and index. If wrong parameter is passed or attribute read-only then
false
is returned.setNodeInteger
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeString(java.lang.String nodeId, java.lang.String name, int index, java.lang.String value)
String
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeString
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean setNodeTime(java.lang.String nodeId, java.lang.String name, int index, TimeValue value)
TimeValue
attribute value for specified node ID,
attribute name and index. If wrong parameter is passed or attribute
read-only then false
is returned.setNodeTime
in interface Remapper
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.public boolean unbind()
public boolean update()
protected boolean isBound()
true
if thread is properly bound.boolean createBackup(java.lang.String baseId)
baseId
- ID of the base node (root) of the backup.true
if operation was successful.boolean commit(java.lang.String batchId, java.lang.String backupId)
batchId
- ID of the processed subtree.backupId
- Backup ID.true
if operation was successful.boolean rollback(java.lang.String batchId, java.lang.String backupId)
batchId
- ID of the processed subtree.backupId
- ID of the backup.true
if rollback was successful.boolean applyChanges()
true
if operation was successful.private boolean rollbackWorker(java.lang.String batchId, java.lang.String backupId)
batchId
- Updated subtree.backupId
- Backup of the subtree.true
if operation is successful.private boolean applyMovedNodes()
true
if operation was successful and
false
otherwise.private boolean applyDeletedNodes(java.util.Collection<java.lang.String> forDelete)
forDelete
- Collection of nodes which need to be deleted. Note that
collection must be in proper order - child nodes must be
before their parents.true
if operation was successful and
false
otherwise.private boolean applyChangedNodes()
true
if operation was successful and
false
otherwise.private boolean addChangedNode(java.lang.String nodeId)
nodeId
- ID of node to add.true
if operation was successful and
false
otherwise.private boolean addNodeValue(java.lang.String nodeId, java.lang.String name, java.lang.Object value)
nodeId
- Node ID.name
- Attribute name.value
- Attribute value.true
if operation was successful.private <T> T getNodeAttributeValue(java.lang.String nodeId, java.lang.String name, int index)
nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.null
.private boolean setNodeValue(java.lang.String nodeId, java.lang.String name, int index, java.lang.Object value)
false
is returned.nodeId
- Node identifier.name
- Attribute name.index
- Index of the value to retrieve.value
- New value for the attribute variable.true
is operation is successful and
false
otherwise.private java.util.Collection<java.lang.String> getChangedList()
private java.util.Collection<java.lang.String> getMovedList()
private java.util.Collection<java.lang.String> getDeletedList()
private DirNode locateNode(java.lang.String nodeId, boolean preload)
nodeId
- Node ID.preload
- If this parameter is true
then loaded node is
stored in the list of changed nodes.null
if no such node
exists.private ObjectClass getObjClass(java.lang.String nodeClass)
nodeClass
- Class name to find.null
otherwise.private DirNode loadNode(java.lang.String nodeId)
nodeId
- Node ID.null
in case of error.private DirNode validateNode(java.lang.String nodeName, java.lang.String nodeClass, java.lang.String[] names, java.lang.Object[] values)
nodeName
- Node name.nodeClass
- Node class.names
- Array of attribute names.values
- Array of attribute values.null
in case of error.private static java.lang.String[] toArray(java.util.Collection<java.lang.String> coll)
coll
- Source collection.private static java.util.ArrayList<java.lang.String> selectChildNodes(java.lang.String baseId, java.util.Collection<java.lang.String> source)
baseId
- Base node ID.