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\Resource;
 19 
 20 use OpenCloud\Common\Exceptions;
 21 use OpenCloud\Common\Service\ServiceInterface;
 22 use OpenCloud\ObjectStore\Constants\Header as HeaderConst;
 23 
 24 /**
 25  * Abstract class holding shared functionality for containers.
 26  */
 27 abstract class AbstractContainer extends AbstractResource
 28 {
 29     protected $metadataClass = 'OpenCloud\\ObjectStore\\Resource\\ContainerMetadata';
 30 
 31     /**
 32      * The name of the container.
 33      *
 34      * The only restrictions on container names is that they cannot contain a
 35      * forward slash (/) and must be less than 256 bytes in length. Please note
 36      * that the length restriction applies to the name after it has been URL
 37      * encoded. For example, a container named Course Docs would be URL encoded
 38      * as Course%20Docs - which is 13 bytes in length rather than the expected 11.
 39      *
 40      * @var string
 41      */
 42     public $name;
 43 
 44     public function __construct(ServiceInterface $service, $data = null)
 45     {
 46         $this->service = $service;
 47         $this->metadata = new $this->metadataClass;
 48 
 49         // Populate data if set
 50         $this->populate($data);
 51     }
 52 
 53     public function getTransId()
 54     {
 55         return $this->metadata->getProperty(HeaderConst::TRANS_ID);
 56     }
 57 
 58     abstract public function isCdnEnabled();
 59 
 60     public function hasLogRetention()
 61     {
 62         if ($this instanceof CDNContainer) {
 63             return $this->metadata->getProperty(HeaderConst::LOG_RETENTION) == 'True';
 64         } else {
 65             return $this->metadata->propertyExists(HeaderConst::ACCESS_LOGS);
 66         }
 67     }
 68 
 69     public function primaryKeyField()
 70     {
 71         return 'name';
 72     }
 73 
 74     public function getUrl($path = null, array $params = array())
 75     {
 76         if (strlen($this->getName()) == 0) {
 77             throw new Exceptions\NoNameError('Container does not have a name');
 78         }
 79 
 80         $url = $this->getService()->getUrl();
 81 
 82         return $url->addPath((string) $this->getName())->addPath((string) $path)->setQuery($params);
 83     }
 84 
 85     protected function createRefreshRequest()
 86     {
 87         return $this->getClient()->head($this->getUrl(), array('Accept' => '*/*'));
 88     }
 89 
 90     /**
 91      * This method will enable your CDN-enabled container to serve out HTML content like a website.
 92      *
 93      * @param $indexPage The data object name (i.e. a .html file) that will serve as the main index page.
 94      * @return \Guzzle\Http\Message\Response
 95      */
 96     public function setStaticIndexPage($page)
 97     {
 98         if ($this instanceof CDNContainer) {
 99             $this->getLogger()->warning(
100                 'This method cannot be called on the CDN object - please execute it on the normal Container'
101             );
102         }
103 
104         $headers = array('X-Container-Meta-Web-Index' => $page);
105 
106         return $this->getClient()->post($this->getUrl(), $headers)->send();
107     }
108 
109     /**
110      * Set the default error page for your static site.
111      *
112      * @param $name The data object name (i.e. a .html file) that will serve as the main error page.
113      * @return \Guzzle\Http\Message\Response
114      */
115     public function setStaticErrorPage($page)
116     {
117         if ($this instanceof CDNContainer) {
118             $this->getLogger()->warning(
119                 'This method cannot be called on the CDN object - please execute it on the normal Container'
120             );
121         }
122 
123         $headers = array('X-Container-Meta-Web-Error' => $page);
124 
125         return $this->getClient()->post($this->getUrl(), $headers)->send();
126     }
127 }
128 
API documentation generated by ApiGen