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