in src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java [233:276]
private List<ValidationModel> doGetModels(@NotNull String relativeResourceType) {
List<ValidationModel> validationModels = new ArrayList<ValidationModel>();
ResourceResolver resourceResolver = null;
try {
resourceResolver = rrf.getServiceResourceResolver(null);
String[] searchPaths = resourceResolver.getSearchPath();
for (String searchPath : searchPaths) {
final String queryString = String.format(MODEL_XPATH_QUERY, searchPath, relativeResourceType);
LOG.debug("Looking for validation models with query '{}'", queryString);
Iterator<Resource> models = resourceResolver.findResources(queryString, "xpath");
while (models.hasNext()) {
Resource model = models.next();
LOG.debug("Found validation model resource {}.", model.getPath());
String resourcePath = model.getPath();
try {
ValidationModelBuilder modelBuilder = new ValidationModelBuilder();
ValueMap validationModelProperties = model.getValueMap();
modelBuilder.addApplicablePaths(validationModelProperties.get(ResourceValidationModelProviderImpl.APPLICABLE_PATHS, new String[] {}));
Resource propertiesResource = model.getChild(ResourceValidationModelProviderImpl.PROPERTIES);
modelBuilder.resourceProperties(buildProperties(propertiesResource));
modelBuilder.childResources(buildChildren(model, model));
ValidationModel vm = modelBuilder.build(relativeResourceType, resourcePath);
validationModels.add(vm);
} catch (IllegalArgumentException e) {
throw new IllegalStateException("Found invalid validation model in '" + resourcePath + "': "
+ e.getMessage(), e);
}
}
if (!validationModels.isEmpty()) {
// do not continue to search in other search paths if some results were already found!
// earlier search paths overlay lower search paths (/apps wins over /libs)
// the applicable content paths do not matter here!
break;
}
}
return validationModels;
} catch (LoginException e) {
throw new IllegalStateException("Could not get service resource resolver", e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}