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