private List doGetModels()

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