private void validateRecoverPoint(String formName) {
    Validation.required(formName + ".rpJournalSize", rpJournalSize);
    if (!RPCopyForm.isValidJournalSize(rpJournalSize, rpJournalSizeUnit)) {
      Validation.addError(formName + ".rpJournalSize", "validation.invalid");
    }

    Set<String> varrayIds = Sets.newHashSet();
    Set<String> vpoolIds = Sets.newHashSet();

    boolean hasCopies = false;
    for (RPCopyForm rpCopy : rpCopies) {
      if (rpCopy != null && rpCopy.isEnabled()) {
        hasCopies = true;
        rpCopy.validate(formName + ".rpCopies");

        if (StringUtils.isNotBlank(rpCopy.virtualArray)) {
          if (!varrayIds.add(rpCopy.virtualArray)) {
            Validation.addError(formName + ".rpCopies", "rpCopy.virtualArray.error.duplicate");
          }
        }
        if (StringUtils.isNotBlank(rpCopy.virtualPool)) {
          vpoolIds.add(rpCopy.virtualPool);
        }
      }
    }
    if (!hasCopies) {
      Validation.required(formName + ".rpCopies", null);
    }

    // Extra validation when mixed with high availability
    if (HighAvailability.isHighAvailability(highAvailability)) {
      if (!Boolean.TRUE.equals(multiVolumeConsistency)) {
        Validation.addError(
            formName + ".multiVolumeConsistency", "vpool.rp.error.notMultiVolumeConsistent");
      }
    }
  }