private List<Item> createCopyAsChildMenuItems(final List<ExplorerNode> allNodes,
                                                  final List<ExplorerNode> readableNodes) {
        // If a user has VIEW on a doc they will also see (but not have VIEW) all ancestor
        // docs, so we need to only allow 'copy name' for these 'see but not view' cases.
        // Thus, totalCount may be bigger than readableCount
        final List<Item> childMenuItems = new ArrayList<>();
        final int totalCount = NullSafe.size(allNodes);
        final int readableCount = NullSafe.size(readableNodes);
        int priority = 1;
        if (totalCount == 1) {
            childMenuItems.add(new IconMenuItem.Builder()
                    .priority(priority++)
                    .icon(SvgImage.COPY)
                    .text("Copy Name to Clipboard")
                    .enabled(true)
                    .command(() -> copyAs(allNodes, ExplorerNode::getName, "\n"))
                    .build());

            if (readableCount > 0) {
                childMenuItems.add(new IconMenuItem.Builder()
                        .priority(priority++)
                        .icon(SvgImage.COPY)
                        .text("Copy UUID to Clipboard")
                        .enabled(true)
                        .command(() -> copyAs(allNodes, ExplorerNode::getUuid, "\n"))
                        .build());
                childMenuItems.add(createCopyLinkMenuItem(allNodes.get(0), priority++));
            }
        } else if (totalCount > 1) {
            childMenuItems.add(new IconMenuItem.Builder()
                    .priority(priority++)
                    .icon(SvgImage.COPY)
                    .text("Copy Names to Clipboard (lines)")
                    .enabled(true)
                    .command(() -> copyAs(allNodes, ExplorerNode::getName, "\n"))
                    .build());
            childMenuItems.add(new IconMenuItem.Builder()
                    .priority(priority++)
                    .icon(SvgImage.COPY)
                    .text("Copy Names to Clipboard (comma delimited)")
                    .enabled(true)
                    .command(() -> copyAs(allNodes, ExplorerNode::getName, ","))
                    .build());

            if (readableCount > 0) {
                childMenuItems.add(new IconMenuItem.Builder()
                        .priority(priority++)
                        .icon(SvgImage.COPY)
                        .text("Copy UUIDs to Clipboard (lines)")
                        .enabled(true)
                        .command(() -> copyAs(readableNodes, ExplorerNode::getUuid, "\n"))
                        .build());
                childMenuItems.add(new IconMenuItem.Builder()
                        .priority(priority++)
                        .icon(SvgImage.COPY)
                        .text("Copy UUIDs to Clipboard (comma delimited)")
                        .enabled(true)
                        .command(() -> copyAs(readableNodes, ExplorerNode::getUuid, ","))
                        .build());
            }
        }
        return childMenuItems;
    }
Highlights the supplied document item in the explorer tree.
stroom-core-client/src/main/java/stroom/document/client/DocumentPluginEventManager.java