Logo Search packages:      
Sourcecode: dbus-java version File versions  Download package

FileSaver.java

/*
   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)
                        {
                        }
                  }
            }
      }
}

Generated by  Doxygen 1.6.0   Back to index