001package com.box.sdk;
002
003import java.util.List;
004
005/**
006 *
007 */
008public class LargeFileUploadTask implements Runnable {
009
010    private final int partPostion;
011    private BoxFileUploadSession session;
012    private byte[] data;
013    private List<BoxFileUploadSessionPart> parts;
014    private long offset;
015    private int partSize;
016    private long fileSize;
017
018    /**
019     * Runable task to create parallel http connctions for file upload session.
020     * @param session       file upload session object
021     * @param data          bytes to be uploaded
022     * @param offset        stream offset
023     * @param partSize      part size of the put request
024     * @param fileSize      total file size
025     * @param parts         list of the BoxFileUploadSessionPart objects
026     * @param partPostion   sequence number of the part
027     */
028    public LargeFileUploadTask(BoxFileUploadSession session, byte[] data, long offset,
029                               int partSize, long fileSize, List<BoxFileUploadSessionPart> parts, int partPostion) {
030        this.session = session;
031        this.data = data;
032        this.offset = offset;
033        this.partSize = partSize;
034        this.fileSize = fileSize;
035        this.parts = parts;
036        this.partPostion = partPostion;
037    }
038
039    @Override
040    public void run() {
041        //Retries the upload part 3 times in case of failure.
042        for (int i = 0; i < 3; i++) {
043            try {
044                BoxFileUploadSessionPart part =
045                    this.session.uploadPart(this.data, this.offset, this.partSize, this.fileSize);
046                this.parts.set(this.partPostion, part);
047                return;
048            } catch (BoxAPIException ex) {
049                if (i == 2) {
050                    throw ex;
051                }
052            }
053        }
054        throw new BoxAPIException("Upload part failed for offset: " + this.offset + " range: " + this.partSize);
055    }
056}