static UpdateReplicationSetRequest translateToUpdateRequest()

in aws-ssmincidents-replicationset/src/main/java/software/amazon/ssmincidents/replicationset/Translator.java [63:112]


  static UpdateReplicationSetRequest translateToUpdateRequest(
      ReplicationSet currentReplicationSet,
      ResourceModel desiredModelState,
      String clientToken) {
    Set<String> currentRegions = currentReplicationSet.regionMap().keySet();
    Set<String> desiredRegions = desiredModelState.getRegions().stream()
        .map(ReplicationRegion::getRegionName)
        .collect(Collectors.toSet());
    if (currentRegions.equals(desiredRegions)) {
      // nothing to update
      return null;
    }
    Set<String> regionsToAdd = Sets.difference(desiredRegions, currentRegions);
    Set<String> regionsToDelete = Sets.difference(currentRegions, desiredRegions);
    boolean differsByOneRegion = regionsToAdd.size() + regionsToDelete.size() == 1;
    if (!differsByOneRegion) {
      throw new CfnInvalidRequestException("Replication set regions differ by more then one region. " +
          "Current replication set regions: " + currentRegions.toString() + ". " +
          "Specified replication set regions: " + desiredRegions.toString());
    }
    if (regionsToAdd.size() > 0) {
      String regionToAdd = regionsToAdd.iterator().next();
      String optionalKmsKeyId = desiredModelState.getRegions()
          .stream().filter(x -> x.getRegionName().equals(regionToAdd))
          .findFirst()
          .map(ReplicationRegion::getRegionConfiguration)
          .map(RegionConfiguration::getSseKmsKeyId)
          .orElse(null);
      return UpdateReplicationSetRequest.builder()
          .arn(desiredModelState.getArn())
          .clientToken(clientToken)
          .actions(UpdateReplicationSetAction.builder()
              .addRegionAction(AddRegionAction.builder()
                  .regionName(regionToAdd)
                  .sseKmsKeyId(optionalKmsKeyId)
                  .build())
              .build())
          .build();
    }
    String regionToDelete = regionsToDelete.iterator().next();
    return UpdateReplicationSetRequest.builder()
        .arn(desiredModelState.getArn())
        .clientToken(clientToken)
        .actions(UpdateReplicationSetAction.builder()
            .deleteRegionAction(DeleteRegionAction.builder()
                .regionName(regionToDelete)
                .build())
            .build())
        .build();
  }