/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
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 FileSystemView ic_base;
    private String ic_homeDir;

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

    public void setHomeDir(String homeDir) {
        if(homeDir != null && !homeDir.isEmpty()) {
            ic_homeDir = homeDir;
        } else {
            ic_homeDir = null;
        }
    }
    
    public static synchronized WepsFileSystemView getDefault() {
        if (ic_default == null) {
            ic_default=new WepsFileSystemView();
        }
        return ic_default;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @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();
    }

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

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

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

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

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

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