/home/gshute/netbeans/Toolkit/src/vfs/VFSDirectory.java |
package vfs;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
<p>
</p>
@author
public class VFSDirectory
implements VFSItem {
private String name;
private URL url;
private Map<String, VFSFile> files;
private Map<String, VFSDirectory> subdirectories;
protected void addSubdirectory(VFSDirectory dir) {
subdirectories.put(dir.getName(), dir);
}
protected VFSFile addFile(String nm) {
int slashPosition = nm.indexOf("/");
if (slashPosition < 0) {
VFSFile file = new VFSFile(nm, this);
files.put(nm, file);
return file;
}
if (slashPosition == nm.length() - 1) {
throw new IllegalArgumentException(
"Illegal file name: " + nm);
}
String childName = nm.substring(0, slashPosition);
VFSDirectory child = subdirectories.get(childName + "/");
return child.addFile(nm.substring(slashPosition + 1));
}
@param
public VFSDirectory(URL url) {
name = "/";
this.url = url;
files = new TreeMap<String, VFSFile>();
subdirectories = new TreeMap<String, VFSDirectory>();
}
@param
@param
public VFSDirectory(String nm, VFSDirectory par) {
name = nm;
if (par != null) {
try {
url = new URL(par.getURL(), nm);
} catch (MalformedURLException ex) {
throw new VFSError("Bad name: " + nm, ex);
}
}
files = new TreeMap<String, VFSFile>();
subdirectories = new TreeMap<String, VFSDirectory>();
}
public String getName() {
return name;
}
@return
public URL getURL() {
return url;
}
public boolean isRoot() {
return getName().equals("/");
}
@return
public VFSFile getFile(String nm) {
return files.get(nm);
}
@return
public Iterator<VFSFile> getFiles() {
return files.values().iterator();
}
@return
public Iterator<String> getFileNames() {
return files.keySet().iterator();
}
@return
public VFSDirectory getSubdirectory(String nm) {
return subdirectories.get(nm);
}
@return
public Iterator<VFSDirectory> getSubdirectories() {
return subdirectories.values().iterator();
}
@return
public Iterator<String> getSubdirectoryNames() {
return subdirectories.keySet().iterator();
}
public void escort(VFSVisitor v) {
v.enter(this);
for (VFSDirectory d : subdirectories.values()) {
d.escort(v);
}
for (VFSFile f : files.values()) {
v.visit(f);
}
v.leave(this);
}
}