| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.log4j.lf5.viewer; |
| |
| import org.apache.log4j.lf5.util.DateFormatManager; |
| |
| import javax.swing.*; |
| import javax.swing.event.ListSelectionEvent; |
| import javax.swing.event.ListSelectionListener; |
| import javax.swing.table.TableColumn; |
| import javax.swing.table.TableColumnModel; |
| import java.awt.*; |
| import java.util.Enumeration; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Vector; |
| |
| /** |
| * LogTable. |
| * |
| * @author Michael J. Sikorsky |
| * @author Robert Shaw |
| * @author Brad Marlborough |
| * @author Brent Sprecher |
| */ |
| |
| // Contributed by ThoughtWorks Inc. |
| |
| public class LogTable extends JTable { |
| private static final long serialVersionUID = 4867085140195148458L; |
| //-------------------------------------------------------------------------- |
| // Constants: |
| //-------------------------------------------------------------------------- |
| |
| //-------------------------------------------------------------------------- |
| // Protected Variables: |
| //-------------------------------------------------------------------------- |
| protected int _rowHeight = 30; |
| protected JTextArea _detailTextArea; |
| |
| // For the columns: |
| protected int _numCols = 9; |
| protected TableColumn[] _tableColumns = new TableColumn[_numCols]; |
| protected int[] _colWidths = {40, 40, 40, 70, 70, 360, 440, 200, 60}; |
| protected LogTableColumn[] _colNames = LogTableColumn.getLogTableColumnArray(); |
| protected int _colDate = 0; |
| protected int _colThread = 1; |
| protected int _colMessageNum = 2; |
| protected int _colLevel = 3; |
| protected int _colNDC = 4; |
| protected int _colCategory = 5; |
| protected int _colMessage = 6; |
| protected int _colLocation = 7; |
| protected int _colThrown = 8; |
| |
| protected DateFormatManager _dateFormatManager = null; |
| |
| //-------------------------------------------------------------------------- |
| // Private Variables: |
| //-------------------------------------------------------------------------- |
| |
| //-------------------------------------------------------------------------- |
| // Constructors: |
| //-------------------------------------------------------------------------- |
| |
| public LogTable(JTextArea detailTextArea) { |
| super(); |
| |
| init(); |
| |
| _detailTextArea = detailTextArea; |
| |
| setModel(new FilteredLogTableModel()); |
| |
| Enumeration columns = getColumnModel().getColumns(); |
| int i = 0; |
| while (columns.hasMoreElements()) { |
| TableColumn col = (TableColumn) columns.nextElement(); |
| col.setCellRenderer(new LogTableRowRenderer()); |
| col.setPreferredWidth(_colWidths[i]); |
| |
| _tableColumns[i] = col; |
| i++; |
| } |
| |
| ListSelectionModel rowSM = getSelectionModel(); |
| rowSM.addListSelectionListener(new LogTableListSelectionListener(this)); |
| |
| //setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); |
| } |
| |
| //-------------------------------------------------------------------------- |
| // Public Methods: |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * Get the DateFormatManager for formatting dates. |
| */ |
| public DateFormatManager getDateFormatManager() { |
| return _dateFormatManager; |
| } |
| |
| /** |
| * Set the date format manager for formatting dates. |
| */ |
| public void setDateFormatManager(DateFormatManager dfm) { |
| _dateFormatManager = dfm; |
| } |
| |
| public synchronized void clearLogRecords() { |
| //For JDK1.3 |
| //((DefaultTableModel)getModel()).setRowCount(0); |
| |
| // For JDK1.2.x |
| getFilteredLogTableModel().clear(); |
| } |
| |
| public FilteredLogTableModel getFilteredLogTableModel() { |
| return (FilteredLogTableModel) getModel(); |
| } |
| |
| // default view if a view is not set and saved |
| public void setDetailedView() { |
| //TODO: Defineable Views. |
| TableColumnModel model = getColumnModel(); |
| // Remove all the columns: |
| for (int f = 0; f < _numCols; f++) { |
| model.removeColumn(_tableColumns[f]); |
| } |
| // Add them back in the correct order: |
| for (int i = 0; i < _numCols; i++) { |
| model.addColumn(_tableColumns[i]); |
| } |
| //SWING BUG: |
| sizeColumnsToFit(-1); |
| } |
| |
| public void setView(List columns) { |
| TableColumnModel model = getColumnModel(); |
| |
| // Remove all the columns: |
| for (int f = 0; f < _numCols; f++) { |
| model.removeColumn(_tableColumns[f]); |
| } |
| Iterator selectedColumns = columns.iterator(); |
| Vector columnNameAndNumber = getColumnNameAndNumber(); |
| while (selectedColumns.hasNext()) { |
| // add the column to the view |
| model.addColumn(_tableColumns[columnNameAndNumber.indexOf(selectedColumns.next())]); |
| } |
| |
| //SWING BUG: |
| sizeColumnsToFit(-1); |
| } |
| |
| public void setFont(Font font) { |
| super.setFont(font); |
| Graphics g = this.getGraphics(); |
| if (g != null) { |
| FontMetrics fm = g.getFontMetrics(font); |
| int height = fm.getHeight(); |
| _rowHeight = height + height / 3; |
| setRowHeight(_rowHeight); |
| } |
| |
| |
| } |
| |
| |
| //-------------------------------------------------------------------------- |
| // Protected Methods: |
| //-------------------------------------------------------------------------- |
| |
| protected void init() { |
| setRowHeight(_rowHeight); |
| setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
| } |
| |
| // assign a column number to a column name |
| protected Vector getColumnNameAndNumber() { |
| Vector columnNameAndNumber = new Vector(); |
| for (int i = 0; i < _colNames.length; i++) { |
| columnNameAndNumber.add(i, _colNames[i]); |
| } |
| return columnNameAndNumber; |
| } |
| |
| //-------------------------------------------------------------------------- |
| // Private Methods: |
| //-------------------------------------------------------------------------- |
| |
| //-------------------------------------------------------------------------- |
| // Nested Top-Level Classes or Interfaces: |
| //-------------------------------------------------------------------------- |
| |
| class LogTableListSelectionListener implements ListSelectionListener { |
| protected JTable _table; |
| |
| public LogTableListSelectionListener(JTable table) { |
| _table = table; |
| } |
| |
| public void valueChanged(ListSelectionEvent e) { |
| //Ignore extra messages. |
| if (e.getValueIsAdjusting()) { |
| return; |
| } |
| |
| ListSelectionModel lsm = (ListSelectionModel) e.getSource(); |
| if (lsm.isSelectionEmpty()) { |
| //no rows are selected |
| } else { |
| StringBuffer buf = new StringBuffer(); |
| int selectedRow = lsm.getMinSelectionIndex(); |
| |
| for (int i = 0; i < _numCols - 1; i++) { |
| String value = ""; |
| Object obj = _table.getModel().getValueAt(selectedRow, i); |
| if (obj != null) { |
| value = obj.toString(); |
| } |
| |
| buf.append(_colNames[i] + ":"); |
| buf.append("\t"); |
| |
| if (i == _colThread || i == _colMessage || i == _colLevel) { |
| buf.append("\t"); // pad out the date. |
| } |
| |
| if (i == _colDate || i == _colNDC) { |
| buf.append("\t\t"); // pad out the date. |
| } |
| |
| // if( i == _colSequence) |
| // { |
| // buf.append("\t\t\t"); // pad out the Sequnce. |
| // } |
| |
| buf.append(value); |
| buf.append("\n"); |
| } |
| buf.append(_colNames[_numCols - 1] + ":\n"); |
| Object obj = _table.getModel().getValueAt(selectedRow, _numCols - 1); |
| if (obj != null) { |
| buf.append(obj.toString()); |
| } |
| |
| _detailTextArea.setText(buf.toString()); |
| } |
| } |
| } |
| } |
| |
| |
| |
| |
| |
| |