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); } }
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; } } }