package jreepad.ui; import java.io.File; import java.util.ResourceBundle; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import jreepad.JreepadPrefs; public class SaveFileChooser extends JFileChooser { protected static final ResourceBundle LANG = ResourceBundle.getBundle("jreepad.lang.JreepadStrings"); /** * File filter for Jreepad XML .jree files. */ public static final FileFilter JREEPAD_FILE_FILTER = new ExtensionFileFilter("Jreepad XML file (*.jree)", "jree"); /** * File filter for Treepad .hjt files. */ public static final FileFilter TREEPAD_FILE_FILTER = new ExtensionFileFilter("Treepad file (*.hjt)", "hjt"); /** * File filter for Jreepad Encrypted XML .jree files. */ public static final FileFilter JREEPAD_ENCRYPTED_FILE_FILTER = new ExtensionFileFilter("Jreepad Encrypted XML file (*.jree) [EXPERIMENTAL]", "jree"); private int defaultFileFormat; public SaveFileChooser(int defaultFileFormat) { this.defaultFileFormat = defaultFileFormat; addChoosableFileFilter(JREEPAD_FILE_FILTER); addChoosableFileFilter(JREEPAD_ENCRYPTED_FILE_FILTER); addChoosableFileFilter(TREEPAD_FILE_FILTER); switch (defaultFileFormat) { case JreepadPrefs.FILETYPE_HJT: setFileFilter(TREEPAD_FILE_FILTER); break; case JreepadPrefs.FILETYPE_XML_ENCRYPTED: setFileFilter(JREEPAD_ENCRYPTED_FILE_FILTER); break; case JreepadPrefs.FILETYPE_XML: // default default: setFileFilter(JREEPAD_FILE_FILTER); break; } } /** * Returns the selected file type or the default file type * if "All files" filter is selected. */ public int getFileType() { if (getFileFilter() == SaveFileChooser.JREEPAD_FILE_FILTER) return JreepadPrefs.FILETYPE_XML; if (getFileFilter() == SaveFileChooser.TREEPAD_FILE_FILTER) return JreepadPrefs.FILETYPE_HJT; if (getFileFilter() == SaveFileChooser.JREEPAD_ENCRYPTED_FILE_FILTER) return JreepadPrefs.FILETYPE_XML_ENCRYPTED; return defaultFileFormat; } public void approveSelection() { if (!checkOverwrite(getSelectedFile())) return; // User doesn't want to overwrite the file if (getSelectedFile().isFile() && !getSelectedFile().canWrite()) { JOptionPane.showMessageDialog(this, LANG.getString("MSG_FILE_NOT_WRITEABLE"), LANG.getString("TITLE_FILE_ERROR"), JOptionPane.ERROR_MESSAGE); return; // Can't write selected file } super.approveSelection(); } private boolean checkOverwrite(File theFile) { // If file doesn't already exist then fine if (theFile == null || !theFile.exists()) return true; // Else we need to confirm return (JOptionPane.showConfirmDialog(this, LANG.getString("PROMPT_CONFIRM_OVERWRITE1") + " " + theFile.getName() + " " + LANG.getString("PROMPT_CONFIRM_OVERWRITE2"), LANG.getString("TITLE_CONFIRM_OVERWRITE"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION); } }