You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ps...@apache.org on 2005/12/15 07:18:00 UTC

svn commit: r356982 - in /logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw: LogPanel.java LogPanelPreferenceModel.java

Author: psmith
Date: Wed Dec 14 22:17:52 2005
New Revision: 356982

URL: http://svn.apache.org/viewcvs?rev=356982&view=rev
Log:
Fixed a rather annoying table bug whereby non-standard columns
kept getting added over an over and over again.

This approach means we need to treat the column List more like a Set
but guarantee the order of insertion is consistent.

When the ChainsawCyclicTableModel fires it's new KeyEvents we make sure
we're not doubling up there too.

Modified:
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanel.java
    logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanel.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanel.java?rev=356982&r1=356981&r2=356982&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanel.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanel.java Wed Dec 14 22:17:52 2005
@@ -837,8 +837,13 @@
     tableModel.addNewKeyListener(
       new NewKeyListener() {
         public void newKeyAdded(NewKeyEvent e) {
+           // don't add the column if we already know about it, this could be if we've seen it before and saved the column preferences
+            if(table.getColumn(e.getKey())!=null){
+                return;
+            }
           TableColumn col = new TableColumn(e.getNewModelIndex());
           col.setHeaderValue(e.getKey());
+          
           table.addColumn(col);
         }
       });
@@ -1481,12 +1486,12 @@
   }
 
     private void updatePreferenceModelColumnDetails() {
-        preferenceModel.getColumns().clear();
+        preferenceModel.clearColumns();
         for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
     
             TableColumn c = table.getColumnModel().getColumn(i);
     
-            preferenceModel.getColumns().add(c);
+            preferenceModel.addColumn(c);
         }
     }
     

Modified: logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
URL: http://svn.apache.org/viewcvs/logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java?rev=356982&r1=356981&r2=356982&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java (original)
+++ logging/chainsaw/trunk/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java Wed Dec 14 22:17:52 2005
@@ -35,6 +35,8 @@
 import java.util.Properties;
 import java.util.Set;
 
+import javax.swing.table.TableColumn;
+
 
 /**
  *  Used to encapsulate all the preferences for a given LogPanel
@@ -74,8 +76,44 @@
   private List columns = new ArrayList();
   private Collection hiddenLoggers = new HashSet();
   
+  /**
+   * Returns an <b>unmodifiable</b> list of the columns.
+   * 
+   * The reason it is unmodifiable is to enforce the requirement that
+   * the List is actually unique columns.  IT _could_ be a set,
+   * but we need to maintain the order of insertion.
+   * 
+   * @return
+   */
   public List getColumns() {
-      return columns;
+      return Collections.unmodifiableList(columns);
+  }
+  
+  public void clearColumns(){
+      columns.clear();
+  }
+  
+  public boolean addColumn(TableColumn column){
+      if(containsHeaderValue(column)){
+          return false;
+      }else{
+          return columns.add(column);
+      }
+  }
+  
+  /**
+   * Quite an inefficient search mechanism to make sure we don't allow duplicate Column headers
+   * @param column
+   * @return
+   */
+  private boolean containsHeaderValue(TableColumn column) {
+      for (Iterator iter = columns.iterator(); iter.hasNext();) {
+        TableColumn c = (TableColumn) iter.next();
+        if(c.getHeaderValue().equals(column.getHeaderValue())){
+            return true;
+        }
+      }
+      return false;
   }
 
   public void setColumns(List columns) {
@@ -151,7 +189,8 @@
     setDetailPaneVisible(model.isDetailPaneVisible());
     setLogTreePanelVisible(model.isLogTreePanelVisible());
 
-    setColumns(model.getColumns());
+    // we have to copy the list, because getColumns() is unmodifiable
+    setColumns(new ArrayList(model.getColumns()));
     setHiddenLoggers(model.getHiddenLoggers());
     
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org