/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.nbstudio.cachefilesystem;
import com.intersys.objects.Database;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileSystemView;
import org.nbstudio.cachefilechooser.CacheFileNameExtensionFilter;
import org.nbstudio.core.Connection;
/**
*
* @author daimor
*/
public class CacheFileSystemView extends FileSystemView {
private final Map<String, Database> connections = new HashMap<>();
private final Map<String, File> roots = new HashMap<>();
private FileFilter fileFilter = null;
private boolean showSystemFiles = false;
private boolean showGeneratedFiles = false;
private boolean showProjectFiles = false;
public CacheFileSystemView() {
Map<String, Connection> allConnections = Connection.getConnections();
for (Map.Entry<String, Connection> entry : allConnections.entrySet()) {
String connectionName = entry.getKey();
Connection connection = entry.getValue();
addRoot(connection.getAssociatedConnection(), connectionName);
}
}
public CacheFileSystemView(Database db, String rootName) throws IOException {
addRoot(db, rootName);
}
public final void addRoot(Database db, String rootName) {
connections.put(rootName, db);
roots.put(rootName, new CacheRootFile(rootName));
}
@Override
public File createNewFolder(File containingDir) throws IOException {
return null;
}
public CacheRootFile createFileObject(CacheRootFile dir, String filename) {
try {
return new CacheRootFile(dir.getPath() + "/" + filename);
} catch (Exception ex) {
return null;
}
}
@Override
public File getChild(File parent, String fileName) {
return getDefaultDirectory();
}
@Override
public boolean isFileSystem(File f) {
return false; //f.equals(root);
}
@Override
public File getParentDirectory(File dir) {
if (dir instanceof CacheRootFile) {
return dir.getParentFile();
} else {
return getDefaultDirectory();
}
}
@Override
public String getSystemDisplayName(File f) {
if (f instanceof CacheRootFile) {
return f.getName();
} else {
return super.getSystemDisplayName(f);
}
}
@Override
public File[] getFiles(File dir, boolean useFileHiding) {
if (dir instanceof CacheRootFile) {
String filterString = "";
if ((getFileFilter() != null) && (getFileFilter() instanceof CacheFileNameExtensionFilter)) {
filterString = ((CacheFileNameExtensionFilter) getFileFilter()).getFilterString();
}
return ((CacheRootFile) dir).listFiles(filterString, showSystemFiles, showGeneratedFiles, showProjectFiles);
} else {
return new File[]{};
}
}
@Override
public boolean isRoot(File f) {
return roots.containsValue(f);
}
@Override
public File[] getRoots() {
return roots.values().toArray(new File[roots.values().size()]);
}
@Override
public File getDefaultDirectory() {
Collection<File> rootsList = this.roots.values();
if (rootsList.size() > 0) {
return rootsList.toArray(new File[rootsList.size()])[0];
} else {
return null;
}
}
@Override
public Boolean isTraversable(File f) {
boolean res;
try {
CacheRootFile file = (CacheRootFile) f;
res = file.isDirectory();
} catch (Exception ex) {
res = false;
}
return res;
}
@Override
protected File createFileSystemRoot(File f) {
return f;
}
public FileFilter getFileFilter() {
return fileFilter;
}
public void setFileFilter(FileFilter fileFilter) {
this.fileFilter = fileFilter;
}
public void setShowSystemFiles(boolean showSystemFiles) {
this.showSystemFiles = showSystemFiles;
}
public void setShowGeneratedFiles(boolean showGeneratedFiles) {
this.showGeneratedFiles = showGeneratedFiles;
}
public boolean getShowSystemFiles() {
return this.showSystemFiles;
}
public boolean getShowGeneratedFiles() {
return this.showGeneratedFiles;
}
public void setShowProjectFiles(boolean showProjectFiles) {
this.showProjectFiles = showProjectFiles;
}
public boolean getShowProjectFiles(){
return showProjectFiles;
}
}