001package jmri.jmrit.operations.setup.backup;
002
003import java.awt.event.ActionEvent;
004import java.io.File;
005import java.io.IOException;
006
007import javax.swing.AbstractAction;
008import javax.swing.JFileChooser;
009
010import jmri.InstanceManager;
011import jmri.jmrit.operations.OperationsXml;
012import jmri.util.swing.JmriJOptionPane;
013
014/**
015 * Swing action to backup operation files to a directory selected by the user.
016 *
017 * @author Daniel Boudreau Copyright (C) 2011
018 * @author Gregory Madsen Copyright (C) 2012
019 */
020public class BackupFilesAction extends AbstractAction {
021
022    public BackupFilesAction() {
023        super(Bundle.getMessage("Backup"));
024    }
025
026    @Override
027    public void actionPerformed(ActionEvent e) {
028        backUp();
029    }
030
031    private void backUp() {
032        // check to see if files are dirty
033        if (OperationsXml.areFilesDirty()) {
034            if (JmriJOptionPane.showConfirmDialog(null,
035                    Bundle.getMessage("OperationsFilesModified"),
036                    Bundle.getMessage("SaveOperationFiles"),
037                    JmriJOptionPane.YES_NO_OPTION) == JmriJOptionPane.YES_OPTION) {
038                OperationsXml.save();
039            }
040        }
041        BackupBase backup = InstanceManager.getDefault(DefaultBackup.class);
042
043        // get directory to write to
044        JFileChooser fc = new jmri.util.swing.JmriJFileChooser(backup.getBackupRoot());
045        fc.addChoosableFileFilter(new FileFilter());
046
047        File fs = new File(backup.suggestBackupSetName());
048        fc.setSelectedFile(fs);
049
050        int retVal = fc.showSaveDialog(null);
051        if (retVal != JFileChooser.APPROVE_OPTION || fc.getSelectedFile() == null) {
052            return; // Canceled
053        }
054        File directory = fc.getSelectedFile();
055
056        // Fix this later....... UGH!!
057        try {
058            backup.backupFilesToDirectory(directory);
059        } catch (IOException ex) {
060            log.error("backup failed: {}", ex.getLocalizedMessage());
061        }
062    }
063
064    private static class FileFilter extends javax.swing.filechooser.FileFilter {
065
066        @Override
067        public boolean accept(File f) {
068            if (f.isDirectory()) {
069                return true;
070            }
071            String name = f.getName();
072            return name.matches(".*\\.xml"); // NOI18N
073        }
074
075        @Override
076        public String getDescription() {
077            return Bundle.getMessage("BackupFolders");
078        }
079    }
080
081    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BackupFilesAction.class);
082
083}
084
085