All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pcsoft.framework.jfex.controls.util.FXChooserUtils Maven / Gradle / Ivy

The newest version!
package org.pcsoft.framework.jfex.controls.util;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import org.pcsoft.framework.jfex.commons.io.UiStateStorage;
import org.pcsoft.framework.jfex.controls.type.ChooserType;

import java.io.File;
import java.util.*;

/**
 * Utility Class to show a chooser
 */
public final class FXChooserUtils {

    //region File Save Chooser
    public static Optional showFileSaveChooser(final String title, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileSaveChooser(title, null, null, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final Collection extensionFilters) {
        return showFileSaveChooser(title, null, null, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileSaveChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final String storageKey, final Collection extensionFilters) {
        return showFileSaveChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final File selectedFile, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileSaveChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final File selectedFile, final Collection extensionFilters) {
        return showFileSaveChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional showFileSaveChooser(final String title, final File selectedFile, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileSaveChooser(title, selectedFile, storageKey, Arrays.asList(extensionFilters));
    }

    public static Optional showFileSaveChooser(final String title, final File selectedFile, final String storageKey, final Collection extensionFilters) {
        return showChooser(ChooserType.FileSave, title, selectedFile, storageKey, extensionFilters, false).map(list -> list.get(0));
    }
    //endregion

    //region File Open Chooser
    public static Optional showFileOpenChooser(final String title, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenChooser(title, null, null, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final Collection extensionFilters) {
        return showFileOpenChooser(title, null, null, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final String storageKey, final Collection extensionFilters) {
        return showFileOpenChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final File selectedFile, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final File selectedFile, final Collection extensionFilters) {
        return showFileOpenChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional showFileOpenChooser(final String title, final File selectedFile, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenChooser(title, selectedFile, storageKey, Arrays.asList(extensionFilters));
    }

    public static Optional showFileOpenChooser(final String title, final File selectedFile, final String storageKey, final Collection extensionFilters) {
        return showChooser(ChooserType.FileOpen, title, selectedFile, storageKey, extensionFilters, false).map(list -> list.get(0));
    }
    //endregion

    //region File Open Multiple Chooser
    public static Optional> showFileOpenMultipleChooser(final String title, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenMultipleChooser(title, null, null, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final Collection extensionFilters) {
        return showFileOpenMultipleChooser(title, null, null, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenMultipleChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final String storageKey, final Collection extensionFilters) {
        return showFileOpenMultipleChooser(title, null, storageKey, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final File selectedFile, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenMultipleChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final File selectedFile, final Collection extensionFilters) {
        return showFileOpenMultipleChooser(title, selectedFile, null, extensionFilters);
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final File selectedFile, final String storageKey, final FileChooser.ExtensionFilter... extensionFilters) {
        return showFileOpenMultipleChooser(title, selectedFile, storageKey, Arrays.asList(extensionFilters));
    }

    public static Optional> showFileOpenMultipleChooser(final String title, final File selectedFile, final String storageKey, final Collection extensionFilters) {
        return showChooser(ChooserType.FileOpen, title, selectedFile, storageKey, extensionFilters, true);
    }
    //endregion

    //region Directory Chooser

    /**
     * Show a directory chooser with the given title
     *
     * @param title
     * @return
     */
    public static Optional showDirectoryChooser(final String title) {
        return showDirectoryChooser(title, null, null);
    }

    /**
     * Show a directory chooser with the given title
     *
     * @param title
     * @param storageKey Key to store and reload automatically the last directory choice
     * @return
     */
    public static Optional showDirectoryChooser(final String title, final String storageKey) {
        return showDirectoryChooser(title, null, storageKey);
    }

    /**
     * Show a directory chooser with the given title
     *
     * @param title
     * @param selectedFile
     * @return
     */
    public static Optional showDirectoryChooser(final String title, final File selectedFile) {
        return showDirectoryChooser(title, selectedFile, null);
    }

    /**
     * Show a directory chooser with the given title
     *
     * @param title
     * @param selectedFile
     * @param storageKey   Key to store and reload automatically the last directory choice
     * @return
     */
    public static Optional showDirectoryChooser(final String title, final File selectedFile, final String storageKey) {
        return showChooser(ChooserType.Directory, title, selectedFile, storageKey, null, false).map(list -> list.get(0));
    }
    //endregion

    //region Basic Methods
    private static Optional> showChooser(final ChooserType chooserType, final String title, final File selectedFile, final String storageKey, final Collection extensionFilters, boolean multiple) {
        final StringProperty lastDirectoryProperty;
        if (storageKey != null) {
            lastDirectoryProperty = new SimpleStringProperty();
            UiStateStorage.getInstance().getSystemPropertyGroup().registerProperty(storageKey, String.class, lastDirectoryProperty);
        } else {
            lastDirectoryProperty = null;
        }

        if (chooserType == ChooserType.Directory) {
            final File file = handleDirectory(title, selectedFile, storageKey, lastDirectoryProperty);
            return Optional.ofNullable(file == null ? null : Collections.singletonList(file));
        } else if (chooserType == ChooserType.FileOpen || chooserType == ChooserType.FileSave) {
            return Optional.ofNullable(handleFile(chooserType, title, selectedFile, storageKey, extensionFilters, lastDirectoryProperty, multiple));
        } else
            throw new RuntimeException();
    }

    private static List handleFile(ChooserType chooserType, String title, File selectedFile, String storageKey, Collection extensionFilters, StringProperty lastDirectoryProperty, boolean multiple) {
        final FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle(title);
        if (extensionFilters == null || extensionFilters.isEmpty()) {
            fileChooser.getExtensionFilters().setAll(
                    new FileChooser.ExtensionFilter(ResourceBundle.getBundle("lan/text").getString("cmp.file.chooser.dlg.extensions.all"), "*.*")
            );
        } else {
            fileChooser.getExtensionFilters().setAll(extensionFilters);
        }
        if (selectedFile != null) {
            if (selectedFile.getParentFile() != null && selectedFile.getParentFile().exists() && selectedFile.getParentFile().isDirectory()) {
                fileChooser.setInitialDirectory(selectedFile.getParentFile());
            }
            fileChooser.setInitialFileName(selectedFile.getName());
        } else {
            if (lastDirectoryProperty != null && lastDirectoryProperty.get() != null && new File(lastDirectoryProperty.get()).exists()) {
                fileChooser.setInitialDirectory(new File(lastDirectoryProperty.get()));
            }
        }

        final List fileList;
        switch (chooserType) {
            case FileOpen:
                if (multiple) {
                    fileList = fileChooser.showOpenMultipleDialog(null);
                } else {
                    final File file = fileChooser.showOpenDialog(null);
                    fileList = file == null ? null : Collections.singletonList(file);
                }
                break;
            case FileSave:
                final File file = fileChooser.showSaveDialog(null);
                fileList = file == null ? null : Collections.singletonList(file);
                break;
            default:
                throw new RuntimeException();
        }
        if (fileList != null && lastDirectoryProperty != null) {
            lastDirectoryProperty.set(fileList.get(0).getParentFile().getAbsolutePath());
        }
        if (lastDirectoryProperty != null) {
            UiStateStorage.getInstance().getSystemPropertyGroup().unregisterProperty(storageKey);
        }

        return fileList;
    }

    private static File handleDirectory(String title, File selectedFile, String storageKey, StringProperty lastDirectoryProperty) {
        final DirectoryChooser directoryChooser = new DirectoryChooser();
        directoryChooser.setTitle(title);
        if (selectedFile != null) {
            directoryChooser.setInitialDirectory(selectedFile);
        } else {
            if (lastDirectoryProperty != null && lastDirectoryProperty.get() != null && new File(lastDirectoryProperty.get()).exists()) {
                directoryChooser.setInitialDirectory(new File(lastDirectoryProperty.get()));
            }
        }

        final File file = directoryChooser.showDialog(null);
        if (file != null && lastDirectoryProperty != null) {
            lastDirectoryProperty.set(file.getAbsolutePath());
        }
        if (lastDirectoryProperty != null) {
            UiStateStorage.getInstance().getSystemPropertyGroup().unregisterProperty(storageKey);
        }

        return file;
    }
    //endregion

    private FXChooserUtils() {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy