private ConfigurationMetadata getNestedConfigurationMetadata()

in src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java [477:524]


    private ConfigurationMetadata getNestedConfigurationMetadata(
            ConfigurationMetadata configMetadata, String configName, String partialConfigName) {
        if (StringUtils.startsWith(configName, partialConfigName + "/")) {

            // depending on different persistence strategies config names can be transformed differently - try all
            // combinations here
            Set<String> prefixesToRemove = new LinkedHashSet<>();
            if (configMetadata.isCollection()) {
                String collectionItemName = StringUtils.substringBefore(
                        StringUtils.substringAfter(configName, partialConfigName + "/"), "/");
                for (String collectionParentConfigName :
                        configurationPersistenceStrategy.getAllCollectionParentConfigNames(partialConfigName)) {
                    for (String collectionItemConfigName :
                            configurationPersistenceStrategy.getAllCollectionItemConfigNames(collectionItemName)) {
                        prefixesToRemove.add(collectionParentConfigName + "/" + collectionItemConfigName + "/");
                    }
                }
            } else {
                for (String configNameItem : configurationPersistenceStrategy.getAllConfigNames(partialConfigName)) {
                    prefixesToRemove.add(configNameItem + "/");
                }
            }

            for (String prefixToRemove : prefixesToRemove) {
                String remainingConfigName = StringUtils.substringAfter(configName, prefixToRemove);
                // try direct match
                ConfigurationMetadata nestedConfigMetadata =
                        getNestedConfigurationMetadataFromProperty(configMetadata, remainingConfigName);
                if (nestedConfigMetadata != null) {
                    return nestedConfigMetadata;
                }
                // try to find partial match for deeper nestings
                for (String partialRemainingConfigName :
                        ConfigNameUtil.getAllPartialConfigNameVariations(remainingConfigName)) {
                    ConfigurationMetadata partialConfigMetadata =
                            getNestedConfigurationMetadataFromProperty(configMetadata, partialRemainingConfigName);
                    if (partialConfigMetadata != null) {
                        nestedConfigMetadata = getNestedConfigurationMetadata(
                                partialConfigMetadata, remainingConfigName, partialRemainingConfigName);
                        if (nestedConfigMetadata != null) {
                            return nestedConfigMetadata;
                        }
                    }
                }
            }
        }
        return null;
    }