/*
 * Created on 13.04.2005
 *
 * $Id$
 */
package dir;

import java.io.File;
import java.util.*;

public class Directory implements FileSystemComponent {
    
    private File dir = null;
    private Collection<FileSystemComponent> entries = null;

    public Directory(String name) {
        this(new File(name));
    }
    
    public Directory(File file) {
        this.dir = file;
        entries = new ArrayList<FileSystemComponent>();
        add(dir.listFiles());
    }

    public String getName() {
        return dir.getName();
    }

    public long getSize() {
        long size = 0;
        for (FileSystemComponent component : entries) {
            size += component.getSize();
        }
        return size;
    }

    private void add(File[] files) {
        for (int i = 0; i < files.length; i++) {
            add(files[i]);
        }
    }
    
    private void add(File file) {
        if (file.isDirectory()) {
            add(new Directory(file));
        } else {
            add(new FileComponent(file));
        }
    }
    
    public void add(FileSystemComponent component) {
        entries.add(component);
    }

    public void remove(FileSystemComponent component) {
        entries.remove(component);
    }

    public Collection<FileSystemComponent> getChildren() {
        return entries;
    }
    
    public String toString() {
        return toString("");
    }
    
    public String toString(String prefix) {
        StringBuffer sbuf = new StringBuffer(prefix + getName());
        sbuf.append(" (" + getSize() + " Bytes)");
        for (FileSystemComponent component : entries) {
            sbuf.append("\n" + component.toString(prefix + "    "));
        }
        return sbuf.toString();
    }
    
    /**
     * @param args
     * @author <a href="mailto:boehm@javatux.de">oliver</a>
     * @since  13.04.2005
     */
    public static void main(String[] args) {
        FileSystemComponent dir = new Directory(".");
        System.out.println(dir);
    }

}
