Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
28.57% |
2 / 7 |
CRAP | |
67.57% |
25 / 37 |
LoggerReflectionUtils | |
0.00% |
0 / 1 |
|
28.57% |
2 / 7 |
29.05 | |
67.57% |
25 / 37 |
__construct($obj) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setPropertiesByObject($obj, $properties, $prefix) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setProperties($properties, $prefix) | |
0.00% |
0 / 1 |
6.09 | |
86.67% |
13 / 15 |
|||
setProperty($name, $value) | |
0.00% |
0 / 1 |
3.33 | |
66.67% |
4 / 6 |
|||
activate() | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
createObject($class) | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
setter($object, $name, $value) | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
<?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 | |
*/ | |
/** | |
* Provides methods for reflective use on php objects | |
* @package log4php | |
*/ | |
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. | |
*/ | |
// 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. | |
*/ | |
public function setProperties($properties, $prefix) { | |
$len = strlen($prefix); | |
reset($properties); | |
while(list($key,) = each($properties)) { | |
if(strpos($key, $prefix) === 0) { | |
if(strpos($key, '.', ($len + 1)) > 0) { | |
continue; | |
} | |
$value = $properties[$key]; | |
$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)) { | |
throw new Exception("Error setting log4php property $name to $value: no method $method in class ".get_class($this->obj)."!"); | |
} 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. | |
* | |
* @param string $classname | |
* @return an object from the class with the given classname | |
*/ | |
public static function createObject($class) { | |
if(!empty($class)) { | |
return new $class(); | |
} | |
return null; | |
} | |
/** | |
* @param object $object | |
* @param string $name | |
* @param mixed $value | |
*/ | |
public static function setter($object, $name, $value) { | |
if (empty($name)) { | |
return false; | |
} | |
$methodName = 'set'.ucfirst($name); | |
if (method_exists($object, $methodName)) { | |
return call_user_func(array($object, $methodName), $value); | |
} else { | |
return false; | |
} | |
} | |
} |