123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- /**
- * log4php is a PHP port of the log4j java logging package.
- *
- * <p>This framework is based on log4j (see {@link http://jakarta.apache.org/log4j log4j} for details).</p>
- * <p>Design, strategies and part of the methods documentation are developed by log4j team
- * (Ceki Gülcü as log4j project founder and
- * {@link http://jakarta.apache.org/log4j/docs/contributors.html contributors}).</p>
- *
- * <p>PHP port, extensions and modifications by VxR. All rights reserved.<br>
- * For more information, please see {@link http://www.vxr.it/log4php/}.</p>
- *
- * <p>This software is published under the terms of the LGPL License
- * a copy of which has been included with this distribution in the LICENSE file.</p>
- *
- * @package log4php
- * @subpackage or
- */
- /**
- * @ignore
- */
- if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');
-
- /**
- */
- require_once(LOG4PHP_DIR . '/or/LoggerDefaultRenderer.php');
- require_once(LOG4PHP_DIR . '/or/LoggerObjectRenderer.php');
- require_once(LOG4PHP_DIR . '/LoggerLog.php');
- /**
- * Map class objects to an {@link LoggerObjectRenderer}.
- *
- * @author VxR <vxr@vxr.it>
- * @version $Revision: 1.1 $
- * @package log4php
- * @subpackage or
- * @since 0.3
- */
- class LoggerRendererMap {
- /**
- * @var array
- */
- var $map;
- /**
- * @var LoggerDefaultRenderer
- */
- var $defaultRenderer;
- /**
- * Constructor
- */
- function LoggerRendererMap()
- {
- $this->map = array();
- $this->defaultRenderer = new LoggerDefaultRenderer();
- }
- /**
- * 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
- */
- function addRenderer(&$repository, $renderedClassName, $renderingClassName)
- {
- LoggerLog::debug("LoggerRendererMap::addRenderer() Rendering class: [{$renderingClassName}], Rendered class: [{$renderedClassName}].");
- $renderer = LoggerObjectRenderer::factory($renderingClassName);
- if($renderer == null) {
- LoggerLog::warn("LoggerRendererMap::addRenderer() Could not instantiate renderer [{$renderingClassName}].");
- return;
- } else {
- $repository->setRenderer($renderedClassName, $renderer);
- }
- }
- /**
- * Find the appropriate renderer for the class type of the
- * <var>o</var> parameter.
- *
- * This is accomplished by calling the {@link getByObject()}
- * method if <var>o</var> is object or using {@link LoggerDefaultRenderer}.
- * Once a renderer is found, it is applied on the object <var>o</var> and
- * the result is returned as a string.
- *
- * @param mixed $o
- * @return string
- */
- function findAndRender($o)
- {
- if($o == null) {
- return null;
- } else {
- if (is_object($o)) {
- $renderer = $this->getByObject($o);
- if ($renderer !== null) {
- return $renderer->doRender($o);
- } else {
- return null;
- }
- } else {
- $renderer = $this->defaultRenderer;
- return $renderer->doRender($o);
- }
- }
- }
- /**
- * Syntactic sugar method that calls {@link PHP_MANUAL#get_class} with the
- * class of the object parameter.
- *
- * @param mixed $o
- * @return string
- */
- function &getByObject($o)
- {
- return ($o == null) ? null : $this->getByClassName(get_class($o));
- }
- /**
- * Search the parents of <var>clazz</var> 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 LoggerObjectRenderer
- */
- function &getByClassName($class)
- {
- $r = null;
- for($c = strtolower($class); !empty($c); $c = get_parent_class($c)) {
- if (isset($this->map[$c])) {
- return $this->map[$c];
- }
- }
- return $this->defaultRenderer;
- }
- /**
- * @return LoggerDefaultRenderer
- */
- function &getDefaultRenderer()
- {
- return $this->defaultRenderer;
- }
- function clear()
- {
- $this->map = array();
- }
- /**
- * Register a {@link LoggerObjectRenderer} for <var>clazz</var>.
- * @param string $class
- * @param LoggerObjectRenderer $or
- */
- function put($class, $or)
- {
- $this->map[strtolower($class)] = $or;
- }
-
- /**
- * @param string $class
- * @return boolean
- */
- function rendererExists($class)
- {
- $class = basename($class);
- if (!class_exists($class)) {
- @include_once(LOG4PHP_DIR ."/or/{$class}.php");
- }
- return class_exists($class);
- }
- }
- ?>
|