in src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java [195:248]
private static Model processModel(Model model,
URL modelFile, boolean includeModelInfo, ResolverOptions options) throws IOException {
LOGGER.info("- reading model {}", modelFile);
final Model nextModel = readProvisioningModel(modelFile);
final Model effectiveModel = ModelUtility.getEffectiveModel(nextModel, options);
for(final Feature feature : effectiveModel.getFeatures()) {
for(final RunMode runMode : feature.getRunModes()) {
for(final ArtifactGroup group : runMode.getArtifactGroups()) {
final List<org.apache.sling.provisioning.model.Artifact> removeList = new ArrayList<>();
for(final org.apache.sling.provisioning.model.Artifact a : group) {
// slingstart and slingfeature are extensions owned by the slingstart maven plugin
if ( "slingstart".equals(a.getType())
|| "slingfeature".equals(a.getType())) {
final ArtifactManagerConfig cfg = new ArtifactManagerConfig();
final ArtifactManager mgr = ArtifactManager.getArtifactManager(cfg);
final ArtifactId correctedId = new ArtifactId(a.getGroupId(),
a.getArtifactId(),
a.getVersion(),
"slingstart".equals(a.getType()) ? Main.PACKAGING_FEATURE : a.getClassifier(),
"txt");
final ArtifactHandler handler = mgr.getArtifactHandler(correctedId.toMvnUrl());
model = processModel(model, handler.getLocalURL(), includeModelInfo);
removeList.add(a);
} else {
final org.apache.sling.provisioning.model.Artifact realArtifact = nextModel.getFeature(feature.getName()).getRunMode(runMode.getNames()).getArtifactGroup(group.getStartLevel()).search(a);
if ( includeModelInfo ) {
realArtifact.getMetadata().put("model-filename", modelFile.getPath().substring(modelFile.getPath().lastIndexOf("/") + 1));
}
if ( runMode.getNames() != null ) {
realArtifact.getMetadata().put("runmodes", String.join(",", runMode.getNames()));
}
}
}
for(final org.apache.sling.provisioning.model.Artifact r : removeList) {
nextModel.getFeature(feature.getName()).getRunMode(runMode.getNames()).getArtifactGroup(group.getStartLevel()).remove(r);
}
}
}
}
if ( model == null ) {
model = nextModel;
} else {
MergeUtility.merge(model, nextModel);
}
return model;
}