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}