public static JarOutputStream write()

in src/main/java/org/apache/sling/provisioning/model/io/ModelArchiveWriter.java [89:136]


    public static JarOutputStream write(final OutputStream out,
                             final Model model,
                             final Manifest baseManifest,
                             final ArtifactProvider provider)
    throws IOException {
        // check model
        final Map<Traceable, String> errors = ModelUtility.validate(model);
        if ( errors != null ) {
            throw new IOException("Model is not valid: " + errors);
        }

        // create manifest
        final Manifest manifest = (baseManifest == null ? new Manifest() : new Manifest(baseManifest));
        manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
        manifest.getMainAttributes().putValue(MANIFEST_HEADER, String.valueOf(ARCHIVE_VERSION));

        // create archive
        final JarOutputStream jos = new JarOutputStream(out, manifest);

        // write model first
        final JarEntry entry = new JarEntry(MODEL_NAME);
        jos.putNextEntry(entry);
        final Writer writer = new OutputStreamWriter(jos, "UTF-8");
        ModelWriter.write(writer, model);
        writer.flush();
        jos.closeEntry();

        final byte[] buffer = new byte[1024*1024*256];
        for(final Feature f : model.getFeatures() ) {
            for(final RunMode rm : f.getRunModes()) {
                for(final ArtifactGroup g : rm.getArtifactGroups()) {
                    for(final Artifact a : g) {
                        final JarEntry artifactEntry = new JarEntry(ARTIFACTS_PREFIX + a.getRepositoryPath());
                        jos.putNextEntry(artifactEntry);

                        try (final InputStream is = provider.getInputStream(a)) {
                            int l = 0;
                            while ( (l = is.read(buffer)) > 0 ) {
                                jos.write(buffer, 0, l);
                            }
                        }
                        jos.closeEntry();
                    }
                }
            }
        }
        return jos;
    }