1
2
3
4
5
6
7 package twcsckernel.clientKernel.utils.fileChooserClasses;
8
9 import java.io.IOException;
10 import java.rmi.RemoteException;
11 import java.util.ArrayList;
12 import java.util.regex.Pattern;
13
14 import javax.swing.table.AbstractTableModel;
15 import javax.swing.table.TableModel;
16
17 import twcsckernel.clientKernel.utils.CommonVariablesContainer;
18 import twcsckernel.projectbase.io.FileDescriptor;
19 import twcsckernel.projectbase.io.ItemNotFoundException;
20 import twcsckernel.projectbase.io.RemoteFile;
21
22 /***
23 * Implementation of a {@link TableModel} representing a filesystem. The table
24 * model should contain at least the following columns:
25 * <ol>
26 * <li>file name</li>
27 * <li>file extension (or <dir> for folders)</li>
28 * <li>file size (or empty for folders)</li>
29 * </ol>
30 * @author VMD Group
31 */
32
33 public final class FileSystemModel extends AbstractTableModel {
34
35 private static final long serialVersionUID = 1369681020825310841L;
36
37 /***
38 * Currently modelled folder.
39 */
40 private String filterRegExp;
41
42 private String currentDir;
43
44 private FileDescriptor[] filelist;
45
46 private ArrayList<FileDescriptor>filteredFileList = new ArrayList<FileDescriptor>();
47
48 private static final String[] columnName = new String[] { "name", "ext.",
49 "size" };
50
51
52
53 public FileSystemModel(String currentDir, String regExp) {
54 filterRegExp = regExp;
55 this.currentDir=FileSystemUtils.preparePath(currentDir);
56 list();
57 filter();
58 }
59
60 public int getRowCount() {
61 return filteredFileList.size();
62 }
63
64 public int getColumnCount() {
65 return 3;
66 }
67
68 public String getColumnName(int columnIndex) {
69 return columnName[columnIndex];
70 }
71
72 public Class<?> getColumnClass(int columnIndex) {
73
74 return String.class;
75 }
76
77 public Object getValueAt(int rowIndex, int columnIndex) {
78
79 String value = new String();
80 switch (columnIndex) {
81 case 0:
82 if (!filteredFileList.get(rowIndex).isFile()) {
83 value = filteredFileList.get(rowIndex).getName();
84 } else {
85 value = FileSystemUtils.fileNameWhitoutExt(filteredFileList.get(rowIndex).getName());
86 }
87 break;
88
89 case 1:
90 if (!filteredFileList.get(rowIndex).isFile()) {
91 value = "<dir>";
92 } else {
93 value = FileSystemUtils.fileNameExt(filteredFileList.get(rowIndex).getName());
94 }
95
96 break;
97
98 case 2:
99 if (!filteredFileList.get(rowIndex).isFile()) {
100 value = "0";
101 } else {
102 value = Long.toString(filteredFileList.get(rowIndex).getLength());
103 }
104 }
105
106 return value;
107 }
108
109
110 public FileDescriptor getSelectedFiles(int selectedRow) {
111 return filteredFileList.get(selectedRow);
112
113
114
115 }
116
117 public String getCurrentDir() {
118 return currentDir;
119 }
120
121 public void setCurrentDir(String curDir) {
122 currentDir = FileSystemUtils.preparePath(curDir);
123 }
124 public void list(){
125 FileDescriptor tempList[];
126 int destIndex=0;
127 try {
128 RemoteFile remoteFile = CommonVariablesContainer.rff.newRemoteFile(currentDir);
129 tempList = remoteFile.list();
130 remoteFile.disposeFileHandle();
131 if (currentDir.equals("/")){
132 filelist = new FileDescriptor[tempList.length];
133 }else{
134 filelist = new FileDescriptor[tempList.length+1];
135 filelist[0]=new FileDescriptor("..", currentDir.concat("/.."), 0, false, false, 0);
136 destIndex++;
137 }
138 System.arraycopy(tempList, 0, filelist, destIndex, tempList.length);
139
140 } catch (SecurityException e) {
141
142 e.printStackTrace();
143 } catch (RemoteException e) {
144
145 e.printStackTrace();
146 } catch (ItemNotFoundException e) {
147
148 e.printStackTrace();
149 } catch (IOException e) {
150
151 e.printStackTrace();
152 }
153
154 }
155
156 public String getFilterRegExp() {
157 return filterRegExp;
158 }
159
160 public void setFilterRegExp(String filterRegExp) {
161 this.filterRegExp = filterRegExp;
162 }
163
164 public void filter(){
165 filteredFileList.clear();
166 for (FileDescriptor fd : filelist){
167 if (fd.isFile() && Pattern.matches(filterRegExp, fd.getName())){
168 filteredFileList.add(fd);
169 }
170 else if (!fd.isFile()){
171 filteredFileList.add(fd);
172 }
173 }
174
175 fireTableDataChanged();
176 }
177
178
179 }