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