
org.freedesktop.dbus.viewer.FileSaver Maven / Gradle / Ivy
The newest version!
/*
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 textFiles;
FileSaver(Component parentComponent, File parentDirectory,
Iterable files)
{
this.parentComponent = parentComponent;
this.parentDirectory = parentDirectory;
this.textFiles = files;
}
/** {@inheritDoc} */
public void run()
{
saveFiles();
}
private void saveFiles()
{
String overwritePolicy = null;
final Iterator 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)
{
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy