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;
}
}