public DistributionPackageInfo importStream()

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

    }