All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openapitools.codegen.validations.oas.RuleConfiguration Maven / Gradle / Ivy

There is a newer version: 7.7.0
Show newest version
package org.openapitools.codegen.validations.oas;

/**
 * Allows for configuration of validation rules which will be applied to a specification.
 */
@SuppressWarnings({"WeakerAccess", "unused"})
public class RuleConfiguration {
    private static String propertyPrefix = "openapi.generator.rule";
    private boolean enableRecommendations = defaultedBoolean(propertyPrefix + ".recommendations", true);
    private boolean enableApacheNginxUnderscoreRecommendation = defaultedBoolean(propertyPrefix + ".apache-nginx-underscore", true);
    private boolean enableOneOfWithPropertiesRecommendation = defaultedBoolean(propertyPrefix + ".oneof-properties-ambiguity", true);
    private boolean enableUnusedSchemasRecommendation = defaultedBoolean(propertyPrefix + ".unused-schemas", true);
    private boolean enableSchemaTypeRecommendation = defaultedBoolean(propertyPrefix + ".schema-type", true);
    private boolean enableNullableAttributeRecommendation = defaultedBoolean(propertyPrefix + ".nullable-deprecated", true);
    private boolean enableInvalidTypeRecommendation = defaultedBoolean(propertyPrefix + ".invalid-type", true);

    private boolean enableApiRequestUriWithBodyRecommendation = defaultedBoolean(propertyPrefix + ".anti-patterns.uri-unexpected-body", true);

    @SuppressWarnings("SameParameterValue")
    private static boolean defaultedBoolean(String key, boolean defaultValue) {
        String property = System.getProperty(key);
        if (property == null) return defaultValue;
        return Boolean.parseBoolean(property);
    }

    /**
     * Gets whether we will raise awareness that header parameters with underscore may be ignored in Apache or Nginx by default.
     * For more details, see https://stackoverflow.com/a/22856867/151445.
     *
     * @return true if enabled, false if disabled
     */
    public boolean isEnableApacheNginxUnderscoreRecommendation() {
        return enableApacheNginxUnderscoreRecommendation;
    }

