diff options
Diffstat (limited to 'src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/FileSaver.java')
-rwxr-xr-x | src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/FileSaver.java | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/FileSaver.java b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/FileSaver.java new file mode 100755 index 0000000..789aa65 --- /dev/null +++ b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/FileSaver.java @@ -0,0 +1,191 @@ +/* + D-Bus Java Viewer + Copyright (c) 2006 Peter Cox + + This program is free software; you can redistribute it and/or modify it + under the terms of either the GNU Lesser General Public License Version 2 or the + Academic Free Licence Version 2.1. + + Full licence texts are included in the COPYING file with this program. +*/ +package org.freedesktop.dbus.viewer; + +import static org.freedesktop.dbus.Gettext._; + +import java.awt.Component; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Iterator; + +import javax.swing.JOptionPane; + +final class FileSaver implements Runnable +{ + private static final String CANCEL = "Cancel"; + + private static final String SKIP_ALL = "Skip All"; + + private static final String SKIP = "Skip"; + + private static final String OVERWRITE = "Overwrite"; + + private static final String OVERWRITE_ALL = "Overwrite All"; + + private final File parentDirectory; + + private final Component parentComponent; + + private final Iterable<TextFile> textFiles; + + FileSaver(Component parentComponent, File parentDirectory, + Iterable<TextFile> files) + { + this.parentComponent = parentComponent; + this.parentDirectory = parentDirectory; + this.textFiles = files; + } + + /** {@inheritDoc} */ + public void run() + { + saveFiles(); + } + + private void saveFiles() + { + String overwritePolicy = null; + final Iterator<TextFile> iterator = textFiles.iterator(); + while (iterator.hasNext()) + { + final TextFile textFile = iterator.next(); + String fileName = textFile.getFileName(); + File fileToSave = new File(parentDirectory, fileName); + File parentFile = fileToSave.getParentFile(); + if (parentFile.exists() || parentFile.mkdirs()) + { + boolean doSave = !fileToSave.exists() + || OVERWRITE_ALL.equals(overwritePolicy); + if (!doSave && !SKIP_ALL.equals(overwritePolicy)) + { + String[] selectionValues; + if (iterator.hasNext()) + { + selectionValues = new String[] { OVERWRITE, + OVERWRITE_ALL, SKIP, SKIP_ALL, CANCEL }; + } + else + { + selectionValues = new String[] { OVERWRITE, CANCEL }; + } + int option = JOptionPane.showOptionDialog(parentComponent, + "File exists: " + fileName, "Save", + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE, null, + selectionValues, null); + if (option == -1) + { + break; + } + overwritePolicy = selectionValues[option]; + if (CANCEL.equals(overwritePolicy)) + { + break; + } + + doSave = OVERWRITE.equals(overwritePolicy) + || OVERWRITE_ALL.equals(overwritePolicy); + } + if (doSave) + { + try + { + String contents = textFile.getContents(); + writeFile(fileToSave, contents); + } + catch (final IOException ex) + { + /* Can't access parent directory for saving */ + final String errorMessage = "Could not save " + + fileName + ": " + ex.getLocalizedMessage(); + if (iterator.hasNext()) + { + + int confirm = JOptionPane.showConfirmDialog( + parentComponent, errorMessage + + ".\n"+_("Try saving other files?"), + _("Save Failed"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.ERROR_MESSAGE); + if (confirm != JOptionPane.OK_OPTION) + { + break; + } + } + else + { + JOptionPane.showMessageDialog(parentComponent, + errorMessage + ".", _("Save Failed"), + JOptionPane.ERROR_MESSAGE); + } + } + } + } + else + { + + final String errorMessage = _("Could not access parent directory for ") + + fileName; + if (iterator.hasNext()) + { + + int confirm = JOptionPane.showConfirmDialog( + parentComponent, errorMessage + + ".\n"+_("Try saving other files?"), + _("Save Failed"), JOptionPane.OK_CANCEL_OPTION, + JOptionPane.ERROR_MESSAGE); + if (confirm != JOptionPane.OK_OPTION) + { + break; + } + } + else + { + JOptionPane.showMessageDialog(parentComponent, errorMessage + + ".", _("Save Failed"), JOptionPane.ERROR_MESSAGE); + } + } + } + } + + /** + * @param fileToSave + * @param contents + * @throws IOException + */ + private void writeFile(File fileToSave, String contents) throws IOException + { + FileWriter fileWriter = null; + try + { + fileWriter = new FileWriter(fileToSave); + BufferedWriter writer = new BufferedWriter(fileWriter); + writer.append(contents); + writer.flush(); + } + finally + { + if (fileWriter != null) + { + try + { + fileWriter.close(); + } + catch (IOException e1) + { + } + } + } + } +} |