This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git commit 8e6d3694b62b533c6ebd902d5f5d0d426177e00c Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Oct 29 15:47:22 2014 +0100 refs-80 #3561: Introduce a new API to choose files --- .../main/java/jaxx/runtime/FileChooserUtil.java | 8 +- .../org/nuiton/jaxx/runtime/JaxxFileChooser.java | 420 +++++++++++++++++++++ 2 files changed, 425 insertions(+), 3 deletions(-) diff --git a/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java b/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java index f1758b5..326fa14 100644 --- a/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java +++ b/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java @@ -24,6 +24,7 @@ package jaxx.runtime; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.runtime.JaxxFileChooser; import org.nuiton.util.FileUtil; import javax.swing.JFileChooser; @@ -38,6 +39,7 @@ import java.io.File; * * @author Tony Chemit - chemit@codelutin.com * @since 2.5.16 + * @deprecated since 2.15, prefer use {@link JaxxFileChooser}. */ public class FileChooserUtil { @@ -49,15 +51,15 @@ public class FileChooserUtil { protected static File currentDirectory = DEFAULT_CURRENT_DIRECTORY_FILE; public static void setCurrentDirectory(File dir) { - currentDirectory = dir; + JaxxFileChooser.setCurrentDirectory(currentDirectory ); } public static File getCurrentDirectory() { - return currentDirectory; + return JaxxFileChooser.getCurrentDirectory(); } public static boolean isCurrentDirectoryDefault() { - return currentDirectory.equals(DEFAULT_CURRENT_DIRECTORY_FILE); + return JaxxFileChooser.isCurrentDirectoryDefault(); } protected FileChooserUtil() { diff --git a/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/JaxxFileChooser.java b/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/JaxxFileChooser.java new file mode 100644 index 0000000..cee0dfa --- /dev/null +++ b/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/JaxxFileChooser.java @@ -0,0 +1,420 @@ +package org.nuiton.jaxx.runtime; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; +import java.awt.Component; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created on 10/29/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.15 + */ +public class JaxxFileChooser { + + /** + * To choose a file (in load mode). + * + * Customize it and finish by invoking the method {@link ToLoadFile#choose()} to show file chooser. + */ + public static ToLoadFile forLoadingFile() { + return new FileChooserBuilderImpl(ChooseMode.LOAD_FILE); + } + + /** + * To choose a directory (in load mode). + * + * Customize it and finish by invoking the method {@link ToLoadDirectory#choose()} to show file chooser. + */ + public static ToLoadDirectory forLoadingDirectory() { + return new FileChooserBuilderImpl(ChooseMode.LOAD_DIRECTORY); + } + + /** + * To choose a file (in save mode). + * + * Customize it and finish by invoking the method {@link ToSave#choose()} to show file chooser. + */ + public static ToSave forSaving() { + return new FileChooserBuilderImpl(ChooseMode.SAVE); + } + + public static void setCurrentDirectory(File dir) { + currentDirectory = dir; + } + + public static File getCurrentDirectory() { + return currentDirectory; + } + + public static boolean isCurrentDirectoryDefault() { + return currentDirectory.equals(DEFAULT_CURRENT_DIRECTORY_FILE); + } + + /** Logger. */ + private static final Log log = LogFactory.getLog(JaxxFileChooser.class); + + public static final File DEFAULT_CURRENT_DIRECTORY_FILE = new File("."); + + protected static File currentDirectory = DEFAULT_CURRENT_DIRECTORY_FILE; + + public static interface ToLoadFile { + + ToLoadFile setTitle(String title); + + ToLoadFile setApprovalText(String approvalText); + + ToLoadFile setParent(Component parent); + + ToLoadFile setPatternOrDescriptionFilters(List<String> patternOrDescriptionFilters); + + ToLoadFile setPatternOrDescriptionFilters(String pattern, String description, String... patternOrDescriptionFilters); + + ToLoadFile setFileFilters(FileFilter fileFilter, FileFilter... fileFilters); + + ToLoadFile setFileFilters(List<FileFilter> fileFilters); + + ToLoadFile setShowFiles(boolean showFiles); + + ToLoadFile setShowDirectories(boolean showDirectories); + + ToLoadFile setMultiSelectionEnabled(boolean multiSelectionEnabled); + + ToLoadFile setFileHidingEnabled(boolean useFileHiding); + + ToLoadFile setUseAcceptAllFileFilter(boolean useAcceptAllFileFilter); + + File choose(); + + } + + public static interface ToLoadDirectory { + + ToLoadDirectory setTitle(String title); + + ToLoadDirectory setApprovalText(String approvalText); + + ToLoadDirectory setParent(Component parent); + + File choose(); + + } + + public static interface ToSave { + + ToSave setTitle(String title); + + ToSave setApprovalText(String approvalText); + + ToSave setParent(Component parent); + + ToSave setPatternOrDescriptionFilters(List<String> patternOrDescriptionFilters); + + ToSave setPatternOrDescriptionFilters(String pattern, String description, String... patternOrDescriptionFilters); + + ToSave setFileFilters(FileFilter fileFilter, FileFilter... fileFilters); + + ToSave setFileFilters(List<FileFilter> fileFilters); + + ToSave setFileHidingEnabled(boolean useFileHiding); + + ToSave setUseAcceptAllFileFilter(boolean useAcceptAllFileFilter); + + ToSave setFilename(String filename); + + File choose(); + + } + + private enum ChooseMode { + LOAD_FILE, + LOAD_DIRECTORY, + SAVE + } + + static class FileChooserBuilderImpl implements ToLoadFile, ToLoadDirectory, ToSave { + + private final ChooseMode chooseMode; + + protected String title; + + protected String approvalText; + + protected Component parent; + + protected List<FileFilter> fileFilters; + + protected boolean showFiles; + + protected boolean showDirectories; + + protected boolean multiSelectionEnabled; + + protected boolean fileHidingEnabled; + + protected boolean useAcceptAllFileFilter; + + protected String filename; + + FileChooserBuilderImpl(ChooseMode chooseMode) { + this.chooseMode = chooseMode; + } + + @Override + public FileChooserBuilderImpl setTitle(String title) { + this.title = title; + return this; + } + + @Override + public FileChooserBuilderImpl setApprovalText(String approvalText) { + this.approvalText = approvalText; + return this; + } + + @Override + public FileChooserBuilderImpl setParent(Component parent) { + this.parent = parent; + return this; + } + + @Override + public FileChooserBuilderImpl setPatternOrDescriptionFilters(String pattern, String description, String... patternOrDescriptionFilters) { + List<String> r = new ArrayList<String>(); + r.add(pattern); + r.add(description); + r.addAll(Arrays.asList(patternOrDescriptionFilters)); + setPatternOrDescriptionFilters(r); + return this; + } + + @Override + public FileChooserBuilderImpl setPatternOrDescriptionFilters(List<String> patternOrDescriptionFilters) { + + + List<FileFilter> r = new ArrayList<FileFilter>(); + if (patternOrDescriptionFilters.size() % 2 != 0) { + throw new IllegalArgumentException( + "Arguments must be (pattern, description) couple"); + } + for (int i = 0, nbFilters = patternOrDescriptionFilters.size() / 2; i < nbFilters; i++) { + String pattern = patternOrDescriptionFilters.get(i * 2); + String description = patternOrDescriptionFilters.get(i * 2 + 1); + r.add(new PatternChooserFilter(pattern, description)); + } + + return setFileFilters(r); + + } + + @Override + public FileChooserBuilderImpl setFileFilters(FileFilter fileFilter, FileFilter... fileFilters) { + List<FileFilter> r = new ArrayList<FileFilter>(); + r.add(fileFilter); + r.addAll(Arrays.asList(fileFilters)); + return setFileFilters(r); + } + + @Override + public FileChooserBuilderImpl setFileFilters(List<FileFilter> fileFilters) { + this.fileFilters = fileFilters; + return this; + } + + @Override + public FileChooserBuilderImpl setShowFiles(boolean showFiles) { + this.showFiles = showFiles; + return this; + } + + @Override + public FileChooserBuilderImpl setShowDirectories(boolean showDirectories) { + this.showDirectories = showDirectories; + return this; + } + + @Override + public FileChooserBuilderImpl setMultiSelectionEnabled(boolean multiSelectionEnabled) { + this.multiSelectionEnabled = multiSelectionEnabled; + return this; + } + + @Override + public FileChooserBuilderImpl setFileHidingEnabled(boolean fileHidingEnabled) { + this.fileHidingEnabled = fileHidingEnabled; + return this; + } + + @Override + public FileChooserBuilderImpl setUseAcceptAllFileFilter(boolean useAcceptAllFileFilter) { + this.useAcceptAllFileFilter = useAcceptAllFileFilter; + return this; + } + + @Override + public FileChooserBuilderImpl setFilename(String filename) { + this.filename = filename; + return this; + } + + @Override + public File choose() { + + File result = null; + switch (chooseMode) { + case LOAD_FILE: + result = chooseToLoadFile(); + break; + case LOAD_DIRECTORY: + result = chooseToLoadDirectory(); + break; + case SAVE: + result = chooseToSave(); + break; + } + + return result; + + } + + protected File chooseToLoadFile() { + + try { + + JFileChooser chooser = new JFileChooser(currentDirectory); + + chooser.setDialogType(JFileChooser.CUSTOM_DIALOG); + if (CollectionUtils.isNotEmpty(fileFilters)) { + for (FileFilter filter : fileFilters) { + chooser.addChoosableFileFilter(filter); + } + chooser.setFileFilter(fileFilters.get(0)); + } + + chooser.setAcceptAllFileFilterUsed(useAcceptAllFileFilter); + chooser.setMultiSelectionEnabled(multiSelectionEnabled); + chooser.setFileHidingEnabled(fileHidingEnabled); + + if (showFiles) { + if (showDirectories) { + chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + } else { + chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + } + } else if (showDirectories) { + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } + + chooser.setDialogTitle(title); + int returnVal = chooser.showDialog(parent, approvalText); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File theFile = chooser.getSelectedFile(); + if (theFile != null) { + currentDirectory = theFile; + return theFile.getAbsoluteFile(); + } + } + + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Could not choose file to load", eee); + } + + } + + return null; + + } + + protected File chooseToLoadDirectory() { + + try { + JFileChooser chooser = new JFileChooser(currentDirectory); + chooser.setDialogType(JFileChooser.CUSTOM_DIALOG); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setDialogTitle(title); + int returnVal = chooser.showDialog(parent, approvalText); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File theFile = chooser.getSelectedFile(); + if (theFile != null) { + currentDirectory = theFile; + if (theFile.isDirectory()) { + return theFile; + } + } + } else { + return null; + } + } catch (Exception eee) { + log.warn("Could not choose directory to load", eee); + } + return null; + + } + + protected File chooseToSave() { + File selectedFile = new File(getCurrentDirectory(), filename); + JFileChooser chooser = new JFileChooser(selectedFile); + + chooser.setDialogType(JFileChooser.SAVE_DIALOG); + chooser.setSelectedFile(selectedFile); + + if (CollectionUtils.isNotEmpty(fileFilters)) { + for (FileFilter filter : fileFilters) { + chooser.addChoosableFileFilter(filter); + } + chooser.setFileFilter(fileFilters.get(0)); + } + chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + chooser.setDialogTitle(title); + + File result = null; + + int returnVal = chooser.showDialog(parent, approvalText); + if (returnVal == JFileChooser.APPROVE_OPTION) { + result = chooser.getSelectedFile(); + if (result != null) { + setCurrentDirectory(result); + result = result.getAbsoluteFile(); + } + } + return result; + + } + + public static class PatternChooserFilter extends FileFilter { + protected String pattern; + + protected String description; + + public PatternChooserFilter(String pattern, String description) { + this.pattern = pattern; + this.description = description; + } + + @Override + public boolean accept(File f) { + return f.isDirectory() || f.getAbsolutePath().matches(pattern); + } + + @Override + public String getDescription() { + return description; + } + + } + + } + + protected JaxxFileChooser() { + // no instance please + } +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.