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