com.jidesoft.plaf.basic.BasicFileSystemTreeNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* @(#)FileTreeNode.java 10/9/2005
*
* Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.plaf.basic;
import com.jidesoft.swing.FolderChooser;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
class BasicFileSystemTreeNode extends LazyMutableTreeNode implements Comparable {
private FolderChooser _folderChooser;
private File _file;
static HashMap _icons = new HashMap();
static HashMap _nodes = new HashMap();
protected BasicFileSystemTreeNode(File file) {
this(file, null);
}
protected BasicFileSystemTreeNode(File file, FolderChooser folderChooser) {
_file = file;
_folderChooser = folderChooser;
}
@Override
public boolean isLeaf() {
if (!isLoaded()) {
return false;
}
else {
return super.isLeaf();
}
}
public boolean hasChildren() {
if (!_loaded) {
if (BasicFolderChooserUI.isFileSystem(_file) && _file.isDirectory()) {
File[] files = _folderChooser.getFileSystemView().getFiles(_file, _folderChooser.isFileHidingEnabled());
for (File file : files) {
if (file.isDirectory()) {
return true;
}
}
_loaded = true; // no children so it is loaded
}
return false;
}
else {
return getChildCount() != 0;
}
}
@Override
protected void initChildren() {
if (_folderChooser == null) {
return;
}
if (_file.isDirectory()) {
File[] files = new File[0];
try {
files = _folderChooser.getFileSystemView().getFiles(_file, _folderChooser.isFileHidingEnabled());
ArrayList folders = new ArrayList();
for (File file : files) {
if (file.isDirectory()) {
folders.add(file);
}
}
files = folders.toArray(new File[folders.size()]);
Comparator comparator = _folderChooser.getFileComparator();
if (comparator != null) {
Arrays.sort(files, comparator);
}
else {
Arrays.sort(files);
}
}
catch (Error e) {
// catch error like java.lang.InternalError: Unable to bind C:\blah blah\::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{3D6BE802-FC0D-4595-A304-E611F97089DC} to parent
}
catch (Exception e) {
}
for (File file : files) {
BasicFileSystemTreeNode fileTreeNode = BasicFileSystemTreeNode.createFileSystemTreeNode(file, _folderChooser);
add(fileTreeNode);
}
}
}
public File getFile() {
return _file;
}
public String getName() {
return getName(getFile());
}
public Icon getIcon() {
Icon icon = (Icon) _icons.get(this);
if (icon == null) {
icon = getIcon(getFile());
_icons.put(this, icon);
return icon;
}
else {
return icon;
}
}
public String getTypeDescription() {
String desc = getTypeDescription(getFile());
return desc == null ? "" : desc;
}
public Icon getIcon(File file) {
return _folderChooser.getFileSystemView().getSystemIcon(file);
}
public String getTypeDescription(File file) {
return _folderChooser.getFileSystemView().getSystemTypeDescription(file);
}
public String getName(File file) {
return _folderChooser.getFileSystemView().getSystemDisplayName(file);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final BasicFileSystemTreeNode that = (BasicFileSystemTreeNode) o;
return !(_file != null ? !_file.equals(that._file) : that._file != null);
}
public int compareTo(Object o) {
if (!(o instanceof BasicFileSystemTreeNode)) {
return 0;
}
return getFile().compareTo(((BasicFileSystemTreeNode) o).getFile());
}
@Override
public int hashCode() {
return (_file != null ? _file.hashCode() : 0);
}
public boolean canEnqueue() {
return !isLoaded()
&& !_folderChooser.getFileSystemView().isFloppyDrive(getFile())
&& !_folderChooser.getFileSystemView().isFileSystemRoot(getFile());
}
@Override
public String toString() {
return _file != null ? _file.toString() : "null";
}
/**
* Caches the tree nodes ever created for the performance.
*
* @param file
* @param folderChooser
*
* @return tree node. If it is created before, returns the previous created instance.
*/
public static BasicFileSystemTreeNode createFileSystemTreeNode(File file, FolderChooser folderChooser) {
BasicFileSystemTreeNode node = (BasicFileSystemTreeNode) _nodes.get(file);
if (node == null) {
node = new BasicFileSystemTreeNode(file, folderChooser);
_nodes.put(file, node);
}
return node;
}
/**
* Clears the cache of all the tree nodes.
*/
public static void clearCache() {
_nodes.clear();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy