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\Database\Resource;
 19 
 20 use OpenCloud\Common\Exceptions;
 21 use OpenCloud\Common\Lang;
 22 use OpenCloud\Common\Resource\PersistentResource;
 23 
 24 /**
 25  * This class represents a Database in the Rackspace "Red Dwarf"
 26  * database-as-a-service product.
 27  */
 28 class Database extends PersistentResource
 29 {
 30     /** @var string */
 31     public $name;
 32 
 33     protected static $json_collection_name = 'databases';
 34     protected static $url_resource = 'databases';
 35 
 36     public function __construct(Instance $instance, $info = null)
 37     {
 38         $this->setParent($instance);
 39 
 40         // Catering for laziness
 41         if (is_string($info)) {
 42             $info = array('name' => $info);
 43         }
 44 
 45         return parent::__construct($instance->getService(), $info);
 46     }
 47 
 48     /**
 49      * Returns name of this database. Because it's so important (i.e. as an
 50      * identifier), it will throw an error if not set/empty.
 51      *
 52      * @return type
 53      * @throws Exceptions\DatabaseNameError
 54      */
 55     public function getName()
 56     {
 57         if (empty($this->name)) {
 58             throw new Exceptions\DatabaseNameError(
 59                 Lang::translate('The database does not have a Url yet')
 60             );
 61         }
 62 
 63         return $this->name;
 64     }
 65 
 66     public function primaryKeyField()
 67     {
 68         return 'name';
 69     }
 70 
 71     /**
 72      * Returns the Instance of the database
 73      *
 74      * @return Instance
 75      */
 76     public function instance()
 77     {
 78         return $this->getParent();
 79     }
 80 
 81     /**
 82      * Creates a new database
 83      *
 84      * @api
 85      * @param array $params array of attributes to set prior to Create
 86      * @return \OpenCloud\HttpResponse
 87      */
 88     public function create($params = array())
 89     {
 90         // target the /databases subresource
 91         $url = $this->getParent()->url('databases');
 92 
 93         if (isset($params['name'])) {
 94             $this->name = $params['name'];
 95         }
 96 
 97         $json = json_encode($this->createJson($params));
 98         $this->checkJsonError();
 99 
100         // POST it off
101         return $this->getClient()->post($url, self::getJsonHeader(), $json)->send();
102     }
103 
104     /**
105      * Updates an existing database
106      *
107      * @param array $params ignored
108      * @throws DatabaseUpdateError always; updates are not permitted
109      * @return void
110      */
111     public function update($params = array())
112     {
113         return $this->noUpdate();
114     }
115 
116     /**
117      * Returns the JSON object for creating the database
118      */
119     protected function createJson(array $params = array())
120     {
121         $database = (object) array_merge(array('name' => $this->getName(), $params));
122 
123         return (object) array(
124             'databases' => array($database)
125         );
126     }
127 }
128 
API documentation generated by ApiGen