ServerList.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Service_Rackspace
  17. * @subpackage Servers
  18. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. */
  21. require_once 'Zend/Service/Rackspace/Servers.php';
  22. require_once 'Zend/Service/Rackspace/Servers/Server.php';
  23. /**
  24. * List of servers of Rackspace
  25. *
  26. * @uses ArrayAccess
  27. * @uses Countable
  28. * @uses Iterator
  29. * @uses OutOfBoundsException
  30. * @uses Zend_Service_Rackspace_Servers
  31. * @category Zend
  32. * @package Zend_Service_Rackspace
  33. * @subpackage Servers
  34. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  35. * @license http://framework.zend.com/license/new-bsd New BSD License
  36. */
  37. class Zend_Service_Rackspace_Servers_ServerList implements Countable, Iterator, ArrayAccess
  38. {
  39. /**
  40. * @var array of Zend_Service_Rackspace_Servers_Server
  41. */
  42. protected $servers = array();
  43. /**
  44. * @var int Iterator key
  45. */
  46. protected $iteratorKey = 0;
  47. /**
  48. * @var Zend_Service_Rackspace_Servers
  49. */
  50. protected $service;
  51. /**
  52. * Construct
  53. *
  54. * @param Zend_Service_Rackspace_Servers $service
  55. * @param array $list
  56. * @return void
  57. */
  58. public function __construct($service,$list = array())
  59. {
  60. if (!($service instanceof Zend_Service_Rackspace_Servers) || !is_array($list)) {
  61. require_once 'Zend/Service/Rackspace/Servers/Exception.php';
  62. throw new Zend_Service_Rackspace_Servers_Exception("You must pass a Zend_Service_Rackspace_Servers object and an array");
  63. }
  64. $this->service= $service;
  65. $this->constructFromArray($list);
  66. }
  67. /**
  68. * Transforms the array to array of Server
  69. *
  70. * @param array $list
  71. * @return void
  72. */
  73. private function constructFromArray(array $list)
  74. {
  75. foreach ($list as $server) {
  76. $this->addServer(new Zend_Service_Rackspace_Servers_Server($this->service,$server));
  77. }
  78. }
  79. /**
  80. * Add a server
  81. *
  82. * @param Zend_Service_Rackspace_Servers_Server $server
  83. * @return Zend_Service_Rackspace_Servers_ServerList
  84. */
  85. protected function addServer (Zend_Service_Rackspace_Servers_Server $server)
  86. {
  87. $this->servers[] = $server;
  88. return $this;
  89. }
  90. /**
  91. * To Array
  92. *
  93. * @return array
  94. */
  95. public function toArray()
  96. {
  97. $array= array();
  98. foreach ($this->servers as $server) {
  99. $array[]= $server->toArray();
  100. }
  101. return $array;
  102. }
  103. /**
  104. * Return number of servers
  105. *
  106. * Implement Countable::count()
  107. *
  108. * @return int
  109. */
  110. public function count()
  111. {
  112. return count($this->servers);
  113. }
  114. /**
  115. * Return the current element
  116. *
  117. * Implement Iterator::current()
  118. *
  119. * @return Zend_Service_Rackspace_Servers_Server
  120. */
  121. public function current()
  122. {
  123. return $this->servers[$this->iteratorKey];
  124. }
  125. /**
  126. * Return the key of the current element
  127. *
  128. * Implement Iterator::key()
  129. *
  130. * @return int
  131. */
  132. public function key()
  133. {
  134. return $this->iteratorKey;
  135. }
  136. /**
  137. * Move forward to next element
  138. *
  139. * Implement Iterator::next()
  140. *
  141. * @return void
  142. */
  143. public function next()
  144. {
  145. $this->iteratorKey += 1;
  146. }
  147. /**
  148. * Rewind the Iterator to the first element
  149. *
  150. * Implement Iterator::rewind()
  151. *
  152. * @return void
  153. */
  154. public function rewind()
  155. {
  156. $this->iteratorKey = 0;
  157. }
  158. /**
  159. * Check if there is a current element after calls to rewind() or next()
  160. *
  161. * Implement Iterator::valid()
  162. *
  163. * @return bool
  164. */
  165. public function valid()
  166. {
  167. $numItems = $this->count();
  168. if ($numItems > 0 && $this->iteratorKey < $numItems) {
  169. return true;
  170. } else {
  171. return false;
  172. }
  173. }
  174. /**
  175. * Whether the offset exists
  176. *
  177. * Implement ArrayAccess::offsetExists()
  178. *
  179. * @param int $offset
  180. * @return bool
  181. */
  182. public function offsetExists($offset)
  183. {
  184. return ($offset < $this->count());
  185. }
  186. /**
  187. * Return value at given offset
  188. *
  189. * Implement ArrayAccess::offsetGet()
  190. *
  191. * @param int $offset
  192. * @throws Zend_Service_Rackspace_Servers_Exception
  193. * @return Zend_Service_Rackspace_Servers_Server
  194. */
  195. public function offsetGet($offset)
  196. {
  197. if ($this->offsetExists($offset)) {
  198. return $this->servers[$offset];
  199. } else {
  200. require_once 'Zend/Service/Rackspace/Servers/Exception.php';
  201. throw new Zend_Service_Rackspace_Servers_Exception('Illegal index');
  202. }
  203. }
  204. /**
  205. * Throws exception because all values are read-only
  206. *
  207. * Implement ArrayAccess::offsetSet()
  208. *
  209. * @param int $offset
  210. * @param string $value
  211. * @throws Zend_Service_Rackspace_Servers_Exception
  212. */
  213. public function offsetSet($offset, $value)
  214. {
  215. require_once 'Zend/Service/Rackspace/Servers/Exception.php';
  216. throw new Zend_Service_Rackspace_Servers_Exception('You are trying to set read-only property');
  217. }
  218. /**
  219. * Throws exception because all values are read-only
  220. *
  221. * Implement ArrayAccess::offsetUnset()
  222. *
  223. * @param int $offset
  224. * @throws Zend_Service_Rackspace_Servers_Exception
  225. */
  226. public function offsetUnset($offset)
  227. {
  228. require_once 'Zend/Service/Rackspace/Servers/Exception.php';
  229. throw new Zend_Service_Rackspace_Servers_Exception('You are trying to unset read-only property');
  230. }
  231. }