psmith      2004/05/20 21:23:23

  Modified:    src/java/org/apache/log4j/chainsaw/vfs
                        DirectoryListTableModel.java
  Log:
  Implemented SortTableModel for extra sort goodness.  Hmmm... Sortable...
  
  Revision  Changes    Path
  1.3       +81 -2     
logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/DirectoryListTableModel.java
  
  Index: DirectoryListTableModel.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/DirectoryListTableModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DirectoryListTableModel.java      20 May 2004 03:58:08 -0000      1.2
  +++ DirectoryListTableModel.java      21 May 2004 04:23:23 -0000      1.3
  @@ -3,6 +3,8 @@
   import java.text.NumberFormat;
   import java.util.ArrayList;
   import java.util.Collection;
  +import java.util.Collections;
  +import java.util.Comparator;
   import java.util.Date;
   import java.util.List;
   
  @@ -10,6 +12,7 @@
   
   import org.apache.commons.vfs.FileObject;
   import org.apache.commons.vfs.FileSystemException;
  +import org.apache.log4j.chainsaw.SortTableModel;
   import org.apache.log4j.helpers.LogLog;
   
   /**=
  @@ -17,12 +20,18 @@
    * @author psmith
    *
    */
  -public class DirectoryListTableModel extends AbstractTableModel {
  +public class DirectoryListTableModel extends AbstractTableModel implements 
SortTableModel{
        
        private final String[] COLUMN_NAMES = new String[] {"Name", "Size", "Last 
Modified"};
        
        private List data = new ArrayList();
        private NumberFormat nf = NumberFormat.getIntegerInstance();
  +
  +     private int currentSortColumn;
  +
  +     private boolean currentSortAscending;
  +
  +     private boolean sortEnabled;
        
        
        /* (non-Javadoc)
  @@ -99,7 +108,7 @@
         * @return
         */
        private Object formatFileSize(double size) {
  -             // TODO format should come from a preference model
  +//           // TODO format should come from a preference model
                if(size <1024) {
                        return nf.format(size);
                }else if(size < 1024*1024) {
  @@ -123,6 +132,7 @@
        public void setFiles(Collection objects) {
                this.data.clear();
                this.data.addAll(objects);
  +        sort();
                fireTableDataChanged();
        }
        
  @@ -141,5 +151,74 @@
                super();
                nf.setGroupingUsed(true);
                nf.setMaximumFractionDigits(2);
  +     }
  +
  +     /* (non-Javadoc)
  +      * @see org.apache.log4j.chainsaw.SortTableModel#sortColumn(int, boolean)
  +      */
  +     public void sortColumn(int col, boolean ascending) {
  +             this.currentSortColumn = col;
  +        this.currentSortAscending = ascending;
  +        this.sortEnabled = true;
  +        sort();
  +     }
  +
  +     /* (non-Javadoc)
  +      * @see org.apache.log4j.chainsaw.SortTableModel#sort()
  +      */
  +     public void sort() {
  +           if (isSortEnabled()) {
  +              synchronized (data) {
  +                Collections.sort(
  +                  data,new Comparator() {
  +
  +                                     public int compare(Object o1, Object o2) {
  +                        FileObject fo1 = (FileObject) o1;
  +                        FileObject fo2 = (FileObject) o2;
  +                        int sort = 0;
  +                        try {
  +                                                     switch (currentSortColumn) {
  +                                                             case 0 :
  +                                                                     sort = fo1
  +                                                                                    
 .getName()
  +                                                                                    
 .getBaseName()
  +                                                                                    
 .compareTo(
  +                                                                                    
                 fo2.getName().getBaseName());
  +                                    break;
  +                                                             case 1 :
  +                                                                     sort = new 
Long(fo1.getContent().getSize())
  +                                                                                    
 .compareTo(new Long(fo2
  +                                                                                    
                 .getContent().getSize()));
  +                                    break;
  +                                case 2:
  +                                    sort = new 
Long(fo1.getContent().getLastModifiedTime()).compareTo(new 
Long(fo2.getContent().getLastModifiedTime()));
  +                                    break;
  +                                                     }
  +                                             } catch (Exception e) {
  +                            LogLog.error("Error during sort", e);
  +                            sort = -1;
  +                                             }
  +                        sort = (currentSortAscending)?sort:-sort;
  +                        return sort;
  +                                     }});
  +              }
  +
  +              fireTableRowsUpdated(0, Math.max(data.size() - 1, 0));
  +            }                
  +     }
  +
  +     /* (non-Javadoc)
  +      * @see org.apache.log4j.chainsaw.SortTableModel#isSortable(int)
  +      */
  +     public boolean isSortable(int col) {
  +//        TODO should all columns be sorted?  I think so...
  +             return true;
  +     }
  +
  +     /* (non-Javadoc)
  +      * @see org.apache.log4j.chainsaw.SortTableModel#isSortEnabled()
  +      */
  +     public boolean isSortEnabled() {
  +             return sortEnabled;
        }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to