1 package net.logAnalyzer.gui.messages;
2
3 import java.awt.BorderLayout;
4 import java.awt.Cursor;
5 import java.util.Hashtable;
6
7 import javax.swing.Icon;
8 import javax.swing.JScrollPane;
9 import javax.swing.JSplitPane;
10 import javax.swing.SwingUtilities;
11
12 import net.logAnalyzer.LogAnalyzerGUI;
13 import net.logAnalyzer.gui.LAViewContainer;
14 import net.logAnalyzer.gui.ViewDefinition;
15 import net.logAnalyzer.gui.messages.filters.LAMessagesFilter;
16 import net.logAnalyzer.handlers.FilteredLogHandler;
17 import net.logAnalyzer.handlers.LALogHandler;
18 import net.logAnalyzer.handlers.LALogHandlerListener;
19 import net.logAnalyzer.resources.LAResourceBundle;
20 import net.logAnalyzer.utils.gui.JStatusBar;
21
22 public class FilteredMessagesView extends MessagesView implements
23 LALogHandlerListener {
24 private static final long serialVersionUID = 1L;
25
26 /***
27 * Filtered log handler.
28 */
29 private FilteredLogHandler filteredLogHandler;
30
31 /***
32 * Filters manager.
33 */
34 private FiltersManager filters;
35
36 /***
37 * Table used to display messages.
38 */
39 private MessagesTable messagesTable;
40
41 /***
42 * StatusBar.
43 */
44 private JStatusBar statusbar;
45
46 /***
47 * Creates a new view with the specified attributes.
48 *
49 * @param attributes
50 * View attributes.
51 */
52 public FilteredMessagesView(ViewDefinition definition, Hashtable attributes) {
53 super(definition, attributes);
54 }
55
56 /***
57 * Adds view components. Called by
58 * {@link net.logAnalyzer.gui.LAView#setViewContainer(LAViewContainer)}.
59 */
60 public void addComponents() {
61 setLayout(new BorderLayout());
62
63
64 filters = new FiltersManager(this, getAttributes());
65
66 messagesTable = new MessagesTable(this, getAttributes());
67 messagesTable.setModel(new MessagesModel(getFilteredLogHandler()));
68
69 JScrollPane messagesScrollPane = new JScrollPane(messagesTable);
70
71
72 JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
73 false, filters, messagesScrollPane);
74 splitter.setDividerLocation(200);
75 add(splitter, BorderLayout.CENTER);
76
77
78 statusbar = new JStatusBar();
79 statusbar.setVisible(false);
80 add(statusbar, BorderLayout.SOUTH);
81 }
82
83 /***
84 * Sets filter to apply on the log handler.
85 *
86 * @param filter
87 * Filter to apply to accept or not log handler messages.
88 */
89 public void setFilter(LAMessagesFilter filter) {
90 filters.setFilter(filter);
91 }
92
93 /***
94 * Sets filter to apply on the log handler and start filtering in a new
95 * thread.
96 *
97 * @param filter
98 * Filter to apply to accept or not log handler messages.
99 */
100 public void startFiltering(LAMessagesFilter filter) {
101 getFilteredLogHandler().setFilter(filter);
102 messagesTable.setModel(new MessagesModel(filteredLogHandler));
103 filteredLogHandler.addLogHandlerListener(this);
104 filteredLogHandler.addLogHandlerListener(filters);
105
106 SwingUtilities.invokeLater(new Runnable() {
107 public void run() {
108 Thread filtering = new Thread(filteredLogHandler);
109 filtering.start();
110 }
111 });
112 }
113
114 /***
115 * Stop the filtering.
116 */
117 public void stopFiltering() {
118 filteredLogHandler.stopFiltering();
119 }
120
121 /***
122 * Returns the filtered log handler.
123 *
124 * @return Filtered log handler.
125 */
126 public FilteredLogHandler getFilteredLogHandler() {
127 if (filteredLogHandler == null) {
128 filteredLogHandler = new FilteredLogHandler(LogAnalyzerGUI
129 .getHandler());
130 filteredLogHandler.addLogHandlerListener(this);
131 }
132 return filteredLogHandler;
133 }
134
135 /***
136 * Sets current messageLabel.
137 *
138 * @param oldFirstIndex
139 * Old first selected messageLabel index.
140 * @param oldLastIndex
141 * Old last selected messageLabel index.
142 * @param newFirstIndex
143 * New first selected messageLabel index.
144 * @param newLastIndex
145 * New last selected messageLabel index.
146 */
147 protected void setCurrentMessage(int oldFirstIndex, int oldLastIndex,
148 int newFirstIndex, int newLastIndex) {
149
150 }
151
152 /***
153 * Returns the view icon.
154 *
155 * @return View icon.
156 */
157 public Icon getIcon() {
158 return LAResourceBundle.getIcon("FilteredMessagesView.icon");
159 }
160
161 /***
162 * Returns the view title.
163 *
164 * @return View title.
165 */
166 public String getTitle() {
167 return LAResourceBundle
168 .getLocalizedString("FilteredMessagesView.title");
169 }
170
171 /***
172 * Used to notify listeners when the current messages selection is changed.
173 *
174 * @param firstIndex
175 * First messageLabel index.
176 * @param lastIndex
177 * Last messageLabel index.
178 */
179 public void messageChangedNotify(int firstIndex, int lastIndex) {
180 super.messageChangedNotify(getFilteredLogHandler().getRealIndex(
181 firstIndex), getFilteredLogHandler().getRealIndex(lastIndex));
182 }
183
184 /***
185 * Receives a start parsing event.
186 *
187 * @param logHander
188 * Log handler used as data source.
189 * @see net.logAnalyzer.handlers.LALogHandlerListener#startParsing(LALogHandler)
190 */
191 public void startParsing(LALogHandler logHander) {
192 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
193 statusbar.setVisible(true);
194 statusbar.setMessage(LAResourceBundle.getLocalizedString(
195 "FilteredMessagesView.filtering", Long.toString(logHander
196 .getSize())));
197 }
198
199 /***
200 * Receives a step parsing event.
201 *
202 * @param logHandler
203 * Log handler used as data source.
204 * @see net.logAnalyzer.handlers.LALogHandlerListener#stepParsing(LALogHandler)
205 */
206 public void stepParsing(LALogHandler logHandler) {
207 int percents = logHandler.getPercentDone();
208 statusbar.setMessage(LAResourceBundle.getLocalizedString(
209 "FilteredMessagesView.filtering", Long.toString(logHandler
210 .getSize())));
211 statusbar.setProgressBar(percents + "%", percents);
212 }
213
214 /***
215 * Receives an end parsing event.
216 *
217 * @see net.logAnalyzer.handlers.LALogHandlerListener#endParsing(LALogHandler)
218 */
219 public void endParsing(LALogHandler logHander) {
220 setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
221 statusbar.setVisible(false);
222 }
223 }