in src/main/java/org/apache/sling/feature/io/json/FeatureJSONReader.java [225:272]
private void addConfigurations(final JsonObject json,
final Artifact artifact,
final Configurations container) throws IOException {
final ConfigurationReader reader = org.apache.felix.cm.json.io.Configurations.buildReader()
.verifyAsBundleResource(true)
.withIdentifier(this.location)
.withConfiguratorPropertyHandler(new ConfiguratorPropertyHandler(){
@Override
public void handleConfiguratorProperty(final String pid, final String property, final Object value) {
Configuration cfg = container.getConfiguration(pid);
if ( cfg == null ) {
cfg = new Configuration(pid);
container.add(cfg);
}
cfg.getProperties().put(Configuration.CONFIGURATOR_PREFIX.concat(property), value);
}
})
.build(json);
final ConfigurationResource rsrc = reader.readConfigurationResource();
if ( !reader.getIgnoredErrors().isEmpty() ) {
final StringBuilder builder = new StringBuilder(exceptionPrefix);
builder.append("Errors in configurations:");
for(final String w : reader.getIgnoredErrors()) {
builder.append("\n");
builder.append(w);
}
throw new IOException(builder.toString());
}
for(final Map.Entry<String, Hashtable<String, Object>> c : rsrc.getConfigurations().entrySet()) {
Configuration config = container.getConfiguration(c.getKey());
if ( config == null ) {
config = new Configuration(c.getKey());
container.add(config);
}
for(final Map.Entry<String, Object> prop : c.getValue().entrySet()) {
config.getProperties().put(prop.getKey(), prop.getValue());
}
if ( config.getProperties().get(Configuration.PROP_ARTIFACT_ID) != null ) {
throw new IOException(exceptionPrefix.concat("Configuration must not define property ").concat(Configuration.PROP_ARTIFACT_ID));
}
if ( artifact != null ) {
config.getProperties().put(Configuration.PROP_ARTIFACT_ID, artifact.getId().toMvnId());
}
}
}