public String handle()

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