* {@example ../../examples/resources/renderer_map.properties 18}
*
 * DEBUG - Now comes the current MyClass object:
 * DEBUG - Doe, John
 * 
* * @version $Revision$ * @package log4php * @subpackage renderers * @since 0.3 */ class LoggerRendererMap { /** * @var array */ private $map; /** * @var LoggerDefaultRenderer */ private $defaultRenderer; /** * Constructor */ public function __construct() { $this->map = array(); $this->defaultRenderer = new LoggerRendererDefault(); } /** * Add a renderer to a hierarchy passed as parameter. * Note that hierarchy must implement getRendererMap() and setRenderer() methods. * * @param LoggerHierarchy $repository a logger repository. * @param string $renderedClassName * @param string $renderingClassName * @static */ public function addRenderer($renderedClassName, $renderingClassName) { $renderer = LoggerReflectionUtils::createObject($renderingClassName); if($renderer == null) { return; } else { $this->put($renderedClassName, $renderer); } } /** * Find the appropriate renderer for the class type of the * o parameter. * * This is accomplished by calling the {@link getByObject()} * method if o is object or using {@link LoggerRendererDefault}. * Once a renderer is found, it is applied on the object o and * the result is returned as a string. * * @param mixed $o * @return string */ public function findAndRender($o) { if($o == null) { return null; } else { if(is_object($o)) { $renderer = $this->getByObject($o); if($renderer !== null) { return $renderer->render($o); } else { return null; } } else { $renderer = $this->defaultRenderer; return $renderer->render($o); } } } /** * Syntactic sugar method that calls {@link PHP_MANUAL#get_class} with the * class of the object parameter. * * @param mixed $o * @return string */ public function getByObject($o) { return ($o == null) ? null : $this->getByClassName(get_class($o)); } /** * Search the parents of clazz for a renderer. * * The renderer closest in the hierarchy will be returned. If no * renderers could be found, then the default renderer is returned. * * @param string $class * @return LoggerRendererObject */ public function getByClassName($class) { $r = null; for($c = $class; !empty($c); $c = get_parent_class($c)) { $c = strtolower($c); if(isset($this->map[$c])) { return $this->map[$c]; } } return $this->defaultRenderer; } public function clear() { $this->map = array(); } /** * Register a {@link LoggerRendererObject} for clazz. * @param string $class * @param LoggerRendererObject $or */ private function put($class, $or) { $this->map[strtolower($class)] = $or; } }