1 |
| package photospace.vfs; |
2 |
| |
3 |
| import java.io.*; |
4 |
| import java.util.*; |
5 |
| import org.apache.commons.logging.*; |
6 |
| import photospace.beans.*; |
7 |
| import photospace.meta.*; |
8 |
| |
9 |
| public class FileSystemBrowser |
10 |
| implements java.io.Serializable, Browser |
11 |
| { |
12 |
| private static final Log log = LogFactory.getLog(FileSystemBrowser.class); |
13 |
| |
14 |
| private FileSystem filesystem; |
15 |
| private Persister persister; |
16 |
| private FileFilter filter = new PhotoFileFilter(); |
17 |
| |
18 |
4
| public void setFilesystem(FileSystem filesystem)
|
19 |
| { |
20 |
4
| this.filesystem = filesystem;
|
21 |
| } |
22 |
| |
23 |
4
| public void setPersister(Persister persister)
|
24 |
| { |
25 |
4
| this.persister = persister;
|
26 |
| } |
27 |
| |
28 |
3
| public FolderMeta browse(String path, int depth)
|
29 |
| throws Exception |
30 |
| { |
31 |
3
| FolderMeta folder = browse(path, depth, 0);
|
32 |
3
| assignParents(folder);
|
33 |
3
| return folder;
|
34 |
| } |
35 |
| |
36 |
3
| private void assignParents(FolderMeta folder)
|
37 |
| throws Exception |
38 |
| { |
39 |
3
| File file = filesystem.getFile(folder.getPath());
|
40 |
3
| FolderMeta parent = null;
|
41 |
3
| FolderMeta child = folder;
|
42 |
3
| while (!file.equals(filesystem.getRoot()))
|
43 |
| { |
44 |
0
| file = file.getParentFile();
|
45 |
0
| parent = (FolderMeta) persister.getMeta(file);
|
46 |
0
| child.setParent(parent);
|
47 |
0
| child = parent;
|
48 |
| } |
49 |
| } |
50 |
| |
51 |
5
| private FolderMeta browse(String path, int depth, int current)
|
52 |
| throws Exception |
53 |
| { |
54 |
5
| File root = filesystem.getFile(path);
|
55 |
| |
56 |
5
| if (!root.isDirectory())
|
57 |
| { |
58 |
0
| path = path.substring(0, path.lastIndexOf(root.getName()));
|
59 |
0
| root = filesystem.getDirectory(path);
|
60 |
| } |
61 |
| |
62 |
5
| FolderMeta dir = (FolderMeta) persister.getMeta(root);
|
63 |
| |
64 |
2
| if (depth != -1 && current >= depth) return dir;
|
65 |
| |
66 |
3
| File[] files = root.listFiles(filter);
|
67 |
| |
68 |
3
| for (int i = 0; i < files.length; i++)
|
69 |
| { |
70 |
5
| try
|
71 |
| { |
72 |
5
| if (files[i].isDirectory())
|
73 |
| { |
74 |
2
| String subPath = path + files[i].getName() + "/";
|
75 |
2
| FolderMeta subDir = browse(subPath, depth, current + 1);
|
76 |
2
| subDir.setParent(dir);
|
77 |
2
| dir.addFile(subDir);
|
78 |
| } |
79 |
3
| else if (files[i].isFile())
|
80 |
| { |
81 |
3
| MediaMeta media = (MediaMeta) persister.getMeta(files[i]);
|
82 |
3
| media.setName(files[i].getName());
|
83 |
3
| media.setPath(path + files[i].getName());
|
84 |
3
| dir.addFile(media);
|
85 |
| } |
86 |
| } |
87 |
| catch (Exception e) |
88 |
| { |
89 |
0
| log.error("Exception fetching meta for " + files[i], e);
|
90 |
| } |
91 |
| } |
92 |
3
| dir.sortFiles(new CreatedComparator());
|
93 |
3
| return dir;
|
94 |
| } |
95 |
| |
96 |
| } |