in src/main/java/org/apache/sling/installer/factories/subsystems/base/impl/SubsystemBaseTransformer.java [98:133]
private SubsystemData createSubsystemFile(RegisteredResource resource) throws IOException {
SubsystemData data = new SubsystemData();
StringBuilder subsystemContent = new StringBuilder();
try (JarInputStream jis = new JarInputStream(resource.getInputStream())) {
Manifest runModesManifest = jis.getManifest();
Set<String> runModeResources = processRunModesManifest(runModesManifest);
File zf = File.createTempFile("sling-generated", ".esa");
zf.deleteOnExit();
data.file = zf;
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zf))) {
ZipEntry zie = null;
while((zie = jis.getNextEntry()) != null) {
String zieName = zie.getName();
if ("SUBSYSTEM-MANIFEST-BASE.MF".equals(zieName)) {
data.manifest = new Manifest(jis);
} else if (runModeResources.contains(zieName)) {
zieName = zieName.substring(POTENTIAL_BUNDLES.length());
handleSubsystemArtifact(zieName, jis, zos, subsystemContent);
}
}
data.manifest.getMainAttributes().putValue(SubsystemConstants.SUBSYSTEM_CONTENT, subsystemContent.toString());
ZipEntry zoe = new ZipEntry("OSGI-INF/SUBSYSTEM.MF");
try {
zos.putNextEntry(zoe);
data.manifest.write(zos);
} finally {
zos.closeEntry();
}
}
}
return data;
}