    /**
     * Enable or Disable the recommendation check for Apache/Nginx potentially ignoring header with underscore by default.
     * 

* For more details, see {@link RuleConfiguration#isEnableApacheNginxUnderscoreRecommendation()} * * @param enableApacheNginxUnderscoreRecommendation true to enable, false to disable */ public void setEnableApacheNginxUnderscoreRecommendation(boolean enableApacheNginxUnderscoreRecommendation) { this.enableApacheNginxUnderscoreRecommendation = enableApacheNginxUnderscoreRecommendation; } /** * Gets whether we will raise awareness a GET or HEAD operation is defined with body. * * @return true if enabled, false if disabled */ public boolean isEnableApiRequestUriWithBodyRecommendation() { return enableApiRequestUriWithBodyRecommendation; } /** * Enable or Disable the recommendation check for GET or HEAD operations with bodies. *

* For more details, see {@link RuleConfiguration#isEnableApiRequestUriWithBodyRecommendation()} * * @param enableApiRequestUriWithBodyRecommendation true to enable, false to disable */ public void setEnableApiRequestUriWithBodyRecommendation(boolean enableApiRequestUriWithBodyRecommendation) { this.enableApiRequestUriWithBodyRecommendation = enableApiRequestUriWithBodyRecommendation; } /** * Gets whether the recommendation check for oneOf with sibling properties exists. *

* JSON Schema defines oneOf as a validation property which can be applied to any schema. *

* OpenAPI Specification is a variant of JSON Schema for which oneOf is defined as: * "Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema." *

* Where the only examples of oneOf in OpenAPI Specification are used to define either/or type structures rather than validations. * Because of this ambiguity in the spec about what is non-standard about oneOf support, we'll warn as a recommendation that * properties on the schema defining oneOf relationships may not be intentional in the OpenAPI Specification. * * @return true if enabled, false if disabled */ public boolean isEnableOneOfWithPropertiesRecommendation() { return enableOneOfWithPropertiesRecommendation; } /** * Enable or Disable the recommendation check for schemas containing properties and oneOf definitions. *

* For more details, see {@link RuleConfiguration#isEnableOneOfWithPropertiesRecommendation()} * * @param enableOneOfWithPropertiesRecommendation true to enable, false to disable */ public void setEnableOneOfWithPropertiesRecommendation(boolean enableOneOfWithPropertiesRecommendation) { this.enableOneOfWithPropertiesRecommendation = enableOneOfWithPropertiesRecommendation; } /** * Enable or Disable the recommendation check for schemas containing type definitions, specifically * for changes between OpenAPI 3.0.x and 3.1. * *

* For more details, see {@link RuleConfiguration#isEnableSchemaTypeRecommendation()} * * @param enableSchemaTypeRecommendation true to enable, false to disable */ public void setEnableSchemaTypeRecommendation(boolean enableSchemaTypeRecommendation) { this.enableSchemaTypeRecommendation = enableSchemaTypeRecommendation; } /** * Gets whether the recommendation check for schemas containing type definitions. *

* In OpenAPI 3.0.x, the "type" attribute must be a string value. * In OpenAPI 3.1, the type attribute may be: * A string value * The 'null' value * An array containing primitive types and the 'null' value. * * @return true if enabled, false if disabled */ public boolean isEnableSchemaTypeRecommendation() { return enableSchemaTypeRecommendation; } /** * Enable or Disable the recommendation check for the 'nullable' attribute. * *

* For more details, see {@link RuleConfiguration#isEnableNullableAttributeRecommendation()} * * @param enableNullableAttributeRecommendation true to enable, false to disable */ public void setEnableNullableAttributeRecommendation(boolean enableNullableAttributeRecommendation) { this.enableNullableAttributeRecommendation = enableNullableAttributeRecommendation; } /** * Gets whether the recommendation check for schemas containing the 'nullable' attribute. *

* In OpenAPI 3.0.x, the "nullable" attribute is supported. However, because it is deprecated in 3.1 * and above, a warning is logged to prepare for OpenAPI 3.1 recommendations. * In OpenAPI 3.1, the 'nullable' attribute is deprecated. Instead the OpenAPI specification should * use the 'null' type. * * @return true if enabled, false if disabled */ public boolean isEnableNullableAttributeRecommendation() { return enableNullableAttributeRecommendation; } /** * Enable or Disable the recommendation check for the 'type' attribute. * *

* For more details, see {@link RuleConfiguration#isEnableInvalidTypeRecommendation()} * * @param enableInvalidTypeRecommendation true to enable, false to disable */ public void setEnableInvalidTypeRecommendation(boolean enableInvalidTypeRecommendation) { this.enableInvalidTypeRecommendation = enableInvalidTypeRecommendation; } /** * Gets whether the recommendation check for schemas containing invalid values for the 'type' attribute. *

* * @return true if enabled, false if disabled */ public boolean isEnableInvalidTypeRecommendation() { return enableInvalidTypeRecommendation; } /** * Get whether recommendations are enabled. *

* The 'type' attribute must be one of 'null', 'boolean', 'object', 'array', 'number', 'string', or 'integer' * * @return true if enabled, false if disabled */ public boolean isEnableRecommendations() { return enableRecommendations; } /** * Enable or Disable recommendations. Recommendations are either informational or warning level type validations * which are raised to communicate issues to the user which they may not be aware of, or for which support in the * tooling/spec may not be clearly defined. * * @param enableRecommendations true to enable, false to disable */ public void setEnableRecommendations(boolean enableRecommendations) { this.enableRecommendations = enableRecommendations; } /** * Gets whether the recommendation to check for unused schemas is enabled. *

* While the tooling may or may not support generation of models representing unused schemas, we take the stance that * a schema which is defined but not referenced in an operation or by some schema bound to an operation may be a good * indicator of a programming error. We surface this information to the user in case the orphaned schema(s) are not * intentional. * * @return true if enabled, false if disabled */ public boolean isEnableUnusedSchemasRecommendation() { return enableUnusedSchemasRecommendation; } /** * Enable or Disable the recommendation check for unused schemas. *

* For more details, see {@link RuleConfiguration#isEnableUnusedSchemasRecommendation()} * * @param enableUnusedSchemasRecommendation true to enable, false to disable */ public void setEnableUnusedSchemasRecommendation(boolean enableUnusedSchemasRecommendation) { this.enableUnusedSchemasRecommendation = enableUnusedSchemasRecommendation; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy