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