package challengetask.group02.fsstructure;
import net.tomp2p.peers.Number160;
import java.util.Hashtable;
public class Directory extends Entry{
private Hashtable<String, Number160> fileChildren;
private Hashtable<String, Number160> dirChildren;
private static final long serialVersionUID = 1L;
public Directory(Number160 ID, String entryName) {
this.type = TYPE.DIRECTORY;
this.ID = ID;
this.entryName = entryName;
fileChildren = new Hashtable<>();
dirChildren = new Hashtable<>();
}
//Distinguishing between files and directories
public void addChild(String name, Number160 ID, TYPE type) {
if(type.equals(TYPE.FILE)) {
fileChildren.put(name, ID);
} else if (type.equals(TYPE.DIRECTORY)) {
dirChildren.put(name, ID);
}
}
public Number160 getChild(String name) {
return getChildren().get(name);
}
public Number160 getChild(String name, TYPE type) {
if(type.equals(TYPE.FILE)){
return fileChildren.get(name);
} else if(type.equals(TYPE.DIRECTORY)) {
return dirChildren.get(name);
}
return null;
}
public Hashtable<String, Number160> getChildren() {
Hashtable<String, Number160> allChildren = new Hashtable<>();
allChildren.putAll(fileChildren);
allChildren.putAll(dirChildren);
return allChildren;
}
//Overloading
public Hashtable<String, Number160> getChildren(TYPE type) {
if(type.equals(TYPE.FILE)) {
return fileChildren;
} else if(type.equals(TYPE.DIRECTORY)) {
return dirChildren;
}
return null;
}
public void removeChildren() {
fileChildren.clear();
dirChildren.clear();
}
public void renameChild(String oldName, String newName) {
if (fileChildren.containsKey(oldName)) {
Number160 value = fileChildren.remove(oldName);
fileChildren.put(newName, value);
}
if (dirChildren.containsKey(oldName)) {
Number160 value = dirChildren.remove(oldName);
dirChildren.put(newName, value);
}
}
public void removeChild(String name) {
fileChildren.remove(name);
dirChildren.remove(name);
}
}