in azure-spring-cloud-maven-plugin/src/main/java/com/microsoft/azure/maven/springcloud/config/ConfigurationPrompter.java [180:254]
public String handle(String templateId, boolean autoApplyDefault, Object cliParameter)
throws InvalidConfigurationException, IOException {
final Map<String, Object> variables = createVariableTables(templateId);
final String resourceName = (String) variables.get("resource");
final String propertyName = (String) variables.get("property");
if (StringUtils.isBlank(propertyName)) {
throw new InvalidConfigurationException("Cannot find property in template: " + templateId);
}
if (StringUtils.isBlank(resourceName)) {
throw new InvalidConfigurationException("Cannot find resource in template: " + templateId);
}
final Map<String, Object> schema = validator.getSchemaMap(resourceName, propertyName);
variables.put("schema", schema);
Object defaultObj = variables.get("default");
if (defaultObj instanceof String) {
defaultObj = TemplateUtils.evalPlainText("default", variables);
} else {
if (defaultObj == null) {
defaultObj = schema.get("default");
}
}
final String defaultObjectStr = Objects.toString(defaultObj, null);
final String type = (String) schema.get("type");
if (cliParameter != null) {
// valid against the property from cli parameter, if it passes, then we skip the configuration
final String errorMessage = validator.validateSingleProperty(resourceName, propertyName, cliParameter.toString());
if (errorMessage == null) {
return cliParameter.toString();
}
System.out.println(
TextUtils.yellow(String.format("Validation failure for %s[%s]: %s", propertyName, cliParameter.toString(), errorMessage)));
}
if (autoApplyDefault) {
if (defaultObj != null) {
// we need to check default value
final String errorMessage = validator.validateSingleProperty(resourceName, propertyName, defaultObjectStr);
if (errorMessage == null) {
return defaultObjectStr;
}
throw new InvalidConfigurationException(
String.format("Default value '%s' cannot be applied to %s due to error: %s", defaultObjectStr, propertyName, errorMessage));
}
return null;
}
final String promoteMessage = TemplateUtils.evalText("promote", variables);
return prompt.promoteString(promoteMessage, Objects.toString(defaultObj, null), input -> {
if ("boolean".equals(type)) {
// convert user input from y to true and N to false
if (input.equalsIgnoreCase("Y")) {
input = "true";
}
if (input.equalsIgnoreCase("N")) {
input = "false";
}
}
final String value;
try {
value = evaluateMavenExpression(input);
if (value == null) {
return InputValidateResult.error(String.format("Cannot evaluate maven expression: %s", input));
}
} catch (ExpressionEvaluationException e) {
return InputValidateResult.error(e.getMessage());
}
final String errorMessage = validator.validateSingleProperty(resourceName, propertyName, value);
return errorMessage == null ? InputValidateResult.wrap(input) : InputValidateResult.error(errorMessage);
}, TemplateUtils.evalBoolean("required", variables));
}