Package net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui

Source Code of net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui.FirebirdManagerBackupRestoreFrame

/*
* Copyright (C) 2008 Michael Romankiewicz
* microm at users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.FirebirdManagerHelper;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.TextAreaOutputStream;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui.comp.FBButton;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.FirebirdManagerBackupAndRestorePreferenceBean;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.FirebirdManagerPreferenceBean;
import net.sourceforge.squirrel_sql.plugins.firebirdmanager.pref.PreferencesManager;
import org.firebirdsql.management.FBBackupManager;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.StringTokenizer;

/**
* Internal frame for backup and restore
* @author Michael Romankiewicz
*/
public class FirebirdManagerBackupRestoreFrame extends DialogWidget
    implements IFirebirdManagerFrame, ActionListener, KeyListener {
  private static final long serialVersionUID = 3260000837769327217L;
  private final String CR = System.getProperty("line.separator", "\n");

  // variables
  // ========================================================================
  // non visible
  // ------------------------------------------------------------------------
  // Logger for this class
  private final static ILogger log = LoggerController
      .createLogger(FirebirdManagerBackupRestoreFrame.class);

  private static final StringManager stringManager = StringManagerFactory
      .getStringManager(FirebirdManagerBackupRestoreFrame.class);
 
  private String databaseFolder = "";
  private FirebirdManagerPreferenceBean globalPreferencesBean;
  // session preferences
  private FirebirdManagerBackupAndRestorePreferenceBean sessionPreferencesBean = null;

  // visible (gui)
  // ------------------------------------------------------------------------
  // -- misc
  private JLabel lblUsername = new JLabel();
  private JLabel lblPW = new JLabel();
  private JTextField jtextfieldUsername = new JTextField();
  private JPasswordField jpasswordfieldPW = new JPasswordField();
  private JCheckBox jcheckboxDisplayProcess = new JCheckBox();
  private JTabbedPane jtabbedpaneMain = new JTabbedPane();
  private JTextArea jtextareaProcess = new JTextArea();
    private JScrollPane jscrollpaneProcess = new JScrollPane();

  // -- backup
  private JLabel lblBckDBHost = new JLabel();
  private JLabel lblBckPort = new JLabel();
  private JLabel lblBckDBFile = new JLabel();
  private JTextField jtextfieldBckDBHost = new JTextField();
  private JTextField jtextfieldBckPort = new JTextField();
  private JTextField jtextfieldBckDBFile = new JTextField();
  private JLabel lblBckBackupFile = new JLabel();
  private JTextField jtextfieldBckBackupFile = new JTextField();
  private JCheckBox jcheckboxBckIgnoreChecksum = new JCheckBox();
  private JCheckBox jcheckboxBckIgnoreLimbo = new JCheckBox();
  private FBButton jbuttonBckDBFile = new FBButton();
  private FBButton jbuttonBckBackupFile = new FBButton();
  private JCheckBox jcheckboxBckMetadataOnly = new JCheckBox();
  private JCheckBox jcheckboxBckGarbageCollection = new JCheckBox();
  private JCheckBox jcheckboxBckOldMetadata = new JCheckBox();
  private JCheckBox jcheckboxBckTransportable = new JCheckBox();
  private JCheckBox jcheckboxBckConvertToTables = new JCheckBox();
  private JCheckBox jcheckboxBckNoDataCompression = new JCheckBox();
  private JButton jbuttonLoadBackupProp = new JButton();
  private JButton jbuttonSaveBackupProp = new JButton();

  private FBButton btnCreateBackupFilename = new FBButton();
  private FBButton jbuttonBackup = new FBButton(true);

  // -- restore
  private JLabel lblResBackupFile = new JLabel();
  private JLabel lblResDBHost = new JLabel();
  private JLabel lblResPort = new JLabel();
  private JLabel lblResDBFile = new JLabel();
  private JTextField jtextfieldResBackupFile = new JTextField();
  private JTextField jtextfieldResDBHost = new JTextField();
  private JTextField jtextfieldResPort = new JTextField();
  private JTextField jtextfieldResDBFile = new JTextField();
  private FBButton jbuttonResBackupFile = new FBButton();
  private FBButton jbuttonResDBFile = new FBButton();
  private JCheckBox jcheckboxResDeactivateIndexes = new JCheckBox();
  private JCheckBox jcheckboxResWithoutShadows = new JCheckBox();
  private JCheckBox jcheckboxResUseAllSpace = new JCheckBox();
  private JCheckBox jcheckboxResOneTableAtTime = new JCheckBox();
  private JCheckBox jcheckboxResWithoutValidity = new JCheckBox();
  private JCheckBox jcheckboxResReplaceDatabase = new JCheckBox();
  private JCheckBox jcheckboxResPageSize = new JCheckBox();
  private JLabel lblPageSize = new JLabel();
  private JTextField jtextfieldPageSize = new JTextField();
  private FBButton btnResCopyBackupFilenameFromBackup = new FBButton();
  private FBButton btnResCopyDatabaseFilenameFromBackup = new FBButton();
  private FBButton jbuttonRestore = new FBButton(true);
  private JButton jbuttonLoadRestoreProp = new JButton();
  private JButton jbuttonSaveRestoreProp = new JButton();
   private IApplication _application;


   // ------------------------------------------------------------------------
  /**
   * Constructor
    * @param application
    */
  public FirebirdManagerBackupRestoreFrame(IApplication application) {
    super("Firebird manager - "
        + stringManager.getString("backuprestoremanager.title"), true,
        true, true, true, application);
      _application = application;


      initLayout();
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
    this.moveToFront();
  }

  /**
   * I18n texts
   */
  private interface i18n {
    // Labels
    String LBL_USERNAME = stringManager.getString("backuprestoremanager.label.username");
    String LBL_PASSWORD = stringManager.getString("backuprestoremanager.label.password");
    String LBL_DISPLAY_PROCESS = stringManager.getString("backuprestoremanager.label.display.process");
    String LBL_TABTITLE_BACKUP = stringManager.getString("backuprestoremanager.label.tabtitle.backup");
    String LBL_TABTITLE_RESTORE = stringManager.getString("backuprestoremanager.label.tabtitle.restore");
    String LBL_SERVER = stringManager.getString("backuprestoremanager.label.server");
    String LBL_PORT = stringManager.getString("backuprestoremanager.label.port");
    String LBL_DATABASE_FILE = stringManager.getString("backuprestoremanager.label.database.file");
    String LBL_BACKUP_FILE = stringManager.getString("backuprestoremanager.label.backup.file");
    String LBL_IGNORE_CHECKSUMS = stringManager.getString("backuprestoremanager.label.ignore.checksums");
    String LBL_IGNORE_LIMBO = stringManager.getString("backuprestoremanager.label.ignore.limbo");
    String LBL_BACKUP_METADATA_ONLY = stringManager.getString("backuprestoremanager.label.backup.metadata.only");
    String LBL_GARBAGE_COLLECTION = stringManager.getString("backuprestoremanager.label.garbage.collection");
    String LBL_OLD_STYLE_METADATA = stringManager.getString("backuprestoremanager.label.old.style.metadata");
    String LBL_TRANSPORTABLE_FORMAT = stringManager.getString("backuprestoremanager.label.transportable.format");
    String LBL_BACKUP_AS_TABLES = stringManager.getString("backuprestoremanager.label.backup.as.tables");
    String LBL_START_BACKUP = stringManager.getString("backuprestoremanager.label.start.backup");
    String LBL_DEACTIVATE_INDEXES = stringManager.getString("backuprestoremanager.label.deactivate.indexes");
    String LBL_RESTORE_WITHOUT_SHADOWS = stringManager.getString("backuprestoremanager.label.restore.without.shadows");
    String LBL_USE_ALL_SPACE = stringManager.getString("backuprestoremanager.label.use.all.space");
    String LBL_ONE_TABLE_AT_TIME = stringManager.getString("backuprestoremanager.label.one.table.at.time");
    String LBL_WITHOUT_VALIDITY = stringManager.getString("backuprestoremanager.label.without.validity");
    String LBL_REPLACE_DATABASE = stringManager.getString("backuprestoremanager.label.replace.database");
    String LBL_OVERRIDE_PAGE_SIZE = stringManager.getString("backuprestoremanager.label.override.page.size");
    String LBL_NEW_PAGE_SIZE = stringManager.getString("backuprestoremanager.label.new.page.size");
    String LBL_RESTORE = stringManager.getString("backuprestoremanager.label.restore");
    String TOOLTIP_GENERATE_BACKUPFILENAME = stringManager.getString("backuprestoremanager.tooltip.generate.backupfilename");
    String TOOLTIP_ADOPT_FROM_BACKUP_PAGE = stringManager.getString("backuprestoremanager.tooltip.adopt.from.backup.page");
    String GLOBAL_TOOLTIP_BTN_PROP_LOAD = stringManager.getString("global.tooltip.btn.prop.load");
    String GLOBAL_TOOLTIP_BTN_PROP_SAVE = stringManager.getString("global.tooltip.btn.prop.save");
    String GLOBAL_WARNING_FILE_EXISTS = stringManager.getString("global.warning.file.exists");
    String GLOBAL_TITLE_WARNING = stringManager.getString("global.title.warning");
   
    // errors
    String ERROR_USERNAME_MISSING = stringManager.getString("backuprestoremanager.error.username.missing");
    String ERROR_FILENAME_BACKUP_MISSING = stringManager.getString("backuprestoremanager.error.filename.backupfile.missing");
    String ERROR_FILENAME_DATABASE_MISSING = stringManager.getString("backuprestoremanager.error.filename.databasefile.missing");
    String ERROR_FILENAME_NOT_EXISTS = stringManager.getString("backuprestoremanager.error.filename.doesnotexists");
    String ERROR_SERVER_MISSING = stringManager.getString("backuprestoremanager.error.server.missing");
    String ERROR_PORT_MISSING = stringManager.getString("backuprestoremanager.error.port.missing");
    String ERROR_PORT_NO_INTEGER = stringManager.getString("backuprestoremanager.error.port.nointeger");
    String LOAD_PROP_FAILED = stringManager.getString("global.error.prop.load");
    String SAVE_PROP_FAILED = stringManager.getString("global.error.prop.save");
   
    // info
    String INFO_BACKUP_COMPLETED = stringManager.getString("backuprestoremanager.info.backup.completed");
    String INFO_BACKUP_CANCELED = stringManager.getString("backuprestoremanager.info.backup.canceled");
    String INFO_RESTORE_COMPLETED = stringManager.getString("backuprestoremanager.info.restore.completed");
    String INFO_RESTORE_CANCELED = stringManager.getString("backuprestoremanager.info.restore.canceled");
    String INFO_PROPFILE_BACKUP = stringManager.getString("backuprestoremanager.info.properties.file.backup");
    String INFO_PROPFILE_RESTORE = stringManager.getString("backuprestoremanager.info.properties.file.restore");
  }

  private void initLayout() {
    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(createPanelMain());

    initVisualObjects();
    readPreferences();
  }

  /**
   * Configure the visual components with texts, icons and listeners
   */
  private void initVisualObjects() {
    Icon iconFileSelection = FirebirdManagerHelper.loadIcon("fileopen16x16.png");
    Icon iconStartWork = FirebirdManagerHelper.loadIcon("execute16x16.png");
    Icon iconAdopt = FirebirdManagerHelper.loadIcon("import16x16.png");
    Icon iconGenerate = FirebirdManagerHelper.loadIcon("generate16x16.png");
    Icon iconSave = FirebirdManagerHelper.loadIcon("save16x16.png");
   
    jbuttonBckBackupFile.addActionListener(this);
    jbuttonBckDBFile.addActionListener(this);
    jbuttonBackup.addActionListener(this);
    jbuttonResBackupFile.addActionListener(this);
    jbuttonResDBFile.addActionListener(this);
    jbuttonRestore.addActionListener(this);
    btnCreateBackupFilename.addActionListener(this);
    btnResCopyBackupFilenameFromBackup.addActionListener(this);
    btnResCopyDatabaseFilenameFromBackup.addActionListener(this);

    jtextfieldBckDBHost.addKeyListener(this);
    jtextfieldResDBHost.addKeyListener(this);
   
    jcheckboxResPageSize.addActionListener(this);
    jtextfieldPageSize.setEnabled(false);
    jtextfieldPageSize.setBackground(Color.LIGHT_GRAY);
   
    lblUsername.setText(i18n.LBL_USERNAME);
    lblPW.setText(i18n.LBL_PASSWORD);
    jcheckboxDisplayProcess.setText(i18n.LBL_DISPLAY_PROCESS);
    jcheckboxDisplayProcess.setSelected(true);
   
    jtabbedpaneMain.setTitleAt(0, i18n.LBL_TABTITLE_BACKUP);
    jtabbedpaneMain.setTitleAt(1, i18n.LBL_TABTITLE_RESTORE);

    jbuttonLoadBackupProp.setText("");
    jbuttonLoadBackupProp.setToolTipText(i18n.GLOBAL_TOOLTIP_BTN_PROP_LOAD);
    jbuttonLoadBackupProp.setIcon(iconFileSelection);
    jbuttonLoadBackupProp.addActionListener(this);
    jbuttonLoadBackupProp.addKeyListener(this);
    jbuttonSaveBackupProp.setText("");
    jbuttonSaveBackupProp.setToolTipText(i18n.GLOBAL_TOOLTIP_BTN_PROP_SAVE);
    jbuttonSaveBackupProp.setIcon(iconSave);
    jbuttonSaveBackupProp.addActionListener(this);
    jbuttonSaveBackupProp.addKeyListener(this);
    lblBckDBHost.setText(i18n.LBL_SERVER); // "server"
    lblBckPort.setText(i18n.LBL_PORT); // "port"
    lblBckDBFile.setText(i18n.LBL_DATABASE_FILE); // "database file"
    lblBckBackupFile.setText(i18n.LBL_BACKUP_FILE); // "backup file"
    btnCreateBackupFilename.setText("");
    btnCreateBackupFilename.setToolTipText(i18n.TOOLTIP_GENERATE_BACKUPFILENAME);
    btnCreateBackupFilename.setIcon(iconGenerate);
    jcheckboxBckIgnoreChecksum.setText(i18n.LBL_IGNORE_CHECKSUMS); // "ignore bad checksums"
    jcheckboxBckIgnoreLimbo.setText(i18n.LBL_IGNORE_LIMBO); // "ignore transaction in Limbo"
    jbuttonBckDBFile.setText("");
    jbuttonBckDBFile.setIcon(iconFileSelection);
    jbuttonBckBackupFile.setText("");
    jbuttonBckBackupFile.setIcon(iconFileSelection);
    jcheckboxBckMetadataOnly.setText(i18n.LBL_BACKUP_METADATA_ONLY); // "backup metadata only"
    jcheckboxBckGarbageCollection.setText(i18n.LBL_GARBAGE_COLLECTION); // "inhibit garbage collection"
    jcheckboxBckOldMetadata.setText(i18n.LBL_OLD_STYLE_METADATA); // "save old style metadata descriptions"
    jcheckboxBckTransportable.setText(i18n.LBL_TRANSPORTABLE_FORMAT); // "transportable format"
    jcheckboxBckConvertToTables.setText(i18n.LBL_BACKUP_AS_TABLES); // "backup external files as tables"
    jbuttonBackup.setText(i18n.LBL_START_BACKUP); // "start backup"
    jbuttonBackup.setIcon(iconStartWork);

    jbuttonLoadRestoreProp.setText("");
    jbuttonLoadRestoreProp.setToolTipText(i18n.GLOBAL_TOOLTIP_BTN_PROP_LOAD);
    jbuttonLoadRestoreProp.setIcon(iconFileSelection);
    jbuttonLoadRestoreProp.addActionListener(this);
    jbuttonLoadRestoreProp.addKeyListener(this);
    jbuttonSaveRestoreProp.setText("");
    jbuttonSaveRestoreProp.setToolTipText(i18n.GLOBAL_TOOLTIP_BTN_PROP_SAVE);
    jbuttonSaveRestoreProp.setIcon(iconSave);
    jbuttonSaveRestoreProp.addActionListener(this);
    jbuttonSaveRestoreProp.addKeyListener(this);
    lblResBackupFile.setText(i18n.LBL_BACKUP_FILE); // "backup file"
    btnResCopyBackupFilenameFromBackup.setText("");
    btnResCopyBackupFilenameFromBackup.setToolTipText(i18n.TOOLTIP_ADOPT_FROM_BACKUP_PAGE);
    btnResCopyBackupFilenameFromBackup.setIcon(iconAdopt);
    lblResDBHost.setText(i18n.LBL_SERVER); // "server"
    lblResPort.setText(i18n.LBL_PORT); // "port"
    lblResDBFile.setText(i18n.LBL_DATABASE_FILE); // "database file"
    btnResCopyDatabaseFilenameFromBackup.setText("");
    btnResCopyDatabaseFilenameFromBackup.setToolTipText(i18n.TOOLTIP_ADOPT_FROM_BACKUP_PAGE);
    btnResCopyDatabaseFilenameFromBackup.setIcon(iconAdopt);
    jbuttonResBackupFile.setText("");
    jbuttonResBackupFile.setIcon(iconFileSelection);
    jbuttonResDBFile.setText("");
    jbuttonResDBFile.setIcon(iconFileSelection);
    jcheckboxResDeactivateIndexes.setText(i18n.LBL_DEACTIVATE_INDEXES); // "deactivate indexes during restore"
    jcheckboxResWithoutShadows.setText(i18n.LBL_RESTORE_WITHOUT_SHADOWS); // "restore without creating shadows"
    jcheckboxResUseAllSpace.setText(i18n.LBL_USE_ALL_SPACE); // "do not reserve space for record versions"
    jcheckboxResOneTableAtTime.setText(i18n.LBL_ONE_TABLE_AT_TIME); // "restores one table at a time"
    jcheckboxResWithoutValidity.setText(i18n.LBL_WITHOUT_VALIDITY); // "do not restore database validity conditions"
    jcheckboxResReplaceDatabase.setText(i18n.LBL_REPLACE_DATABASE); // "replace database from backup file"
    jcheckboxResPageSize.setText(i18n.LBL_OVERRIDE_PAGE_SIZE); // "override old page size"
    lblPageSize.setText(i18n.LBL_NEW_PAGE_SIZE); // "new page size"
    jbuttonRestore.setText(i18n.LBL_RESTORE); // "restore"
    jbuttonRestore.setIcon(iconStartWork);

  }

  public JPanel createPanelMain() {
        JPanel jpanelMain = new JPanel();
        FormLayout formlayout1 = new FormLayout("FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE","CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:5DLU:NONE,FILL:70DLU:NONE,CENTER:5DLU:NONE");
        CellConstraints cc = new CellConstraints();
        jpanelMain.setLayout(formlayout1);

        lblUsername.setName("lblUsername");
        lblUsername.setText("username");
        jpanelMain.add(lblUsername,cc.xy(2,2));

        lblPW.setName("lblPW");
        lblPW.setText("password");
        jpanelMain.add(lblPW,cc.xy(2,4));

        jtextfieldUsername.setName("jtextfieldUsername");
        jpanelMain.add(jtextfieldUsername,cc.xy(4,2));

        jpasswordfieldPW.setName("jpasswordfieldPW");
        jpanelMain.add(jpasswordfieldPW,cc.xy(4,4));

        jtabbedpaneMain.setName("jtabbedpaneMain");
        jtabbedpaneMain.addTab("backup",null,createPanelBackup());
        jtabbedpaneMain.addTab("restore",null,createPanelRestore());
        jpanelMain.add(jtabbedpaneMain,cc.xywh(2,8,5,1));

        jtextareaProcess.setName("jtextareaProcess");
//        JScrollPane jscrollpane1 = new JScrollPane();
        jscrollpaneProcess.setViewportView(jtextareaProcess);
        jscrollpaneProcess.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        jscrollpaneProcess.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jpanelMain.add(jscrollpaneProcess,cc.xywh(2,10,5,1));

        jcheckboxDisplayProcess.setActionCommand("display process");
        jcheckboxDisplayProcess.setName("jcheckboxDisplayProcess");
        jcheckboxDisplayProcess.setText("display process");
        jpanelMain.add(jcheckboxDisplayProcess,cc.xy(4,6));

        return jpanelMain;
  }

  public JPanel createPanelBackup() {
        JPanel jpanelBackup = new JPanel();
        FormLayout formlayout1 = new FormLayout("FILL:3DLU:NONE,LEFT:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE","CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,FILL:DEFAULT:NONE,FILL:5DLU:NONE");
        CellConstraints cc = new CellConstraints();
        jpanelBackup.setLayout(formlayout1);

        lblBckDBHost.setName("lblBckDBHost");
        lblBckDBHost.setText("database host");
        jpanelBackup.add(lblBckDBHost,cc.xy(2,2));

        lblBckDBFile.setName("lblBckDBFile");
        lblBckDBFile.setText("database file");
        jpanelBackup.add(lblBckDBFile,cc.xy(2,4));

        jtextfieldBckDBHost.setName("jtextfieldBckDBHost");
        jpanelBackup.add(jtextfieldBckDBHost,cc.xywh(4,2,3,1));

        jtextfieldBckDBFile.setName("jtextfieldBckDBFile");
        jpanelBackup.add(jtextfieldBckDBFile,cc.xywh(4,4,7,1));

        lblBckBackupFile.setName("lblBckBackupFile");
        lblBckBackupFile.setText("backup file");
        jpanelBackup.add(lblBckBackupFile,cc.xy(2,6));

        jtextfieldBckBackupFile.setName("jtextfieldBckBackupFile");
        jpanelBackup.add(jtextfieldBckBackupFile,cc.xywh(4,6,7,1));

        jcheckboxBckIgnoreChecksum.setActionCommand("ignore bad checksums");
        jcheckboxBckIgnoreChecksum.setName("jcheckboxBckIgnoreChecksum");
        jcheckboxBckIgnoreChecksum.setText("ignore bad checksums");
        jpanelBackup.add(jcheckboxBckIgnoreChecksum,cc.xywh(2,8,3,1));

        jcheckboxBckIgnoreLimbo.setActionCommand("ignore transaction in Limbo");
        jcheckboxBckIgnoreLimbo.setName("jcheckboxBckIgnoreLimbo");
        jcheckboxBckIgnoreLimbo.setText("ignore transaction in Limbo");
        jpanelBackup.add(jcheckboxBckIgnoreLimbo,cc.xywh(6,8,9,1));

        jbuttonBckDBFile.setActionCommand("...");
        jbuttonBckDBFile.setName("jbuttonBckDBFile");
        jbuttonBckDBFile.setText("...");
        jpanelBackup.add(jbuttonBckDBFile,cc.xy(14,4));

        jbuttonBckBackupFile.setActionCommand("...");
        jbuttonBckBackupFile.setName("jbuttonBckBackupFile");
        jbuttonBckBackupFile.setText("...");
        jpanelBackup.add(jbuttonBckBackupFile,cc.xy(14,6));

        jcheckboxBckMetadataOnly.setActionCommand("backup metadata only");
        jcheckboxBckMetadataOnly.setName("jcheckboxBckMetadataOnly");
        jcheckboxBckMetadataOnly.setText("backup metadata only");
        jpanelBackup.add(jcheckboxBckMetadataOnly,cc.xywh(2,10,3,1));

        jcheckboxBckGarbageCollection.setActionCommand("inhibit garbage collection");
        jcheckboxBckGarbageCollection.setName("jcheckboxBckGarbageCollection");
        jcheckboxBckGarbageCollection.setText("inhibit garbage collection");
        jpanelBackup.add(jcheckboxBckGarbageCollection,cc.xywh(6,10,9,1));

        jcheckboxBckOldMetadata.setActionCommand("save old style metadata descriptions");
        jcheckboxBckOldMetadata.setName("jcheckboxBckOldMetadata");
        jcheckboxBckOldMetadata.setText("save old style metadata descriptions");
        jpanelBackup.add(jcheckboxBckOldMetadata,cc.xywh(2,12,3,1));

        jcheckboxBckTransportable.setActionCommand("transportable format");
        jcheckboxBckTransportable.setName("jcheckboxBckTransportable");
        jcheckboxBckTransportable.setSelected(true);
        jcheckboxBckTransportable.setText("transportable format");
        jpanelBackup.add(jcheckboxBckTransportable,cc.xywh(2,14,3,1));

        jcheckboxBckConvertToTables.setActionCommand("backup external files as tables");
        jcheckboxBckConvertToTables.setName("jcheckboxBckConvertToTables");
        jcheckboxBckConvertToTables.setText("backup external files as tables");
        jpanelBackup.add(jcheckboxBckConvertToTables,cc.xywh(6,12,9,1));

        jpanelBackup.add(createPanelBackupButton(),new CellConstraints(2,16,13,1,CellConstraints.CENTER,CellConstraints.DEFAULT));
        lblBckPort.setName("lblBckPort");
        lblBckPort.setText("Port");
        jpanelBackup.add(lblBckPort,cc.xy(8,2));

        jtextfieldBckPort.setName("jtextfieldBckPort");
        jpanelBackup.add(jtextfieldBckPort,cc.xy(10,2));

        btnCreateBackupFilename.setActionCommand("...");
        btnCreateBackupFilename.setName("btnCreateBackupFilename");
        btnCreateBackupFilename.setText("...");
        btnCreateBackupFilename.setToolTipText("create date filename");
        jpanelBackup.add(btnCreateBackupFilename,cc.xy(12,6));

        jcheckboxBckNoDataCompression.setActionCommand("no data compression");
        jcheckboxBckNoDataCompression.setName("jcheckboxNoDataCompression");
        jcheckboxBckNoDataCompression.setText("no data compression");
        jpanelBackup.add(jcheckboxBckNoDataCompression,cc.xywh(6,14,9,1));

        jbuttonSaveBackupProp.setActionCommand("...");
        jbuttonSaveBackupProp.setName("jbuttonSaveBackupProp");
        jbuttonSaveBackupProp.setText("...");
        jpanelBackup.add(jbuttonSaveBackupProp,cc.xy(12,2));

        jbuttonLoadBackupProp.setActionCommand("...");
        jbuttonLoadBackupProp.setName("jbuttonLoadBackupProp");
        jbuttonLoadBackupProp.setText("...");
        jpanelBackup.add(jbuttonLoadBackupProp,cc.xy(14,2));

        return jpanelBackup;
  }

   public JPanel createPanelBackupButton() {
    JPanel jpanelBackupButton = new JPanel();
    FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE",
        "BOTTOM:DEFAULT:NONE");
    jpanelBackupButton.setLayout(formlayout1);

    jbuttonBackup.setActionCommand("Start Backup");
    jbuttonBackup.setName("jbuttonBackup");
    jbuttonBackup.setText("Start Backup");
    jpanelBackupButton.add(jbuttonBackup, new CellConstraints(1, 1, 1, 1,
        CellConstraints.DEFAULT, CellConstraints.BOTTOM));

    return jpanelBackupButton;
  }

    public JPanel createPanelRestore() {
    JPanel jpanelRestore = new JPanel();
    FormLayout formlayout1 = new FormLayout(
        "FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE",
        "CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,CENTER:DEFAULT:NONE,CENTER:5DLU:NONE,FILL:DEFAULT:NONE,FILL:5DLU:NONE");
    CellConstraints cc = new CellConstraints();
    jpanelRestore.setLayout(formlayout1);

    lblResDBFile.setName("lblResDBFile");
    lblResDBFile.setText("database file");
    jpanelRestore.add(lblResDBFile, cc.xy(2, 6));

    jtextfieldResDBFile.setName("jtextfieldResDBFile");
    jpanelRestore.add(jtextfieldResDBFile, cc.xywh(4, 6, 7, 1));

    jbuttonResDBFile.setActionCommand("...");
    jbuttonResDBFile.setName("jbuttonResDBFile");
    jbuttonResDBFile.setText("...");
    jpanelRestore.add(jbuttonResDBFile, cc.xy(14, 6));

    jcheckboxResDeactivateIndexes
        .setActionCommand("deactivate indexes during restore");
    jcheckboxResDeactivateIndexes.setName("jcheckboxResDeactivateIndexes");
    jcheckboxResDeactivateIndexes
        .setText("deactivate indexes during restore");
    jpanelRestore.add(jcheckboxResDeactivateIndexes, cc.xywh(2, 8, 3, 1));

    jcheckboxResWithoutShadows
        .setActionCommand("restore without creating shadows");
    jcheckboxResWithoutShadows.setName("jcheckboxResWithoutShadows");
    jcheckboxResWithoutShadows.setText("restore without creating shadows");
    jpanelRestore.add(jcheckboxResWithoutShadows, cc.xywh(2, 10, 3, 1));

    jcheckboxResUseAllSpace
        .setActionCommand("do not reserve space for record versions");
    jcheckboxResUseAllSpace.setName("jcheckboxResUseAllSpace");
    jcheckboxResUseAllSpace
        .setText("do not reserve space for record versions");
    jpanelRestore.add(jcheckboxResUseAllSpace, cc.xywh(2, 12, 3, 1));

    jcheckboxResOneTableAtTime
        .setActionCommand("restores one table at a time");
    jcheckboxResOneTableAtTime.setName("jcheckboxResOneTableAtTime");
    jcheckboxResOneTableAtTime.setText("restores one table at a time");
    jpanelRestore.add(jcheckboxResOneTableAtTime, cc.xywh(6, 8, 9, 1));

    jcheckboxResWithoutValidity
        .setActionCommand("do not restore database validity conditions");
    jcheckboxResWithoutValidity.setName("jcheckboxResWithoutValidity");
    jcheckboxResWithoutValidity
        .setText("do not restore database validity conditions");
    jpanelRestore.add(jcheckboxResWithoutValidity, cc.xywh(6, 10, 9, 1));

    jcheckboxResReplaceDatabase
        .setActionCommand("replace database from backup file");
    jcheckboxResReplaceDatabase.setName("jcheckboxResReplaceDatabase");
    jcheckboxResReplaceDatabase
        .setText("replace database from backup file");
    jpanelRestore.add(jcheckboxResReplaceDatabase, cc.xywh(6, 12, 9, 1));

    jpanelRestore.add(createPanelRestoreButton(), new CellConstraints(2,
        16, 13, 1, CellConstraints.CENTER, CellConstraints.DEFAULT));
    jcheckboxResPageSize.setActionCommand("override old page size");
    jcheckboxResPageSize.setName("jcheckboxResPageSize");
    jcheckboxResPageSize.setText("override old page size");
    jpanelRestore.add(jcheckboxResPageSize, cc.xywh(2, 14, 3, 1));

    jpanelRestore.add(createPanelRestorePageSize(), cc.xywh(6, 14, 9, 1));
    jtextfieldResPort.setName("jtextfieldResPort");
    jpanelRestore.add(jtextfieldResPort, cc.xy(10, 2));

    lblResPort.setName("lblResPort");
    lblResPort.setText("Port");
    jpanelRestore.add(lblResPort, cc.xy(8, 2));

    jtextfieldResBackupFile.setName("jtextfieldResBackupFile");
    jpanelRestore.add(jtextfieldResBackupFile, cc.xywh(4, 4, 7, 1));

    lblResDBHost.setName("lblResDBHost");
    lblResDBHost.setText("database host");
    jpanelRestore.add(lblResDBHost, cc.xy(2, 2));

    lblResBackupFile.setName("lblResBackupFile");
    lblResBackupFile.setText("backup file");
    jpanelRestore.add(lblResBackupFile, cc.xy(2, 4));

    jtextfieldResDBHost.setName("jtextfieldResDBHost");
    jpanelRestore.add(jtextfieldResDBHost, cc.xywh(4, 2, 3, 1));

    jbuttonResBackupFile.setActionCommand("...");
    jbuttonResBackupFile.setName("jbuttonResBackupFile");
    jbuttonResBackupFile.setText("...");
    jpanelRestore.add(jbuttonResBackupFile, cc.xy(14, 4));

    btnResCopyBackupFilenameFromBackup.setActionCommand("...");
    btnResCopyBackupFilenameFromBackup
        .setName("btnResCopyBackupFilenameFromBackup");
    btnResCopyBackupFilenameFromBackup.setText("...");
    btnResCopyBackupFilenameFromBackup
        .setToolTipText("copy backup filename from the backup page");
    jpanelRestore.add(btnResCopyBackupFilenameFromBackup, cc.xy(12, 4));

    btnResCopyDatabaseFilenameFromBackup.setActionCommand("...");
    btnResCopyDatabaseFilenameFromBackup
        .setName("btnResCopyDatabaseFilenameFromBackup");
    btnResCopyDatabaseFilenameFromBackup.setText("...");
    btnResCopyDatabaseFilenameFromBackup
        .setToolTipText("copy database filename from the backup page");
    jpanelRestore.add(btnResCopyDatabaseFilenameFromBackup, cc.xy(12, 6));

    jbuttonSaveRestoreProp.setActionCommand("...");
    jbuttonSaveRestoreProp.setName("jbuttonSaveRestoreProp");
    jbuttonSaveRestoreProp.setText("...");
    jpanelRestore.add(jbuttonSaveRestoreProp, cc.xy(12, 2));

    jbuttonLoadRestoreProp.setActionCommand("...");
    jbuttonLoadRestoreProp.setName("jbuttonLoadRestoreProp");
    jbuttonLoadRestoreProp.setText("...");
    jpanelRestore.add(jbuttonLoadRestoreProp, cc.xy(14, 2));

    return jpanelRestore;
  }

  public JPanel createPanelRestoreButton() {
    JPanel jpanelRestoreButton = new JPanel();
    FormLayout formlayout1 = new FormLayout("CENTER:DEFAULT:NONE",
        "BOTTOM:DEFAULT:NONE");
    CellConstraints cc = new CellConstraints();
    jpanelRestoreButton.setLayout(formlayout1);

    jbuttonRestore.setActionCommand("JButton");
    jbuttonRestore.setName("jbuttonRestore");
    jbuttonRestore.setText("JButton");
    jpanelRestoreButton.add(jbuttonRestore, cc.xy(1, 1));

    return jpanelRestoreButton;
  }

  public JPanel createPanelRestorePageSize() {
    JPanel jpanelRestorePageSize = new JPanel();
    FormLayout formlayout1 = new FormLayout(
        "FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:30DLU:NONE",
        "CENTER:DEFAULT:NONE");
    CellConstraints cc = new CellConstraints();
    jpanelRestorePageSize.setLayout(formlayout1);

    lblPageSize.setName("lblPageSize");
    lblPageSize.setText("new page size");
    jpanelRestorePageSize.add(lblPageSize, cc.xy(1, 1));

    jtextfieldPageSize.setEnabled(false);
    jtextfieldPageSize.setName("jtextfieldPageSize");
    jpanelRestorePageSize.add(jtextfieldPageSize, cc.xy(3, 1));

    return jpanelRestorePageSize;
  }
 
  public void setFocusToFirstEmptyInputField() {
    if (jtextfieldUsername.getText().length() == 0) {
      jtextfieldUsername.requestFocusInWindow();
    } else {
      jpasswordfieldPW.requestFocusInWindow();
    }
  }


  /**
   * Set input fields with the last saved session preferences when exists
   * <br>or otherwise with the global preferences
   */
  private void readPreferences() {
    // global preferences
    globalPreferencesBean = PreferencesManager.getGlobalPreferences();
    databaseFolder = globalPreferencesBean.getDatabaseFolder();
    if (databaseFolder == null) {
      databaseFolder = "";
    }
    jtextfieldUsername.setText(globalPreferencesBean.getUser());
    jtextfieldBckDBHost.setText(globalPreferencesBean.getServer());
    jtextfieldBckPort.setText(globalPreferencesBean.getPort());
    jtextfieldResDBHost.setText(globalPreferencesBean.getServer());
    jtextfieldResPort.setText(globalPreferencesBean.getPort());
   
    // preferences from the last session
    sessionPreferencesBean = (FirebirdManagerBackupAndRestorePreferenceBean)PreferencesManager.loadPreferences(PreferencesManager.PREFERENCES_BEAN_BEACKUP_AND_RESTORE);
    if (sessionPreferencesBean.getUser().length() > 0)
      jtextfieldUsername.setText(sessionPreferencesBean.getUser());
    if (sessionPreferencesBean.getServer().length() > 0)
      jtextfieldResDBHost.setText(sessionPreferencesBean.getServer());
    if (sessionPreferencesBean.getPort().length() > 0)
      jtextfieldBckPort.setText(sessionPreferencesBean.getPort());
    if (sessionPreferencesBean.getBckDatabaseFilename().length() > 0)
      jtextfieldBckDBFile.setText(sessionPreferencesBean.getBckDatabaseFilename());
    if (sessionPreferencesBean.getBckBackupFilename().length() > 0)
      jtextfieldBckBackupFile.setText(sessionPreferencesBean.getBckBackupFilename());
    jcheckboxDisplayProcess.setSelected(sessionPreferencesBean.isDisplayProcess());
  }
 
  /**
   * Save the session preferences (only backup entries, restore filenames must be selected manually)
   */
  private void saveSessionPreferences() {
    sessionPreferencesBean.setUser(jtextfieldUsername.getText());
    sessionPreferencesBean.setServer(jtextfieldResDBHost.getText());
    sessionPreferencesBean.setPort(jtextfieldBckPort.getText());
    sessionPreferencesBean.setBckDatabaseFilename(jtextfieldBckDBFile.getText());
    sessionPreferencesBean.setBckBackupFilename(jtextfieldBckBackupFile.getText());
    sessionPreferencesBean.setDisplayProcess(jcheckboxDisplayProcess.isSelected());
   
    PreferencesManager.savePreferences(sessionPreferencesBean, PreferencesManager.PREFERENCES_BEAN_BEACKUP_AND_RESTORE);
  }
 
  /**
   * Select a filename for the given textfield
   * @param textField textfield to fill with the selected filename
   */
  private void selectFile(JTextField textField) {
    String oldName = textField.getText().trim().length() == 0 ? databaseFolder : textField.getText();
    String newFilename = FirebirdManagerHelper.getFileOrDir(oldName, true);
    if (!newFilename.equals(""))
      textField.setText(newFilename);
  }

  /**
   * Load backup properties from file
   */
  private void loadBackupProperties() {
    File file = FirebirdManagerHelper.getPropertiesFile(false, globalPreferencesBean.getPropertiesFolder(), "fbp", i18n.INFO_PROPFILE_BACKUP);
    if (file != null) {
      Properties prop = new Properties();
      try {
        prop.load(new FileInputStream(file));
      } catch (FileNotFoundException e) {
              JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.LOAD_PROP_FAILED);
        log.error(e.getLocalizedMessage());
      } catch (IOException e) {
              JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.LOAD_PROP_FAILED);
        log.error(e.getLocalizedMessage());
      }
     
      // load properties and fill missing entries with the global preferences
      sessionPreferencesBean = (FirebirdManagerBackupAndRestorePreferenceBean)PreferencesManager.loadPreferences(PreferencesManager.PREFERENCES_BEAN_BEACKUP_AND_RESTORE);
      jtextfieldUsername.setText(prop.getProperty("user", sessionPreferencesBean.getUser()));
      jcheckboxDisplayProcess.setSelected(prop.getProperty("display.process", "true").equals("true"));
      jtextfieldBckDBHost.setText(prop.getProperty("backup.server", sessionPreferencesBean.getServer()));
      jtextfieldBckPort.setText(prop.getProperty("backup.port", sessionPreferencesBean.getPort()));
      jtextfieldBckDBFile.setText(prop.getProperty("backup.dbfile", ""));

      jcheckboxBckIgnoreChecksum.setSelected(prop.getProperty("backup.checksums", "true").equals("true"));
      jcheckboxBckMetadataOnly.setSelected(prop.getProperty("backup.metadata", "true").equals("true"));
      jcheckboxBckOldMetadata.setSelected(prop.getProperty("backup.oldstyle", "true").equals("true"));
      jcheckboxBckTransportable.setSelected(prop.getProperty("backup.transportable", "true").equals("true"));
      jcheckboxBckIgnoreLimbo.setSelected(prop.getProperty("backup.limbo", "true").equals("true"));
      jcheckboxBckGarbageCollection.setSelected(prop.getProperty("backup.garbarge", "true").equals("true"));
      jcheckboxBckConvertToTables.setSelected(prop.getProperty("backup.totables", "true").equals("true"));
      jcheckboxBckNoDataCompression.setSelected(prop.getProperty("backup.nocompression", "true").equals("true"));
    }
  }

  /**
   * Save backup properties from file
   */
  private void saveBackupProperties() {
    File file = FirebirdManagerHelper.getPropertiesFile(true, globalPreferencesBean.getPropertiesFolder(), "fbp", i18n.INFO_PROPFILE_BACKUP);
    if (file != null) {
      boolean saveFile = true;
      if (file.exists()) {
        saveFile = JOptionPane.showConfirmDialog(
            _application.getMainFrame(), i18n.GLOBAL_WARNING_FILE_EXISTS,
            i18n.GLOBAL_TITLE_WARNING,
            JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
      }
     
      if (saveFile) {
        Properties prop = new Properties();
        prop.put("user", jtextfieldUsername.getText());
        prop.put("display.process", jcheckboxDisplayProcess.isSelected() ? "true" : "false");
        prop.put("backup.server", jtextfieldBckDBHost.getText());
        prop.put("backup.port", jtextfieldBckPort.getText());
        prop.put("backup.dbfile", jtextfieldBckDBFile.getText());
        prop.put("backup.checksums", jcheckboxBckIgnoreChecksum.isSelected() ? "true" : "false");
        prop.put("backup.metadata", jcheckboxBckMetadataOnly.isSelected() ? "true" : "false");
        prop.put("backup.oldstyle", jcheckboxBckOldMetadata.isSelected() ? "true" : "false");
        prop.put("backup.transportable", jcheckboxBckTransportable.isSelected() ? "true" : "false");
        prop.put("backup.limbo", jcheckboxBckIgnoreLimbo.isSelected() ? "true" : "false");
        prop.put("backup.garbarge", jcheckboxBckGarbageCollection.isSelected() ? "true" : "false");
        prop.put("backup.totables", jcheckboxBckConvertToTables.isSelected() ? "true" : "false");
        prop.put("backup.nocompression", jcheckboxBckNoDataCompression.isSelected() ? "true" : "false");

        try {
          prop.store(new FileOutputStream(file),
              "FirebirdManager - Backup properties");
        } catch (FileNotFoundException e) {
          JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.SAVE_PROP_FAILED);
          log.error(e.getLocalizedMessage());
        } catch (IOException e) {
          JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.SAVE_PROP_FAILED);
          log.error(e.getLocalizedMessage());
        }
      }
    }
  }
 
  /**
   * Load restore properties from file
   */
  private void loadRestoreProperties() {
    File file = FirebirdManagerHelper.getPropertiesFile(false, globalPreferencesBean.getPropertiesFolder(), "frp", i18n.INFO_PROPFILE_RESTORE);
    if (file != null) {
      Properties prop = new Properties();
      try {
        prop.load(new FileInputStream(file));
      } catch (FileNotFoundException e) {
              JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.LOAD_PROP_FAILED);
        log.error(e.getLocalizedMessage());
      } catch (IOException e) {
              JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.LOAD_PROP_FAILED);
        log.error(e.getLocalizedMessage());
      }
     
      // load properties and fill missing entries with the global preferences
      sessionPreferencesBean = (FirebirdManagerBackupAndRestorePreferenceBean)PreferencesManager.loadPreferences(PreferencesManager.PREFERENCES_BEAN_BEACKUP_AND_RESTORE);
      jtextfieldUsername.setText(prop.getProperty("user", sessionPreferencesBean.getUser()));
      jcheckboxDisplayProcess.setSelected(prop.getProperty("display.process", "true").equals("true"));
      jtextfieldResDBHost.setText(prop.getProperty("restore.server", sessionPreferencesBean.getServer()));
      jtextfieldResPort.setText(prop.getProperty("restore.port", sessionPreferencesBean.getPort()));
      jtextfieldResDBFile.setText(prop.getProperty("restore.dbfile", ""));

      jcheckboxResDeactivateIndexes.setSelected(prop.getProperty("restore.indexes", "true").equals("true"));
      jcheckboxResWithoutShadows.setSelected(prop.getProperty("restore.shadows", "true").equals("true"));
      jcheckboxResUseAllSpace.setSelected(prop.getProperty("restore.allspace", "true").equals("true"));
      jcheckboxResOneTableAtTime.setSelected(prop.getProperty("restore.onetable", "true").equals("true"));
      jcheckboxResWithoutValidity.setSelected(prop.getProperty("restore.validity", "true").equals("true"));
      jcheckboxResReplaceDatabase.setSelected(prop.getProperty("restore.replace", "true").equals("true"));
      jcheckboxResPageSize.setSelected(prop.getProperty("restore.setpagesize", "true").equals("true"));
      jtextfieldPageSize.setText(prop.getProperty("restore.newpagesize", ""));
    }
  }

  /**
   * Save restore properties from file
   */
  private void saveRestoreProperties() {
    File file = FirebirdManagerHelper.getPropertiesFile(true, globalPreferencesBean.getPropertiesFolder(), "frp", i18n.INFO_PROPFILE_RESTORE);
    if (file != null) {
      boolean saveFile = true;
      if (file.exists()) {
        saveFile = JOptionPane.showConfirmDialog(
            _application.getMainFrame(), i18n.GLOBAL_WARNING_FILE_EXISTS,
            i18n.GLOBAL_TITLE_WARNING,
            JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
      }
     
      if (saveFile) {
        Properties prop = new Properties();
        prop.put("user", jtextfieldUsername.getText());
        prop.put("display.process", jcheckboxDisplayProcess.isSelected() ? "true" : "false");
        prop.put("restore.server", jtextfieldResDBHost.getText());
        prop.put("restore.port", jtextfieldResPort.getText());
        prop.put("restore.dbfile", jtextfieldResDBFile.getText());
        prop.put("restore.indexes", jcheckboxResDeactivateIndexes.isSelected() ? "true" : "false");
        prop.put("restore.shadows", jcheckboxResWithoutShadows.isSelected() ? "true" : "false");
        prop.put("restore.allspace", jcheckboxResUseAllSpace.isSelected() ? "true" : "false");
        prop.put("restore.onetable", jcheckboxResOneTableAtTime.isSelected() ? "true" : "false");
        prop.put("restore.validity", jcheckboxResWithoutValidity.isSelected() ? "true" : "false");
        prop.put("restore.replace", jcheckboxResReplaceDatabase.isSelected() ? "true" : "false");
        prop.put("restore.setpagesize", jcheckboxResPageSize.isSelected() ? "true" : "false");
        prop.put("restore.newpagesize", jtextfieldPageSize.getText());

        try {
          prop.store(new FileOutputStream(file),
              "FirebirdManager - Restore properties");
        } catch (FileNotFoundException e) {
          JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.SAVE_PROP_FAILED);
          log.error(e.getLocalizedMessage());
        } catch (IOException e) {
          JOptionPane.showMessageDialog(_application.getMainFrame(), i18n.SAVE_PROP_FAILED);
          log.error(e.getLocalizedMessage());
        }
      }
    }
  }

  /**
   * Check for correct/missing input
   * @return true = allright, false = error
   */
  private boolean isBackupInputOK() {
    StringBuffer bufError = new StringBuffer();
    boolean focusSet = false;

    if (jtextfieldUsername.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_USERNAME_MISSING + CR);
      jtextfieldUsername.requestFocusInWindow();
      focusSet = true;
    }
    if (jtextfieldBckDBHost.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_SERVER_MISSING + CR);
      if (!focusSet) {
        jtextfieldBckDBHost.requestFocusInWindow();
        focusSet = true;
      }
    }
    if (jtextfieldBckPort.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_PORT_MISSING + CR);
      if (!focusSet) {
        jtextfieldBckPort.requestFocusInWindow();
        focusSet = true;
      }
    } else {
      try {
        Integer.parseInt(jtextfieldBckPort.getText());
      } catch (NumberFormatException e) {
        bufError.append(i18n.ERROR_PORT_NO_INTEGER + CR);
        if (!focusSet) {
          jtextfieldBckPort.requestFocusInWindow();
          focusSet = true;
        }
      }
    }
    if (jtextfieldBckDBFile.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_FILENAME_DATABASE_MISSING + CR);
      if (!focusSet) {
        jtextfieldBckDBFile.requestFocusInWindow();
        focusSet = true;
      }
    } else if (jtextfieldBckDBHost.getText().trim().equalsIgnoreCase("localhost")) {
      if (!FirebirdManagerHelper.fileExists(jtextfieldBckDBFile.getText())) {
        bufError.append(i18n.ERROR_FILENAME_NOT_EXISTS + " "
            + jtextfieldBckDBFile.getText() + " " + CR);
        if (!focusSet) {
          jtextfieldBckDBFile.requestFocusInWindow();
          focusSet = true;
        }
      }
    }
    if (jtextfieldBckBackupFile.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_FILENAME_BACKUP_MISSING + CR);
      if (!focusSet) {
        jtextfieldBckBackupFile.requestFocusInWindow();
        focusSet = true;
      }
    }

   
    if (bufError.length() != 0) {
      JOptionPane.showMessageDialog(_application.getMainFrame(), bufError.toString());
    }

    return bufError.length() == 0;
  }

  /**
   * The backup working method
   */
  private void backupDB() {
      if (!isBackupInputOK())
          return;
     
      int options = 0;
      if (jcheckboxBckIgnoreChecksum.isSelected())
        options += FBBackupManager.BACKUP_IGNORE_CHECKSUMS;
      if (jcheckboxBckMetadataOnly.isSelected())
        options += FBBackupManager.BACKUP_METADATA_ONLY;
      if (jcheckboxBckOldMetadata.isSelected())
        options += FBBackupManager.BACKUP_OLD_DESCRIPTIONS;
      if (jcheckboxBckIgnoreLimbo.isSelected())
        options += FBBackupManager.BACKUP_IGNORE_LIMBO;
      if (jcheckboxBckGarbageCollection.isSelected())
        options += FBBackupManager.BACKUP_NO_GARBAGE_COLLECT;
      if (jcheckboxBckConvertToTables.isSelected())
        options += FBBackupManager.BACKUP_CONVERT;
      if (!jcheckboxBckTransportable.isSelected())
        options += FBBackupManager.BACKUP_NON_TRANSPORTABLE;
      if (!jcheckboxBckNoDataCompression.isSelected())
        options += FBBackupManager.BACKUP_EXPAND;

      FBBackupManager bckManager = new FBBackupManager();
      bckManager.setBackupPath(jtextfieldBckBackupFile.getText());
      bckManager.setDatabase(jtextfieldBckDBFile.getText());
      bckManager.setHost(jtextfieldBckDBHost.getText());
      bckManager.setPort(Integer.parseInt(jtextfieldBckPort.getText()));
      bckManager.setUser(jtextfieldUsername.getText());
      bckManager.setPassword(new String(jpasswordfieldPW.getPassword()));
     
      TextAreaOutputStream textOutputStream = new TextAreaOutputStream(jtextareaProcess, jscrollpaneProcess);
    bckManager.setLogger(textOutputStream);
    bckManager.setVerbose(jcheckboxDisplayProcess.isSelected());

    try {
      jtextareaProcess.setText("");
      if (jcheckboxBckMetadataOnly.isSelected()) {
        bckManager.backupMetadata();
      } else {
        bckManager.backupDatabase(options);
      }
      jtextareaProcess.append(i18n.INFO_BACKUP_COMPLETED);
      saveSessionPreferences();
    } catch (SQLException e) {
      jtextareaProcess.append(e.getLocalizedMessage()+ CR + i18n.INFO_BACKUP_CANCELED);
    }

    try {
      textOutputStream.close();
    } catch (IOException e) {
      log.error(e.getLocalizedMessage());
    }
  }

  /**
   * Check for correct/missing input
   * @return true = allright, false = error
   */
  private boolean isRestoreInputOK() {
    StringBuffer bufError = new StringBuffer();
    boolean focusSet = false;

    if (jtextfieldUsername.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_USERNAME_MISSING + CR);
      jtextfieldUsername.requestFocusInWindow();
      focusSet = true;
    }
    if (jtextfieldResDBHost.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_SERVER_MISSING + CR);
      if (!focusSet) {
        jtextfieldResDBHost.requestFocusInWindow();
        focusSet = true;
      }
    }
    if (jtextfieldResPort.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_PORT_MISSING + CR);
      if (!focusSet) {
        jtextfieldResPort.requestFocusInWindow();
        focusSet = true;
      }
    } else {
      try {
        Integer.parseInt(jtextfieldResPort.getText());
      } catch (NumberFormatException e) {
        bufError.append(i18n.ERROR_PORT_NO_INTEGER + CR);
        if (!focusSet) {
          jtextfieldResPort.requestFocusInWindow();
          focusSet = true;
        }
      }
    }
    if (jtextfieldResBackupFile.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_FILENAME_BACKUP_MISSING + CR);
      if (!focusSet) {
        jtextfieldResBackupFile.requestFocusInWindow();
        focusSet = true;
      }
    } else if (jtextfieldResDBHost.getText().trim().equalsIgnoreCase("localhost")) {
      if (!FirebirdManagerHelper.fileExists(jtextfieldResBackupFile.getText())) {
        bufError.append(i18n.ERROR_FILENAME_NOT_EXISTS + " "
            + jtextfieldResBackupFile.getText() + " " + CR);
        if (!focusSet) {
          jtextfieldResBackupFile.requestFocusInWindow();
          focusSet = true;
        }
      }
    }
    if (jtextfieldResDBFile.getText().trim().length() == 0) {
      bufError.append(i18n.ERROR_FILENAME_DATABASE_MISSING + CR);
      if (!focusSet) {
        jtextfieldResDBFile.requestFocusInWindow();
        focusSet = true;
      }
    }

    if (bufError.length() != 0) {
      JOptionPane.showMessageDialog(_application.getMainFrame(), bufError.toString());
    }

    return bufError.length() == 0;
  }
 
  /**
   * The restore working method
   */
  private void restoreDB() {
      if (!isRestoreInputOK())
          return;
     
      int options = 0;
      if (jcheckboxResDeactivateIndexes.isSelected())
        options += FBBackupManager.RESTORE_DEACTIVATE_INDEX;
      if (jcheckboxResWithoutShadows.isSelected())
        options += FBBackupManager.RESTORE_NO_SHADOW;
      if (jcheckboxResWithoutValidity.isSelected())
        options += FBBackupManager.RESTORE_NO_VALIDITY;
      if (jcheckboxResOneTableAtTime.isSelected())
        options += FBBackupManager.RESTORE_ONE_AT_A_TIME;
      if (jcheckboxResUseAllSpace.isSelected())
        options += FBBackupManager.RESTORE_USE_ALL_SPACE;
     
      FBBackupManager bckManager = new FBBackupManager();
      if (jcheckboxResPageSize.isSelected())
        bckManager.setRestorePageSize(Integer.parseInt(jtextfieldPageSize.getText()));
      bckManager.setRestoreReplace(jcheckboxResReplaceDatabase.isSelected());
     
      bckManager.setBackupPath(jtextfieldResBackupFile.getText());
      bckManager.setDatabase(jtextfieldResDBFile.getText());
      bckManager.setHost(jtextfieldResDBHost.getText());
      bckManager.setPort(Integer.parseInt(jtextfieldResPort.getText()));
      bckManager.setUser(jtextfieldUsername.getText());
      bckManager.setPassword(new String(jpasswordfieldPW.getPassword()));

     
      TextAreaOutputStream textOutputStream = new TextAreaOutputStream(jtextareaProcess, jscrollpaneProcess);
    bckManager.setLogger(textOutputStream);
    bckManager.setVerbose(jcheckboxDisplayProcess.isSelected());

    try {
      jtextareaProcess.setText("");
      if (options == 0) {
        bckManager.restoreDatabase();
      } else {
        bckManager.restoreDatabase(options);
      }
      jtextareaProcess.append(i18n.INFO_RESTORE_COMPLETED);
    } catch (SQLException e) {
      jtextareaProcess.append(e.getLocalizedMessage()+ CR + i18n.INFO_RESTORE_CANCELED);
    }
   
    try {
      textOutputStream.close();
    } catch (IOException e) {
      log.error(e.getLocalizedMessage());
    }
  }
 
  /**
   * Create a backup filename from the database filename for the current timestamp
   * <br>Old database filenames with extension <c>.gdb</c> gets the backup old extension <c>.gbk</c>
   * <br>all other ones gets the new extension <c>.fbk</c>
   */
  private void createBackupFilenameForDate() {
    StringBuffer bufFilename = new StringBuffer();
    String extension = "";
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmm");
   
    StringTokenizer st = new StringTokenizer(jtextfieldBckDBFile.getText(), ".");
    while (st.hasMoreTokens()) {
      String token = st.nextToken();
      if (st.hasMoreTokens()) {
        bufFilename.append(token + "_" + df.format(new Date()) + ".");
      } else {
        extension = token;
      }
    }
   
    if (extension.equalsIgnoreCase("gdb")) {
      bufFilename.append("gbk");
    } else {
      bufFilename.append("fbk");
    }
     
    jtextfieldBckBackupFile.setText(bufFilename.toString());
  }

  // ########################################################################
  // ########## events
  // ########################################################################
  // ------------------------------------------------------------------------
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == jbuttonBckBackupFile) {
      selectFile(jtextfieldBckBackupFile);
    } else if (e.getSource() == jbuttonLoadBackupProp) {
      loadBackupProperties();
    } else if (e.getSource() == jbuttonSaveBackupProp) {
      saveBackupProperties();
    } else if (e.getSource() == jbuttonLoadRestoreProp) {
      loadRestoreProperties();
    } else if (e.getSource() == jbuttonSaveRestoreProp) {
      saveRestoreProperties();
    } else if (e.getSource() == jbuttonBckDBFile) {
      selectFile(jtextfieldBckDBFile);
    } else if (e.getSource() == jbuttonBackup) {
      backupDB();
    } else if (e.getSource() == btnCreateBackupFilename) {
      createBackupFilenameForDate();
    } else if (e.getSource() == jbuttonResBackupFile) {
      selectFile(jtextfieldResBackupFile);
    } else if (e.getSource() == jbuttonResDBFile) {
      selectFile(jtextfieldResDBFile);
    } else if (e.getSource() == btnResCopyBackupFilenameFromBackup) {
      jtextfieldResBackupFile.setText(jtextfieldBckBackupFile.getText());
    } else if (e.getSource() == btnResCopyDatabaseFilenameFromBackup) {
      jtextfieldResDBFile.setText(jtextfieldBckDBFile.getText());
    } else if (e.getSource() == jbuttonRestore) {
      restoreDB();
    } else if (e.getSource() == jcheckboxResPageSize) {
      jtextfieldPageSize.setEnabled(jcheckboxResPageSize.isSelected());
      jtextfieldPageSize.setBackground(jtextfieldPageSize.isEnabled() ? Color.WHITE : Color.LIGHT_GRAY);
    }
  }

 
  // ------------------------------------------------------------------------
  public void keyPressed(KeyEvent e) {
  }
  public void keyReleased(KeyEvent e) {
    if (e.getSource() == jtextfieldBckDBHost) {
      jbuttonBckDBFile.setEnabled(jtextfieldBckDBHost.getText().equalsIgnoreCase("localhost"));
      jbuttonBckBackupFile.setEnabled(jbuttonBckDBFile.isEnabled());
    } else if (e.getSource() == jtextfieldResDBHost) {
      jbuttonResDBFile.setEnabled(jtextfieldResDBHost.getText().equalsIgnoreCase("localhost"));
      jbuttonResBackupFile.setEnabled(jbuttonResDBFile.isEnabled());
    }
  }
  public void keyTyped(KeyEvent e) {
  }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.plugins.firebirdmanager.gui.FirebirdManagerBackupRestoreFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.