Entry.java:
package gendwang.cisco.com; public abstract class Entry { private int height = 0; private String name; private Type type; public Entry(String name) { this.name = name; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } public abstract void print(); }
File.java:
package gendwang.cisco.com; public class File extends Entry { public File(String name) { super(name); setType(Type.File); } public void print() { int numOfWhiteSpace = getHeight() * 2; for(int i = 0; i < numOfWhiteSpace; i++) { System.out.print(" "); } System.out.println(getName()); } }
Directory.java:
package gendwang.cisco.com; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Directory extends Entry { private List<Entry> list = new LinkedList<Entry>(); public Directory(String name) { super(name); setType(Type.Directory); } public void addEntry(Entry entry) { int myHeight = getHeight(); incrementHeight(entry, myHeight + 1); list.add(entry); } public List<Entry> getChilden() { return list; } public void print() { int numOfWhiteSpace = getHeight() * 2; for(int i = 0; i < numOfWhiteSpace; i++) { System.out.print(" "); } System.out.println(getName()); Iterator<Entry> itor = list.iterator(); while(itor.hasNext()) { Entry entry = itor.next(); entry.print(); } } private void incrementHeight(Entry entry, int added) { int height = entry.getHeight(); entry.setHeight(height + added); if(entry.getType() == Type.Directory) { Directory dir = (Directory)entry; List<Entry> list = dir.getChilden(); Iterator<Entry> itor = list.iterator(); while(itor.hasNext()) { Entry tmp = itor.next(); incrementHeight(tmp, added); } } } }
Type.java:
package gendwang.cisco.com; public enum Type { File, Directory }
Test.java:
package gendwang.cisco.com; public class Test { public static void main(String[] args) { Directory dir1 = new Directory("tmp"); Entry file1 = new File("hello.jpg"); Entry file2 = new File("install.log"); dir1.addEntry(file1); dir1.addEntry(file2); Directory dir2 = new Directory("system"); Directory dir3 = new Directory("windows"); dir3.addEntry(dir1); dir3.addEntry(dir2); Directory dir4 = new Directory("root"); Entry file3 = new File("password"); dir4.addEntry(file3); dir4.addEntry(dir3); dir4.print(); } }