package thaw.gui; import java.io.File; import java.util.Vector; import javax.swing.JFileChooser; import thaw.core.Logger; /** * FileChooser helps to create and use simple JFileChooser. */ public class FileChooser { private JFileChooser fileChooser = null; private String finalDir = null; public final static int OPEN_DIALOG = JFileChooser.OPEN_DIALOG; public final static int SAVE_DIALOG = JFileChooser.SAVE_DIALOG; public FileChooser() { fileChooser = new JFileChooser(); } public FileChooser(final String path) { fileChooser = new JFileChooser(path); fileChooser.setDragEnabled(true); } public void setTitle(final String title) { fileChooser.setDialogTitle(title); } public void setDirectoryOnly(final boolean v) { if(v) fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); else /* Directories -> Recursivity */ fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); } /** * @param type JFileChooser.OPEN_DIALOG / JFileChooser.SAVE_DIALOG * @see javax.swing.JFileChooser#setDialogType(int) */ public void setDialogType(final int type) { fileChooser.setDialogType(type); } protected boolean showDialog() { int result = 0; if(fileChooser.getDialogType() == JFileChooser.OPEN_DIALOG) { result = fileChooser.showOpenDialog(null); } if(fileChooser.getDialogType() == JFileChooser.SAVE_DIALOG) { result = fileChooser.showSaveDialog(null); } if(result == JFileChooser.APPROVE_OPTION) return true; else return false; } /** * @return null if nothing choosed. */ public File askOneFile() { File file; fileChooser.setMultiSelectionEnabled(false); if(!showDialog()) return null; file = fileChooser.getSelectedFile(); if (file != null) { finalDir = file.getParent(); } return file; } protected void expandRecursivly(final File file, final Vector vec) { if (file.isFile()) { vec.add(file); return; } final File[] files = file.listFiles(); if (files == null) { Logger.notice(this, "Unable to parse directory '"+file.getPath()+"'"); return; } for (int i=0; i < files.length; i++) { if (files[i].isFile()) vec.add(files[i]); else this.expandRecursivly(files[i],vec); } } protected Vector expandRecursivly(final File[] selectedFiles) { final Vector files= new Vector(); for (int i = 0 ; i < selectedFiles.length ; i++) { this.expandRecursivly(selectedFiles[i], files); } return files; } /** * @return null if nothing choosed. */ public Vector askManyFiles() { File[] files; fileChooser.setMultiSelectionEnabled(true); if(!showDialog()) return null; files = fileChooser.getSelectedFiles(); if (files != null && files[0] != null) { finalDir = files[0].getParent(); } return this.expandRecursivly(files); } /** * Return the main directory where the files where selected */ public String getFinalDirectory() { return finalDir; } }