package magic.ui; import java.awt.Component; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import static magic.utility.DeckUtils.DECK_EXTENSION; import magic.utility.MagicFileSystem; public class MagicFileChoosers { private MagicFileChoosers() {} public static final FileFilter DECK_FILEFILTER = getFileFilter("Magarena deck", DECK_EXTENSION); public static final FileFilter SAVED_GAME_FILEFILTER = getFileFilter("Saved game", ".game"); private static FileFilter getFileFilter(final String description, final String fileExtension) { return new FileFilter() { @Override public boolean accept(final File file) { return file.isDirectory() || file.getName().endsWith(fileExtension); } @Override public String getDescription() { return description; } }; } public static File getSaveGameFile(final Component dialogParent) { final Path saveGamePath = MagicFileSystem.getDataPath(MagicFileSystem.DataPath.SAVED_GAMES); @SuppressWarnings("serial") final JFileChooser fileChooser = new JFileChooser(saveGamePath.toFile()) { @Override public void approveSelection() { // first ensure filename has "dec" extension String filename = getSelectedFile().getAbsolutePath(); if (!filename.endsWith(".game")) { setSelectedFile(new File(filename + ".game")); } if (Files.exists(getSelectedFile().toPath())) { int response = JOptionPane.showConfirmDialog( ScreenController.getFrame(), "Overwrite existing saved game?", "Overwrite file", JOptionPane.YES_NO_OPTION); if (response == JOptionPane.YES_OPTION) { super.approveSelection(); } } else { super.approveSelection(); } } }; fileChooser.setDialogTitle("Save game"); fileChooser.setFileFilter(SAVED_GAME_FILEFILTER); fileChooser.setAcceptAllFileFilterUsed(false); // if (deck != null) { // fileChooser.setSelectedFile(new File(deck.getFilename())); // } final int action = fileChooser.showSaveDialog(dialogParent); if (action == JFileChooser.APPROVE_OPTION) { return fileChooser.getSelectedFile(); } else { return null; } } }