public InputStream extract()

in src/main/java/org/apache/sling/feature/cpconverter/handlers/slinginitialcontent/BundleSlingInitialContentExtractor.java [63:96]


    public InputStream extract(@NotNull BundleSlingInitialContentExtractContext context) throws IOException, ConverterException {

        ContentPackage2FeatureModelConverter contentPackage2FeatureModelConverter = context.getConverter();

        if (context.getSlingInitialContentPolicy() == ContentPackage2FeatureModelConverter.SlingInitialContentPolicy.KEEP) {
            return null;
        }
        if (CollectionUtils.isEmpty(context.getPathEntryList())) {
            return null;
        }

        // create a bundle file that will contain all non-sling initial content 
        Path strippedBundleFile = getNewBundleFile(context, contentPackage2FeatureModelConverter);

        // collect the metadata into a set first, we need all the data upfront in our second loop.
        SlingInitialContentBundleEntryMetaDataCollector collector =
                new SlingInitialContentBundleEntryMetaDataCollector(context, contentPackage2FeatureModelConverter, strippedBundleFile);
        Set<SlingInitialContentBundleEntryMetaData> collectedSlingInitialContentBundleEntries = collector.collectFromContextAndWriteTmpFiles();

        // now that we got collectedSlingInitialContentBundleEntries ready, we loop it and perform an extract for each entry.
        // then add it into the appropriate vault package assemblers
        BundleSlingInitialContentJarEntryExtractor jarEntryExtractor =
                new BundleSlingInitialContentJarEntryExtractor(assemblerProvider, contentReaderProvider, parentFolderRepoInitHandler);

        for (SlingInitialContentBundleEntryMetaData slingInitialContentBundleEntryMetaData : collectedSlingInitialContentBundleEntries) {
            jarEntryExtractor.extractAndAddToAssembler(context, slingInitialContentBundleEntryMetaData, collectedSlingInitialContentBundleEntries);
        }

        // add additional content packages to feature model
        finalizePackageAssembly(context);

        // return bundle's inputstream, stripped off sling initial content, which must be deleted on close
        return Files.newInputStream(strippedBundleFile, StandardOpenOption.READ, StandardOpenOption.DELETE_ON_CLOSE);
    }