@Override
  public String getRegionOperationMessage() {
    List<String> messages = new ArrayList<>();

    // List regions with redundancy configured but no redundant copies first
    if (!zeroRedundancyRegionsResults.isEmpty()) {
      messages
          .add(getResultsMessage(zeroRedundancyRegionsResults, NO_REDUNDANT_COPIES_FOR_REGIONS));
    }

    // List failures
    if (!underRedundancyRegionsResults.isEmpty()) {
      messages.add(
          getResultsMessage(underRedundancyRegionsResults, REDUNDANCY_NOT_SATISFIED_FOR_REGIONS));
    }

    // List successes
    if (!satisfiedRedundancyRegionsResults.isEmpty()) {
      messages.add(
          getResultsMessage(satisfiedRedundancyRegionsResults, REDUNDANCY_SATISFIED_FOR_REGIONS));
    }

    // Add info about primaries
    messages.add(PRIMARY_TRANSFERS_COMPLETED + totalPrimaryTransfersCompleted);
    messages.add(PRIMARY_TRANSFER_TIME + totalPrimaryTransferTime);

    return String.join(System.lineSeparator(), messages);
  }
result object used by the cms that only needs to be json serializable
geode-management/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyResultsImpl.java