@Override
  protected void mergeResponses(
      ControllerStatusDTO clientDto,
      Map<NodeIdentifier, ControllerStatusDTO> dtoMap,
      Set<NodeResponse> successfulResponses,
      Set<NodeResponse> problematicResponses) {
    ControllerStatusDTO mergedStatus = clientDto;
    for (final Map.Entry<NodeIdentifier, ControllerStatusDTO> entry : dtoMap.entrySet()) {
      final NodeIdentifier nodeId = entry.getKey();
      final ControllerStatusDTO nodeStatus = entry.getValue();

      final String nodeAddress = nodeId.getApiAddress() + ":" + nodeId.getApiPort();
      for (final BulletinDTO bulletin : nodeStatus.getBulletins()) {
        bulletin.setNodeAddress(nodeAddress);
      }
      for (final BulletinDTO bulletin : nodeStatus.getControllerServiceBulletins()) {
        bulletin.setNodeAddress(nodeAddress);
      }
      for (final BulletinDTO bulletin : nodeStatus.getReportingTaskBulletins()) {
        bulletin.setNodeAddress(nodeAddress);
      }

      if (nodeStatus == mergedStatus) {
        continue;
      }

      StatusMerger.merge(mergedStatus, nodeStatus);
    }
  }
  @Override
  protected void mergeResponses(
      ProcessGroupStatusDTO clientDto,
      Map<NodeIdentifier, ProcessGroupStatusDTO> dtoMap,
      NodeIdentifier selectedNodeId) {
    final ProcessGroupStatusDTO mergedProcessGroupStatus = clientDto;
    mergedProcessGroupStatus.setNodeSnapshots(new ArrayList<NodeProcessGroupStatusSnapshotDTO>());

    final NodeProcessGroupStatusSnapshotDTO selectedNodeSnapshot =
        new NodeProcessGroupStatusSnapshotDTO();
    selectedNodeSnapshot.setStatusSnapshot(clientDto.getAggregateSnapshot().clone());
    selectedNodeSnapshot.setAddress(selectedNodeId.getApiAddress());
    selectedNodeSnapshot.setApiPort(selectedNodeId.getApiPort());
    selectedNodeSnapshot.setNodeId(selectedNodeId.getId());

    mergedProcessGroupStatus.getNodeSnapshots().add(selectedNodeSnapshot);

    for (final Map.Entry<NodeIdentifier, ProcessGroupStatusDTO> entry : dtoMap.entrySet()) {
      final NodeIdentifier nodeId = entry.getKey();
      final ProcessGroupStatusDTO nodeProcessGroupStatus = entry.getValue();
      if (nodeProcessGroupStatus == mergedProcessGroupStatus) {
        continue;
      }

      StatusMerger.merge(
          mergedProcessGroupStatus,
          nodeProcessGroupStatus,
          nodeId.getId(),
          nodeId.getApiAddress(),
          nodeId.getApiPort());
    }
  }