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}