private void exportOnePackage()

in src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java [86:160]


    private void exportOnePackage(final SlingHttpServletRequest request, final SlingHttpServletResponse response, final boolean delete)
            throws ServletException, IOException {

        DistributionPackageExporter distributionPackageExporter = request
                .getResource()
                .adaptTo(DistributionPackageExporter.class);

        final long start = System.currentTimeMillis();

        response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());

        DistributionRequest distributionRequest = RequestUtils.fromServletRequest(request);
        ResourceResolver resourceResolver = request.getResourceResolver();

        final AtomicInteger fetched = new AtomicInteger(0);
        try {
            // get all items
            distributionPackageExporter.exportPackages(resourceResolver, distributionRequest, new DistributionPackageProcessor() {
                @Override
                public void process(DistributionPackage distributionPackage) {
                    fetched.incrementAndGet();

                    InputStream inputStream = null;
                    int bytesCopied = -1;
                    try {
                        inputStream = DistributionPackageUtils.createStreamWithHeader(distributionPackage);

                        bytesCopied = IOUtils.copy(inputStream, response.getOutputStream());
                    } catch (IOException e) {
                        throw new RuntimeException("cannot process package", e);
                    } finally {
                        IOUtils.closeQuietly(inputStream);
                    }

                    String packageId = distributionPackage.getId();
                    if (delete) {
                        // delete the package permanently
                        distributionPackage.delete();
                    }


                    // everything ok
                    response.setStatus(200);
                    log.debug("exported package {} was sent (and deleted={}), bytes written {}", packageId, delete, bytesCopied);
                }

                @Override
                public List<DistributionResponse> getAllResponses() {
                    return null;
                }

                @Override
                public int getPackagesCount() {
                    return 0;
                }

                @Override
                public long getPackagesSize() {
                    return 0;
                }
            });

            if (fetched.get() > 0) {
                long end = System.currentTimeMillis();
                log.info("Processed distribution export request in {} ms: : fetched {}", end - start, fetched);
            } else {
                response.setStatus(204);
                log.debug("nothing to fetch");
            }

        } catch (Throwable e) {
            response.setStatus(503);
            log.error("error while exporting package", e);
        }
    }