private SubsystemData createSubsystemFile()

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;
    }