in src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java [127:173]
private static Model createModel(final List<File> files,
final String runModes, boolean allRunModes, boolean includeModelInfo) {
LOGGER.info("Assembling model...");
ResolverOptions variableResolver = new ResolverOptions().variableResolver(new VariableResolver() {
@Override
public String resolve(final Feature feature, final String name) {
// Keep variables as-is in the model
return "${" + name + "}";
}
});
Model model = null;
for(final File initFile : files) {
try {
model = processModel(model, initFile.toURI().toURL(), includeModelInfo, variableResolver);
} catch ( final IOException iae) {
LOGGER.error("Unable to read provisioning model {} : {}", initFile, iae.getMessage(), iae);
System.exit(1);
}
}
final Model effectiveModel = ModelUtility.getEffectiveModel(model, variableResolver);
final Map<Traceable, String> errors = ModelUtility.validate(effectiveModel);
if ( errors != null ) {
LOGGER.error("Invalid assembled provisioning model.");
for(final Map.Entry<Traceable, String> entry : errors.entrySet()) {
LOGGER.error("- {} : {}", entry.getKey().getLocation(), entry.getValue());
}
System.exit(1);
}
final Set<String> modes;
if (allRunModes) {
modes = new HashSet<>();
for (Feature f : effectiveModel.getFeatures()) {
for (RunMode rm : f.getRunModes()) {
String[] names = rm.getNames();
if (names != null) {
modes.addAll(Arrays.asList(names));
}
}
}
} else {
modes = calculateRunModes(effectiveModel, runModes);
}
return effectiveModel;
}