View Javadoc
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          // Adds the filters manager
64          filters = new FiltersManager(this, getAttributes());
65          // Adds the messages table
66          messagesTable = new MessagesTable(this, getAttributes());
67          messagesTable.setModel(new MessagesModel(getFilteredLogHandler()));
68          // Adds the messages table in a scroll pane
69          JScrollPane messagesScrollPane = new JScrollPane(messagesTable);
70  
71          // Adds the filters manager and the table scoll pane to a splitter
72          JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
73                  false, filters, messagesScrollPane);
74          splitter.setDividerLocation(200);
75          add(splitter, BorderLayout.CENTER);
76  
77          // Adds the statusbar
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         // Filter the log
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         // messagesTable.setCurrentMessage(newFirstIndex, newLastIndex);
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 }