SLING-10117 : Support different configuration validation modes
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
index 44e16d4..f817e73 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
@@ -70,18 +70,20 @@
*/
public ConfigurationValidationResult validate(final Configuration config, final ConfigurableEntity desc,
final Region region, final Mode mode) {
+ final Mode validationMode = desc.getMode() != null ? desc.getMode() : (mode != null ? mode : Mode.STRICT);
+
final ConfigurationValidationResult result = new ConfigurationValidationResult();
if ( config.isFactoryConfiguration() ) {
if ( !(desc instanceof FactoryConfigurationDescription) ) {
result.getErrors().add("Factory configuration cannot be validated against non factory configuration description");
} else {
- validateProperties(config, desc, result.getPropertyResults(), region, mode);
+ validateProperties(config, desc, result.getPropertyResults(), region, validationMode);
}
} else {
if ( !(desc instanceof ConfigurationDescription) ) {
result.getErrors().add("Configuration cannot be validated against factory configuration description");
} else {
- validateProperties(config, desc, result.getPropertyResults(), region, mode);
+ validateProperties(config, desc, result.getPropertyResults(), region, validationMode);
}
}
@@ -120,7 +122,7 @@
if ( Constants.SERVICE_RANKING.equalsIgnoreCase(propName) ) {
final Object value = properties.get(propName);
if ( !(value instanceof Integer) ) {
- result.getErrors().add("service.ranking must be of type Integer");
+ setResult(result, mode, "service.ranking must be of type Integer");
}
} else if ( !isAllowedProperty(propName) && region != Region.INTERNAL ) {
result.getErrors().add("Property is not allowed");
@@ -129,6 +131,14 @@
}
}
+ void setResult(final PropertyValidationResult result, final Mode validationMode, final String msg) {
+ if ( validationMode == Mode.STRICT ) {
+ result.getErrors().add(msg);
+ } else if ( validationMode == Mode.LENIENT || validationMode == Mode.DEFINITIVE ) {
+ result.getWarnings().add(msg);
+ }
+ }
+
private boolean isAllowedProperty(final String name) {
for(final String allowed : ALLOWED_PROPERTIES) {
if ( allowed.equalsIgnoreCase(name) ) {