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     *
021     * @param session     file upload session object
022     * @param data        bytes to be uploaded
023     * @param offset      stream offset
024     * @param partSize    part size of the put request
025     * @param fileSize    total file size
026     * @param parts       list of the BoxFileUploadSessionPart objects
027     * @param partPostion sequence number of the part
028     */
029    public LargeFileUploadTask(BoxFileUploadSession session, byte[] data, long offset,
030                               int partSize, long fileSize, List<BoxFileUploadSessionPart> parts, int partPostion) {
031        this.session = session;
032        this.data = data;
033        this.offset = offset;
034        this.partSize = partSize;
035        this.fileSize = fileSize;
036        this.parts = parts;
037        this.partPostion = partPostion;
038    }
039
040    @Override
041    public void run() {
042        //Retries the upload part 3 times in case of failure.
043        for (int i = 0; i < 3; i++) {
044            try {
045                BoxFileUploadSessionPart part =
046                    this.session.uploadPart(this.data, this.offset, this.partSize, this.fileSize);
047                this.parts.set(this.partPostion, part);
048                return;
049            } catch (BoxAPIException ex) {
050                if (i == 2) {
051                    throw ex;
052                }
053            }
054        }
055        throw new BoxAPIException("Upload part failed for offset: " + this.offset + " range: " + this.partSize);
056    }
057}