<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Service_Rackspace
* @subpackage Files
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
require_once 'Zend/Service/Rackspace/Files/Object.php';
require_once 'Zend/Service/Rackspace/Files.php';
/**
* List of servers retrived from the GoGrid web service
*
* @uses ArrayAccess
* @uses Countable
* @uses Iterator
* @uses OutOfBoundsException
* @uses Zend_Service_Rackspace_Files
* @category Zend
* @package Zend_Service_Rackspace
* @subpackage Files
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Service_Rackspace_Files_ObjectList implements Countable, Iterator, ArrayAccess
{
/**
* @var array of Zend_Service_Rackspace_Files_Object
*/
protected $objects = array();
/**
* @var int Iterator key
*/
protected $iteratorKey = 0;
/**
* @var RackspaceFiles
*/
protected $service;
/**
* The container name of the object list
*
* @var string
*/
protected $container;
/**
* Construct
*
* @param array $list
* @return boolean
*/
public function __construct($service,$list,$container)
{
if (!($service instanceof Zend_Service_Rackspace_Files)) {
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception("You must pass a Zend_Service_Rackspace_Files object");
}
if (!is_array($list)) {
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception("You must pass an array of data objects");
}
if (empty($container)) {
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception("You must pass the container of the object list");
}
$this->service= $service;
$this->container= $container;
$this->_constructFromArray($list);
}
/**
* Transforms the Array to array of container
*
* @param array $list
* @return void
*/
private function _constructFromArray(array $list)
{
foreach ($list as $obj) {
$obj['container']= $this->container;
$this->_addObject(new Zend_Service_Rackspace_Files_Object($this->service,$obj));
}
}
/**
* Add an object
*
* @param Zend_Service_Rackspace_Files_Object $obj
* @return Zend_Service_Rackspace_Files_ObjectList
*/
protected function _addObject (Zend_Service_Rackspace_Files_Object $obj)
{
$this->objects[] = $obj;
return $this;
}
/**
* Return number of servers
*
* Implement Countable::count()
*
* @return int
*/
public function count()
{
return count($this->objects);
}
/**
* Return the current element
*
* Implement Iterator::current()
*
* @return Zend_Service_Rackspace_Files_Object
*/
public function current()
{
return $this->objects[$this->iteratorKey];
}
/**
* Return the key of the current element
*
* Implement Iterator::key()
*
* @return int
*/
public function key()
{
return $this->iteratorKey;
}
/**
* Move forward to next element
*
* Implement Iterator::next()
*
* @return void
*/
public function next()
{
$this->iteratorKey += 1;
}
/**
* Rewind the Iterator to the first element
*
* Implement Iterator::rewind()
*
* @return void
*/
public function rewind()
{
$this->iteratorKey = 0;
}
/**
* Check if there is a current element after calls to rewind() or next()
*
* Implement Iterator::valid()
*
* @return bool
*/
public function valid()
{
$numItems = $this->count();
if ($numItems > 0 && $this->iteratorKey < $numItems) {
return true;
} else {
return false;
}
}
/**
* Whether the offset exists
*
* Implement ArrayAccess::offsetExists()
*
* @param int $offset
* @return bool
*/
public function offsetExists($offset)
{
return ($offset < $this->count());
}
/**
* Return value at given offset
*
* Implement ArrayAccess::offsetGet()
*
* @param int $offset
* @throws Zend_Service_Rackspace_Files_Exception
* @return Zend_Service_Rackspace_Files_Object
*/
public function offsetGet($offset)
{
if ($this->offsetExists($offset)) {
return $this->objects[$offset];
} else {
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception('Illegal index');
}
}
/**
* Throws exception because all values are read-only
*
* Implement ArrayAccess::offsetSet()
*
* @param int $offset
* @param string $value
* @throws Zend_Service_Rackspace_Files_Exception
*/
public function offsetSet($offset, $value)
{
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception('You are trying to set read-only property');
}
/**
* Throws exception because all values are read-only
*
* Implement ArrayAccess::offsetUnset()
*
* @param int $offset
* @throws Zend_Service_Rackspace_Files_Exception
*/
public function offsetUnset($offset)
{
require_once 'Zend/Service/Rackspace/Files/Exception.php';
throw new Zend_Service_Rackspace_Files_Exception('You are trying to unset read-only property');
}
}