public void reFilter()

in src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java [130:190]


    public void reFilter() {
        final int previousSize;
        final int newSize;
        synchronized (mutex) {
            //post refilter with newValue of TRUE (filtering is about to begin)
            propertySupport.firePropertyChange("refilter", Boolean.FALSE, Boolean.TRUE);
            previousSize = filteredList.size();
            filteredList.clear();
            if (ruleMediator == null) {
                LoggingEventWrapper lastEvent = null;
                for (Object anUnfilteredList : unfilteredList) {
                    LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) anUnfilteredList;
                    loggingEventWrapper.setDisplayed(true);
                    updateEventMillisDelta(loggingEventWrapper, lastEvent);
                    filteredList.add(loggingEventWrapper);
                    lastEvent = loggingEventWrapper;
                }
            } else {
                Iterator iter = unfilteredList.iterator();
                LoggingEventWrapper lastEvent = null;
                while (iter.hasNext()) {
                    LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();

                    if (ruleMediator.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
                        loggingEventWrapper.setDisplayed(true);
                        filteredList.add(loggingEventWrapper);
                        updateEventMillisDelta(loggingEventWrapper, lastEvent);
                        lastEvent = loggingEventWrapper;
                    } else {
                        loggingEventWrapper.setDisplayed(false);
                    }
                }
            }
            newSize = filteredList.size();
        }
        SwingHelper.invokeOnEDT(() -> {
            if (newSize > 0) {
                if (previousSize == newSize) {
                    //same - update all
                    fireTableRowsUpdated(0, newSize - 1);
                } else if (previousSize > newSize) {
                    //less now..update and delete difference
                    fireTableRowsUpdated(0, newSize - 1);
//swing bug exposed by variable height rows when calling fireTableRowsDeleted..use tabledatacchanged
                    fireTableDataChanged();
                } else if (previousSize < newSize) {
                    //more now..update and insert difference
                    if (previousSize > 0) {
                        fireTableRowsUpdated(0, previousSize - 1);
                    }
                    fireTableRowsInserted(Math.max(0, previousSize), newSize - 1);
                }
            } else {
                //no rows to show
                fireTableDataChanged();
            }
            notifyCountListeners();
//post refilter with newValue of FALSE (filtering is complete)
            SwingHelper.invokeOnEDT(() -> propertySupport.firePropertyChange("refilter", Boolean.TRUE, Boolean.FALSE));
        });
    }