/*
* Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
import java.io.File;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JOptionPane;
/**
* JDIC API demo class.
* <p>
* A redefined MutableTreeNode class.
*/
class MyTreeNode extends DefaultMutableTreeNode {
private static String osName = System.getProperty("os.name").toLowerCase();
private boolean explored = false;
private void errorDisplayingPermission() {
JOptionPane.showMessageDialog(null,
"You do not have the permissions necessary to view the contents of \""
+ getFile() + "\"", "Error Displaying Folder",
JOptionPane.ERROR_MESSAGE);
}
private void errorDisplayingNoDisk() {
File currentFile = getFile();
String fileName = currentFile.getName();
String errorMsg =
"The file : "
+ fileName
+ " does not exist any"
+ " longer!";
if (osName.startsWith("windows")) {
//Windows platform, check if it's disk
File parentFile = currentFile.getParentFile();
if (currentFile.getParentFile() == null) {
//parent file is null, should be a disk
errorMsg = "Please insert disk into driver: " + currentFile;
}
}
JOptionPane.showMessageDialog(
null,
errorMsg,
"Error Displaying Folder",
JOptionPane.ERROR_MESSAGE);
}
// Assocoates a file object with this node.
public MyTreeNode(File file) {
setUserObject(file);
}
public boolean getAllowsChildren() {
return isDirectory();
}
public boolean isLeaf() {
return !isDirectory();
}
public File getFile() {
return (File) getUserObject();
}
public boolean isExplored() {
return explored;
}
public boolean isDirectory() {
File file = getFile();
return file.isDirectory();
}
public void explore() {
File file = getFile();
if (!isDirectory()) {
return;
}
//Check if the file exists
if (!file.exists()) {
errorDisplayingNoDisk();
return;
}
// Check if the file is readable.
if (!file.canRead()) {
errorDisplayingPermission();
return;
}
if (!isExplored()) {
File[] children = file.listFiles();
if (children != null) {
for (int i = 0; i < children.length; ++i) {
if (children[i].isDirectory()) {
add(new MyTreeNode(children[i]));
}
}
}
explored = true;
}
}
public String toString() {
File file = (File) getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator);
return (index != -1 && index != filename.length() - 1)
? filename.substring(index + 1)
: filename;
}
/**
* Gets the files and subdirectories under this file object.
*/
public int getChildrenCount() {
File file = getFile();
//Check if the file exists
if (!file.exists()) {
errorDisplayingNoDisk();
return 0;
}
if (!file.canRead()) {
errorDisplayingPermission();
return 0;
}
if (!isDirectory()) {
return 0;
} else {
File[] children = file.listFiles();
return (children != null) ? children.length : 0;
}
}
/**
* Gets size of this file object.
*/
public long getSize() {
File file = getFile();
if (!file.canRead()) {
return 0;
}
if (!isDirectory()) {
return (file.length());
}
File[] children = file.listFiles();
long size = 0;
if (children != null) {
for (int i = 0; i < children.length; ++i) {
size += children[i].length();
}
}
return size;
}
}