You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by ps...@apache.org on 2007/07/11 00:18:24 UTC

svn commit: r555100 - /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java

Author: psmith
Date: Tue Jul 10 15:18:23 2007
New Revision: 555100

URL: http://svn.apache.org/viewvc?view=rev&rev=555100
Log:
Committing patch for Bug 42789 supplied by Isuru Suriarachchi 
which allows saving of previous log filter expressions for named LogPanels.

This change uses a serialization version number to support previous older
versions of serialized settings.


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

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java?view=diff&rev=555100&r1=555099&r2=555100
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java Tue Jul 10 15:18:23 2007
@@ -90,6 +90,7 @@
 import javax.swing.JSeparator;
 import javax.swing.JSplitPane;
 import javax.swing.JTable;
+import javax.swing.JButton;
 import javax.swing.JTextArea;
 import javax.swing.JTextField;
 import javax.swing.JToolBar;
@@ -186,6 +187,7 @@
  *@author Scott Deboy (sdeboy at apache.org)
  *@author Paul Smith (psmith at apache.org)
  *@author Stephen Pain
+ *@author Isuru Suriarachchi
  *
  */
 public class LogPanel extends DockablePanel implements EventBatchListener,
@@ -233,9 +235,11 @@
   static final String TABLE_COLUMN_WIDTHS = "table.columns.widths";
   static final String COLUMNS_EXTENSION = ".columns";
   static final String COLORS_EXTENSION = ".colors";
+  private static final int LOG_PANEL_SERIALIZATION_VERSION_NUMBER = 1;
   private int previousLastIndex = -1;
   private final DateFormat timestampExpressionFormat = new SimpleDateFormat(Constants.TIMESTAMP_RULE_FORMAT);
   private final Logger logger = LogManager.getLogger(LogPanel.class);
+  private final Vector filterExpressionVector;
 
   /**
    * Creates a new LogPanel object.  If a LogPanel with this identifier has
@@ -893,16 +897,17 @@
     upperLeftPanel.add(filterLabel);
 
     //hold a reference to the combobox model so that we can check to prevent duplicates
-    final Vector v = new Vector();
+    //final Vector filterExpressionVector = new Vector();
+    filterExpressionVector = new Vector();
     //add (hopefully useful) default filters
-    v.add("LEVEL == TRACE");
-    v.add("LEVEL >= DEBUG");
-    v.add("LEVEL >= INFO");
-    v.add("LEVEL >= WARN");
-    v.add("LEVEL >= ERROR");
-    v.add("LEVEL == FATAL");
+    filterExpressionVector.add("LEVEL == TRACE");
+    filterExpressionVector.add("LEVEL >= DEBUG");
+    filterExpressionVector.add("LEVEL >= INFO");
+    filterExpressionVector.add("LEVEL >= WARN");
+    filterExpressionVector.add("LEVEL >= ERROR");
+    filterExpressionVector.add("LEVEL == FATAL");
     
-    final JComboBox filterCombo = new JComboBox(v);
+    final JComboBox filterCombo = new JComboBox(filterExpressionVector);
     filterCombo.setSelectedIndex(-1);
     final JTextField filterText;
 
@@ -930,7 +935,7 @@
               }
 
               //should be 'valid expression' check
-              if (!(v.contains(filterCombo.getSelectedItem()))) {
+              if (!(filterExpressionVector.contains(filterCombo.getSelectedItem()))) {
                 filterCombo.addItem(filterCombo.getSelectedItem());
               }
             }
@@ -952,6 +957,25 @@
     JPanel upperRightPanel =
       new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
 
+    //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
+    final JButton clearButton = new JButton("Clear expression");
+    clearButton.setToolTipText("Click here to remove the selected expression from the list");
+    clearButton.addActionListener(
+            new AbstractAction() {
+                public void actionPerformed(ActionEvent e){
+                    String selectedItem = filterCombo.getSelectedItem().toString();
+                    if (e.getSource() == clearButton && !selectedItem.equals("")){
+                        if (filterExpressionVector.contains(selectedItem)){
+                            filterExpressionVector.remove(selectedItem);
+                        }
+                        filterCombo.setSelectedIndex(-1);
+                    }
+                }
+            }
+    );
+
+    upperRightPanel.add(clearButton);
+
     upperPanel.add(upperRightPanel, BorderLayout.EAST);
 
     /*
@@ -1439,7 +1463,30 @@
                 Point p = (Point)in.readObject();
                 undockedFrame.setLocation(p.x, p.y);
                 undockedFrame.setSize(((Dimension)in.readObject()));
-                } catch (EOFException eof){}
+
+                int versionNumber = 0;
+                Vector savedVector;
+
+                //this version number is checked to identify whether there is a Vector comming next
+                try {
+                    versionNumber = in.readInt();
+                } catch (EOFException eof){
+                }
+
+                //read the vector only if the version number is greater than 0. higher version numbers can be
+                //used in the future to save more data structures
+                if (versionNumber > 0){
+                    savedVector = (Vector) in.readObject();
+                    for(int i = 0 ; i < savedVector.size() ; i++){
+                        Object item = savedVector.get(i);
+                        if(!filterExpressionVector.contains(item)){
+                            filterExpressionVector.add(item);
+                        }
+                    }
+                }
+
+                } catch (EOFException eof){
+                }
             } catch (Exception e) {
                 e.printStackTrace();
                 // TODO need to log this..
@@ -1496,11 +1543,14 @@
     	FileWriter w = new FileWriter(xmlFile);
     	s = stream.createObjectOutputStream(w);
     	s.writeObject(preferenceModel);
-    	s.writeInt(lowerPanel.getDividerLocation());
+        s.writeInt(lowerPanel.getDividerLocation());
     	s.writeInt(nameTreeAndMainPanelSplit.getDividerLocation());
     	s.writeObject(detailLayout.getConversionPattern());
     	s.writeObject(undockedFrame.getLocation());
     	s.writeObject(undockedFrame.getSize());
+        //this is a version number written to the file to identify that there is a Vector serialized after this
+        s.writeInt(LOG_PANEL_SERIALIZATION_VERSION_NUMBER);
+        s.writeObject(filterExpressionVector);
     } catch (Exception ex) {
         ex.printStackTrace();
         // TODO need to log this..