View Javadoc
1 package net.sourceforge.pmd.swingui; 2 3 import javax.swing.event.TreeSelectionEvent; 4 import javax.swing.event.TreeSelectionListener; 5 import javax.swing.table.DefaultTableModel; 6 import javax.swing.tree.TreePath; 7 import java.io.File; 8 import java.io.FileFilter; 9 import java.io.FileInputStream; 10 import java.io.FileNotFoundException; 11 import java.io.IOException; 12 import java.io.InputStreamReader; 13 import java.text.DateFormat; 14 import java.text.DecimalFormat; 15 import java.text.DecimalFormatSymbols; 16 import java.util.Date; 17 import java.util.Vector; 18 19 /*** 20 * 21 * @author Donald A. Leckie 22 * @since August 17, 2002 23 * @version $Revision: 1.6 $, $Date: 2003/03/14 19:04:04 $ 24 */ 25 class DirectoryTableModel extends DefaultTableModel { 26 private DateFormat m_dateFormat; 27 private DecimalFormat m_decimalFormat; 28 private String m_fileExtension; 29 30 //Constants 31 protected static final int FILE_NAME_COLUMN = 0; 32 protected static final int FILE_SIZE_COLUMN = 1; 33 protected static final int FILE_LAST_MODIFIED_COLUMN = 2; 34 private final int FILE_COLUMN = 3; // not a visible column 35 36 /*** 37 ********************************************************************************* 38 * 39 */ 40 protected DirectoryTableModel(DirectoryTree directoryTree, String fileExtension) { 41 super(createData(), createColumnNames()); 42 43 DecimalFormatSymbols decimalFormatSymbols; 44 StringBuffer buffer; 45 String pattern; 46 47 m_fileExtension = fileExtension.toLowerCase(); 48 m_dateFormat = DateFormat.getDateTimeInstance(); 49 decimalFormatSymbols = new DecimalFormatSymbols(); 50 buffer = new StringBuffer(25); 51 52 buffer.append('#'); 53 buffer.append(decimalFormatSymbols.getGroupingSeparator()); 54 buffer.append('#'); 55 buffer.append('#'); 56 buffer.append(decimalFormatSymbols.getDigit()); 57 buffer.append(" lines"); 58 59 pattern = buffer.toString(); 60 m_decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols); 61 new DirectoryTreeSelectionListener(directoryTree); 62 } 63 64 /*** 65 ******************************************************************************** 66 * 67 * @return 68 */ 69 private static Vector createData() { 70 return new Vector(); 71 } 72 73 /*** 74 ******************************************************************************** 75 * 76 * @return 77 */ 78 private static Vector createColumnNames() { 79 Vector row = new Vector(2); 80 81 row.add("File Name"); 82 row.add("Size"); 83 row.add("Last Modified"); 84 85 return row; 86 } 87 88 /*** 89 ******************************************************************************** 90 * 91 * @return 92 */ 93 protected File getFile(int row) { 94 if ((row >= 0) && (row < getRowCount())) { 95 return (File) getValueAt(row, FILE_COLUMN); 96 } 97 98 return null; 99 } 100 101 /*** 102 ******************************************************************************* 103 * 104 * @param row 105 * @param column 106 * 107 * @return 108 */ 109 public boolean isCellEditable(int row, int column) { 110 return false; 111 } 112 113 /*** 114 ******************************************************************************* 115 ******************************************************************************* 116 ******************************************************************************* 117 */ 118 private class DirectoryTreeSelectionListener implements TreeSelectionListener { 119 120 /*** 121 ************************************************************************* 122 * 123 */ 124 private DirectoryTreeSelectionListener(DirectoryTree directoryTree) { 125 directoryTree.addTreeSelectionListener(this); 126 } 127 128 /*** 129 *************************************************************************** 130 * 131 * @param directoryTree 132 */ 133 public void valueChanged(TreeSelectionEvent event) { 134 TreePath treePath = event.getPath(); 135 DirectoryTreeNode treeNode = (DirectoryTreeNode) treePath.getLastPathComponent(); 136 Object userObject = treeNode.getUserObject(); 137 Vector rows = getDataVector(); 138 139 for (int n = 0; n < rows.size(); n++) { 140 ((Vector) rows.get(n)).clear(); 141 } 142 143 rows.clear(); 144 145 if (userObject instanceof File) { 146 File directory; 147 File[] files; 148 149 directory = (File) userObject; 150 files = directory.listFiles(new FilesFilter()); 151 152 if (files != null) { 153 for (int n1 = 0; n1 < files.length; n1++) { 154 Vector row = new Vector(3); 155 String fileName = files[n1].getName(); 156 int lineCount = countLines(files[n1]); 157 String size = m_decimalFormat.format(lineCount); 158 Date date = new Date(files[n1].lastModified()); 159 String lastModified = m_dateFormat.format(date); 160 161 row.add(fileName); 162 row.add(size); 163 row.add(lastModified); 164 row.add(files[n1]); 165 166 rows.add(row); 167 } 168 } 169 } 170 171 fireTableDataChanged(); 172 } 173 174 /*** 175 ************************************************************************** 176 * 177 * @param file 178 * 179 * @return 180 */ 181 private int countLines(File file) { 182 int lineCount = 0; 183 InputStreamReader reader = null; 184 185 try { 186 char[] buffer; 187 188 buffer = new char[10000]; 189 reader = new InputStreamReader(new FileInputStream(file)); 190 191 while (reader.ready()) { 192 int numberOfChars = reader.read(buffer); 193 194 for (int n = 0; n < numberOfChars; n++) { 195 if (buffer[n] == '\n') { 196 lineCount++; 197 } 198 } 199 } 200 } catch (FileNotFoundException exception) { 201 lineCount = 0; 202 } catch (IOException exception) { 203 lineCount = 0; 204 } finally { 205 if (reader != null) { 206 try { 207 reader.close(); 208 } catch (IOException exception) { 209 } 210 } 211 } 212 213 return lineCount; 214 } 215 } 216 217 /*** 218 ******************************************************************************* 219 ******************************************************************************* 220 ******************************************************************************* 221 */ 222 private class FilesFilter implements FileFilter { 223 224 public boolean accept(File file) { 225 if (file.isFile() && (file.isHidden() == false)) { 226 String fileName = file.getName().toLowerCase(); 227 228 return (fileName.endsWith(m_fileExtension)); 229 } 230 231 return false; 232 233 } 234 } 235 }

This page was automatically generated by Maven