## com.icl.saxon.trace
Class SaxonEventMulticaster

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

All Implemented Interfaces:
  java.util.EventListener, TraceListener

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
`protected java.util.EventListener` `a`
`protected java.util.EventListener` `b`

Constructor Summary
`protected` `SaxonEventMulticaster(java.util.EventListener a, java.util.EventListener b)` Creates an event multicaster instance which chains listener-a with listener-b.

Method Summary
`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