package com.noticeditorteam.noticeditor.view;
import java.io.File;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Window;
/**
* File and directory chooser dialog
*
* @author aNNiMON
*/
public final class Chooser {
public static final ExtensionFilter SUPPORTED = new ExtensionFilter("Supported Files", "*.zip", "*.txt", "*.md", "*.htm", "*.html", "*.json");
public static final ExtensionFilter JSON = new ExtensionFilter("Json Files", "*.json");
public static final ExtensionFilter ZIP = new ExtensionFilter("Zip Files", "*.zip");
public static final ExtensionFilter ENC_ZIP = new ExtensionFilter("Encrypted Zip Files", "*.zip");
public static final ExtensionFilter ALL = new ExtensionFilter("All Files", "*.*");
private static FileChooser fileChooser;
private static DirectoryChooser directoryChooser;
private static File lastDirectory;
private static ExtensionFilter lastSelectedExtensionFilter;
public static Chooser file() {
if (fileChooser == null) {
fileChooser = new FileChooser();
}
return new Chooser(true);
}
public static Chooser directory() {
if (directoryChooser == null) {
directoryChooser = new DirectoryChooser();
directoryChooser.setTitle("Select folder to save");
}
return new Chooser(false);
}
public static void setInitialDirectory(File directory) {
Chooser.lastDirectory = directory;
}
public static File getLastDirectory() {
return lastDirectory;
}
public static ExtensionFilter getLastSelectedExtensionFilter() {
return lastSelectedExtensionFilter;
}
private final boolean fileChooseMode;
private boolean openMode;
private Chooser(boolean fileChooseMode) {
this.fileChooseMode = fileChooseMode;
openMode = true;
}
public Chooser open() {
openMode = true;
return this;
}
public Chooser save() {
openMode = false;
return this;
}
public Chooser filter(ExtensionFilter... filters) {
if (fileChooseMode) {
fileChooser.getExtensionFilters().clear();
fileChooser.getExtensionFilters().addAll(filters);
}
return this;
}
public Chooser title(String title) {
if (fileChooseMode) {
fileChooser.setTitle(title);
} else {
directoryChooser.setTitle(title);
}
return this;
}
public File show(Window window) {
// Set initial directory from last session
if (lastDirectory != null && lastDirectory.isDirectory() && lastDirectory.exists()) {
if (fileChooseMode) {
fileChooser.setInitialDirectory(lastDirectory);
} else {
directoryChooser.setInitialDirectory(lastDirectory);
}
}
File result;
if (fileChooseMode) {
if (openMode) {
result = fileChooser.showOpenDialog(window);
} else {
result = fileChooser.showSaveDialog(window);
}
// Save last directory and selected extension filter
if (result != null)
lastDirectory = result.getParentFile();
lastSelectedExtensionFilter = fileChooser.getSelectedExtensionFilter();
} else {
result = directoryChooser.showDialog(window);
lastDirectory = result;
}
return result;
}
}