View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.kernel.bo.log;
17  
18  import java.io.PrintStream;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import org.qedeq.base.trace.Trace;
23  import org.qedeq.kernel.bo.common.QedeqBo;
24  
25  
26  /**
27   * This class organizes the logging of module events.
28   *
29   * TODO mime 20080317: must this be a singleton?
30   *
31   * @author  Michael Meyling
32   */
33  public final class ModuleEventLog implements ModuleEventListener {
34  
35      /** This class. */
36      private static final Class CLASS = ModuleEventLog.class;
37  
38      /** The one and only instance. */
39      private static ModuleEventLog instance = new ModuleEventLog();
40  
41      /** The loggers. */
42      private List loggers = new ArrayList();
43  
44  
45      /**
46       * Get instance of Logger.
47       *
48       * @return  singleton
49       */
50      public static final ModuleEventLog getInstance() {
51          return instance;
52      }
53  
54      /**
55       * Don't use me outside of this class.
56       */
57      private ModuleEventLog() {
58          // nothing to do
59      }
60  
61      /**
62       * Add listener.
63       *
64       * @param   log Add this listener.
65       */
66      public final void addLog(final ModuleEventListener log) {
67          loggers.add(log);
68      }
69  
70      /**
71       * Remove listener.
72       *
73       * @param   log Remove this listener.
74       */
75      public final void removeLog(final ModuleEventListener log) {
76          loggers.remove(log);
77      }
78  
79      /**
80       * Add stream listener.
81       *
82       * @param   out Put messages into this stream.
83       */
84      public final void addLog(final PrintStream out) {
85          final ModuleEventListener log = new DefaultModuleEventListener(out);
86          loggers.add(log);
87      }
88  
89      public void addModule(final QedeqBo prop) {
90          for (int i = 0; i < loggers.size(); i++) {
91              try {   // we don't know if the ModuleEventListener is free of programming errors...
92                  ((ModuleEventListener) loggers.get(i)).addModule(prop);
93              } catch (RuntimeException e) {
94                  Trace.fatal(CLASS, this, "addModule",
95                      "ModuleEventListener throwed RuntimeException", e);
96              }
97          }
98      }
99  
100     public void stateChanged(final QedeqBo prop) {
101         for (int i = 0; i < loggers.size(); i++) {
102             try {   // we don't know if the ModuleEventListener is free of programming errors...
103                 ((ModuleEventListener) loggers.get(i)).stateChanged(prop);
104             } catch (RuntimeException e) {
105                 Trace.fatal(CLASS, this, "stateChanged",
106                     "ModuleEventListener throwed RuntimeException", e);
107             }
108         }
109     }
110 
111     public void removeModule(final QedeqBo prop) {
112         for (int i = 0; i < loggers.size(); i++) {
113             try {   // we don't know if the ModuleEventListener is free of programming errors...
114                 ((ModuleEventListener) loggers.get(i)).removeModule(prop);
115             } catch (RuntimeException e) {
116                 Trace.fatal(CLASS, this, "removeModule",
117                     "ModuleEventListener throwed RuntimeException", e);
118             }
119         }
120     }
121 
122 
123 }