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 sd...@apache.org on 2004/07/29 08:05:58 UTC

cvs commit: logging-log4j/src/java/org/apache/log4j/chainsaw ChainsawCyclicBufferTableModel.java LogPanel.java

sdeboy      2004/07/28 23:05:58

  Modified:    src/java/org/apache/log4j/chainsaw
                        ChainsawCyclicBufferTableModel.java LogPanel.java
  Log:
  - Modified detail pane update implementation in an attempt to improve swing thread safety.
  - Notifying table model listeners from inside swing thread
  
  Revision  Changes    Path
  1.34      +30 -16    logging-log4j/src/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
  
  Index: ChainsawCyclicBufferTableModel.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- ChainsawCyclicBufferTableModel.java	28 Jul 2004 08:02:17 -0000	1.33
  +++ ChainsawCyclicBufferTableModel.java	29 Jul 2004 06:05:58 -0000	1.34
  @@ -134,17 +134,19 @@
         } finally {
         	SwingUtilities.invokeLater(new Runnable() {
         		public void run() {
  -      			if (previousSize == filteredList.size()) {
  -      				//same - update all
  -      				fireTableRowsUpdated(0, filteredList.size() - 1);
  -      			} else if (previousSize > filteredList.size()) {
  -      				//less now..update and delete difference
  -      				fireTableRowsUpdated(0, filteredList.size() - 1);
  -      				fireTableRowsDeleted(filteredList.size(), previousSize);
  -      			} else if (previousSize < filteredList.size()) {
  -      				//more now..update and insert difference
  -      				fireTableRowsUpdated(0, previousSize - 1);
  -      				fireTableRowsInserted(previousSize, filteredList.size() - 1);
  +      			if (filteredList.size() > 0) {
  +	      			if (previousSize == filteredList.size()) {
  +	      				//same - update all
  +	      				fireTableRowsUpdated(0, filteredList.size() - 1);
  +	      			} else if (previousSize > filteredList.size()) {
  +	      				//less now..update and delete difference
  +	      				fireTableRowsUpdated(0, filteredList.size() - 1);
  +	      				fireTableRowsDeleted(filteredList.size(), previousSize);
  +	      			} else if (previousSize < filteredList.size() && previousSize > 0) {
  +	      				//more now..update and insert difference
  +	      				fireTableRowsUpdated(0, previousSize - 1);
  +	      				fireTableRowsInserted(previousSize, filteredList.size() - 1);
  +	      			}
         			}
   	      	notifyCountListeners();
         	}});
  @@ -245,7 +247,7 @@
        * @see org.apache.log4j.chainsaw.EventContainer#sort()
        */
     public void sort() {
  -    if (sortEnabled) {
  +    if (sortEnabled && filteredList.size() > 0) {
         synchronized (filteredList) {
           Collections.sort(
             filteredList,
  @@ -254,7 +256,11 @@
               currentSortAscending));
         }
   
  -      fireTableRowsUpdated(0, Math.max(filteredList.size() - 1, 0));
  +     	SwingUtilities.invokeLater(new Runnable() {
  +     		public void run() {
  +      			fireTableRowsUpdated(0, Math.max(filteredList.size() - 1, 0));
  +      		}
  +      	});
       }
     }
   
  @@ -283,7 +289,12 @@
         uniqueRow = 0;
       }
   
  -    fireTableDataChanged();
  +    SwingUtilities.invokeLater(new Runnable() {
  +    	public void run() {
  +    	    fireTableDataChanged();
  +    	}
  +    });
  +
       notifyCountListeners();
     }
   
  @@ -342,7 +353,7 @@
       LoggingEvent event = null;
   
       synchronized (filteredList) {
  -      if (rowIndex < filteredList.size()) {
  +      if (rowIndex < filteredList.size() && rowIndex > -1) {
           event = (LoggingEvent) filteredList.get(rowIndex);
         }
       }
  @@ -497,7 +508,9 @@
       return last;
     }
   
  -  public void fireTableEvent(int begin, int end, int count) {
  +  public void fireTableEvent(final int begin, final int end, final int count) {
  +  	SwingUtilities.invokeLater(new Runnable() {
  +  		public void run() {
       if (cyclic) {
         if (!reachedCapacity) {
           //if we didn't loop and it's the 1st time, insert
  @@ -515,6 +528,7 @@
       } else {
         fireTableRowsInserted(begin, end);
       }
  +  }});
     }
   
     /**
  
  
  
  1.87      +38 -31    logging-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java
  
  Index: LogPanel.java
  ===================================================================
  RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java,v
  retrieving revision 1.86
  retrieving revision 1.87
  diff -u -r1.86 -r1.87
  --- LogPanel.java	28 Jul 2004 08:02:17 -0000	1.86
  +++ LogPanel.java	29 Jul 2004 06:05:58 -0000	1.87
  @@ -50,6 +50,7 @@
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
   import java.io.Serializable;
  +import java.io.StringReader;
   import java.net.URLEncoder;
   import java.text.DateFormat;
   import java.text.NumberFormat;
  @@ -107,6 +108,7 @@
   import javax.swing.event.TableModelListener;
   import javax.swing.table.TableColumn;
   import javax.swing.table.TableColumnModel;
  +import javax.swing.text.Document;
   
   import org.apache.log4j.Layout;
   import org.apache.log4j.PatternLayout;
  @@ -2672,8 +2674,6 @@
        * Update detail pane
        */
       private void updateDetailPane() {
  -      String text = null;
  -
         /*
          * Don't bother doing anything if it's not visible
          */
  @@ -2681,35 +2681,42 @@
           return;
         }
   
  -      if (selectedRow != -1) {
  -        LoggingEvent event = tableModel.getRow(selectedRow);
  -
  -        if (event != null) {
  -          StringBuffer buf = new StringBuffer();
  -          buf.append(detailLayout.getHeader())
  -             .append(detailLayout.format(event)).append(
  -            detailLayout.getFooter());
  -          text = buf.toString();
  -        }
  -      }
  -
  -      if (!((text != null) && !text.equals(""))) {
  -        text = "<html>Nothing selected</html>";
  -      }
  -
  -      final String text2 = text;
  -      SwingUtilities.invokeLater(
  -        new Runnable() {
  -          public void run() {
  -            try {
  -                detail.setText(text2);
  -                detail.validate();
  -                if (text2.length() > 0) {
  -                    detail.setCaretPosition(0);
  -                }
  -            } catch (Exception e){} //ignore
  -          }
  -        });
  +	      LoggingEvent event = null;
  +	      if (selectedRow != -1) {
  +	        event = tableModel.getRow(selectedRow);
  +	
  +	        if (event != null) {
  +	          final StringBuffer buf = new StringBuffer();
  +	          buf.append(detailLayout.getHeader())
  +	             .append(detailLayout.format(event)).append(
  +	            detailLayout.getFooter());
  +	          if (buf.length() > 0) {
  +		      	SwingUtilities.invokeLater(new Runnable() {
  +		      		public void run() {
  +			          	try {
  +			          		Document doc = detail.getEditorKit().createDefaultDocument();
  +			          		detail.getEditorKit().read(new StringReader(buf.toString()), doc, 0);
  +			          		detail.setDocument(doc);
  +			          		detail.setCaretPosition(0);
  +			          	} catch (Exception e) {}
  +    	      		}
  +    	      	});
  +	          }
  +	        }
  +	      }
  +	
  +	      if (event == null) {
  +	      	SwingUtilities.invokeLater(new Runnable() {
  +	      		public void run() {
  +			      	try {
  +			      		Document doc = detail.getEditorKit().createDefaultDocument();
  +			      		detail.getEditorKit().read(new StringReader("<html>Nothing selected</html>"), doc, 0);
  +			      		detail.setDocument(doc);
  +			      		detail.setCaretPosition(0);
  +			      	} catch (Exception e) {}
  +	      		}
  +	      	});
  +	      }
       }
   
       /**
  
  
  

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