FileDocCategorySizeDatePackage
FilteredLogTableModel.javaAPI DocApache log4j 1.2.157663Sat Aug 25 00:09:38 BST 2007org.apache.log4j.lf5.viewer

FilteredLogTableModel

public class FilteredLogTableModel extends AbstractTableModel
A TableModel for LogRecords which includes filtering support.
author
Richard Wan
author
Brent Sprecher

Fields Summary
protected LogRecordFilter
_filter
protected List
_allRecords
protected List
_filteredRecords
protected int
_maxNumberOfLogRecords
protected String[]
_colNames
Constructors Summary
public FilteredLogTableModel()


  //--------------------------------------------------------------------------
  //   Private Variables:
  //--------------------------------------------------------------------------

  //--------------------------------------------------------------------------
  //   Constructors:
  //--------------------------------------------------------------------------

    
    super();
  
Methods Summary
public synchronized booleanaddLogRecord(org.apache.log4j.lf5.LogRecord record)


    _allRecords.add(record);

    if (_filter.passes(record) == false) {
      return false;
    }
    getFilteredRecords().add(record);
    fireTableRowsInserted(getRowCount(), getRowCount());
    trimRecords();
    return true;
  
public synchronized voidclear()
Clears all records from the LogTableModel

    _allRecords.clear();
    _filteredRecords.clear();
    fireTableDataChanged();
  
protected java.util.ListcreateFilteredRecordsList()

    List result = new ArrayList();
    Iterator records = _allRecords.iterator();
    LogRecord current;
    while (records.hasNext()) {
      current = (LogRecord) records.next();
      if (_filter.passes(current)) {
        result.add(current);
      }
    }
    return result;
  
public synchronized voidfastRefresh()

    _filteredRecords.remove(0);
    fireTableRowsDeleted(0, 0);
  
protected java.lang.ObjectgetColumn(int col, org.apache.log4j.lf5.LogRecord lr)

    if (lr == null) {
      return "NULL Column";
    }
    String date = new Date(lr.getMillis()).toString();
    switch (col) {
      case 0:
        return date + " (" + lr.getMillis() + ")";
      case 1:
        return lr.getThreadDescription();
      case 2:
        return new Long(lr.getSequenceNumber());
      case 3:
        return lr.getLevel();
      case 4:
        return lr.getNDC();
      case 5:
        return lr.getCategory();
      case 6:
        return lr.getMessage();
      case 7:
        return lr.getLocation();
      case 8:
        return lr.getThrownStackTrace();
      default:
        String message = "The column number " + col + "must be between 0 and 8";
        throw new IllegalArgumentException(message);
    }
  
public intgetColumnCount()

    return _colNames.length;
  
public java.lang.StringgetColumnName(int i)

    return _colNames[i];
  
protected org.apache.log4j.lf5.LogRecordgetFilteredRecord(int row)

    List records = getFilteredRecords();
    int size = records.size();
    if (row < size) {
      return (LogRecord) records.get(row);
    }
    // a minor problem has happened. JTable has asked for
    // a row outside the bounds, because the size of
    // _filteredRecords has changed while it was looping.
    // return the last row.
    return (LogRecord) records.get(size - 1);

  
protected java.util.ListgetFilteredRecords()

    if (_filteredRecords == null) {
      refresh();
    }
    return _filteredRecords;
  
public org.apache.log4j.lf5.LogRecordFiltergetLogRecordFilter()

    return _filter;
  
public intgetRowCount()

    return getFilteredRecords().size();
  
public intgetTotalRowCount()

    return _allRecords.size();
  
public java.lang.ObjectgetValueAt(int row, int col)

    LogRecord record = getFilteredRecord(row);
    return getColumn(col, record);
  
protected booleanneedsTrimming()

    return (_allRecords.size() > _maxNumberOfLogRecords);
  
private intnumberOfRecordsToTrim()

    return _allRecords.size() - _maxNumberOfLogRecords;
  
public synchronized voidrefresh()
Forces the LogTableModel to requery its filters to determine which records to display.

    _filteredRecords = createFilteredRecordsList();
    fireTableDataChanged();
  
public voidsetLogRecordFilter(org.apache.log4j.lf5.LogRecordFilter filter)

    _filter = filter;
  
public voidsetMaxNumberOfLogRecords(int maxNumRecords)

    if (maxNumRecords > 0) {
      _maxNumberOfLogRecords = maxNumRecords;
    }

  
protected voidtrimOldestRecords()

    synchronized (_allRecords) {
      int trim = numberOfRecordsToTrim();
      if (trim > 1) {
        List oldRecords =
            _allRecords.subList(0, trim);
        oldRecords.clear();
        refresh();
      } else {
        _allRecords.remove(0);
        fastRefresh();
      }
    }

  
protected voidtrimRecords()

    if (needsTrimming()) {
      trimOldestRecords();
    }