     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\Volume\Resource;
    19:
    20: use OpenCloud\Common\Resource\PersistentResource;
    21:
    22: /**
    23:  * The Snapshot class represents a single block storage snapshot
    24:  */
    25: class Snapshot extends PersistentResource
    26: {
    27:     public $id;
    28:     public $display_name;
    29:     public $display_description;
    30:     public $volume_id;
    31:     public $status;
    32:     public $size;
    33:     public $created_at;
    34:     public $metadata;
    35:
    36:     protected $force = false;
    37:
    38:     protected static $json_name = 'snapshot';
    39:     protected static $url_resource = 'snapshots';
    40:
    41:     protected $createKeys = array(
    42:         'display_name',
    43:         'display_description',
    44:         'volume_id',
    45:         'force'
    46:     );
    47:
    48:     /**
    49:      * Rename either the `display_description` or the `display_name` properties
    50:      *
    51:      * @param array $params
    52:      * @return \Guzzle\Http\Message\Response
    53:      * @throws \InvalidArgumentException
    54:      */
    55:     public function rename(array $params = array())
    56:     {
    57:         $data = array();
    58:
    59:         $keys = array('display_description' => true, 'display_name' => true);
    60:
    61:         foreach ($params as $key => $value) {
    62:             if (isset($keys[$key])) {
    63:                 $data[$key] = $value;
    64:             } else {
    65:                 throw new \InvalidArgumentException(sprintf(
    66:                     'You cannot update the %s snapshot property. Valid keys are: %s',
    67:                     $key, implode($keys, ',')
    68:                 ));
    69:             }
    70:         }
    71:
    72:         $json = json_encode(array(
    73:            'snapshot' => $data
    74:         ));
    75:
    76:         return $this->getClient()
    77:             ->put($this->getUrl(), self::getJsonHeader(), $json)
    78:             ->send();
    79:     }
    80:
    81:     public function update($params = array())
    82:     {
    83:         return $this->noUpdate();
    84:     }
    85:
    86:     public function name()
    87:     {
    88:         return $this->display_name;
    89:     }
    90: }
    91: