File indexing completed on 2024-12-29 05:28:04
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Service_WindowsAzure 0017 * @subpackage Storage 0018 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0019 * @license http://framework.zend.com/license/new-bsd New BSD License 0020 * @version $Id$ 0021 */ 0022 0023 /** 0024 * @see Zend_Service_WindowsAzure_Storage_TableEntity 0025 */ 0026 // require_once 'Zend/Service/WindowsAzure/Storage/TableEntity.php'; 0027 0028 /** 0029 * @category Zend 0030 * @package Zend_Service_WindowsAzure 0031 * @subpackage Storage 0032 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0033 * @license http://framework.zend.com/license/new-bsd New BSD License 0034 */ 0035 class Zend_Service_WindowsAzure_Storage_DynamicTableEntity extends Zend_Service_WindowsAzure_Storage_TableEntity 0036 { 0037 /** 0038 * Dynamic properties 0039 * 0040 * @var array 0041 */ 0042 protected $_dynamicProperties = array(); 0043 0044 /** 0045 * Magic overload for setting properties 0046 * 0047 * @param string $name Name of the property 0048 * @param string $value Value to set 0049 */ 0050 public function __set($name, $value) { 0051 $this->setAzureProperty($name, $value, null); 0052 } 0053 0054 /** 0055 * Magic overload for getting properties 0056 * 0057 * @param string $name Name of the property 0058 */ 0059 public function __get($name) { 0060 return $this->getAzureProperty($name); 0061 } 0062 0063 /** 0064 * Set an Azure property 0065 * 0066 * @param string $name Property name 0067 * @param mixed $value Property value 0068 * @param string $type Property type (Edm.xxxx) 0069 * @return Zend_Service_WindowsAzure_Storage_DynamicTableEntity 0070 */ 0071 public function setAzureProperty($name, $value = '', $type = null) 0072 { 0073 if (strtolower($name) == 'partitionkey') { 0074 $this->setPartitionKey($value); 0075 } else if (strtolower($name) == 'rowkey') { 0076 $this->setRowKey($value); 0077 } else if (strtolower($name) == 'etag') { 0078 $this->setEtag($value); 0079 } else { 0080 if (!array_key_exists(strtolower($name), $this->_dynamicProperties)) { 0081 // Determine type? 0082 if (is_null($type)) { 0083 $type = 'Edm.String'; 0084 if (is_int($value)) { 0085 $type = 'Edm.Int32'; 0086 } else if (is_float($value)) { 0087 $type = 'Edm.Double'; 0088 } else if (is_bool($value)) { 0089 $type = 'Edm.Boolean'; 0090 } else if ($value instanceof DateTime || $this->_convertToDateTime($value) !== false) { 0091 if (!$value instanceof DateTime) { 0092 $value = $this->_convertToDateTime($value); 0093 } 0094 $type = 'Edm.DateTime'; 0095 } 0096 } 0097 0098 // Set dynamic property 0099 $this->_dynamicProperties[strtolower($name)] = (object)array( 0100 'Name' => $name, 0101 'Type' => $type, 0102 'Value' => $value, 0103 ); 0104 } 0105 0106 // Set type? 0107 if (!is_null($type)) { 0108 $this->_dynamicProperties[strtolower($name)]->Type = $type; 0109 0110 // Try to convert the type 0111 if ($type == 'Edm.Int32' || $type == 'Edm.Int64') { 0112 $value = intval($value); 0113 } else if ($type == 'Edm.Double') { 0114 $value = floatval($value); 0115 } else if ($type == 'Edm.Boolean') { 0116 if (!is_bool($value)) { 0117 $value = strtolower($value) == 'true'; 0118 } 0119 } else if ($type == 'Edm.DateTime') { 0120 if (!$value instanceof DateTime) { 0121 $value = $this->_convertToDateTime($value); 0122 } 0123 } 0124 } 0125 0126 // Set value 0127 $this->_dynamicProperties[strtolower($name)]->Value = $value; 0128 } 0129 return $this; 0130 } 0131 0132 /** 0133 * Set an Azure property type 0134 * 0135 * @param string $name Property name 0136 * @param string $type Property type (Edm.xxxx) 0137 * @return Zend_Service_WindowsAzure_Storage_DynamicTableEntity 0138 */ 0139 public function setAzurePropertyType($name, $type = 'Edm.String') 0140 { 0141 if (!array_key_exists(strtolower($name), $this->_dynamicProperties)) { 0142 $this->setAzureProperty($name, '', $type); 0143 } else { 0144 $this->_dynamicProperties[strtolower($name)]->Type = $type; 0145 } 0146 return $this; 0147 } 0148 0149 /** 0150 * Get an Azure property 0151 * 0152 * @param string $name Property name 0153 * @param mixed $value Property value 0154 * @param string $type Property type (Edm.xxxx) 0155 * @return Zend_Service_WindowsAzure_Storage_DynamicTableEntity 0156 */ 0157 public function getAzureProperty($name) 0158 { 0159 if (strtolower($name) == 'partitionkey') { 0160 return $this->getPartitionKey(); 0161 } 0162 if (strtolower($name) == 'rowkey') { 0163 return $this->getRowKey(); 0164 } 0165 if (strtolower($name) == 'etag') { 0166 return $this->getEtag(); 0167 } 0168 0169 if (!array_key_exists(strtolower($name), $this->_dynamicProperties)) { 0170 $this->setAzureProperty($name); 0171 } 0172 0173 return $this->_dynamicProperties[strtolower($name)]->Value; 0174 } 0175 0176 /** 0177 * Get an Azure property type 0178 * 0179 * @param string $name Property name 0180 * @return string Property type (Edm.xxxx) 0181 */ 0182 public function getAzurePropertyType($name) 0183 { 0184 if (!array_key_exists(strtolower($name), $this->_dynamicProperties)) { 0185 $this->setAzureProperty($name, '', $type); 0186 } 0187 0188 return $this->_dynamicProperties[strtolower($name)]->Type; 0189 } 0190 0191 /** 0192 * Get Azure values 0193 * 0194 * @return array 0195 */ 0196 public function getAzureValues() 0197 { 0198 return array_merge(array_values($this->_dynamicProperties), parent::getAzureValues()); 0199 } 0200 0201 /** 0202 * Set Azure values 0203 * 0204 * @param array $values 0205 * @param boolean $throwOnError Throw Zend_Service_WindowsAzure_Exception when a property is not specified in $values? 0206 * @throws Zend_Service_WindowsAzure_Exception 0207 */ 0208 public function setAzureValues($values = array(), $throwOnError = false) 0209 { 0210 // Set parent values 0211 parent::setAzureValues($values, false); 0212 0213 // Set current values 0214 foreach ($values as $key => $value) 0215 { 0216 $this->$key = $value; 0217 } 0218 } 0219 }