      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\Image\Resource;
     19:
     20: use OpenCloud\Common\Resource\BaseResource;
     21:
     22: /**
     23:  * Class that represents abstracted functionality for JSON schema objects. Because the nature of these objects is so
     24:  * dynamic (i.e. their structure is determined by an API-generated schema document), they implement the \ArrayAccess
     25:  * SPL interface. This allows them to be accessed as arrays - which is very useful for undefined properties.
     26:  *
     27:  * @package OpenCloud\Images\Resource
     28:  * @codeCoverageIgnore
     29:  */
     30: abstract class AbstractSchemaResource extends BaseResource implements \ArrayAccess
     31: {
     32:     /** @var string The ID of this resource */
     33:     protected $id;
     34:
     35:     /** @var array The internal elements of this model */
     36:     protected $data = array();
     37:
     38:     /**
     39:      * @param array $data
     40:      */
     41:     public function setData(array $data)
     42:     {
     43:         $this->data = $data;
     44:     }
     45:
     46:     /**
     47:      * @return array
     48:      */
     49:     public function getData()
     50:     {
     51:         return $this->data;
     52:     }
     53:
     54:     /**
     55:      * @param $id
     56:      */
     57:     public function setId($id)
     58:     {
     59:         $this->id = (string) $id;
     60:     }
     61:
     62:     /**
     63:      * @return string
     64:      */
     65:     public function getId()
     66:     {
     67:         return $this->id;
     68:     }
     69:
     70:     /**
     71:      * Sets a value to a particular offset.
     72:      *
     73:      * @param mixed $offset
     74:      * @param mixed $value
     75:      */
     76:     public function offsetSet($offset, $value)
     77:     {
     78:         if ($offset === null) {
     79:             $this->data[] = $value;
     80:         } else {
     81:             $this->data[$offset] = $value;
     82:         }
     83:     }
     84:
     85:     /**
     86:      * Checks to see whether a particular offset key exists.
     87:      *
     88:      * @param  mixed $offset
     89:      * @return bool
     90:      */
     91:     public function offsetExists($offset)
     92:     {
     93:         return array_key_exists($offset, $this->data);
     94:     }
     95:
     96:     /**
     97:      * Unset a particular key.
     98:      *
     99:      * @param mixed $offset
    100:      */
    101:     public function offsetUnset($offset)
    102:     {
    103:         unset($this->data[$offset]);
    104:     }
    105:
    106:     /**
    107:      * Get the value for a particular offset key.
    108:      *
    109:      * @param  mixed      $offset
    110:      * @return mixed|null
    111:      */
    112:     public function offsetGet($offset)
    113:     {
    114:         return $this->offsetExists($offset) ? $this->data[$offset] : null;
    115:     }
    116: }
    117: