1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.jguiraffe.examples.tutorial.mainwnd;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.List;
22
23 import net.sf.jguiraffe.examples.tutorial.model.DirectoryData;
24 import net.sf.jguiraffe.examples.tutorial.model.FileData;
25 import net.sf.jguiraffe.examples.tutorial.viewset.ViewSettings;
26 import net.sf.jguiraffe.gui.builder.components.model.TreeNodePath;
27 import net.sf.jguiraffe.gui.cmd.CommandBase;
28
29 import org.apache.commons.configuration.HierarchicalConfiguration;
30 import org.apache.commons.configuration.tree.ConfigurationNode;
31 import org.apache.commons.configuration.tree.DefaultConfigurationKey;
32 import org.apache.commons.configuration.tree.DefaultConfigurationNode;
33 import org.apache.commons.configuration.tree.DefaultExpressionEngine;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 class ReadDirectoryCommand extends CommandBase
49 {
50
51 private final DirectoryData directoryData;
52
53
54 private final MainWndController controller;
55
56
57 private final TreeNodePath currentPath;
58
59
60 private List<ConfigurationNode> nodes;
61
62
63 private ViewSettings directorySettings;
64
65
66
67
68
69
70
71
72 public ReadDirectoryCommand(MainWndController ctrl, TreeNodePath p)
73 {
74 super(true);
75 directoryData = (DirectoryData) p.getTargetNode().getValue();
76 controller = ctrl;
77 currentPath = p;
78 }
79
80
81
82
83
84
85 @Override
86 public void execute() throws Exception
87 {
88 directorySettings = ViewSettings.forDirectory(directoryData
89 .getDirectory());
90
91 File[] content = directoryData.getDirectory().listFiles(
92 directorySettings.createFileFilter());
93 if (content != null)
94 {
95 nodes = new ArrayList<ConfigurationNode>(content.length);
96 List<FileData> data = new ArrayList<FileData>(content.length);
97
98 for (File f : content)
99 {
100 Object icon;
101 if (f.isDirectory())
102 {
103 DefaultConfigurationNode nd = new DefaultConfigurationNode(
104 f.getName(), new DirectoryData(f));
105 nodes.add(nd);
106 icon = controller.getIconDirectory();
107 }
108 else
109 {
110 icon = controller.getIconFile();
111 }
112 data.add(new FileData(f, icon));
113 }
114
115 Collections.sort(data, directorySettings.createComparator());
116 directoryData.setContent(data);
117 }
118
119 else
120 {
121 directoryData.setContent(new ArrayList<FileData>(0));
122 }
123 }
124
125
126
127
128
129 @Override
130 protected void performGUIUpdate()
131 {
132 if (nodes != null)
133 {
134 HierarchicalConfiguration model = controller.getTreeModel();
135
136
137 DefaultConfigurationKey key = new DefaultConfigurationKey(
138 (DefaultExpressionEngine) model.getExpressionEngine());
139 currentPath.pathToKey(key);
140
141
142 model.addNodes(key.toString(), nodes);
143 }
144
145
146 controller.getTree().setSelectedPath(currentPath);
147 controller.fillTable(directoryData, directorySettings);
148 }
149 }