From d6c0bcb4fc60f8f01c3e2bf2febcd978ea8cd257 Mon Sep 17 00:00:00 2001
From: "Jonathan.Wage" <Jonathan.Wage@625475ce-881a-0410-a577-b389adb331d8>
Date: Mon, 24 Sep 2007 04:59:44 +0000
Subject: [PATCH] Initial entry for Resource refactoring.

---
 lib/Doctrine/Resource/Config.php  | 35 ++++++++++++
 lib/Doctrine/Resource/Params.php  | 71 +++++++++++++++++++++++
 lib/Doctrine/Resource/Request.php | 95 +++++++++++++++++++++++++++++++
 3 files changed, 201 insertions(+)
 create mode 100644 lib/Doctrine/Resource/Config.php
 create mode 100644 lib/Doctrine/Resource/Params.php
 create mode 100644 lib/Doctrine/Resource/Request.php

diff --git a/lib/Doctrine/Resource/Config.php b/lib/Doctrine/Resource/Config.php
new file mode 100644
index 000000000..39c4adeab
--- /dev/null
+++ b/lib/Doctrine/Resource/Config.php
@@ -0,0 +1,35 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Resource_Config
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jonathan H. Wage <jwage@mac.com>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Resource_Config extends Doctrine_Resource_Params
+{ }
\ No newline at end of file
diff --git a/lib/Doctrine/Resource/Params.php b/lib/Doctrine/Resource/Params.php
new file mode 100644
index 000000000..b0ecde656
--- /dev/null
+++ b/lib/Doctrine/Resource/Params.php
@@ -0,0 +1,71 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Resource_Params
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jonathan H. Wage <jwage@mac.com>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Resource_Params
+{
+    protected $_data = array();
+    
+    public function __construct($array = null)
+    {
+        if ($array !== null) {
+            foreach ($array as $key => $value) {
+                $this->set($key, $value);
+            }
+        }
+    }
+    
+    public function set($key, $value)
+    {
+        $this->_data[$key] = $value;
+    }
+    
+    public function get($key)
+    {
+        return isset($this->_data[$key]) ? $this->_data[$key]:null;
+    }
+    
+    public function has($key)
+    {
+        return isset($this->_data[$key]) ? true:false;
+    }
+    
+    public function remove($key)
+    {
+        unset($this->_data[$key]);
+    }
+    
+    public function getAll()
+    {
+        return $this->_data;
+    }
+}
\ No newline at end of file
diff --git a/lib/Doctrine/Resource/Request.php b/lib/Doctrine/Resource/Request.php
new file mode 100644
index 000000000..03311ff52
--- /dev/null
+++ b/lib/Doctrine/Resource/Request.php
@@ -0,0 +1,95 @@
+<?php
+/*
+ *  $Id$
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.phpdoctrine.com>.
+ */
+
+/**
+ * Doctrine_Resource_Request
+ *
+ * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author      Jonathan H. Wage <jwage@mac.com>
+ * @package     Doctrine
+ * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
+ * @version     $Revision$
+ * @category    Object Relational Mapping
+ * @link        www.phpdoctrine.com
+ * @since       1.0
+ */
+class Doctrine_Resource_Request extends Doctrine_Resource_Params
+{
+    protected $_params = null;
+    
+    public function getConfig($key = null)
+    {
+        return Doctrine_Resource_Client::getInstance()->getConfig($key);
+    }
+    
+    public function getParams()
+    {
+        if ($this->_params === null) {
+            $this->_params = new Doctrine_Resource_Params();
+        }
+        
+        return $this->_params;
+    }
+    
+    public function get($key)
+    {
+        return $this->getParams()->get($key);
+    }
+    
+    public function set($key, $value)
+    {
+        return $this->getParams()->set($key, $value);
+    }
+    
+    public function execute()
+    {
+        $url  = $this->getConfig()->get('url');
+        $url .= strstr($this->getConfig()->get('url'), '?') ? '&':'?';
+        $url .= http_build_query($this->getParams()->getAll());
+        
+        $response = file_get_contents($url);
+        
+        return $response;
+    }
+    
+    public function hydrate(array $array, $model, $passedKey = null)
+    {
+        $config = $this->getConfig();
+        
+        $collection = new Doctrine_Resource_Collection($model, $config);
+        
+        foreach ($array as $record) {
+            $r = new Doctrine_Resource_Record($model, $config);
+            
+            foreach ($record as $key => $value) {
+                if (is_array($value)) {
+                    $r->set($key, $this->hydrate($value, $model, $config, $key));
+                } else {
+                    $r->set($key, $value);
+                }
+            }
+        
+            $collection[] = $r;
+        }
+        
+        return $collection;
+    }
+}
\ No newline at end of file
-- 
2.21.0