package usda.weru.util;

import java.io.File;
import java.io.IOException;
import javax.swing.Icon;
import javax.swing.filechooser.FileSystemView;

/**
 *
 * @author lrdinuki
 */
public class WepsFileSystemView extends FileSystemView {

    private static WepsFileSystemView ic_default;
    private final FileSystemView ic_base;
    private String ic_homeDir;

    /**
     *
     */
    public WepsFileSystemView() {
        ic_base = FileSystemView.getFileSystemView();
    }

    /**
     *
     * @param homeDir
     */
    public void setHomeDir(String homeDir) {
        if (homeDir != null && !homeDir.isEmpty()) {
            ic_homeDir = homeDir;
        } else {
            ic_homeDir = null;
        }
    }

    /**
     *
     * @return
     */
    public static synchronized WepsFileSystemView getDefault() {
        if (ic_default == null) {
            ic_default = new WepsFileSystemView();
        }
        return ic_default;
    }

    /**
     *
     * @param obj
     * @return
     */
    @Override
    public boolean equals(Object obj) {
        return ic_base.equals(obj);
    }

    /**
     *
     * @return
     */
    @Override
    public int hashCode() {
        return ic_base.hashCode();
    }

    /**
     *
     * @return
     */
    @Override
    public String toString() {
        return ic_base.toString();
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public Boolean isTraversable(File f) {
        return ic_base.isTraversable(f);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public boolean isRoot(File f) {
        return ic_base.isRoot(f);
    }

    /**
     *
     * @param folder
     * @param file
     * @return
     */
    @Override
    public boolean isParent(File folder, File file) {
        return ic_base.isParent(folder, file);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public boolean isHiddenFile(File f) {
        return ic_base.isHiddenFile(f);
    }

    /**
     *
     * @param dir
     * @return
     */
    @Override
    public boolean isFloppyDrive(File dir) {
        return ic_base.isFloppyDrive(dir);
    }

    /**
     *
     * @param dir
     * @return
     */
    @Override
    public boolean isFileSystemRoot(File dir) {
        return ic_base.isFileSystemRoot(dir);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public boolean isFileSystem(File f) {
        return ic_base.isFileSystem(f);
    }

    /**
     *
     * @param dir
     * @return
     */
    @Override
    public boolean isDrive(File dir) {
        return ic_base.isDrive(dir);
    }

    /**
     *
     * @param dir
     * @return
     */
    @Override
    public boolean isComputerNode(File dir) {
        return ic_base.isComputerNode(dir);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public String getSystemTypeDescription(File f) {
        return ic_base.getSystemTypeDescription(f);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public Icon getSystemIcon(File f) {
        return ic_base.getSystemIcon(f);
    }

    /**
     *
     * @param f
     * @return
     */
    @Override
    public String getSystemDisplayName(File f) {
        return ic_base.getSystemDisplayName(f);
    }

    /**
     *
     * @return
     */
    @Override
    public File[] getRoots() {
        return ic_base.getRoots();
    }

    /**
     *
     * @param dir
     * @return
     */
    @Override
    public File getParentDirectory(File dir) {
        return ic_base.getParentDirectory(dir);
    }

    /**
     *
     * @return
     */
    @Override
    public File getHomeDirectory() {
        if (ic_homeDir != null) {
            File f = new File(ic_homeDir);
            if (f != null && f.exists()) {
                return f;
            } else {
                return ic_base.getHomeDirectory();
            }
        }
        return ic_base.getHomeDirectory();
    }

    /**
     *
     * @param dir
     * @param useFileHiding
     * @return
     */
    @Override
    public File[] getFiles(File dir, boolean useFileHiding) {
        return ic_base.getFiles(dir, useFileHiding);
    }

    /**
     *
     * @return
     */
    @Override
    public File getDefaultDirectory() {
        return ic_base.getDefaultDirectory();
    }

    /**
     *
     * @param parent
     * @param fileName
     * @return
     */
    @Override
    public File getChild(File parent, String fileName) {
        return ic_base.getChild(parent, fileName);
    }

    /**
     *
     * @param dir
     * @param filename
     * @return
     */
    @Override
    public File createFileObject(File dir, String filename) {
        return ic_base.createFileObject(dir, filename);
    }

    /**
     *
     * @param path
     * @return
     */
    @Override
    public File createFileObject(String path) {
        return ic_base.createFileObject(path);
    }

    /**
     *
     * @param containingDir
     * @return
     * @throws IOException
     */
    @Override
    public File createNewFolder(File containingDir) throws IOException {
        return ic_base.createNewFolder(containingDir);
    }
}
