diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Queue/Message/Iterator.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Queue/Message/Iterator.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,285 @@ +array()); + * @return void + */ + public function __construct(array $options = array()) + { + if (isset($options['queue'])) { + $this->_queue = $options['queue']; + $this->_queueClass = get_class($this->_queue); + $this->_connected = true; + } else { + $this->_connected = false; + } + if (isset($options['messageClass'])) { + $this->_messageClass = $options['messageClass']; + } + + if (!is_array($options['data'])) { + require_once 'Zend/Queue/Exception.php'; + throw new Zend_Queue_Exception('array optionsuration must have $options[\'data\'] = array'); + } + + // load the message class + $classname = $this->_messageClass; + if (!class_exists($classname)) { + require_once 'Zend/Loader.php'; + Zend_Loader::loadClass($classname); + } + + // for each of the messages + foreach ($options['data'] as $data) { + // construct the message parameters + $message = array('data' => $data); + + // If queue has not been set, then use the default. + if (empty($message['queue'])) { + $message['queue'] = $this->_queue; + } + + // construct the message and add it to _data[]; + $this->_data[] = new $classname($message); + } + } + + /** + * Store queue and data in serialized object + * + * @return array + */ + public function __sleep() + { + return array('_data', '_queueClass', '_messageClass', '_pointer'); + } + + /** + * Setup to do on wakeup. + * A de-serialized Message should not be assumed to have access to a live + * queue connection, so set _connected = false. + * + * @return void + */ + public function __wakeup() + { + $this->_connected = false; + } + + /** + * Returns all data as an array. + * + * Used for debugging. + * + * @return array + */ + public function toArray() + { + // @todo This works only if we have iterated through + // the result set once to instantiate the messages. + foreach ($this->_data as $i => $message) { + $this->_data[$i] = $message->toArray(); + } + return $this->_data; + } + + /** + * Returns the queue object, or null if this is disconnected message set + * + * @return Zend_Queue|null + */ + public function getQueue() + { + return $this->_queue; + } + + /** + * Set the queue object, to re-establish a live connection + * to the queue for a Message that has been de-serialized. + * + * @param Zend_Queue_Adapter_AdapterInterface $queue + * @return boolean + * @throws Zend_Queue_Exception + */ + public function setQueue(Zend_Queue $queue) + { + $this->_queue = $queue; + $this->_connected = false; + + // @todo This works only if we have iterated through + // the result set once to instantiate the rows. + foreach ($this->_data as $i => $message) { + $this->_connected = $this->_connected || $message->setQueue($queue); + } + + return $this->_connected; + } + + /** + * Query the class name of the Queue object for which this + * Message was created. + * + * @return string + */ + public function getQueueClass() + { + return $this->_queueClass; + } + + /* + * Iterator implementation + */ + + /** + * Rewind the Iterator to the first element. + * Similar to the reset() function for arrays in PHP. + * Required by interface Iterator. + * + * @return void + */ + public function rewind() + { + $this->_pointer = 0; + } + + /** + * Return the current element. + * Similar to the current() function for arrays in PHP + * Required by interface Iterator. + * + * @return Zend_Queue_Message current element from the collection + */ + public function current() + { + return (($this->valid() === false) + ? null + : $this->_data[$this->_pointer]); // return the messages object + } + + /** + * Return the identifying key of the current element. + * Similar to the key() function for arrays in PHP. + * Required by interface Iterator. + * + * @return integer + */ + public function key() + { + return $this->_pointer; + } + + /** + * Move forward to next element. + * Similar to the next() function for arrays in PHP. + * Required by interface Iterator. + * + * @return void + */ + public function next() + { + ++$this->_pointer; + } + + /** + * Check if there is a current element after calls to rewind() or next(). + * Used to check if we've iterated to the end of the collection. + * Required by interface Iterator. + * + * @return bool False if there's nothing more to iterate over + */ + public function valid() + { + return $this->_pointer < count($this); + } + + /* + * Countable Implementation + */ + + /** + * Returns the number of elements in the collection. + * + * Implements Countable::count() + * + * @return integer + */ + public function count() + { + return count($this->_data); + } +}