KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > qfs > apps > qflog > logview > LogTableFilter


1 // {{{ copyright
2

3 /********************************************************************
4  *
5  * $Id: LogTableFilter.java,v 1.7 2000/07/05 14:07:44 gs Exp $
6  *
7  * The contents of this file are subject to the Mozilla Public
8  * License Version 1.1 (the "License"); you may not use this file
9  * except in compliance with the License. You may obtain a copy of
10  * the License at http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS
13  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14  * implied. See the License for the specific language governing
15  * rights and limitations under the License.
16  *
17  * The Original Code is qfs.de code.
18  *
19  * The Initial Developer of the Original Code is Gregor Schmid.
20  * Portions created by Gregor Schmid are
21  * Copyright (C) 1999 Quality First Software, Gregor Schmid.
22  * All Rights Reserved.
23  *
24  * Contributor(s):
25  *
26  *******************************************************************/

27
28 // }}}
29

30 package de.qfs.apps.qflog.logview;
31
32 // {{{ imports
33

34 import javax.swing.table.TableModel JavaDoc;
35
36 import java.util.Vector JavaDoc;
37
38 import de.qfs.lib.gui.TableModelFilter;
39 import de.qfs.lib.gui.TableModelFilterEvent;
40 import de.qfs.lib.gui.TableModelFilterListener;
41 import de.qfs.lib.log.Log;
42 import de.qfs.lib.log.LogEntry;
43 import de.qfs.lib.log.Logger;
44
45 // }}}
46

47 /**
48  * This class is modeled after the adapter pattern. It can wrap a
49  * TableModelFilter and extend its filtering mechanism with its own.
50  *
51  * @author Gregor Schmid
52  * @version $Revision: 1.7 $
53  */

