Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
45 / 45 |
LoggerRendererMap | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
19 | |
100.00% |
45 / 45 |
__construct() | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
addRenderer($renderedClass, $renderingClass) | |
100.00% |
1 / 1 |
3 | |
100.00% |
10 / 10 |
|||
setDefaultRenderer($renderingClass) | |
100.00% |
1 / 1 |
3 | |
100.00% |
9 / 9 |
|||
getDefaultRenderer() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
findAndRender($input) | |
100.00% |
1 / 1 |
4 | |
100.00% |
8 / 8 |
|||
getByObject($object) | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
getByClassName($class) | |
100.00% |
1 / 1 |
3 | |
100.00% |
6 / 6 |
|||
clear() | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
reset() | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
<?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 | |
*/ | |
/** | |
* Manages defined renderers and determines which renderer to use for a given | |
* input. | |
* | |
* @version $Revision: 1394956 $ | |
* @package log4php | |
* @subpackage renderers | |
* @since 0.3 | |
*/ | |
class LoggerRendererMap { | |
/** | |
* Maps class names to appropriate renderers. | |
* @var array | |
*/ | |
private $map = array(); | |
/** | |
* The default renderer to use if no specific renderer is found. | |
* @var LoggerRenderer | |
*/ | |
private $defaultRenderer; | |
public function __construct() { | |
// Set default config | |
$this->reset(); | |
} | |
/** | |
* Adds a renderer to the map. | |
* | |
* If a renderer already exists for the given <var>$renderedClass</var> it | |
* will be overwritten without warning. | |
* | |
* @param string $renderedClass The name of the class which will be | |
* rendered by the renderer. | |
* @param string $renderingClass The name of the class which will | |
* perform the rendering. | |
*/ | |
public function addRenderer($renderedClass, $renderingClass) { | |
// Check the rendering class exists | |
if (!class_exists($renderingClass)) { | |
trigger_error("log4php: Failed adding renderer. Rendering class [$renderingClass] not found."); | |
return; | |
} | |
// Create the instance | |
$renderer = new $renderingClass(); | |
// Check the class implements the right interface | |
if (!($renderer instanceof LoggerRenderer)) { | |
trigger_error("log4php: Failed adding renderer. Rendering class [$renderingClass] does not implement the LoggerRenderer interface."); | |
return; | |
} | |
// Convert to lowercase since class names in PHP are not case sensitive | |
$renderedClass = strtolower($renderedClass); | |
$this->map[$renderedClass] = $renderer; | |
} | |
/** | |
* Sets a custom default renderer class. | |
* | |
* TODO: there's code duplication here. This method is almost identical to | |
* addRenderer(). However, it has custom error messages so let it sit for | |
* now. | |
* | |
* @param string $renderingClass The name of the class which will | |
* perform the rendering. | |
*/ | |
public function setDefaultRenderer($renderingClass) { | |
// Check the class exists | |
if (!class_exists($renderingClass)) { | |
trigger_error("log4php: Failed setting default renderer. Rendering class [$renderingClass] not found."); | |
return; | |
} | |
// Create the instance | |
$renderer = new $renderingClass(); | |
// Check the class implements the right interface | |
if (!($renderer instanceof LoggerRenderer)) { | |
trigger_error("log4php: Failed setting default renderer. Rendering class [$renderingClass] does not implement the LoggerRenderer interface."); | |
return; | |
} | |
$this->defaultRenderer = $renderer; | |
} | |
/** | |
* Returns the default renderer. | |
* @var LoggerRenderer | |
*/ | |
public function getDefaultRenderer() { | |
return $this->defaultRenderer; | |
} | |
/** | |
* Finds the appropriate renderer for the given <var>input</var>, and | |
* renders it (i.e. converts it to a string). | |
* | |
* @param mixed $input Input to render. | |
* @return string The rendered contents. | |
*/ | |
public function findAndRender($input) { | |
if ($input === null) { | |
return null; | |
} | |
// For objects, try to find a renderer in the map | |
if(is_object($input)) { | |
$renderer = $this->getByClassName(get_class($input)); | |
if (isset($renderer)) { | |
return $renderer->render($input); | |
} | |
} | |
// Fall back to the default renderer | |
return $this->defaultRenderer->render($input); | |
} | |
/** | |
* Returns the appropriate renderer for a given object. | |
* | |
* @param mixed $object | |
* @return LoggerRenderer Or null if none found. | |
*/ | |
public function getByObject($object) { | |
if (!is_object($object)) { | |
return null; | |
} | |
return $this->getByClassName(get_class($object)); | |
} | |
/** | |
* Returns the appropriate renderer for a given class name. | |
* | |
* If no renderer could be found, returns NULL. | |
* | |
* @param string $class | |
* @return LoggerRendererObject Or null if not found. | |
*/ | |
public function getByClassName($class) { | |
for(; !empty($class); $class = get_parent_class($class)) { | |
$class = strtolower($class); | |
if(isset($this->map[$class])) { | |
return $this->map[$class]; | |
} | |
} | |
return null; | |
} | |
/** Empties the renderer map. */ | |
public function clear() { | |
$this->map = array(); | |
} | |
/** Resets the renderer map to it's default configuration. */ | |
public function reset() { | |
$this->defaultRenderer = new LoggerRendererDefault(); | |
$this->clear(); | |
$this->addRenderer('Exception', 'LoggerRendererException'); | |
} | |
} |