in src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java [70:108]
public static List<File> convert(File file, File outDir, Map<String, Object> options) {
Model model = createModel(Collections.singletonList(file), null, true, false);
String bareFileName = getBareFileName(file);
final List<org.apache.sling.feature.Feature> features = buildFeatures(model, bareFileName, options);
List<File> files = new ArrayList<>();
for (org.apache.sling.feature.Feature f : features) {
String id = f.getVariables().get(FeatureToProvisioning.PROVISIONING_MODEL_NAME_VARIABLE);
if (id == null) {
id = f.getId().getArtifactId();
}
id = id.replaceAll("[:]","");
id = bareFileName + "_" + id;
boolean noProvisioningModelName = getOption(options, "noProvisioningModelName", false);
if(noProvisioningModelName) {
// Provisioning Model Names create a conflict is provided in multiple PM files so it is dropped by request
f.getVariables().remove(FeatureToProvisioning.PROVISIONING_MODEL_NAME_VARIABLE);
}
File outFile = new File(outDir, id + ".json");
files.add(outFile);
if (outFile.exists()) {
// On a very fast computer the generated file might have the same timestamp if the file was previously copied
if (outFile.lastModified() >= file.lastModified()) {
LOGGER.debug("Skipping the generation of {} as this file already exists and is not older.", outFile);
continue;
} else {
LOGGER.debug("Deleting existing file {} as source is newer, modified: out: '{}', source: '{}'", outFile, outFile.lastModified(), file.lastModified());
outFile.delete();
}
}
writeFeature(f, outFile.getAbsolutePath(), 0);
}
return files;
}