/*
 * @(#)FileSystemModel.java 5/25/2012
 *
 * Copyright 2002 - 2012 JIDE Software Inc. All rights reserved.
 */

/**
 * Created with IntelliJ IDEA. User: JIDE-010 Date: 5/24/12 Time: 9:06 AM To change this template use File | Settings |
 * File Templates.
 */

import com.jidesoft.converter.ConverterContext;
import com.jidesoft.converter.ObjectConverter;
import com.jidesoft.utils.CacheMap;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import java.io.File;
import java.util.HashMap;

public class FileSystemModel implements TreeModel {
    private static File root;
    private static HashMap<String, File> _cache = new HashMap<String, File>();

    public FileSystemModel(File rootDirectory) {
        root = rootDirectory;
    }
    public Object getRoot() {
        return root;
    }
    public Object getChild(Object parent, int index) {
        File directory = (File) parent;
        File children = _cache.get(directory.toString() + String.valueOf(index));
        if ( children == null) {
            children = new File(directory, directory.list()[index]);
            _cache.put(directory+String.valueOf(index), children);
        }
        return children;
    }
    public int getChildCount(Object parent) {
        File file = (File) parent;
        if (file.isDirectory()) {
            String[] fileList = file.list();
            if (fileList != null)
                return file.list().length;
        }
        return 0;
    }
    public boolean isLeaf(Object node) {
        File file = (File) node;
        return file.isFile();
    }
    public int getIndexOfChild(Object parent, Object child) {
        File directory = (File) parent;
        File file = (File) child;
        String[] children = directory.list();
        for (int i = 0; i < children.length; i++) {
            if (file.getName().equals(children[i])) {
                return i;
            }
        }
        return -1;
    }
    public void valueForPathChanged(TreePath path, Object value) {
        System.out.println("valueForPathChanged(...)");
    }
    public void addTreeModelListener(TreeModelListener listener) {
        // do nothing: model never changes.
    }
    public void removeTreeModelListener(TreeModelListener listener) {
        // do nothing: model never changes.
    }
}