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