/*
* Scute
*
* Homepage: http://hyperdata.org/scute
*
* License : http://www.apache.org/licenses/LICENSE-2.0
* See also license.txt or http://hyperdata.org/wiki/Scute:License
*
* Danny Ayers 2011
*/
package org.hyperdata.scute.filemanager;
import java.io.File;
import java.io.FileFilter;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
/**
* The Class FileSystemModel.
*/
public class FilesTreeModel extends DefaultTreeModel {
private String rootString;
/**
* Instantiates a new file system model.
*
* @param startPath
* the start path
*/
public FilesTreeModel(String startPath) {
super(null);
// setRoot(new File(startPath)); // new DefaultMutableTreeNode(
rootString = startPath;
}
/*
* (non-Javadoc)
*
* @see javax.swing.tree.TreeModel#getRoot()
*/
@Override
public Object getRoot() {
return new File(rootString);
}
/*
* (non-Javadoc)
*
* @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int)
*/
@Override
public Object getChild(Object parent, int index) {
File directory = (File) parent;
String[] children;
children = FileComparator.getSortedChildrenNames(directory, filter);
return new File(directory, children[index]);
}
private FileFilter filter = new DefaultFileFilter();
public void setFilter(FileFilter filter){
this.filter = filter;
}
/*
* (non-Javadoc)
*
* @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
*/
@Override
public int getChildCount(Object parent) {
File fileItem = (File) parent;
if (fileItem.isDirectory()) {
if(filter != null){
return fileItem.listFiles(filter).length;
}
String[] children = fileItem.list();
return children.length;
} else {
return 0;
}
}
/*
* (non-Javadoc)
*
* @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object)
*/
@Override
public boolean isLeaf(Object node) {
return ((File) node).isFile();
// return !hasSubdirectories((File) node);
}
/**
* @param node
*/
private boolean hasSubdirectories(File file) {
if (file.isFile())
return false; // shouldn't be needed
File[] children;
if(filter != null){
children = file.listFiles(filter);
}else {
children = file.listFiles();
}
for (int i = 0; i < children.length; i++) {
if (children[i].isDirectory())
return true;
}
return false;
}
/*
* (non-Javadoc)
*
* @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,
* java.lang.Object)
*/
@Override
public int getIndexOfChild(Object parent, Object child) {
File directory = (File) parent;
File fileItem = (File) child;
String[] children = FileComparator.getSortedChildrenNames(directory, filter);
int result = -1;
for (int i = 0; i < children.length; ++i) {
if (fileItem.getName().equals(children[i])) {
result = i;
break;
}
}
return result;
}
/*
* (non-Javadoc)
*
* @see
* javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath,
* java.lang.Object)
*/
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
}
/**
* @param file
*/
public void addToPath(File file) {
//TreePath path = new TreePath(getPathToRoot(file));
//valueForPathChanged(path, file);
}
}