removed LoggerPropertySetter in favour to ReflectionUtils. Redirected calls
authorChristian Grobmeier <grobmeier@apache.org>
Fri, 22 May 2009 14:25:47 +0000 (14:25 +0000)
committerChristian Grobmeier <grobmeier@apache.org>
Fri, 22 May 2009 14:25:47 +0000 (14:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/incubator/log4php/trunk@777543 13f79535-47bb-0310-9956-ffa450edef68

CHANGELOG
src/main/php/LoggerManager.php
src/main/php/LoggerReflectionUtils.php
src/main/php/config/LoggerPropertySetter.php [deleted file]
src/main/php/configurators/LoggerConfiguratorIni.php
src/main/php/configurators/LoggerConfiguratorXml.php
src/test/php/LoggerReflectionUtilsTest.php
src/test/php/config/LoggerPropertySetterTest.php [deleted file]

index 77d2fcf..2311a62 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,7 @@ Version 2.0 to be released
 - Enh: Initial port to PHP 5 (Knut Urdalen)
 - Enh: Established new unit test suite (Knut Urdalen)
 - Enh: Added a range of examples (Knut Urdalen)
+- Enh: Created common ReflectionUtils class and moved factory calls to there (Christian Grobmeier)
 
 Version 0.9 December 10th, 2003
 -------------------------------
index 8409bf5..4c8aabd 100644 (file)
@@ -74,7 +74,6 @@ class LoggerManager {
                'LoggerAppenderRollingFile' => '/appenders/LoggerAppenderRollingFile.php',
                'LoggerAppenderSocket' => '/appenders/LoggerAppenderSocket.php',
                'LoggerAppenderSyslog' => '/appenders/LoggerAppenderSyslog.php',
-               'LoggerPropertySetter' => '/config/LoggerPropertySetter.php',
                'LoggerFormattingInfo' => '/helpers/LoggerFormattingInfo.php',
                'LoggerOptionConverter' => '/helpers/LoggerOptionConverter.php',
                'LoggerPatternConverter' => '/helpers/LoggerPatternConverter.php',
index 2f25730..1665266 100644 (file)
   * Provides methods for reflective use on php objects
   */
 class LoggerReflectionUtils {
+               /** the target object */
+       private $obj;
+  
+       /**
+        * Create a new LoggerReflectionUtils for the specified Object. 
+        * This is done in prepartion for invoking {@link setProperty()} 
+        * one or more times.
+        * @param object &$obj the object for which to set properties
+        */
+       public function __construct(&$obj) {
+               $this->obj =& $obj;
+       }
+  
+       /**
+        * Set the properties of an object passed as a parameter in one
+        * go. The <code>properties</code> are parsed relative to a
+        * <code>prefix</code>.
+        *
+        * @param object &$obj The object to configure.
+        * @param array $properties An array containing keys and values.
+        * @param string $prefix Only keys having the specified prefix will be set.
+        * @static
+        */
+        // TODO: check, if this is really useful
+       public static function setPropertiesByObject(&$obj, $properties, $prefix) {
+               $pSetter = new LoggerReflectionUtils($obj);
+               return $pSetter->setProperties($properties, $prefix);
+       }
+  
+
+       /**
+        * Set the properites for the object that match the
+        * <code>prefix</code> passed as parameter.
+        * 
+        * Example:
+        * 
+        * $arr['xxxname'] = 'Joe';
+        * $arr['xxxmale'] = true;
+        * and prefix xxx causes setName and setMale.   
+        *
+        * @param array $properties An array containing keys and values.
+        * @param string $prefix Only keys having the specified prefix will be set.
+        */
+        // TODO: check, if this is really useful
+       public function setProperties($properties, $prefix) {
+               $len = strlen($prefix);
+               while(list($key,) = each($properties)) {
+                       if(strpos($key, $prefix) === 0) {
+                               if(strpos($key, '.', ($len + 1)) > 0) {
+                                       continue;
+                               }
+                               $value = LoggerOptionConverter::findAndSubst($key, $properties);
+                               $key = substr($key, $len);
+                               if($key == 'layout' and ($this->obj instanceof LoggerAppender)) {
+                                       continue;
+                               }
+                               $this->setProperty($key, $value);
+                       }
+               }
+               $this->activate();
+       }
+       
+       /**
+        * Set a property on this PropertySetter's Object. If successful, this
+        * method will invoke a setter method on the underlying Object. The
+        * setter is the one for the specified property name and the value is
+        * determined partly from the setter argument type and partly from the
+        * value specified in the call to this method.
+        *
+        * <p>If the setter expects a String no conversion is necessary.
+        * If it expects an int, then an attempt is made to convert 'value'
+        * to an int using new Integer(value). If the setter expects a boolean,
+        * the conversion is by new Boolean(value).
+        *
+        * @param string $name    name of the property
+        * @param string $value   String value of the property
+        */
+       public function setProperty($name, $value) {
+               if($value === null) {
+                       return;
+               }
+               
+               $method = "set" . ucfirst($name);
+               
+               if(!method_exists($this->obj, $method)) {
+                       // no such setter method
+                       return;
+               } else {
+                       return call_user_func(array(&$this->obj, $method), $value);
+               } 
+       }
+  
+       public function activate() {
+               if(method_exists($this->obj, 'activateoptions')) {
+                       return call_user_func(array(&$this->obj, 'activateoptions'));
+               } 
+       }
+       
        /**
         * Creates an instances from the given class name.
         *
diff --git a/src/main/php/config/LoggerPropertySetter.php b/src/main/php/config/LoggerPropertySetter.php
deleted file mode 100644 (file)
index ea1bc3c..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * @package log4php
- * @subpackage config
- */
-
-/**
- * General purpose Object property setter. Clients repeatedly invokes
- * {@link setProperty()} in order to invoke setters
- * on the Object specified in the constructor.
- *     
- * Usage:
- * <code>
- * $s = new Simple();
- * $ps = new LoggerPropertySetter($s);
- * $ps->setProperty("name", "Joe");
- * $ps->setProperty("male", true);
- * </code>
- * 
- * will cause the invocations 
- * 
- * <code>
- * $s->setName("Joe");
- * $s->setMale(true)
- * </code>
- * 
- * if such methods exist.
- *     
- * @version $Revision$
- * @package log4php
- * @subpackage config
- * @since 0.5
- */
-class LoggerPropertySetter {
-       /** the target object */
-       private $obj;
-  
-       /**
-        * Create a new LoggerPropertySetter for the specified Object. 
-        * This is done in prepartion for invoking {@link setProperty()} 
-        * one or more times.
-        * @param object &$obj the object for which to set properties
-        */
-       public function LoggerPropertySetter(&$obj) {
-               $this->obj =& $obj;
-       }
-  
-       /**
-        * Set the properties of an object passed as a parameter in one
-        * go. The <code>properties</code> are parsed relative to a
-        * <code>prefix</code>.
-        *
-        * @param object &$obj The object to configure.
-        * @param array $properties An array containing keys and values.
-        * @param string $prefix Only keys having the specified prefix will be set.
-        * @static
-        */
-        // TODO: check, if this is really useful
-       public static function setPropertiesByObject(&$obj, $properties, $prefix) {
-               $pSetter = new LoggerPropertySetter($obj);
-               return $pSetter->setProperties($properties, $prefix);
-       }
-  
-
-       /**
-        * Set the properites for the object that match the
-        * <code>prefix</code> passed as parameter.
-        * 
-        * Example:
-        * 
-        * $arr['xxxname'] = 'Joe';
-        * $arr['xxxmale'] = true;
-        * and prefix xxx causes setName and setMale.   
-        *
-        * @param array $properties An array containing keys and values.
-        * @param string $prefix Only keys having the specified prefix will be set.
-        */
-        // TODO: check, if this is really useful
-       public function setProperties($properties, $prefix) {
-               $len = strlen($prefix);
-               while(list($key,) = each($properties)) {
-                       if(strpos($key, $prefix) === 0) {
-                               if(strpos($key, '.', ($len + 1)) > 0) {
-                                       continue;
-                               }
-                               $value = LoggerOptionConverter::findAndSubst($key, $properties);
-                               $key = substr($key, $len);
-                               if($key == 'layout' and ($this->obj instanceof LoggerAppender)) {
-                                       continue;
-                               }
-                               $this->setProperty($key, $value);
-                       }
-               }
-               $this->activate();
-       }
-       
-       /**
-        * Set a property on this PropertySetter's Object. If successful, this
-        * method will invoke a setter method on the underlying Object. The
-        * setter is the one for the specified property name and the value is
-        * determined partly from the setter argument type and partly from the
-        * value specified in the call to this method.
-        *
-        * <p>If the setter expects a String no conversion is necessary.
-        * If it expects an int, then an attempt is made to convert 'value'
-        * to an int using new Integer(value). If the setter expects a boolean,
-        * the conversion is by new Boolean(value).
-        *
-        * @param string $name    name of the property
-        * @param string $value   String value of the property
-        */
-       public function setProperty($name, $value) {
-               if($value === null) {
-                       return;
-               }
-               
-               $method = "set" . ucfirst($name);
-               
-               if(!method_exists($this->obj, $method)) {
-                       // no such setter method
-                       return;
-               } else {
-                       return call_user_func(array(&$this->obj, $method), $value);
-               } 
-       }
-  
-       public function activate() {
-               if(method_exists($this->obj, 'activateoptions')) {
-                       return call_user_func(array(&$this->obj, 'activateoptions'));
-               } 
-       }
-}
index 5c25741..282e6ec 100644 (file)
@@ -377,7 +377,7 @@ class LoggerConfiguratorIni implements LoggerConfigurator {
                                $loggerFactory = $this->loggerFactory;
                        }
 
-                       LoggerPropertySetter::setPropertiesByObject($loggerFactory, $props, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_FACTORY_PREFIX . ".");
+                       LoggerReflectionUtils::setPropertiesByObject($loggerFactory, $props, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_FACTORY_PREFIX . ".");
                }
        }
        
@@ -557,11 +557,11 @@ class LoggerConfiguratorIni implements LoggerConfigurator {
                                }
                        }
                        
