web/Zend/Tool/Project/Profile/Resource.php
changeset 0 4eba9c11703f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Tool/Project/Profile/Resource.php	Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,262 @@
+<?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_Tool
+ * @subpackage Framework
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Resource.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+/**
+ * @see Zend_Tool_Project_Profile_Resource_Container
+ */
+require_once 'Zend/Tool/Project/Profile/Resource/Container.php';
+
+/**
+ * @see Zend_Tool_Project_Context_Repository
+ */
+require_once 'Zend/Tool/Project/Context/Repository.php';
+
+/**
+ * This class is an iterator that will iterate only over enabled resources
+ *
+ * @category   Zend
+ * @package    Zend_Tool
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Tool_Project_Profile_Resource extends Zend_Tool_Project_Profile_Resource_Container
+{
+
+    /**
+     * @var Zend_Tool_Project_Profile
+     */
+    protected $_profile = null;
+
+    /**
+     * @var Zend_Tool_Project_Profile_Resource
+     */
+    protected $_parentResource = null;
+
+    /**#@+
+     * @var bool
+     */
+    protected $_deleted = false;
+    protected $_enabled = true;
+    /**#@-*/
+
+    /**
+     * @var Zend_Tool_Project_Context|string
+     */
+    protected $_context = null;
+
+    /**
+     * @var array
+     */
+    protected $_attributes = array();
+
+    /**
+     * @var bool
+     */
+    protected $_isContextInitialized = false;
+
+    /**
+     * __construct()
+     *
+     * @param string|Zend_Tool_Project_Context_Interface $context
+     */
+    public function __construct($context)
+    {
+        $this->setContext($context);
+    }
+
+    /**
+     * setContext()
+     *
+     * @param string|Zend_Tool_Project_Context_Interface $context
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function setContext($context)
+    {
+        $this->_context = $context;
+        return $this;
+    }
+
+    /**
+     * getContext()
+     *
+     * @return Zend_Tool_Project_Context_Interface
+     */
+    public function getContext()
+    {
+        return $this->_context;
+    }
+
+    /**
+     * getName() - Get the resource name
+     *
+     * Name is derived from the context name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        if (is_string($this->_context)) {
+            return $this->_context;
+        } elseif ($this->_context instanceof Zend_Tool_Project_Context_Interface) {
+            return $this->_context->getName();
+        } else {
+            throw new Zend_Tool_Project_Exception('Invalid context in resource');
+        }
+    }
+
+    /**
+     * setProfile()
+     *
+     * @param Zend_Tool_Project_Profile $profile
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function setProfile(Zend_Tool_Project_Profile $profile)
+    {
+        $this->_profile = $profile;
+        return $this;
+    }
+
+    /**
+     * getProfile
+     *
+     * @return Zend_Tool_Project_Profile
+     */
+    public function getProfile()
+    {
+        return $this->_profile;
+    }
+
+    /**
+     * getPersistentAttributes()
+     *
+     * @return array
+     */
+    public function getPersistentAttributes()
+    {
+        if (method_exists($this->_context, 'getPersistentAttributes')) {
+            return $this->_context->getPersistentAttributes();
+        }
+
+        return array();
+    }
+
+    /**
+     * setEnabled()
+     *
+     * @param bool $enabled
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function setEnabled($enabled = true)
+    {
+        // convert fuzzy types to bool
+        $this->_enabled = (!in_array($enabled, array('false', 'disabled', 0, -1, false), true)) ? true : false;
+        return $this;
+    }
+
+    /**
+     * isEnabled()
+     *
+     * @return bool
+     */
+    public function isEnabled()
+    {
+        return $this->_enabled;
+    }
+
+    /**
+     * setDeleted()
+     *
+     * @param bool $deleted
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function setDeleted($deleted = true)
+    {
+        $this->_deleted = (bool) $deleted;
+        return $this;
+    }
+
+    /**
+     * isDeleted()
+     *
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function isDeleted()
+    {
+        return $this->_deleted;
+    }
+
+    /**
+     * initializeContext()
+     *
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function initializeContext()
+    {
+        if ($this->_isContextInitialized) {
+            return;
+        }
+        if (is_string($this->_context)) {
+            $this->_context = Zend_Tool_Project_Context_Repository::getInstance()->getContext($this->_context);
+        }
+
+        if (method_exists($this->_context, 'setResource')) {
+            $this->_context->setResource($this);
+        }
+
+        if (method_exists($this->_context, 'init')) {
+            $this->_context->init();
+        }
+
+        $this->_isContextInitialized = true;
+        return $this;
+    }
+
+    /**
+     * __toString()
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->_context->getName();
+    }
+
+    /**
+     * __call()
+     *
+     * @param string $method
+     * @param array $arguments
+     * @return Zend_Tool_Project_Profile_Resource
+     */
+    public function __call($method, $arguments)
+    {
+        if (method_exists($this->_context, $method)) {
+            if (!$this->isEnabled()) {
+                $this->setEnabled(true);
+            }
+            return call_user_func_array(array($this->_context, $method), $arguments);
+        } else {
+            throw new Zend_Tool_Project_Profile_Exception('cannot call ' . $method);
+        }
+    }
+
+}
\ No newline at end of file