in src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java [396:432]
private Item copy(Node src, Node dstParent, String name) throws RepositoryException {
if (isAncestorOrSameNode(src, dstParent)) {
throw new RepositoryException(
"Cannot copy ancestor " + src.getPath() + " to descendant " + dstParent.getPath());
}
// ensure destination name
if (name == null) {
name = src.getName();
}
// ensure new node creation
if (dstParent.hasNode(name)) {
dstParent.getNode(name).remove();
}
// create new node
Node dst = dstParent.addNode(name, src.getPrimaryNodeType().getName());
for (NodeType mix : src.getMixinNodeTypes()) {
dst.addMixin(mix.getName());
}
// copy the properties
for (PropertyIterator iter = src.getProperties(); iter.hasNext(); ) {
copy(iter.nextProperty(), dst, null);
}
// copy the child nodes
for (NodeIterator iter = src.getNodes(); iter.hasNext(); ) {
Node n = iter.nextNode();
if (!n.getDefinition().isProtected()) {
copy(n, dst, null);
}
}
return dst;
}