in src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java [87:147]
public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
if (!stream.markSupported()) {
stream = new BufferedInputStream(stream);
}
Map<String, Object> headerInfo = new HashMap<String, Object>();
DistributionPackageUtils.readInfo(stream, headerInfo);
log.debug("header info: {}", headerInfo);
Object o = headerInfo.get(DistributionPackageUtils.PROPERTY_REMOTE_PACKAGE_ID);
String reference = o != null ? String.valueOf(o) : null;
if (reference != null) {
if (ReferencePackage.isReference(reference)) {
String actualPackageId = ReferencePackage.idFromReference(reference);
if (actualPackageId != null) {
log.info("installing from reference {}", actualPackageId);
DistributionPackage distributionPackage = packageBuilder.getPackage(resourceResolver, actualPackageId);
if (distributionPackage != null) {
if (packageBuilder.installPackage(resourceResolver, distributionPackage)) {
DistributionPackageInfo info = distributionPackage.getInfo();
log.info("package installed {}", info);
eventFactory.generatePackageEvent(DistributionEventTopics.IMPORTER_PACKAGE_IMPORTED, DistributionComponentKind.IMPORTER, name, info);
return info;
} else {
throw new DistributionException("could not install package {}" + distributionPackage);
}
} else {
throw new DistributionException("could not install package from reference " + actualPackageId);
}
} else {
throw new DistributionException("could not install package from invalid reference " + reference);
}
} else {
try {
stream.reset(); // TODO : see if this can be removed entirely
} catch (IOException e) {
// do nothing
}
DistributionPackageInfo packageInfo;
Object rr = headerInfo.get("reference-required");
boolean store = rr != null && Boolean.valueOf(rr.toString());
if (store) {
log.debug("storing actual package");
DistributionPackage distributionPackage = packageBuilder.readPackage(resourceResolver, stream);
packageInfo = distributionPackage.getInfo();
log.info("package stored {}", packageInfo);
} else {
packageInfo = packageBuilder.installPackage(resourceResolver, stream);
log.info("package installed {}", packageInfo);
}
eventFactory.generatePackageEvent(DistributionEventTopics.IMPORTER_PACKAGE_IMPORTED, DistributionComponentKind.IMPORTER, name, packageInfo);
return packageInfo;
}
} else {
DistributionPackageInfo packageInfo = packageBuilder.installPackage(resourceResolver, stream);
log.info("package installed");
eventFactory.generatePackageEvent(DistributionEventTopics.IMPORTER_PACKAGE_IMPORTED, DistributionComponentKind.IMPORTER, name, packageInfo);
return packageInfo;
}
}