private File mergeChunks()

in src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java [358:396]


    private File mergeChunks(final Resource parentResource, final InputStream lastChunkStream)
            throws PersistenceException {
        OutputStream out = null;
        SequenceInputStream mergeStrm = null;
        File file = null;
        try {
            file = File.createTempFile("tmp-", "-mergechunk");
            out = new FileOutputStream(file);
            String startPattern = SlingPostConstants.CHUNK_NODE_NAME + "_" + "0_";
            Iterator<Resource> itr = new FilteringResourceIterator(parentResource.listChildren(), startPattern);
            final Set<InputStream> inpStrmSet = new LinkedHashSet<>();
            while (itr.hasNext()) {
                final Resource rangeResource = itr.next();
                if (itr.hasNext()) {
                    throw new PersistenceException("more than one resource found for pattern: " + startPattern + "*");
                }

                inpStrmSet.add(rangeResource.adaptTo(InputStream.class));
                log.debug("added chunk {} to merge stream", rangeResource.getName());
                String[] indexBounds = rangeResource
                        .getName()
                        .substring((SlingPostConstants.CHUNK_NODE_NAME + "_").length())
                        .split("_");
                startPattern = SlingPostConstants.CHUNK_NODE_NAME + "_"
                        + String.valueOf(Long.valueOf(indexBounds[1]) + 1) + "_";
                itr = new FilteringResourceIterator(parentResource.listChildren(), startPattern);
            }

            inpStrmSet.add(lastChunkStream);
            mergeStrm = new SequenceInputStream(Collections.enumeration(inpStrmSet));
            IOUtils.copyLarge(mergeStrm, out);
        } catch (final IOException e) {
            throw new PersistenceException("Exception during chunk merge occured: " + e.getMessage(), e);
        } finally {
            IOUtils.closeQuietly(out);
            IOUtils.closeQuietly(mergeStrm);
        }
        return file;
    }