org.crosswire.common.util

## Class Reporter

- java.lang.Object
- - org.crosswire.common.util.Reporter

-     public final class Reporter
      extends Object

  This package looks after Exceptions and messages as they happen. It would be nice not to need this class - the principle being that any library that encounters an error can throw an exception to indicate that there is a problem. However this is not always the case. For example:
  - static class constructors should not throw, unless the class really is of no use given the error, and yet we may want to tell the user that there was a (non-critical) error.
  - Any library routine that works in a loop, applying some (potentially failing) functionality, may want to continue the work without throwing in response to a single error.
  - The class being implemented may implement an interface that disallows nested exceptions and yet does not want to loose the root cause error information. (This is the weakest of the above arguments, but probably still valid.)
  However in many of the times this class is used, this is the reason:
  - Within UI specific code - to throw up a dialog box (or whatever). Now this use is currently tolerated, however it is probably a poor idea to use GUI agnostic messaging in a GUI specific context. But I'm not bothered enough to change it now. Specifically this use is deprecated because it makes the app more susceptible to the configuration of the things that listen to reports.
  Author:
    Joe Walker
  See Also:
    `The GNU Lesser General Public License for details.`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Reporter.CustomAWTExceptionHandler` A class to handle AWT caught Exceptions

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private static String` | `AWT_HANDLER_PROPERTY` The system property name for registering AWT exceptions
    `private static List<ReporterListener>` | `LISTENERS` The list of listeners
    `private static org.slf4j.Logger` | `LOGGER` The log stream
    `private static String` | `OUR_NAME` The name of the class to register for AWT exceptions

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `private` | `Reporter()` Enforce Singleton

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static void` | `addReporterListener(ReporterListener li)` Add an Exception listener to the list of things wanting to know whenever we capture an Exception
    `protected static void` | `fireCapture(ReporterEvent ev)` Log a message.
    `static void` | `grabAWTExecptions(boolean grab)` Sets the parent of any exception windows.
    `static void` | `informUser(Object source, LucidException prob)` Something has gone wrong.
    `static void` | `informUser(Object source, LucidRuntimeException prob)` Something has gone wrong.
    `static void` | `informUser(Object source, String message)` Something has happened.
    `static void` | `informUser(Object source, Throwable prob)` Something has gone wrong.
    `static void` | `removeReporterListener(ReporterListener li)` Remove an Exception listener from the list of things wanting to know whenever we capture an Exception

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

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

- - ### Field Detail

    - #### AWT_HANDLER_PROPERTY

          private static final String AWT_HANDLER_PROPERTY

      The system property name for registering AWT exceptions
      See Also:
        Constant Field Values

    - #### OUR_NAME

          private static final String OUR_NAME

      The name of the class to register for AWT exceptions

    - #### LISTENERS

          private static final List<ReporterListener> LISTENERS

      The list of listeners

    - #### LOGGER

          private static final org.slf4j.Logger LOGGER

      The log stream

  - ### Constructor Detail

    - #### Reporter

          private Reporter()

      Enforce Singleton

  - ### Method Detail

    - #### informUser

          public static void informUser(Object source,
                        Throwable prob)

      Something has gone wrong. We need to tell the user or someone, but we can carry on. In general having caught an exception and passed it to Reporter.informUser(), you should not throw another Exception. Called to fire a commandEntered event to all the Listeners
      Parameters:
        `source` - The cause of the problem, a Component if possible.
        `prob` - The Exception that was thrown

    - #### informUser

          public static void informUser(Object source,
                        LucidException prob)

      Something has gone wrong. We need to tell the user or someone, but we can carry on. In general having caught an exception and passed it to Reporter.informUser(), you should not throw another Exception. Called to fire a commandEntered event to all the Listeners
      Parameters:
        `source` - The cause of the problem, a Component if possible.
        `prob` - The Exception that was thrown

    - #### informUser

          public static void informUser(Object source,
                        LucidRuntimeException prob)

      Something has gone wrong. We need to tell the user or someone, but we can carry on. In general having caught an exception and passed it to Reporter.informUser(), you should not throw another Exception. Called to fire a commandEntered event to all the Listeners
      Parameters:
        `source` - The cause of the problem, a Component if possible.
        `prob` - The Exception that was thrown

    - #### informUser

          public static void informUser(Object source,
                        String message)

      Something has happened. We need to tell the user or someone.
      Parameters:
        `source` - The cause of the message, a Component if possible.
        `message` - The message to pass to the user

    - #### addReporterListener

          public static void addReporterListener(ReporterListener li)

      Add an Exception listener to the list of things wanting to know whenever we capture an Exception
      Parameters:
        `li` - the interested listener

    - #### removeReporterListener

          public static void removeReporterListener(ReporterListener li)

      Remove an Exception listener from the list of things wanting to know whenever we capture an Exception
      Parameters:
        `li` - the disinterested listener

    - #### fireCapture

          protected static void fireCapture(ReporterEvent ev)

      Log a message.
      Parameters:
        `ev` - the event to capture

    - #### grabAWTExecptions

          public static void grabAWTExecptions(boolean grab)

      Sets the parent of any exception windows.
      Parameters:
        `grab` - whether to grab AWT exceptions or not