[jaxx] branch develop updated (c9a8c4f -> 8e6d369)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git from c9a8c4f fixes #3560: Updates nuitonpom to 1.5 + fix site urls new 8e6d369 refs-80 #3561: Introduce a new API to choose files The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: .../main/java/jaxx/runtime/FileChooserUtil.java | 8 +- .../org/nuiton/jaxx/runtime/JaxxFileChooser.java | 420 +++++++++++++++++++++ 2 files changed, 425 insertions(+), 3 deletions(-) create mode 100644 jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/JaxxFileChooser.java -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
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>.
participants (1)
-
nuiton.org scm