private void RefreshProjectData(WorkUnitProteinUpdateScope scope)
        {
            var result = MessageBox.AskYesNoQuestion(Form, "Are you sure?  This operation cannot be undone.", Core.Application.NameAndVersion);

            if (result == DialogResult.No)
            {
                return;
            }

            long id = 0;

            if (scope == WorkUnitProteinUpdateScope.Project)
            {
                id = Model.SelectedWorkUnitRow.ProjectID;
            }
            else if (scope == WorkUnitProteinUpdateScope.Id)
            {
                id = Model.SelectedWorkUnitRow.ID;
            }

            var proteinDataUpdater = new ProteinDataUpdater((IWorkUnitDatabase)Model.Repository, ProteinService);

            try
            {
                using (var dialog = new ProgressDialog((progress, token) => proteinDataUpdater.Execute(progress, scope, id, token), true))
                {
                    dialog.Text = Core.Application.NameAndVersion;
                    dialog.ShowDialog(Form);
                    if (dialog.Exception != null)
                    {
                        Logger.Error(dialog.Exception.Message, dialog.Exception);
                        MessageBox.ShowError(Form, dialog.Exception.Message, Core.Application.NameAndVersion);
                    }
                }

                Model.ResetBindings(true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
                MessageBox.ShowError(Form, ex.Message, Core.Application.NameAndVersion);
            }
        }
Example #2
0
        public void Execute(IProgress <ProgressInfo> progress, WorkUnitProteinUpdateScope scope, long id, CancellationToken cancellationToken)
        {
            const string workUnitNameUnknown = "WorkUnitName = '' OR WorkUnitName = 'Unknown'";

            switch (scope)
            {
            case WorkUnitProteinUpdateScope.All:
            case WorkUnitProteinUpdateScope.Unknown:
            {
                var selectSql = PetaPoco.Sql.Builder.Select("ProjectID").From("WuHistory");
                if (scope == WorkUnitProteinUpdateScope.Unknown)
                {
                    selectSql = selectSql.Where(workUnitNameUnknown);
                }
                selectSql = selectSql.GroupBy("ProjectID");

                using (var table = _database.Select(_connection, selectSql.SQL))
                {
                    int count        = 0;
                    int lastProgress = 0;
                    foreach (DataRow row in table.Rows)
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        var projectId = row.Field <int>("ProjectID");
                        var updateSql = GetUpdateSql(projectId, "ProjectID", projectId);
                        if (updateSql != null)
                        {
                            if (scope == WorkUnitProteinUpdateScope.Unknown)
                            {
                                updateSql = updateSql.Where(workUnitNameUnknown);
                            }
                            _database.Execute(_connection, updateSql.SQL, updateSql.Arguments);
                        }
                        count++;

                        int progressPercentage = Convert.ToInt32((count / (double)table.Rows.Count) * 100);
                        if (progressPercentage != lastProgress)
                        {
                            string message = String.Format(CultureInfo.CurrentCulture, "Updating project {0} of {1}.", count, table.Rows.Count);
                            progress?.Report(new ProgressInfo(progressPercentage, message));
                            lastProgress = progressPercentage;
                        }
                    }
                }
                break;
            }

            case WorkUnitProteinUpdateScope.Project:
            {
                int projectId = (int)id;
                var updateSql = GetUpdateSql(projectId, "ProjectID", projectId);
                if (updateSql != null)
                {
                    _database.Execute(_connection, updateSql.SQL, updateSql.Arguments);
                }
                break;
            }

            case WorkUnitProteinUpdateScope.Id:
            {
                var selectSql = PetaPoco.Sql.Builder.Select("ProjectID").From("WuHistory").Where("ID = @0", id);

                using (var table = _database.Select(_connection, selectSql.SQL, selectSql.Arguments))
                {
                    if (table.Rows.Count != 0)
                    {
                        var projectId = table.Rows[0].Field <int>("ProjectID");
                        var updateSql = GetUpdateSql(projectId, "ID", id);
                        if (updateSql != null)
                        {
                            _database.Execute(_connection, updateSql.SQL, updateSql.Arguments);
                        }
                    }
                }
                break;
            }
            }
        }