View Javadoc

1   /*
2    * FileSystemModel.java
3    *
4    * Created on 27 styczeń 2006, 21:48
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 &lt;dir&gt; for folders)</li>
28   * <li>file size (or empty for folders)</li>
29   * </ol>
30   * @author VMD Group
31   */
32  // implements TableModel
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      //private final List listeners = new ArrayList();
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) { // Class<?>
73          // What are the types of values returned for each column?
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 			// TODO Auto-generated catch block
142 			e.printStackTrace();
143 		} catch (RemoteException e) {
144 			// TODO Auto-generated catch block
145 			e.printStackTrace();
146 		} catch (ItemNotFoundException e) {
147 			// TODO Auto-generated catch block
148 			e.printStackTrace();
149 		} catch (IOException e) {
150 			// TODO Auto-generated catch block
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 }