001 // This class is based on the EnvFileChooser class, version 1 August 2002
002 // by Julie Zenekski
003
004 // Original copyright notice:
005
006 // AP(r) Computer Science Marine Biology Simulation:
007 // The EnvFileChooser class is copyright(c) 2002 College Entrance
008 // Examination Board (www.collegeboard.com).
009 //
010 // This class is free software; you can redistribute it and/or modify
011 // it under the terms of the GNU General Public License as published by
012 // the Free Software Foundation.
013 //
014 // This class is distributed in the hope that it will be useful,
015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017 // GNU General Public License for more details.
018
019 package view;
020
021 import javax.swing.*;
022 import javax.swing.filechooser.FileFilter;
023 import java.awt.*;
024 import java.io.File;
025
026 /**
027 * Environment file chooser class.
028 *
029 * @author Mathias Ricken
030 */
031
032 public class EnvFileChooser extends JFileChooser {
033 /**
034 * Standard extension.
035 */
036 private static final String ENV_EXT = ".txt";
037
038 /**
039 * Open accessory.
040 */
041 private JPanel openAccessory;
042
043 /**
044 * Create a new EnvFileChooser. The default starting directory will be the "DataFiles" subdirectory on the current
045 * working directory.
046 */
047 public EnvFileChooser() {
048 super(new File(System.getProperty("user.dir") + File.separator + "DataFiles"));
049 setFileFilter(new FileFilter() {
050 public boolean accept(File f) {
051 return (f.getName().toLowerCase().endsWith(ENV_EXT) || f.isDirectory());
052 }
053
054 public String getDescription() {
055 return ("RiceMBS data files (*" + ENV_EXT + ')');
056 }
057 });
058 setFileSelectionMode(JFileChooser.FILES_ONLY);
059 }
060
061 /**
062 * Bring up a modal file chooser dialog allowing the user to choose the environment file and specify the
063 * bounded/unbounded environment class.
064 *
065 * @param parent the parent of the dialog
066 *
067 * @return the return state of the dialog once finished
068 */
069 public int showOpenDialog(Component parent) {
070 setDialogTitle("Open environment file");
071 setAccessory(openAccessory);
072 rescanCurrentDirectory();
073 return super.showOpenDialog(parent);
074 }
075
076
077 /**
078 * Bring up a modal file chooser dialog allowing the user to save to an environment file.
079 *
080 * @param parent the parent of the dialog
081 *
082 * @return the return state of the dialog once finished
083 */
084 public int showSaveDialog(Component parent) {
085 setDialogTitle("Save environment file");
086 setAccessory(null);
087 rescanCurrentDirectory();
088 return super.showSaveDialog(parent);
089 }
090
091
092 /**
093 * Called when the user hits the approve button (Save/Open) to confirm the selected file is acceptable. Overrides
094 * the JFileChooser to confirm overwrite if choosing a file that already exists for a save action.
095 */
096 public void approveSelection() {
097 if (SAVE_DIALOG == getDialogType()) {
098 File file = getSelectedFile();
099 if (!file.getName().endsWith(ENV_EXT)) // add extension if missing
100 {
101 setSelectedFile(file = new File(file.getAbsolutePath() + ENV_EXT));
102 }
103 if (file.exists() && JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(this,
104 "File " + file.getName() + " exists. Overwrite?",
105 "Confirm overwrite",
106 JOptionPane.OK_CANCEL_OPTION)) {
107 return;
108 }
109 }
110 super.approveSelection(); //if we get here, this will dismiss the dialog
111 }
112 }