54 class LogTableFilter
55     implements TableModelFilter, TableModelFilterListener
56 {
57     // {{{ variables
58

59     /**
60      * The Logger used for logging.
61      */

62     private final static Logger logger = new Logger (LogTableFilter.class);
63
64     /**
65      * The nested filter.
66      */

67     private TableModelFilter filter;
68
69     /**
70      * The level to filter on.
71      */

72     private int filterLevel = -1;
73
74     /**
75      * The Thread to filter on.
76      */

77     private String JavaDoc filterThread = null;
78
79     /**
80      * The Class to filter on.
81      */

82     private String JavaDoc filterClass = null;
83
84     /**
85      * The Method to filter on.
86      */

87     private String JavaDoc filterMethod = null;
88
89     /**
90      * The TreeModelFilterListeners.
91      */

92     private Vector JavaDoc listeners = new Vector JavaDoc ();
93
94     /**
95      * Whether logging is enabled (true) or disabled (false);
96      */

97     private boolean logging;
98
99     // }}}
100

101     // {{{ constructors
102

103     /**
104      * Create a new LogTableFilter.
105      */

106     public LogTableFilter()
107     {
108     }
109
110     /**
111      * Create a new LogTableFilter.
112      *
113      * @param filter The filter to adapt.
114      */

115     public LogTableFilter(TableModelFilter filter)
116     {
117         this.filter = filter;
118         if (filter != null) {
119             filter.addTableModelFilterListener(this);
120         }
121     }
122
123     // }}}
124

125     // {{{ setLoggingEnabled
126

127     /**
128      * Enable or disable logging output caused directly or indirectly by
129      * LogTableFilter methods. If logging is disabled, all calls to methods
130      * that might create log messages will be protected with {@link
131      * de.qfs.lib.log.Log#excludeThread de.qfs.lib.log.Log.excludeThread}.
132      * This is necessary, if the LogFilterTreeModel is used inside the
133      * application whose logs it is supposed to filter. <p>
134      *
135      * The default value is false.
136      *
137      * @param enable True to enable logging, false to disable it.
138      */

139     public final void setLoggingEnabled(boolean enable)
140     {
141         logging = enable;
142     }
143
144     // }}}
145

146     // {{{ setFilter
147

148     /**
149      * Set the nested filter.
150      *
151      * @param filter The filter to adapt.
152      */

153     public void setFilter(TableModelFilter filter)
154     {
155         if (this.filter != null) {
156             this.filter.removeTableModelFilterListener(this);
157         }
158         this.filter = filter;
159         if (filter != null) {
160             filter.addTableModelFilterListener(this);
161         }
162         fireFilterChanged();
163     }
164
165     // }}}
166
// {{{ setFilterLevel
167

168     /**
169      * Set the level to filter on.
170      *
171      * @param level The level to filter on.
172      */

173     public void setFilterLevel(int level)
174     {
175         if (filterLevel == -1) {
176             filterLevel = level;
177         } else {
178             filterLevel = -1;
179         }
180         fireFilterChanged();
181     }
182
183     // }}}
184
// {{{ setFilterThread
185

186     /**
187      * Set the Thread to filter on.
188      *
189      * @param thread The Thread to filter on.
190      */

191     public void setFilterThread(String JavaDoc thread)
192     {
193         if (filterThread == null) {
194             filterThread = thread;
195         } else {
196             filterThread = null;
197         }
198         fireFilterChanged();
199     }
200
201     // }}}
202
// {{{ setFilterClass
203

204     /**
205      * Set the Class to filter on.
206      *
207      * @param cl The Class to filter on.
208      */

209     public void setFilterClass(String JavaDoc cl)
210     {
211         if (filterClass == null) {
212             filterClass = cl;
213         } else {
214             filterClass = null;
215         }
216         fireFilterChanged();
217     }
218
219     // }}}
220
// {{{ setFilterMethod
221

222     /**
223      * Set the Method to filter on.
224      *
225      * @param method The Method to filter on.
226      */

227     public void setFilterMethod(String JavaDoc method)
228     {
229         if (filterMethod == null) {
230             filterMethod = method;
231         } else {
232             filterMethod = null;
233         }
234         fireFilterChanged();
235     }
236
237     // }}}
238
// {{{ clearFilters
239

240     /**
241      * Clear all filters.
242      */

243     public void clearFilters()
244     {
245         filterLevel = -1;
246         filterThread = null;
247         filterClass = null;
248         filterMethod = null;
249         fireFilterChanged();
250     }
251
252     // }}}
253

254     //----------------------------------------------------------------------
255
// The TableModelFilter interface
256
//----------------------------------------------------------------------
257
// {{{ filter
258

259     /**
260      * Filter rows of a TableModel.
261      *
262      * @param model The TableModel.
263      * @param row The row to filter.
264      *
265      * @return True if the row should be displayed.
266      */

267     public boolean filter(TableModel JavaDoc model, int row)
268     {
269         if (filter != null
270             && ! filter.filter(model, row)) {
271             return false;
272         }
273         LogEntry entry = ((LogTableModel)model).getEntry(row);
274         if (filterLevel >= 0 && entry.getLevel() != filterLevel) {
275             return false;
276         }
277         if (filterThread != null && !filterThread.equals(entry.getThread())) {
278             return false;
279         }
280         if (filterClass != null && !filterClass.equals(entry.getClazz())) {
281             return false;
282         }
283         if (filterMethod != null && !filterMethod.equals(entry.getMethod())) {
284             return false;
285         }
286         return true;
287     }
288
289     // }}}
290
// {{{ addTableModelFilterListener
291

292     /**
293      * Add a TableModelFilterListener to the LogFilterTreeModel.
294      *
295      * @param listener The TableModelFilterListener to add.
296      */

297     public void addTableModelFilterListener(TableModelFilterListener listener)
298     {
299         listeners.addElement(listener);
300     }
301
302     // }}}
303
// {{{ removeTableModelFilterListener
304

305     /**
306      * Remove a TableModelFilterListener from the LogFilterTreeModel.
307      *
308      * @param listener The TableModelFilterListener to remove.
309      */

310     public void removeTableModelFilterListener
311         (TableModelFilterListener listener)
312     {
313         listeners.removeElement(listener);
314     }
315
316     // }}}
317
// {{{ fireFilterChanged
318

319     /**
320      * Notify all TableModelFilterListeners of a change in the filter.
321      */

322     private void fireFilterChanged()
323     {
324         final Vector JavaDoc tmp = (Vector JavaDoc) listeners.clone();
325         TableModelFilterEvent event = new TableModelFilterEvent (this);
326         boolean excluded = ! logging;
327         if (excluded) {
328             Log.excludeThread();
329         }
330         try {
331             for (int i = 0; i < tmp.size(); i++) {
332                 ((TableModelFilterListener) tmp.elementAt(i))
333                     .filterChanged(event);
334             }
335         } finally {
336             if (excluded) {
337                 Log.includeThread();
338             }
339         }
340     }
341
342     // }}}
343

344     //----------------------------------------------------------------------
345
// The TableModelFilter interface
346
//----------------------------------------------------------------------
347
// {{{ filterChanged
348

349     /**
350      * Called, when the adapted filter has changed. The call is forwarded
351      * to the listeners of the LogTableFilter.
352      *
353      * @param event Details bout the change - ignored.
354      */

355     public void filterChanged(TableModelFilterEvent event)
356     {
357         fireFilterChanged();
358     }
359
360     // }}}
361
}
362
Popular Tags