| 
<?phpnamespace Aws\Multipart;
 
 /**
 * Representation of the multipart upload.
 *
 * This object keeps track of the state of the upload, including the status and
 * which parts have been uploaded.
 */
 class UploadState
 {
 const CREATED = 0;
 const INITIATED = 1;
 const COMPLETED = 2;
 
 /** @var array Params used to identity the upload. */
 private $id;
 
 /** @var int Part size being used by the upload. */
 private $partSize;
 
 /** @var array Parts that have been uploaded. */
 private $uploadedParts = [];
 
 /** @var int Identifies the status the upload. */
 private $status = self::CREATED;
 
 /**
 * @param array $id Params used to identity the upload.
 */
 public function __construct(array $id)
 {
 $this->id = $id;
 }
 
 /**
 * Get the upload's ID, which is a tuple of parameters that can uniquely
 * identify the upload.
 *
 * @return array
 */
 public function getId()
 {
 return $this->id;
 }
 
 /**
 * Set's the "upload_id", or 3rd part of the upload's ID. This typically
 * only needs to be done after initiating an upload.
 *
 * @param string $key   The param key of the upload_id.
 * @param string $value The param value of the upload_id.
 */
 public function setUploadId($key, $value)
 {
 $this->id[$key] = $value;
 }
 
 /**
 * Get the part size.
 *
 * @return int
 */
 public function getPartSize()
 {
 return $this->partSize;
 }
 
 /**
 * Set the part size.
 *
 * @param $partSize int Size of upload parts.
 */
 public function setPartSize($partSize)
 {
 $this->partSize = $partSize;
 }
 
 /**
 * Marks a part as being uploaded.
 *
 * @param int   $partNumber The part number.
 * @param array $partData   Data from the upload operation that needs to be
 *                          recalled during the complete operation.
 */
 public function markPartAsUploaded($partNumber, array $partData = [])
 {
 $this->uploadedParts[$partNumber] = $partData;
 }
 
 /**
 * Returns whether a part has been uploaded.
 *
 * @param int $partNumber The part number.
 *
 * @return bool
 */
 public function hasPartBeenUploaded($partNumber)
 {
 return isset($this->uploadedParts[$partNumber]);
 }
 
 /**
 * Returns a sorted list of all the uploaded parts.
 *
 * @return array
 */
 public function getUploadedParts()
 {
 ksort($this->uploadedParts);
 
 return $this->uploadedParts;
 }
 
 /**
 * Set the status of the upload.
 *
 * @param int $status Status is an integer code defined by the constants
 *                    CREATED, INITIATED, and COMPLETED on this class.
 */
 public function setStatus($status)
 {
 $this->status = $status;
 }
 
 /**
 * Determines whether the upload state is in the INITIATED status.
 *
 * @return bool
 */
 public function isInitiated()
 {
 return $this->status === self::INITIATED;
 }
 
 /**
 * Determines whether the upload state is in the COMPLETED status.
 *
 * @return bool
 */
 public function isCompleted()
 {
 return $this->status === self::COMPLETED;
 }
 }
 
 |