@ProxyEvent
    @Override
    public void onCreate(final ShowEditNodeTagsDialogEvent event) {
//        GWT.log("onCreate: " + NullSafe.get(event.getExplorerNode(), ExplorerNode::toString));
        explorerNodes = NullSafe.list(event.getExplorerNodes());
        if (NullSafe.isEmptyCollection(explorerNodes)) {
            AlertEvent.fireError(this, "No explorer nodes supplied", null);
        } else {
            final List<DocRef> docRefs = explorerNodes.stream()
                    .map(ExplorerNode::getDocRef)
                    .collect(Collectors.toList());

            restFactory
                    .create(EXPLORER_RESOURCE)
                    .method(ExplorerResource::fetchExplorerNodeTags)
                    .onSuccess(allTags -> {
                        if (isSingleDocRef()) {
                            restFactory
                                    .create(EXPLORER_RESOURCE)
                                    .method(res -> res.fetchExplorerNodeTags(docRefs))
                                    .onSuccess(nodeTags -> {
                                        getView().setData(docRefs, nodeTags, allTags);
                                        forceReveal();
                                    })
                                    .onFailure(this::handleFailure)
                                    .taskMonitorFactory(new ExplorerTaskMonitorFactory(this))
                                    .exec();
                        } else {
                            // Adding to multiple so don't need to know what tags the nodes have
                            getView().setData(docRefs, Collections.emptySet(), allTags);
                            forceReveal();
                        }
                    })
                    .onFailure(this::handleFailure)
                    .taskMonitorFactory(new ExplorerTaskMonitorFactory(this))
                    .exec();

        }

    }
Presenter for editing the tags on a single node or adding tags to multiple nodes.
See {@link ExplorerNodeRemoveTagsPresenter} for tag removal on multiple nodes.
stroom-core-client/src/main/java/stroom/explorer/client/presenter/ExplorerNodeEditTagsPresenter.java