Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.lib / src / main / java / org / gvsig / tools / util / impl / DefaultFolderSet.java @ 706

History | View | Annotate | Download (5.12 KB)

1
package org.gvsig.tools.util.impl;
2

    
3
import java.io.File;
4
import java.io.FileFilter;
5
import java.io.FilenameFilter;
6
import java.io.IOException;
7
import java.util.ArrayList;
8
import java.util.Arrays;
9
import java.util.Iterator;
10
import java.util.LinkedHashSet;
11
import java.util.List;
12
import java.util.Set;
13

    
14
import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
15
import org.gvsig.tools.util.FolderSet;
16

    
17
public class DefaultFolderSet extends BaseWeakReferencingObservable implements
18
                FolderSet {
19

    
20
        public class DefaultFolderEntry implements FolderEntry {
21
                File folder;
22
                String label;
23

    
24
                DefaultFolderEntry(File folder, String label) {
25
                        this.folder = folder;
26
                        this.label = label;
27
                }
28

    
29
                public boolean equals(Object obj) {
30
                        return this.folder.equals(((FolderEntry) obj).getFolder());
31
                }
32

    
33
                public int hashCode() {
34
                        return this.folder.hashCode();
35
                }
36

    
37
                public File getFolder() {
38
                        return this.folder;
39
                }
40

    
41
                public String getLabel() {
42
                        return this.label;
43
                }
44
        }
45

    
46
        private Set folders = null;
47
        private File defaultFolder = null;
48

    
49
        public DefaultFolderSet() {
50
                folders = new LinkedHashSet();
51
        }
52

    
53
        public void add(File folder) {
54
                this.add(folder, null);
55
        }
56

    
57
        public void add(File folder, String description) {
58
                if (folder == null) {
59
                        return;
60
                }
61
                if (folder.exists() && !folder.isDirectory()) {
62
                        throw new IllegalArgumentException("folder required");
63
                }
64
                this.folders.add(new DefaultFolderEntry(folder, description));
65
                if( this.defaultFolder == null ) {
66
                        this.defaultFolder = folder;
67
                }
68
                 this.notifyObservers();
69
        }
70

    
71
        public void clear() {
72
                this.folders.clear();
73
                this.defaultFolder = null;
74
                this.notifyObservers();
75
        }
76

    
77
        public void remove(File folder) {
78
                if (folder != null) {
79
                        this.folders.remove(new DefaultFolderEntry(folder, null));
80
                        if (folder.equals(this.defaultFolder)) {
81
                                this.defaultFolder = null;
82
                        }
83
                        this.notifyObservers();
84
                }
85
        }
86

    
87
        public void set(File folder) {
88
                this.beginComplexNotification();
89
                this.clear();
90
                this.setDefaultFolder(folder);
91
                this.endComplexNotification();
92
        }
93

    
94
        public File[] listFiles() {
95
                List entries = new ArrayList();
96
                Iterator it = this.folders.iterator();
97
                while (it.hasNext()) {
98
                        FolderEntry folderEntry = (FolderEntry) it.next();
99
                        File[] files = folderEntry.getFolder().listFiles();
100
                        entries.addAll(Arrays.asList(files));
101
                }
102
                return (File[]) entries.toArray();
103
        }
104

    
105
        public File[] listFiles(FileFilter filter) {
106
                List entries = new ArrayList();
107
                Iterator it = this.folders.iterator();
108
                while (it.hasNext()) {
109
                        FolderEntry folderEntry = (FolderEntry) it.next();
110
                        File[] files = folderEntry.getFolder().listFiles(filter);
111
                        entries.addAll(Arrays.asList(files));
112
                }
113
                return (File[]) entries.toArray();
114
        }
115

    
116
        public File[] listFiles(FilenameFilter filter) {
117
                List entries = new ArrayList();
118
                Iterator it = this.folders.iterator();
119
                while (it.hasNext()) {
120
                        FolderEntry folderEntry = (FolderEntry) it.next();
121
                        File[] files = folderEntry.getFolder().listFiles(filter);
122
                        entries.addAll(Arrays.asList(files));
123
                }
124
                return (File[]) entries.toArray();
125
        }
126

    
127
        public Iterator iterator() {
128
                return this.folders.iterator();
129
        }
130

    
131
        public void setDefaultFolder(File defaultFolder) {
132
                this.add(defaultFolder);
133
                this.defaultFolder = defaultFolder;
134
        }
135

    
136
        public File getDefaultFolder() {
137
                if( this.defaultFolder == null ) {
138
                        Iterator it = this.folders.iterator();
139
                        if( it.hasNext() ) {
140
                                this.defaultFolder = (File) it.next();
141
                        }
142
                }
143
                return this.defaultFolder;
144
        }
145
        
146
        public File asFile() {
147
                return getDefaultFolder();
148
        }
149
        
150
        public String[] list() {
151
                List entries = new ArrayList();
152
                Iterator it = this.folders.iterator();
153
                while (it.hasNext()) {
154
                        FolderEntry folderEntry = (FolderEntry) it.next();
155
                        String[] files = folderEntry.getFolder().list();
156
                        entries.addAll(Arrays.asList(files));
157
                }
158
                return (String[]) entries.toArray();
159
        }
160
        
161
        public String[] list(FilenameFilter filter) {
162
                List entries = new ArrayList();
163
                Iterator it = this.folders.iterator();
164
                while (it.hasNext()) {
165
                        FolderEntry folderEntry = (FolderEntry) it.next();
166
                        String[] files = folderEntry.getFolder().list(filter);
167
                        entries.addAll(Arrays.asList(files));
168
                }
169
                return (String[]) entries.toArray();
170
        }
171

    
172
        public boolean isDirectory() {
173
                return true;
174
        }
175

    
176
        public boolean isFile() {
177
                return false;
178
        }
179

    
180
        public String getName() {
181
                return this.getDefaultFolder().getName();
182
        }
183

    
184
        public String getParent() {
185
                return this.getDefaultFolder().getParent();
186
        }
187

    
188
        public File getParentFile() {
189
                return this.getDefaultFolder().getParentFile();
190
        }
191

    
192
        public String getPath() {
193
                return this.getDefaultFolder().getPath();
194
        }
195

    
196
        public File getCanonicalFile() throws IOException {
197
                return this.getDefaultFolder().getCanonicalFile();
198
        }
199

    
200
        public String getCanonicalPath() throws IOException {
201
                return this.getDefaultFolder().getCanonicalPath();
202
        }
203

    
204
        public boolean canRead() {
205
                return this.getDefaultFolder().canRead();
206
        }
207

    
208
        public boolean canWrite() {
209
                return this.getDefaultFolder().canWrite();
210
        }
211

    
212
        public boolean exists() {
213
                return this.getDefaultFolder().exists();
214
        }
215

    
216
        public File getAbsoluteFile() {
217
                return this.getDefaultFolder().getAbsoluteFile();
218
        }
219

    
220
        public String getAbsolutePath() {
221
                return this.getDefaultFolder().getAbsolutePath();
222
        }
223
}