/*
* FileChooserBuilder.java
*
* created: 31.10.2011
* charset: UTF-8
* license: MIT (X11) (See LICENSE file for full license)
*/
package cz.mp.k3bg.gui.helper;
import cz.mp.k3bg.Application;
import cz.mp.k3bg.TextSource;
import static cz.mp.k3bg.TextSource.getLocText;
import cz.mp.k3bg.misc.DirectoryRestrictedFileSystemView;
import cz.mp.k3bg.misc.ExtFileFilter;
import cz.mp.util.FileUtils;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileSystemView;
/**
* Třída pro přípravu instance {@linkplain JFileChooser}.
*
* @author Martin Pokorný
* @version 0.1
* @see FileChooserField
*/
public class FileChooserBuilder {
protected JFileChooser fileChooser;
protected String rootDirPath = null;
static {
StandardDialogsLocaliser.localize(TextSource.MAIN);
}
// -----
/**
*
*/
public FileChooserBuilder() {
this(null);
}
/**
*
* @param rootDirPath
*/
public FileChooserBuilder(String rootDirPath) {
super();
fileChooser = new JFileChooser();
setDefaultChooserLabels();
setRootImpl(rootDirPath);
}
// -----
/**
* (vytvoří nový fileChooser)
*/
private void reinitFileChooser(FileSystemView fsv) {
String dialogTitle = fileChooser.getDialogTitle();
String approveButtonText = fileChooser.getApproveButtonText();
int selectionMode = fileChooser.getFileSelectionMode();
boolean multiSelection = fileChooser.isMultiSelectionEnabled();
FileFilter filter = fileChooser.getFileFilter();
FileFilter allFilter = fileChooser.getAcceptAllFileFilter();
if (fsv == null) {
fileChooser = new JFileChooser();
}
else {
fileChooser = new JFileChooser(fsv);
}
// nastaví nové instanci JFileChooser hodnoty z původní instance
fileChooser.setDialogTitle(dialogTitle);
fileChooser.setApproveButtonText(approveButtonText);
fileChooser.setFileSelectionMode(selectionMode);
fileChooser.setMultiSelectionEnabled(multiSelection);
if (filter != null && ! allFilter.equals(filter)) {
fileChooser.setFileFilter(filter);
fileChooser.setAcceptAllFileFilterUsed(false);
}
if (rootDirPath != null) {
fileChooser.setCurrentDirectory(new File(rootDirPath));
}
}
/**
*
* @param rootDirPath
*/
public void setRoot(String rootDirPath) {
setRootImpl(rootDirPath);
}
/**
*
* @param rootDirPath
*/
private void setRootImpl(String rootDirPath) {
if (rootDirPath == null) {
this.rootDirPath = null;
reinitFileChooser(null);
}
else {
this.rootDirPath = FileUtils.getAbsoluteFilePath(rootDirPath);
File dir = new File(this.rootDirPath);
if (dir.isDirectory()) {
FileSystemView fsv = new DirectoryRestrictedFileSystemView(dir);
reinitFileChooser(fsv);
}
else {
this.rootDirPath = null;
reinitFileChooser(null);
}
}
}
/**
*
*/
public void clear() {
if (rootDirPath != null) {
fileChooser.setCurrentDirectory(new File(rootDirPath));
}
}
/**
*
* @param selectionMode {@code JFileChooser.DIRECTORIES_ONLY}
* nebo {@code JFileChooser.FILES_ONLY}
* nebo {@code JFileChooser.FILES_AND_DIRECTORIES}
*/
public void setSelectionMode(int selectionMode) {
if (selectionMode != JFileChooser.DIRECTORIES_ONLY
&& selectionMode != JFileChooser.FILES_ONLY
&& selectionMode != JFileChooser.FILES_AND_DIRECTORIES) {
throw new IllegalArgumentException("bad selectionType");
}
setDefaultChooserLabels();
fileChooser.setFileSelectionMode(selectionMode);
}
/**
* Nastaví filtr definovaný seznamem přípon souboru a popisem filtru.
*
* @param baseDescription
* @param exts
*/
public void setFilter(String baseDescription, String... exts) {
ExtFileFilter filter = new ExtFileFilter(baseDescription, exts);
setFilter(filter);
}
/**
*
* @param filter
*/
public void setFilter(ExtFileFilter filter) {
fileChooser.setFileFilter(filter);
fileChooser.setAcceptAllFileFilterUsed(false);
}
/**
*
*/
private void setDefaultChooserLabels() {
if (fileChooser.getFileSelectionMode() ==
JFileChooser.DIRECTORIES_ONLY) {
fileChooser.setDialogTitle(getLocText("gui.filechooser.choose.dir"));
if (Application.OS_IS_WINDOWS) {
fileChooser.setDialogTitle(getLocText("gui.filechooser.choose.dir.windows"));
}
}
else {
fileChooser.setDialogTitle(getLocText("gui.filechooser.choose.file"));
}
fileChooser.setApproveButtonText(getLocText("gui.filechooser.choose"));
}
/**
*
* @return
*/
public JFileChooser getFileChooser() {
return fileChooser;
}
/**
*
* @return
*/
public String getRoot() {
return rootDirPath;
}
} // FileChooserBuilder.java