in src/main/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandler.java [125:164]
private void processAdditions(final ConfigurationApi targetApi, final ConfigurationApi sourceApi, final boolean keep) {
// configuration additions
final Iterator<Map.Entry<String, ConfigurationDescriptionAddition>> itc = sourceApi.getConfigurationDescriptionAdditions().entrySet().iterator();
while ( itc.hasNext() ) {
final Map.Entry<String, ConfigurationDescriptionAddition> entry = itc.next();
final ConfigurationDescription cd = targetApi.getConfigurationDescriptions().get(entry.getKey());
if ( cd == null && keep ) {
// if configuration is not found, keep the addition
if ( targetApi.getConfigurationDescriptionAdditions().get(entry.getKey()) == null ) {
targetApi.getConfigurationDescriptionAdditions().put(entry.getKey(), entry.getValue());
} else {
throw new IllegalStateException("Duplicate configuration description addition " + entry.getKey());
}
} else if ( cd != null ) {
processAddition("configuration ".concat(entry.getKey()), cd, entry.getValue());
if ( !keep ) {
itc.remove();
}
}
}
// factory configuration additions
final Iterator<Map.Entry<String, FactoryConfigurationDescriptionAddition>> itf = sourceApi.getFactoryConfigurationDescriptionAdditions().entrySet().iterator();
while ( itf.hasNext() ) {
final Map.Entry<String, FactoryConfigurationDescriptionAddition> entry = itf.next();
final FactoryConfigurationDescription cd = targetApi.getFactoryConfigurationDescriptions().get(entry.getKey());
if ( cd == null && keep ) {
// if configuration is not found, keep the addition
if ( targetApi.getFactoryConfigurationDescriptionAdditions().get(entry.getKey()) == null ) {
targetApi.getFactoryConfigurationDescriptionAdditions().put(entry.getKey(), entry.getValue());
} else {
throw new IllegalStateException("Duplicate factory configuration description addition " + entry.getKey());
}
} else if ( cd != null ) {
processAddition("factory configuration ".concat(entry.getKey()), cd, entry.getValue());
if ( !keep ) {
itf.remove();
}
}
}
}