FileTreeModel.java :  » Blogger-System » thingamablog » net » sf » thingamablog » gui » app » Java Open Source

Java Open Source » Blogger System » thingamablog 
thingamablog » net » sf » thingamablog » gui » app » FileTreeModel.java
package net.sf.thingamablog.gui.app;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;


public class FileTreeModel implements TreeModel
{
    private File root;
    private FileFilter dirFilter = new DirOnlyFilter();
    private FileFilter fileFilter = new FileOnlyFilter();
    private Comparator fileComp = new FileComparator();
    
    public FileTreeModel(File root)
    {
        this.root = root;
    }

    public void addTreeModelListener(TreeModelListener l)
    {        

    }

    public Object getChild(Object parent, int index)
    {     
        List f = getChildren((File)parent);        
        return f.get(index);
    }

    public int getChildCount(Object parent)
    {
        File f = (File)parent;
        String ch[] = f.list();
        if(ch == null)
            return 0;
        
        return ch.length;
    }

    public int getIndexOfChild(Object parent, Object child)
    {        
        List files = getChildren((File)parent);        
        for(int i = 0; i < files.size(); i++)
            if(files.get(i) == child)
                return i;
        
        return 0;
    }
    
    private List getChildren(File dir)
    {
        List files = new ArrayList();
        List d = Arrays.asList(dir.listFiles(dirFilter));
        Collections.sort(d, fileComp);
        files.addAll(d);
        
        List f = Arrays.asList(dir.listFiles(fileFilter));
        Collections.sort(f, fileComp);
        files.addAll(f);
        
        return files;
    }

    public Object getRoot()
    {        
        return root;
    }

    public boolean isLeaf(Object node)
    {
        File f = (File)node;
        return f.isFile();
    }

    public void removeTreeModelListener(TreeModelListener l)
    {
        
    }

    public void valueForPathChanged(TreePath path, Object newValue)
    {        

    }
    
    private class DirOnlyFilter implements FileFilter
    {
        public boolean accept(File f)
        {            
            return f.isDirectory();
        }        
    }
    
    private class FileOnlyFilter implements FileFilter
    {
        public boolean accept(File f)
        {            
            return !f.isDirectory();
        }
    }
    
    private class FileComparator implements Comparator
    {
        public int compare(Object o1, Object o2)
        {            
            File f1 = (File)o1;
            File f2 = (File)o2;
            
            return f1.getName().compareTo(f2.getName());
        }        
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.