Overview

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • 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
      • Enum
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
    • Queues
      • Exception
      • Resource
    • Volume
      • Resource
  • PHP

Classes

  • AbstractTransfer
  • ConcurrentTransfer
  • ConsecutiveTransfer
  • ContainerMigration
  • DirectorySync
  • TransferBuilder
  • TransferPart
  • TransferState
  • Overview
  • Namespace
  • Class
  • Tree
  • Download
  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: 
PHP OpenCloud API API documentation generated by ApiGen 2.8.0