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 2003/05/26 07:03:13 UTC

cvs commit: jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw ChainsawCyclicBufferTableModel.java

psmith      2003/05/25 22:03:13

  Modified:    src/java/org/apache/log4j/chainsaw
                        ChainsawCyclicBufferTableModel.java
  Log:
  Initial Cyclic Implementation of the TableModel interface.
  
  events that get added will be added to the end, with the ones at the front
  silently 'run over'.
  
  Currently the ID of all the Events inserted at the end of the CyclicBuffer
  after it reaches it's size receive the id "size()+1".
  
  There is currently no support for resize at this point in time.
  
  Revision  Changes    Path
  1.2       +105 -97   jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
  
  Index: ChainsawCyclicBufferTableModel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ChainsawCyclicBufferTableModel.java	25 May 2003 23:31:59 -0000	1.1
  +++ ChainsawCyclicBufferTableModel.java	26 May 2003 05:03:13 -0000	1.2
  @@ -49,9 +49,16 @@
   
   package org.apache.log4j.chainsaw;
   
  +import org.apache.log4j.helpers.CyclicBuffer;
   import org.apache.log4j.spi.LoggingEvent;
   
  +import java.util.ArrayList;
  +import java.util.Collection;
  +import java.util.Collections;
  +import java.util.HashMap;
  +import java.util.List;
   import java.util.Map;
  +import java.util.StringTokenizer;
   import java.util.Vector;
   
   import javax.swing.table.AbstractTableModel;
  @@ -59,148 +66,149 @@
   
   /**
    * A CyclicBuffer implementation of the EventContainer.
  - * 
  + *
    * @author Paul Smith <ps...@apache.org>
    *
    */
   class ChainsawCyclicBufferTableModel extends AbstractChainsawTableModel
     implements EventContainer {
  -  /* (non-Javadoc)
  -   * @see javax.swing.table.TableModel#getValueAt(int, int)
  -   */
  -  public Object getValueAt(int arg0, int arg1) {
  -    // TODO Auto-generated method stub
  -    return null;
  +    
  +  public static final int DEFAULT_BUFFER_SIZE = 500;
  +  List cyclicBufferList = new CyclicBufferList(DEFAULT_BUFFER_SIZE);
  +  List filteredList = new CyclicBufferList(DEFAULT_BUFFER_SIZE);
  +
  +  public Object getValueAt(int rowIndex, int columnIndex) {
  +    Vector row = getRow(rowIndex);
  +
  +    return row.get(columnIndex);
  +  }
  +
  +  public String getColumnName(int column) {
  +    return ChainsawColumns.getColumnsNames().get(column).toString();
     }
   
  -  /* (non-Javadoc)
  -   * @see javax.swing.table.TableModel#getColumnCount()
  -   */
     public int getColumnCount() {
  -    // TODO Auto-generated method stub
  -    return 0;
  +    return ChainsawColumns.getColumnsNames().size();
     }
   
  -  /* (non-Javadoc)
  -   * @see javax.swing.table.TableModel#getRowCount()
  -   */
     public int getRowCount() {
  -    // TODO Auto-generated method stub
  -    return 0;
  +    return filteredList.size();
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getUnfilteredRowCount()
  -   */
     public int getUnfilteredRowCount() {
  -    // TODO Auto-generated method stub
  -    return 0;
  +    return cyclicBufferList.size();
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getDisplayableEvents()
  -   */
  -  public Vector getDisplayableEvents() {
  -    // TODO Auto-generated method stub
  -    return null;
  -  }
  -
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getAllEvents()
  -   */
     public Vector getAllEvents() {
  -    // TODO Auto-generated method stub
  -    return null;
  -  }
  +    synchronized (syncLock) {
  +      Vector v = new Vector(cyclicBufferList);
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getEvent(java.lang.Integer)
  -   */
  -  public LoggingEvent getEvent(Integer ID) {
  -    // TODO Auto-generated method stub
  -    return null;
  +      return v;
  +    }
     }
   
     /* (non-Javadoc)
      * @see org.apache.log4j.chainsaw.EventContainer#clear()
      */
     public void clearModel() {
  -    // TODO Auto-generated method stub
  +    cyclicBufferList.clear();
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#isAddRow(java.util.Vector, boolean)
  -   */
     public boolean isAddRow(Vector row, boolean valueIsAdjusting) {
  -    // TODO Auto-generated method stub
  -    return false;
  -  }
  +    boolean rowAdded = false;
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#find(int, java.lang.String)
  -   */
  -  public int find(int startRow, String text) {
  -    // TODO Auto-generated method stub
  -    return 0;
  -  }
  +    synchronized (syncLock) {
  +      //set the last field to the 'unfilteredevents size + 1 - an ID based on reception order
  +      int propertiesIndex =
  +        ChainsawColumns.getColumnsNames().indexOf(
  +          ChainsawConstants.PROPERTIES_COL_NAME);
  +      String props = (String) row.get(propertiesIndex);
  +      Integer thisInt = null;
  +
  +      if (props.indexOf(ChainsawConstants.LOG4J_ID_KEY) > -1) {
  +        StringBuffer newProps = new StringBuffer();
  +        StringTokenizer t = new StringTokenizer(props, ",");
  +
  +        while (t.hasMoreElements()) {
  +          StringTokenizer t2 = new StringTokenizer(t.nextToken(), "=");
  +          String propertyName = t2.nextToken();
  +
  +          if (propertyName.equalsIgnoreCase(ChainsawConstants.LOG4J_ID_KEY)) {
  +            thisInt = new Integer(t2.nextToken());
  +          } else {
  +            if (newProps.length() > 0) {
  +              newProps.append(",");
  +            }
  +
  +            newProps.append(propertyName);
  +            newProps.append("=");
  +            newProps.append(t2.nextToken());
  +          }
  +        }
  +
  +        //strip off the ID property - not needed now that it's reloaded
  +        row.set(propertiesIndex, newProps.toString());
  +      }
  +
  +      if (thisInt == null) {
  +        thisInt = new Integer(cyclicBufferList.size() + 1);
  +      }
  +
  +      row.add(thisInt);
  +
  +      if (
  +        (getDisplayFilter() == null) || (getDisplayFilter().isDisplayed(row))) {
  +        addRow(row);
  +
  +        if (isSortEnabled()) {
  +          sort();
  +        }
  +
  +        rowAdded = true;
  +      }
  +    }
  +
  +    if (!valueIsAdjusting) {
  +      notifyCountListeners();
  +    }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.SortTableModel#isSortable(int)
  -   */
  -  public boolean isSortable(int col) {
  -    // TODO Auto-generated method stub
  -    return false;
  +    return rowAdded;
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.SortTableModel#sortColumn(org.apache.log4j.chainsaw.JSortTable, int, int, boolean)
  -   */
  -  public void sortColumn(
  -    JSortTable table, int col, int row, boolean ascending) {
  -    // TODO Auto-generated method stub
  +  public int find(int startRow, String text) {
  +    throw new UnsupportedOperationException("Not implemented at this time");
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#isSortEnabled()
  -   */
  -  public boolean isSortEnabled() {
  -    // TODO Auto-generated method stub
  -    return false;
  +  public void addRow(Vector row) {
  +    synchronized (syncLock) {
  +      cyclicBufferList.add(row);
  +      filteredList.add(row);
  +    }
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#sort()
  -   */
  -  public void sort() {
  +  public Collection getUnfilteredEvents() {
  +    return cyclicBufferList;
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#addRow(java.util.Vector)
  -   */
  -  public void addRow(Vector row) {
  -    // TODO Auto-generated method stub
  +  public void clearFilteredEvents() {
  +    synchronized (syncLock) {
  +      filteredList.clear();
  +    }
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getDisplayFilter()
  -   */
  -  public DisplayFilter getDisplayFilter() {
  -    // TODO Auto-generated method stub
  -    return null;
  +  public Vector getRow(int row) {
  +    return (Vector) filteredList.get(row);
     }
   
  -  /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#getUnfilteredEvents()
  -   */
  -  public Map getUnfilteredEvents() {
  -    // TODO Auto-generated method stub
  -    return null;
  +  protected List getSortableCollection() {
  +    return filteredList;
     }
   
     /* (non-Javadoc)
  -   * @see org.apache.log4j.chainsaw.EventContainer#clearFilteredEvents()
  +   * @see org.apache.log4j.chainsaw.EventContainer#getDetailText(int)
      */
  -  public void clearFilteredEvents() {
  +  public String getDetailText(int selectedRow) {
       // TODO Auto-generated method stub
  +    return null;
     }
   }
  
  
  

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