private void BackupServerBasedTm(TranslationProviderServer translationProvider,
                                         List <AnonymizeTranslationMemory> tusToAnonymize)
        {
            _backupTms.Clear();
            if (!Directory.Exists(Constants.ServerTmBackupPath))
            {
                Directory.CreateDirectory(Constants.ServerTmBackupPath);
            }
            try
            {
                foreach (var tuToAonymize in tusToAnonymize)
                {
                    var translationMemory =
                        translationProvider.GetTranslationMemory(tuToAonymize.TmPath, TranslationMemoryProperties.All);
                    var languageDirections = translationMemory.LanguageDirections;
                    foreach (var languageDirection in languageDirections)
                    {
                        var folderPath = Path.Combine(Constants.ServerTmBackupPath, translationMemory.Name,
                                                      languageDirection.TargetLanguageCode);
                        if (!Directory.Exists(folderPath))
                        {
                            Directory.CreateDirectory(folderPath);
                        }
                        var fileName = translationMemory.Name + languageDirection.TargetLanguageCode + ".tmx.gz";
                        _filePath = Path.Combine(folderPath, fileName);

                        //if tm does not exist download it
                        if (!File.Exists(_filePath))
                        {
                            _tmExporter = new ScheduledServerTranslationMemoryExport(languageDirection)
                            {
                                ContinueOnError = true
                            };
                            _tmExporter.Queue();
                            _tmExporter.Refresh();

                            var continueWaiting = true;
                            while (continueWaiting)
                            {
                                switch (_tmExporter.Status)
                                {
                                case ScheduledOperationStatus.Abort:
                                case ScheduledOperationStatus.Aborted:
                                case ScheduledOperationStatus.Cancel:
                                case ScheduledOperationStatus.Cancelled:
                                case ScheduledOperationStatus.Completed:
                                case ScheduledOperationStatus.Error:
                                    continueWaiting = false;
                                    break;

                                case ScheduledOperationStatus.Aborting:
                                case ScheduledOperationStatus.Allocated:
                                case ScheduledOperationStatus.Cancelling:
                                case ScheduledOperationStatus.NotSet:
                                case ScheduledOperationStatus.Queued:
                                case ScheduledOperationStatus.Recovered:
                                case ScheduledOperationStatus.Recovering:
                                case ScheduledOperationStatus.Recovery:
                                    _tmExporter.Refresh();
                                    break;

                                default:
                                    continueWaiting = false;
                                    break;
                                }
                            }
                            if (_tmExporter.Status == ScheduledOperationStatus.Completed)
                            {
                                var backup = new ServerTmBackUp
                                {
                                    ScheduledExport = _tmExporter,
                                    FilePath        = _filePath
                                };
                                _backupTms.Add(backup);
                            }
                            else if (_tmExporter.Status == ScheduledOperationStatus.Error)
                            {
                                MessageBox.Show(_tmExporter.ErrorMessage,
                                                "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                    if (!_backgroundWorker.IsBusy)
                    {
                        _backgroundWorker.RunWorkerAsync();
                    }
                }
            }
            catch (Exception exception)
            {
                if (exception.Message.Equals("One or more errors occurred."))
                {
                    if (exception.InnerException != null)
                    {
                        MessageBox.Show(exception.InnerException.Message,
                                        "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show(exception.Message,
                                    "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        public void ExportToTmx(TranslationProviderServer tmServer, string orgName, string tmName, string exportFilePath)
        {
            #region "OpenTm"
            if (!orgName.StartsWith("/"))
            {
                orgName = "/" + orgName;
            }
            if (!orgName.EndsWith("/"))
            {
                orgName += "/";
            }
            ServerBasedTranslationMemory tm = tmServer.GetTranslationMemory(
                orgName + tmName, TranslationMemoryProperties.All);
            #endregion

            #region "exporter"
            ScheduledServerTranslationMemoryExport exporter = new ScheduledServerTranslationMemoryExport(
                this.GetLanguageDirection(tm, CultureInfo.GetCultureInfo("en-US"), CultureInfo.GetCultureInfo("de-DE")));
            #endregion

            #region "settings"
            exporter.ChunkSize       = 25;
            exporter.ContinueOnError = true;
            #endregion

            #region "wait"
            exporter.Queue();
            exporter.Refresh();

            bool continueWaiting = true;
            while (continueWaiting)
            {
                switch (exporter.Status)
                {
                case ScheduledOperationStatus.Abort:
                case ScheduledOperationStatus.Aborted:
                case ScheduledOperationStatus.Cancel:
                case ScheduledOperationStatus.Cancelled:
                case ScheduledOperationStatus.Completed:
                case ScheduledOperationStatus.Error:
                    continueWaiting = false;
                    break;

                case ScheduledOperationStatus.Aborting:
                case ScheduledOperationStatus.Allocated:
                case ScheduledOperationStatus.Cancelling:
                case ScheduledOperationStatus.NotSet:
                case ScheduledOperationStatus.Queued:
                case ScheduledOperationStatus.Recovered:
                case ScheduledOperationStatus.Recovering:
                case ScheduledOperationStatus.Recovery:
                    continueWaiting = true;
                    exporter.Refresh();
                    break;

                default:
                    continueWaiting = false;
                    break;
                }
            }
            #endregion

            #region "completed"
            if (exporter.Status == ScheduledOperationStatus.Completed)
            {
                using (Stream outputStream = new FileStream(exportFilePath, FileMode.Create))
                {
                    var result = exporter.DownloadExport(outputStream);
                    if (result)
                    {
                        MessageBox.Show("Export successfuly finished.");
                    }
                }
            }
            else if (exporter.Status == ScheduledOperationStatus.Error)
            {
                MessageBox.Show(exporter.ErrorMessage);
            }
            else
            {
                MessageBox.Show("Export did not finish.");
            }
            #endregion
        }