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]