private void recurseCopy(final ExplorerNode sourceFolder,
                             final PermissionInheritance permissionInheritance,
                             final StringBuilder resultMessage,
                             final Map<ExplorerNode, ExplorerNode> remappings,
                             final Map<ExplorerNode, List<ExplorerNode>> childMap) {
        final ExplorerNode destinationFolder = remappings.get(sourceFolder);
        if (destinationFolder != null) {
            final List<ExplorerNode> children = childMap.get(sourceFolder);
            NullSafe.forEach(children, child -> {
                copy(child,
                        destinationFolder,
                        false,
                        null,
                        permissionInheritance,
                        resultMessage,
                        remappings);
                recurseCopy(child, permissionInheritance, resultMessage, remappings, childMap);
            });
        }
    }
Copy the contents of a folder recursively

@param sourceFolder          The explorer node being copied
@param permissionInheritance The mode of permission inheritance being used for the whole operation
@param resultMessage         Allow contribution to result message
@param remappings            A map to store source to destination explorer nodes
@param childMap              A map of folders and their child items.
stroom-explorer/stroom-explorer-impl/src/main/java/stroom/explorer/impl/ExplorerServiceImpl.java