static void validateDeployInputFields()

in java/com/google/cloud/deploymentmanager/autogen/SpecValidations.java [653:775]


  static void validateDeployInputFields(
      List<DeployInputField> fields,
      Set<String> runningFieldNames,
      Set<String> runningDisplayGroups) {
    boolean isInBooleanGroup = false;
    for (DeployInputField field : fields) {
      checkArgument(!field.getName().isEmpty(), "Deploy input field must have a valid name");
      if (!runningFieldNames.add(field.getName())) {
        throw new IllegalArgumentException(
            "Deploy input fields with the same name: " + field.getName());
      }
      checkArgument(!field.getTitle().isEmpty(), "Deploy input field must have a valid title");

      switch (field.getTypeCase()) {
        case BOOLEAN_CHECKBOX:
          break;
        case GROUPED_BOOLEAN_CHECKBOX:
          {
            GroupedBooleanCheckbox checkbox = field.getGroupedBooleanCheckbox();
            if (!isInBooleanGroup) {
              checkArgument(
                  checkbox.hasDisplayGroup(),
                  String.format(
                      "The first grouped boolean checkbox '%s' must have a display group",
                      field.getName()));
            }
            if (checkbox.hasDisplayGroup()) {
              GroupedBooleanCheckbox.DisplayGroup displayGroup = checkbox.getDisplayGroup();
              checkArgument(
                  !displayGroup.getName().isEmpty(),
                  String.format("Field '%s' has a display group without a name", field.getName()));
              if (!runningDisplayGroups.add(displayGroup.getName())) {
                throw new IllegalArgumentException(
                    "Display groups with the same name: " + displayGroup.getName());
              }
              checkArgument(
                  !displayGroup.getTitle().isEmpty(),
                  String.format("Display group '%s' must have a title", displayGroup.getName()));
            }
            break;
          }
        case INTEGER_BOX:
          {
            if (field.getRequired()) {
              IntegerBox box = field.getIntegerBox();
              checkArgument(
                  box.hasDefaultValue() || box.hasTestDefaultValue(),
                  String.format(
                      "Field '%s' is required - it should have defaultValue or testDefaultValue",
                      field.getName()));
            }
            break;
          }
        case INTEGER_DROPDOWN:
          {
            IntegerDropdown dropdown = field.getIntegerDropdown();
            checkArgument(
                dropdown.getValuesCount() > 0,
                String.format("Field '%s' must have at least 1 value", field.getName()));
            if (dropdown.hasDefaultValueIndex()) {
              checkArgument(
                  dropdown.getDefaultValueIndex().getValue() < dropdown.getValuesCount(),
                  String.format(
                      "Invalid default index %d while there are only %d values in field '%s'",
                      dropdown.getDefaultValueIndex().getValue(),
                      dropdown.getValuesCount(),
                      field.getName()));
            }
            break;
          }
        case STRING_BOX:
          {
            if (field.getRequired()) {
              StringBox box = field.getStringBox();
              boolean hasDefaultValue = !Strings.isNullOrEmpty(box.getDefaultValue());
              boolean hasTestDefaultValue = !Strings.isNullOrEmpty(box.getTestDefaultValue());
              checkArgument(
                  hasDefaultValue || hasTestDefaultValue,
                  String.format(
                      "Field '%s' is required - it should have defaultValue or testDefaultValue",
                      field.getName()));
            }
            break;
          }
        case STRING_DROPDOWN:
          {
            StringDropdown dropdown = field.getStringDropdown();
            checkArgument(
                dropdown.getValuesCount() > 0,
                String.format("Field '%s' must have at least 1 value", field.getName()));
            if (dropdown.hasDefaultValueIndex()) {
              checkArgument(
                  dropdown.getDefaultValueIndex().getValue() < dropdown.getValuesCount(),
                  String.format(
                      "Invalid default index %d while there are only %d values in field '%s'",
                      dropdown.getDefaultValueIndex().getValue(),
                      dropdown.getValuesCount(),
                      field.getName()));
            }
            break;
          }
        case ZONE_DROPDOWN:
          break;
        case EMAIL_BOX:
          if (field.getRequired()) {
            EmailBox box = field.getEmailBox();
            // EmailBox should always have a testDefaultValue.
            // It's either being specified by defaultValue,
            // explicitly by testDefaultValue, or being filled in by defaults.
            boolean hasTestDefaultValue = !box.getTestDefaultValue().isEmpty();
            checkArgument(
                hasTestDefaultValue,
                "Field '%s' is required - it should have testDefaultValue",
                field.getName());
          }
          break;
        case TYPE_NOT_SET:
          throw new IllegalArgumentException("Deploy input field must be of exactly one type");
      }

      isInBooleanGroup = field.getTypeCase() == TypeCase.GROUPED_BOOLEAN_CHECKBOX;
    }
  }