com.icl.saxon.trace

## Class SaxonEventMulticaster

- java.lang.Object
- - com.icl.saxon.trace.SaxonEventMulticaster

- All Implemented Interfaces:
    TraceListener, java.util.EventListener

      public class SaxonEventMulticaster
      extends java.lang.Object
      implements TraceListener

  A class which implements efficient and thread-safe multi-cast event dispatching for the TraceListener evants. Grabbed from java.awt.AWTEventMulticaster

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.util.EventListener` | `a`
    `protected java.util.EventListener` | `b`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `SaxonEventMulticaster(java.util.EventListener a, java.util.EventListener b)` Creates an event multicaster instance which chains listener-a with listener-b.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static TraceListener` | `add(TraceListener a, TraceListener b)` Adds trace-listener-a with trace-listener-b and returns the resulting multicast listener.
    `protected static java.util.EventListener` | `addInternal(java.util.EventListener a, java.util.EventListener b)` Returns the resulting multicast listener from adding listener-a and listener-b together.
    `void` | `close()` Called at end
    `void` | `enter(NodeInfo element, Context context)` Called when an element of the stylesheet gets processed
    `void` | `enterSource(NodeHandler handler, Context context)` Called when a node of the source tree gets processed
    `void` | `leave(NodeInfo element, Context context)` Called after an element of the stylesheet got processed
    `void` | `leaveSource(NodeHandler handler, Context context)` Called after a node of the source tree got processed
    `void` | `open()` Called at start
    `protected java.util.EventListener` | `remove(java.util.EventListener oldl)` Removes a listener from this multicaster and returns the resulting multicast listener.
    `static TraceListener` | `remove(TraceListener l, TraceListener oldl)` Removes the old trace-listener from trace-listener-l and returns the resulting multicast listener.
    `protected static java.util.EventListener` | `removeInternal(java.util.EventListener l, java.util.EventListener oldl)` Returns the resulting multicast listener after removing the old listener from listener-l.
    `void` | `toplevel(NodeInfo element)` Called for all top level elements

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### a

          protected final java.util.EventListener a

    - #### b

          protected final java.util.EventListener b

  - ### Constructor Detail

    - #### SaxonEventMulticaster

          protected SaxonEventMulticaster(java.util.EventListener a,
                               java.util.EventListener b)

      Creates an event multicaster instance which chains listener-a with listener-b.
      Parameters:
        `a` - listener-a
        `b` - listener-b

  - ### Method Detail

    - #### remove

          protected java.util.EventListener remove(java.util.EventListener oldl)

      Removes a listener from this multicaster and returns the resulting multicast listener.
      Parameters:
        `oldl` - the listener to be removed

    - #### open

          public void open()

      Called at start
      Specified by:
        `open` in interface `TraceListener`

    - #### close

          public void close()

      Called at end
      Specified by:
        `close` in interface `TraceListener`

    - #### toplevel

          public void toplevel(NodeInfo element)

      Called for all top level elements
      Specified by:
        `toplevel` in interface `TraceListener`

    - #### enterSource

          public void enterSource(NodeHandler handler,
                         Context context)

      Called when a node of the source tree gets processed
      Specified by:
        `enterSource` in interface `TraceListener`

    - #### leaveSource

          public void leaveSource(NodeHandler handler,
                         Context context)

      Called after a node of the source tree got processed
      Specified by:
        `leaveSource` in interface `TraceListener`

    - #### enter

          public void enter(NodeInfo element,
                   Context context)

      Called when an element of the stylesheet gets processed
      Specified by:
        `enter` in interface `TraceListener`

    - #### leave

          public void leave(NodeInfo element,
                   Context context)

      Called after an element of the stylesheet got processed
      Specified by:
        `leave` in interface `TraceListener`

    - #### add

          public static TraceListener add(TraceListener a,
                          TraceListener b)

      Adds trace-listener-a with trace-listener-b and returns the resulting multicast listener.
      Parameters:
        `a` - trace-listener-a
        `b` - trace-listener-b

    - #### remove

          public static TraceListener remove(TraceListener l,
                             TraceListener oldl)

      Removes the old trace-listener from trace-listener-l and returns the resulting multicast listener.
      Parameters:
        `l` - trace-listener-l
        `oldl` - the trace-listener being removed

    - #### addInternal

          protected static java.util.EventListener addInternal(java.util.EventListener a,
                                            java.util.EventListener b)

      Returns the resulting multicast listener from adding listener-a and listener-b together. If listener-a is null, it returns listener-b; If listener-b is null, it returns listener-a If neither are null, then it creates and returns a new EventMulticaster instance which chains a with b.
      Parameters:
        `a` - event listener-a
        `b` - event listener-b

    - #### removeInternal

          protected static java.util.EventListener removeInternal(java.util.EventListener l,
                                               java.util.EventListener oldl)

      Returns the resulting multicast listener after removing the old listener from listener-l. If listener-l equals the old listener OR listener-l is null, returns null. Else if listener-l is an instance of SaxonEventMulticaster, then it removes the old listener from it. Else, returns listener l.
      Parameters:
        `l` - the listener being removed from
        `oldl` - the listener being removed