@Override
    protected void onBind() {
        super.onBind();

        registerHandler(autoRefreshButton.addClickHandler(event -> {
            if ((event.getNativeButton() & NativeEvent.BUTTON_LEFT) != 0) {
                autoRefresh = !autoRefresh;
                if (autoRefresh) {
                    autoRefreshButton.setTitle(AUTO_REFRESH_ON_TITLE);
                    internalRefresh();
                } else {
                    autoRefreshButton.setTitle(AUTO_REFRESH_OFF_TITLE);
                }
            }
        }));

        // NodeLisPresenter may change a node
        // Currently the node state does not affect how the job nodes are displayed
        registerHandler(getEventBus().addHandler(
                NodeChangeEvent.getType(), event -> {
                    refreshNodeStates();
                }));

        // JobListPresenter may change a job
        registerHandler(getEventBus().addHandler(
                JobChangeEvent.getType(), event -> {
                    // We are likely showing all jobs so just refresh
                    internalRefresh();
                }));

        // JobNodeListPresenter may change one or more jobNodes
        registerHandler(getEventBus().addHandler(
                JobNodeChangeEvent.getType(), event -> {
//                    GWT.log(NodeJobListPresenter.this.getClass().getSimpleName()
//                            + " - jobNodes changed: " + event.getJobNodes().size());
                    if (!Objects.equals(event.getSource().getClass(), NodeJobListPresenter.this.getClass())) {
                        final Set<String> affectedNodes = event.getJobNodes()
                                .stream()
                                .map(JobNode::getNodeName)
                                .collect(Collectors.toSet());
                        final String currentNodeName = getNodeNameCriteria();
                        if (currentNodeName != null && affectedNodes.contains(currentNodeName)) {
                            internalRefresh();
                        }
                    }
                }));
    }
Bottom pane of NodePresenter (Nodes tab). Lists jobNodes for a single node.
stroom-core-client/src/main/java/stroom/node/client/presenter/NodeJobListPresenter.java