-                       LoggerPropertySetter::setPropertiesByObject($layout, $props, $layoutPrefix . ".");                                
+                       LoggerReflectionUtils::setPropertiesByObject($layout, $props, $layoutPrefix . ".");                               
                        $appender->setLayout($layout);
                        
                }
-               LoggerPropertySetter::setPropertiesByObject($appender, $props, $prefix . ".");
+               LoggerReflectionUtils::setPropertiesByObject($appender, $props, $prefix . ".");
                return $appender;                
        }
 
index 32a1593..d9373c8 100644 (file)
@@ -477,7 +477,7 @@ class LoggerConfiguratorXml implements LoggerConfigurator {
      */
     function setter(&$object, $name, $value)
     {
-       // TODO: check if this can be replaced with LoggerPropertySetter
+       // TODO: check if this can be replaced with LoggerReflectionUtils
         if (empty($name)) {
             return false;
         }
index e5cb941..75e30a4 100644 (file)
  * @link       http://logging.apache.org/log4php
  */
 
+
+class Simple {
+    private $name;
+    private $male;
+   
+    public function getName() {
+        return $this->name;
+    }
+    
+    public function isMale() {
+        return $this->male;
+    }
+    
+    public function setName($name) {
+        $this->name = $name;
+    }
+    
+    public function setMale($male) {
+        $this->male = $male;
+    }
+}
 /**
  * Tests the LoggerReflectionUtils class
  */
 class LoggerReflectionUtilsTest extends PHPUnit_Framework_TestCase {
 
+       public function testSimpleSet() {
+               $s = new Simple();
+               $ps = new LoggerReflectionUtils($s);
+               $ps->setProperty("name", "Joe");
+               $ps->setProperty("male", true);
+               
+               $this->assertEquals($s->isMale(), true);
+               $this->assertEquals($s->getName(), 'Joe');
+       }
+       
+       public function testSimpleArraySet() {
+               $arr['xxxname'] = 'Joe';
+               $arr['xxxmale'] = true;
+               
+               $s = new Simple();
+               $ps = new LoggerReflectionUtils($s);
+               $ps->setProperties($arr, "xxx");
+               
+               $this->assertEquals($s->getName(), 'Joe');
+               $this->assertEquals($s->isMale(), true);
+       }
+       
+       public function testStaticArraySet() {
+               $arr['xxxname'] = 'Joe';
+               $arr['xxxmale'] = true;
+               
+               $s = new Simple();
+               LoggerReflectionUtils::setPropertiesByObject($s,$arr,"xxx");
+               
+               $this->assertEquals($s->getName(), 'Joe');
+               $this->assertEquals($s->isMale(), true);
+       }
        public function testCreateObject() {
                $object = LoggerReflectionUtils::createObject('LoggerLayoutSimple');
                $name = get_class($object);
diff --git a/src/test/php/config/LoggerPropertySetterTest.php b/src/test/php/config/LoggerPropertySetterTest.php
deleted file mode 100644 (file)
index 661c6e4..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- * @category   tests
- * @package    log4php
- * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
- * @version    SVN: $Id$
- * @link       http://logging.apache.org/log4php
- */
-
-class Simple {
-    private $name;
-    private $male;
-   
-    public function getName() {
-        return $this->name;
-    }
-    
-    public function isMale() {
-        return $this->male;
-    }
-    
-    public function setName($name) {
-        $this->name = $name;
-    }
-    
-    public function setMale($male) {
-        $this->male = $male;
-    }
-}
-
-class LoggerPropertySetterTest extends PHPUnit_Framework_TestCase {
-       
-       public function testSimpleSet() {
-               $s = new Simple();
-               $ps = new LoggerPropertySetter($s);
-               $ps->setProperty("name", "Joe");
-               $ps->setProperty("male", true);
-               
-               $this->assertEquals($s->isMale(), true);
-               $this->assertEquals($s->getName(), 'Joe');
-       }
-       
-       public function testSimpleArraySet() {
-               $arr['xxxname'] = 'Joe';
-               $arr['xxxmale'] = true;
-               
-               $s = new Simple();
-               $ps = new LoggerPropertySetter($s);
-               $ps->setProperties($arr, "xxx");
-               
-               $this->assertEquals($s->getName(), 'Joe');
-               $this->assertEquals($s->isMale(), true);
-       }
-       
-       public function testStaticArraySet() {
-               $arr['xxxname'] = 'Joe';
-               $arr['xxxmale'] = true;
-               
-               $s = new Simple();
-               LoggerPropertySetter::setPropertiesByObject($s,$arr,"xxx");
-               
-               $this->assertEquals($s->getName(), 'Joe');
-               $this->assertEquals($s->isMale(), true);
-       }
-}