Overview
  • Namespace
  • Class

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • Collection
      • Exception
      • Resource
    • Common
      • Collection
      • Constants
      • Exceptions
      • Http
        • Message
      • Log
      • Resource
      • Service
    • Compute
      • Constants
      • Exception
      • Resource
    • Database
      • Resource
    • DNS
      • Collection
      • Resource
    • Identity
      • Constants
      • Resource
    • Image
      • Enum
      • Resource
        • JsonPatch
        • Schema
    • LoadBalancer
      • Collection
      • Enum
      • Resource
    • Networking
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
      • Resource
    • Queues
      • Collection
      • Exception
      • Resource
    • Volume
      • Resource

Classes

  • OpenCloud\Volume\Resource\Snapshot
  • OpenCloud\Volume\Resource\Volume
  • OpenCloud\Volume\Resource\VolumeType
  1 <?php
  2 /**
  3  * Copyright 2012-2014 Rackspace US, Inc.
  4  *
  5  * Licensed under the Apache License, Version 2.0 (the "License");
  6  * you may not use this file except in compliance with the License.
  7  * You may obtain a copy of the License at
  8  *
  9  * http://www.apache.org/licenses/LICENSE-2.0
 10  *
 11  * Unless required by applicable law or agreed to in writing, software
 12  * distributed under the License is distributed on an "AS IS" BASIS,
 13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  * See the License for the specific language governing permissions and
 15  * limitations under the License.
 16  */
 17 
 18 namespace OpenCloud\ObjectStore\Upload;
 19 
 20 use Guzzle\Http\EntityBody;
 21 use OpenCloud\Common\Exceptions\InvalidArgumentError;
 22 use OpenCloud\ObjectStore\Resource\Container;
 23 
 24 /**
 25  * Factory which creates Transfer objects, either ConcurrentTransfer or ConsecutiveTransfer.
 26  */
 27 class TransferBuilder
 28 {
 29     /**
 30      * @var Container The container being uploaded to
 31      */
 32     protected $container;
 33 
 34     /**
 35      * @var EntityBody The data payload.
 36      */
 37     protected $entityBody;
 38 
 39     /**
 40      * @var array A key/value pair of options.
 41      */
 42     protected $options = array();
 43 
 44     /**
 45      * @return TransferBuilder
 46      */
 47     public static function newInstance()
 48     {
 49         return new self();
 50     }
 51 
 52     /**
 53      * @param type $options Available configuration options:
 54      *
 55      * * `concurrency'    <bool>   The number of concurrent workers.
 56      * * `partSize'       <int>    The size, in bytes, for the chunk
 57      * * `doPartChecksum' <bool>   Enable or disable MD5 checksum in request (ETag)
 58      *
 59      * If you are uploading FooBar, its chunks will have the following naming structure:
 60      *
 61      * FooBar/1
 62      * FooBar/2
 63      * FooBar/3
 64      *
 65      * @return \OpenCloud\ObjectStore\Upload\UploadBuilder
 66      */
 67     public function setOptions($options)
 68     {
 69         $this->options = $options;
 70 
 71         return $this;
 72     }
 73 
 74     /**
 75      * @param $key   The option name
 76      * @param $value The option value
 77      * @return $this
 78      */
 79     public function setOption($key, $value)
 80     {
 81         $this->options[$key] = $value;
 82 
 83         return $this;
 84     }
 85 
 86     /**
 87      * @param Container $container
 88      * @return $this
 89      */
 90     public function setContainer(Container $container)
 91     {
 92         $this->container = $container;
 93 
 94         return $this;
 95     }
 96 
 97     /**
 98      * @param EntityBody $entityBody
 99      * @return $this
100      */
101     public function setEntityBody(EntityBody $entityBody)
102     {
103         $this->entityBody = $entityBody;
104 
105         return $this;
106     }
107 
108     /**
109      * Build the transfer.
110      *
111      * @return mixed
112      * @throws \OpenCloud\Common\Exceptions\InvalidArgumentError
113      */
114     public function build()
115     {
116         // Validate properties
117         if (!$this->container || !$this->entityBody || !$this->options['objectName']) {
118             throw new InvalidArgumentError('A container, entity body and object name must be set');
119         }
120 
121         // Create TransferState object for later use
122         $transferState = TransferState::factory();
123 
124         // Instantiate Concurrent-/ConsecutiveTransfer
125         $transferClass = isset($this->options['concurrency']) && $this->options['concurrency'] > 1
126             ? __NAMESPACE__ . '\\ConcurrentTransfer'
127             : __NAMESPACE__ . '\\ConsecutiveTransfer';
128 
129         return $transferClass::newInstance()
130             ->setClient($this->container->getClient())
131             ->setEntityBody($this->entityBody)
132             ->setTransferState($transferState)
133             ->setOptions($this->options)
134             ->setOption('containerName', $this->container->getName())
135             ->setOption('containerUrl', $this->container->getUrl())
136             ->setup();
137     }
138 }
139 
API documentation generated by ApiGen