in src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java [99:149]
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 {
if ( desc.getPropertyDescriptions().isEmpty()) {
if ( region == Region.GLOBAL && !desc.isAllowAdditionalProperties() ) {
setResult(result, validationMode, desc, "Factory configuration is not allowed");
markGlobalProperties(config, result, region);
}
} else {
if ( region == Region.GLOBAL && desc.getRegion() == Region.INTERNAL ) {
setResult(result, validationMode, desc, "Factory configuration is not allowed");
markGlobalProperties(config, result, region);
} else {
validateProperties(config, desc, result.getPropertyResults(), region, validationMode);
}
}
}
} else {
if ( !(desc instanceof ConfigurationDescription) ) {
result.getErrors().add("Configuration cannot be validated against factory configuration description");
} else {
if ( desc.getPropertyDescriptions().isEmpty()) {
if ( region == Region.GLOBAL && !desc.isAllowAdditionalProperties() ) {
setResult(result, validationMode, desc, "Configuration is not allowed");
markGlobalProperties(config, result, region);
}
} else {
if ( region == Region.GLOBAL && desc.getRegion() == Region.INTERNAL ) {
setResult(result, validationMode, desc, "Configuration is not allowed");
markGlobalProperties(config, result, region);
} else {
validateProperties(config, desc, result.getPropertyResults(), region, validationMode);
}
}
}
}
if ( desc.getDeprecated() != null ) {
setResult(result, Mode.LENIENT, desc, desc.getDeprecated());
}
return result;
}