Update the search result count in the status bar to contain the search matches 
which are displayed on screen (was previously showing search match count for 
all events, including events not displayed due to a filter rule)


Project: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/commit/8f17d6a7
Tree: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/tree/8f17d6a7
Diff: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/diff/8f17d6a7

Branch: refs/heads/master
Commit: 8f17d6a72ac6dcfa11a6da2c6697a5c8671a2035
Parents: 963870d
Author: Scott Deboy <[email protected]>
Authored: Sat Nov 13 22:20:45 2010 +0000
Committer: Scott Deboy <[email protected]>
Committed: Sat Nov 13 22:20:45 2010 +0000

----------------------------------------------------------------------
 .../chainsaw/ChainsawCyclicBufferTableModel.java  | 18 ++++++++++++++++--
 .../org/apache/log4j/chainsaw/EventContainer.java |  7 +++++++
 .../java/org/apache/log4j/chainsaw/LogPanel.java  | 16 ++++++++++++++--
 .../log4j/chainsaw/LoggingEventWrapper.java       | 13 ++++++++-----
 4 files changed, 45 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/8f17d6a7/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index ad51455..04370a7 100644
--- 
a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ 
b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -440,7 +440,8 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
         for (Iterator iter = unfilteredListCopy.iterator();iter.hasNext();) {
             LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) 
iter.next();
             loggingEventWrapper.evaluateSearchRule(findRule);
-            if (loggingEventWrapper.isSearchMatch()) {
+            //return the count of visible search matches
+            if (loggingEventWrapper.isSearchMatch() && 
loggingEventWrapper.isDisplayed()) {
                 count++;
             }
         }
@@ -489,7 +490,20 @@ class ChainsawCyclicBufferTableModel extends 
AbstractTableModel
       return -1;
     }
 
-    public int getColumnCount() {
+  public int getSearchMatchCount() {
+    int searchMatchCount = 0;
+    synchronized(mutex) {
+      for (Iterator iter = filteredList.iterator();iter.hasNext();) {
+        LoggingEventWrapper wrapper = (LoggingEventWrapper) iter.next();
+        if (wrapper.isSearchMatch() && wrapper.isDisplayed()) {
+          searchMatchCount++;
+        }
+      }
+    }
+    return searchMatchCount;
+  }
+
+  public int getColumnCount() {
     return columnNames.size();
   }
 

http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/8f17d6a7/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java 
b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
index 854fd90..3c34436 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
@@ -175,4 +175,11 @@ public interface EventContainer extends SortTableModel, 
LoggerNameModel {
    * @return
    */
   int findColoredRow(int currentRow, boolean forward);
+
+  /**
+   * Return the visible search match count
+   *
+   * @return
+   */
+  int getSearchMatchCount();
 }

http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/8f17d6a7/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java 
b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 449266f..37f9431 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -2154,7 +2154,7 @@ public class LogPanel extends DockablePanel implements 
EventBatchListener, Profi
           //these are actual LoggingEvent instances
           LoggingEvent event = (LoggingEvent)iter.next();
           //create two separate loggingEventWrappers (main table and search 
table), as they have different info on display state
-          LoggingEventWrapper loggingEventWrapper1 = new 
LoggingEventWrapper(event, tableModel);
+          LoggingEventWrapper loggingEventWrapper1 = new 
LoggingEventWrapper(event);
             //if the clearTableExpressionRule is not null, evaluate & clear 
the table if it matches
             if (clearTableExpressionRule != null && 
clearTableExpressionRule.evaluate(event, null)) {
                 logger.info("clear table expression matched - clearing table - 
matching event msg - " + event.getMessage());
@@ -2169,7 +2169,7 @@ public class LogPanel extends DockablePanel implements 
EventBatchListener, Profi
           rowAdded = rowAdded || isCurrentRowAdded;
 
           //create a new loggingEventWrapper via copy constructor to ensure 
same IDs
-          LoggingEventWrapper loggingEventWrapper2 = new 
LoggingEventWrapper(loggingEventWrapper1, searchModel);
+          LoggingEventWrapper loggingEventWrapper2 = new 
LoggingEventWrapper(loggingEventWrapper1);
           boolean isSearchCurrentRowAdded = 
searchModel.isAddRow(loggingEventWrapper2);
           if (isSearchCurrentRowAdded) {
               searchAddedRowCount++;
@@ -3453,17 +3453,29 @@ public class LogPanel extends DockablePanel implements 
EventBatchListener, Profi
         tableRuleMediator.setFilterRule(null);
         searchRuleMediator.setFilterRule(null);
         textField.setToolTipText(defaultToolTip);
+        if (findRule != null) {
+          currentSearchMatchCount=tableModel.getSearchMatchCount();
+          statusBar.setSearchMatchCount(currentSearchMatchCount, 
getIdentifier());
+        }
       } else {
         try {
           
tableRuleMediator.setFilterRule(ExpressionRule.getRule(textField.getText()));
           
searchRuleMediator.setFilterRule(ExpressionRule.getRule(textField.getText()));
           textField.setToolTipText(defaultToolTip);
+          if (findRule != null) {
+            currentSearchMatchCount=tableModel.getSearchMatchCount();
+            statusBar.setSearchMatchCount(currentSearchMatchCount, 
getIdentifier());
+          }
           //valid expression, reset background color in case we were 
previously an invalid expression
           textField.setBackground(UIManager.getColor("TextField.background"));
         } catch (IllegalArgumentException iae) {
           //invalid expression, change background of the field
           textField.setToolTipText(iae.getMessage());
           
textField.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
+          if (findRule != null) {
+            currentSearchMatchCount=tableModel.getSearchMatchCount();
+            statusBar.setSearchMatchCount(currentSearchMatchCount, 
getIdentifier());
+          }
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/8f17d6a7/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java 
b/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
index 68d8680..65113a1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
@@ -48,18 +48,16 @@ public class LoggingEventWrapper {
   //a Map of event fields to Sets of string matches (can be used to render 
matches differently)
   Map eventMatches = new HashMap();
   private LoggingEventWrapper syncWrapper;
-  private EventContainer eventContainer;
+  private boolean displayed;
 
-  public LoggingEventWrapper(LoggingEvent loggingEvent, EventContainer 
eventContainer) {
+  public LoggingEventWrapper(LoggingEvent loggingEvent) {
     this.loggingEvent = loggingEvent;
-    this.eventContainer = eventContainer;
   }
 
-  public LoggingEventWrapper(LoggingEventWrapper loggingEventWrapper, 
EventContainer eventContainer) {
+  public LoggingEventWrapper(LoggingEventWrapper loggingEventWrapper) {
     this.loggingEvent = loggingEventWrapper.getLoggingEvent();
     this.id = loggingEventWrapper.id;
     this.syncWrapper = loggingEventWrapper;
-    this.eventContainer = eventContainer;
     loggingEventWrapper.syncWrapper = this;
   }
 
@@ -157,12 +155,17 @@ public class LoggingEventWrapper {
   public void setDisplayed(boolean b) {
     markerHeight = DEFAULT_HEIGHT;
     msgHeight = DEFAULT_HEIGHT;
+    displayed = b;
   }
 
   public void setPreviousDisplayedEventTimestamp(long 
previousDisplayedEventTimeStamp) {
     setProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE, 
String.valueOf(loggingEvent.getTimeStamp() - previousDisplayedEventTimeStamp));
   }
 
+  public boolean isDisplayed() {
+    return displayed;
+  }
+
   public boolean equals(Object o) {
     if (this == o) {
       return true;

Reply via email to