r2649 - in trunk: jaxx-demo/src/main/java/jaxx/demo/feature/databinding jaxx-runtime/src/main/java/jaxx/runtime
Author: tchemit Date: 2013-04-07 12:03:11 +0200 (Sun, 07 Apr 2013) New Revision: 2649 Url: http://nuiton.org/projects/jaxx/repository/revisions/2649 Log: fixes #2651: Introduce API to chosse a file or a directory (moved from nuiton-utils#FileUtil) Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx 2013-04-04 16:32:02 UTC (rev 2648) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/databinding/BindingExtremeDemo.jaxx 2013-04-07 10:03:11 UTC (rev 2649) @@ -29,6 +29,7 @@ <import> jaxx.runtime.JAXXBinding + jaxx.runtime.FileChooserUtil java.awt.Color javax.swing.border.TitledBorder javax.swing.DefaultListModel @@ -148,7 +149,7 @@ </cell> <cell> <JButton text="file..." - onActionPerformed='setFile(org.nuiton.util.FileUtil.getFile(this, new String[0]))'/> + onActionPerformed='setFile(FileChooserUtil.getFile(this, new String[0]))'/> </cell> </row> @@ -207,7 +208,7 @@ </cell> <cell> <JButton text="model0.file..." - onActionPerformed='model0.setFile(org.nuiton.util.FileUtil.getFile(this,new String[0]))'/> + onActionPerformed='model0.setFile(FileChooserUtil.getFile(this,new String[0]))'/> </cell> </row> @@ -269,7 +270,7 @@ </cell> <cell> <JButton text="model1.file..." - onActionPerformed='model1.setFile(org.nuiton.util.FileUtil.getFile(this,new String[0]))'/> + onActionPerformed='model1.setFile(FileChooserUtil.getFile(this,new String[0]))'/> </cell> </row> Added: trunk/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java (rev 0) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java 2013-04-07 10:03:11 UTC (rev 2649) @@ -0,0 +1,332 @@ +package jaxx.runtime; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.FileUtil; + +import javax.swing.JFileChooser; +import java.awt.Component; +import java.io.File; + +/** + * To help choosing a file / directory. + * + * Was previously in {@code org.nuiton.util.FileUtil} from + * {@code nuiton-utils} project. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5.16 + */ +public class FileChooserUtil { + + /** Logger. */ + private static final Log log = LogFactory.getLog(FileChooserUtil.class); + + protected static File currentDirectory = new File("."); + + public static void setCurrentDirectory(File dir) { + currentDirectory = dir; + } + + public static File getCurrentDirectory() { + return currentDirectory; + } + + protected FileChooserUtil() { + // no instance please + } + + + public static class PatternChooserFilter extends javax.swing.filechooser.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; + } + + } + + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données + * par deux, le pattern du filtre + la description du filtre + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + * @see #getFile(javax.swing.filechooser.FileFilter...) + */ + public static File getFile(String... patternOrDescriptionFilters) { + File result; + result = getFile(null, patternOrDescriptionFilters); + return result; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param filters les filtres a ajouter + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + */ + public static File getFile(javax.swing.filechooser.FileFilter... filters) { + File result = getFile(null, filters); + return result; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param parent le component parent du dialog + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données + * par deux, le pattern du filtre + la description du filtre + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + * @see #getFile(javax.swing.filechooser.FileFilter...) + */ + public static File getFile(Component parent, + String... patternOrDescriptionFilters) { + File result; + result = getFile("Ok", "Ok", parent, patternOrDescriptionFilters); + return result; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param title le titre de la boite de dialogue + * @param approvalText le label du boutton d'acceptation + * @param parent le component parent du dialog + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données + * par deux, le pattern du filtre + la description du filtre + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + * @see #getFile(javax.swing.filechooser.FileFilter...) + */ + public static File getFile(String title, + String approvalText, + Component parent, + String... patternOrDescriptionFilters) { + + if (patternOrDescriptionFilters.length % 2 != 0) { + throw new IllegalArgumentException( + "Arguments must be (pattern, description) couple"); + } + javax.swing.filechooser.FileFilter[] filters = + new javax.swing.filechooser.FileFilter[ + patternOrDescriptionFilters.length / 2]; + for (int i = 0; i < filters.length; i++) { + String pattern = patternOrDescriptionFilters[i * 2]; + String description = patternOrDescriptionFilters[i * 2 + 1]; + filters[i] = new PatternChooserFilter(pattern, description); + } + File result; + result = getFile(title, approvalText, parent, filters); + return result; + } + + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param parent le component parent du dialog + * @param filters les filtres a ajouter + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + */ + public static File getFile(Component parent, + javax.swing.filechooser.FileFilter... filters) { + File result = getFile("Ok", "Ok", parent, filters); + return result; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param title le titre de la boite de dialogue + * @param approvalText le label du boutton d'acceptation + * @param parent le component parent du dialog + * @param filters les filtres a ajouter + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + */ + public static File getFile(String title, + String approvalText, + Component parent, + javax.swing.filechooser.FileFilter... filters) { + try { + JFileChooser chooser = new JFileChooser(currentDirectory); + + chooser.setDialogType(JFileChooser.CUSTOM_DIALOG); + if (filters.length > 0) { + if (filters.length == 1) { + chooser.setFileFilter(filters[0]); + } else { + for (javax.swing.filechooser.FileFilter filter : filters) { + chooser.addChoosableFileFilter(filter); + } + } + } + chooser.setFileSelectionMode(JFileChooser.FILES_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) { + log.warn("Erreur:", eee); + } + return null; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param title le titre de la boite de dialogue + * @param approvalText le label du boutton d'acceptation + * @param parent le component parent du dialog + * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données + * par deux, le pattern du filtre + la description du filtre + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + */ + public static File saveFile(String filename, + String title, + String approvalText, + Component parent, + String... patternOrDescriptionFilters) { + + if (patternOrDescriptionFilters.length % 2 != 0) { + throw new IllegalArgumentException( + "Arguments must be (pattern, description) couple"); + } + javax.swing.filechooser.FileFilter[] filters = + new javax.swing.filechooser.FileFilter[ + patternOrDescriptionFilters.length / 2]; + for (int i = 0; i < filters.length; i++) { + String pattern = patternOrDescriptionFilters[i * 2]; + String description = patternOrDescriptionFilters[i * 2 + 1]; + filters[i] = new FileUtil.PatternChooserFilter(pattern, description); + } + File result; + result = saveFile(filename, title, approvalText, parent, filters); + return result; + } + + /** + * Retourne le nom du fichier entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null. + * + * @param title le titre de la boite de dialogue + * @param approvalText le label du boutton d'acceptation + * @param parent le component parent du dialog + * @param filters les filtres a ajouter + * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé + */ + public static File saveFile(String filename, + String title, + String approvalText, + Component parent, + javax.swing.filechooser.FileFilter... filters) { + File selectedFile = new File(FileUtil.getCurrentDirectory(), filename); + JFileChooser chooser = new JFileChooser(selectedFile); + + chooser.setDialogType(JFileChooser.SAVE_DIALOG); + chooser.setSelectedFile(selectedFile); + if (filters.length > 0) { + if (filters.length == 1) { + chooser.setFileFilter(filters[0]); + } else { + for (javax.swing.filechooser.FileFilter filter : filters) { + chooser.addChoosableFileFilter(filter); + } + } + } + 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) { + FileUtil.setCurrentDirectory(result); + result = result.getAbsoluteFile(); + } + } + return result; + } + + /** + * @return le nom du repertoire entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne + * null. + */ + public static String getDirectory() { + return getDirectory(null, "Ok", "Ok"); + } + + /** + * @param title le nom de la boite de dialogue + * @param approvalText le texte de l'action d'acceptation du répertoire dans le file chooser + * @return le nom du repertoire entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne + * null. + */ + public static String getDirectory(String title, String approvalText) { + String result = getDirectory(null, title, approvalText); + return result; + } + + /** + * @param parent le component parent du dialog + * @param title le nom de la boite de dialogue + * @param approvalText le texte de l'action d'acceptation du répertoire dans le file chooser + * @return le nom du repertoire entre dans la boite de dialogue. + * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne + * null. + */ + public static String getDirectory(Component parent, + String title, + String approvalText) { + 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.getAbsolutePath(); + } + } + } else { + return null; + } + } catch (Exception eee) { + log.warn("Erreur:", eee); + } + return null; + } +} Property changes on: trunk/jaxx-runtime/src/main/java/jaxx/runtime/FileChooserUtil.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native
participants (1)
-
tchemit@users.nuiton.org