public void restoreBackup() throws IOException {
        boolean askConfirmation = false;
        Map<Path, Path> backupToDestination = new HashMap<Path, Path>();
        for (Node node : mRestoreFolderDestinationContainer.getChildren()) {
            if (node instanceof FileChooseElement) {
                Path key = (Path) ((FileChooseElement)node).getKeyObject();
                Path chosen = ((FileChooseElement) node).getChosenFile();
                backupToDestination.put(key, chosen);
                if (Files.exists(chosen) && Files.isDirectory(chosen) &&
                    Files.newDirectoryStream(chosen).iterator().hasNext()) {
                    askConfirmation = true;
                }
            }
        }
        if (askConfirmation) {
            boolean confirm = FXDialog.showConfirmDialog(mMainWindowController.getStage(),
                "Restaurar backup",
                "Algumas das pastas escolhidas não estão vazias, tem certeza que deseja " +
                    "continuar?\n\n" +
                    "Arquivos serão sobrescritos sem confirmações adicionais.");
            if (!confirm)
                return;
        }
        RestoreBackupTask task = new RestoreBackupTask(
            mRestoreDiffListView.getSelectionModel().getSelectedItem(), backupToDestination);
        FXDialog.showProgressDialog(mMainWindowController.getStage(), "Restaurando backup...",task);
        task.addTaskCompletionListener(new BackupRestoreTaskListener());
        task.start();
    }