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

View differences:

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

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

  
16
public class DefaultFolderSet extends BaseWeakReferencingObservable implements FolderSet {
17
public class DefaultFolderSet extends BaseWeakReferencingObservable implements
18
		FolderSet {
17 19

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

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

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

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

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

  
35 41
		public String getLabel() {
36 42
			return this.label;
37 43
		}
38 44
	}
39
	
45

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

  
42
	
43 49
	public DefaultFolderSet() {
44
		folders = new HashSet();
50
		folders = new LinkedHashSet();
45 51
	}
46
	
52

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

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

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

  
67 77
	public void remove(File folder) {
68
		this.folders.remove(new DefaultFolderEntry(folder,null));
69
		this.notifyObservers();
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
		}
70 85
	}
71 86

  
72 87
	public void set(File folder) {
73 88
		this.beginComplexNotification();
74 89
		this.clear();
75
		this.add(folder);
90
		this.setDefaultFolder(folder);
76 91
		this.endComplexNotification();
77 92
	}
78
	
93

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

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

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

  
112 127
	public Iterator iterator() {
113 128
		return this.folders.iterator();
114 129
	}
115 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
	}
116 223
}

Also available in: Unified diff