org.apache.log4j.or
Class RendererMap

java.lang.Object
  extended by org.apache.log4j.or.RendererMap

public class RendererMap
extends Object

Map class objects to an ObjectRenderer.

Since:
version 1.0
Author:
Ceki Gülcü

Constructor Summary
RendererMap()
           
 
Method Summary
static void addRenderer(RendererSupport repository, String renderedClassName, String renderingClassName)
          Add a renderer to a hierarchy passed as parameter.
 void clear()
           
 String findAndRender(Object o)
          Find the appropriate renderer for the class type of the o parameter.
 ObjectRenderer get(Class clazz)
          Search the parents of clazz for a renderer.
 ObjectRenderer get(Object o)
          Syntactic sugar method that calls get(Class) with the class of the object parameter.
 ObjectRenderer getDefaultRenderer()
           
 void put(Class clazz, ObjectRenderer or)
          Register an ObjectRenderer for clazz.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RendererMap

public RendererMap()
Method Detail

addRenderer

public static void addRenderer(RendererSupport repository,
                               String renderedClassName,
                               String renderingClassName)
Add a renderer to a hierarchy passed as parameter.


findAndRender

public String findAndRender(Object o)
Find the appropriate renderer for the class type of the o parameter. This is accomplished by calling the get(Class) method. Once a renderer is found, it is applied on the object o and the result is returned as a String.


get

public ObjectRenderer get(Object o)
Syntactic sugar method that calls get(Class) with the class of the object parameter.


get

public ObjectRenderer get(Class clazz)
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.

The search first looks for a renderer configured for clazz. If a renderer could not be found, then the search continues by looking at all the interfaces implemented by clazz including the super-interfaces of each interface. If a renderer cannot be found, then the search looks for a renderer defined for the parent (superclass) of clazz. If that fails, then all the interfaces implemented by the parent of clazz are searched and so on.

For example, if A0, A1, A2 are classes and X0, X1, X2, Y0, Y1 are interfaces where A2 extends A1 which in turn extends A0 and similarly X2 extends X1 which extends X0 and Y1 extends Y0. Let us also assume that A1 implements the Y0 interface and that A2 implements the X2 interface.

The table below shows the results returned by the get(A2.class) method depending on the renderers added to the map.

Added renderersValue returned by get(A2.class)
A0Renderer A0Renderer
A0Renderer, A1Renderer A1Renderer
X0Renderer X0Renderer
A1Renderer, X0Renderer X0Renderer

This search algorithm is not the most natural, although it is particularly easy to implement. Future log4j versions may implement a more intuitive search algorithm. However, the present algorithm should be acceptable in the vast majority of circumstances.


getDefaultRenderer

public ObjectRenderer getDefaultRenderer()

clear

public void clear()

put

public void put(Class clazz,
                ObjectRenderer or)
Register an ObjectRenderer for clazz.



Copyright © 1999-2010 Apache Software Foundation. All Rights Reserved.