/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { Controller.ReportError(e.Error); } // Reset FoldersHaveBeenCreated back to false, because the user might re-generate after this run is now finished. FoldersHaveBeenCreated = false; m_workerStatus = WorkerStatusTypes.Idle; RaiseFinishedEvent(); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { try { RootFolder = null; SetupFolders(); AnalyseFiles(); return; } catch (Exception ex) { Controller.ReportError(ex); } }
/// <summary> /// Performs an in depth diff by breaking code files into their constituent parts (functions, properties /// etc, so that these elements can be diffed without regard to their ordering. /// </summary> /// <param name="diffFile"></param> private void PerformSuperDiff(ref DiffFile diffFile) { try { switch (Path.GetExtension(diffFile.Path).ToLower()) { case ".cs": Providers.CSharpFormatter formatter = new Providers.CSharpFormatter(diffFile.Path); formatter.CreateObjectModel = true; formatter.RaiseError += formatter_RaiseError; try { // TODO: get the code for each file type (user, generated, prevGen), then // break into classes, functions etc, and perform a diff3 on each entity. // We REALLY need to store these results in the objects, so that this process // happens once, when the initial population occurs, and doesn't need to happen // again when the user clicks a childTreeListNode to display the text and conflicts. // Reset the DiffType diffFile.DiffType = TypeOfDiff.ExactCopy; if (File.Exists(diffFile.FilePathPrevGen)) { formatter.Reset(); formatter.CodeFilePath = diffFile.FilePathPrevGen; formatter.GetFormattedCode(Slyce.Common.Utility.ReadTextFile(diffFile.FilePathPrevGen)); diffFile.CodeRootParent = formatter.Controller.Root; diffFile.CodeRootParent.SortAllMembers(); } if (File.Exists(diffFile.FilePathTemplate)) { formatter.Reset(); formatter.CodeFilePath = diffFile.FilePathTemplate; formatter.GetFormattedCode(Slyce.Common.Utility.ReadTextFile(diffFile.FilePathTemplate)); diffFile.CodeRootTemplate = formatter.Controller.Root; diffFile.CodeRootTemplate.SortAllMembers(); } if (File.Exists(diffFile.FilePathUser)) { formatter.Reset(); formatter.CodeFilePath = diffFile.FilePathUser; formatter.GetFormattedCode(Slyce.Common.Utility.ReadTextFile(diffFile.FilePathUser)); diffFile.CodeRootUser = formatter.Controller.Root; diffFile.CodeRootUser.SortAllMembers(); // TODO: this check of whether the code object model has been correctly created must get removed from the final build //string code = diffFile.CodeRootUser.ToString(); //formatter.Reset(); //formatter.ParseCode(code); //if (!diffFile.CodeRootUser.IsTheSame(ArchAngel.Providers.CodeProvider.Controller.Root)) //{ // throw new InvalidProgramException("The code object model has not been written correctly: " + ArchAngel.Providers.CodeProvider.CSharp.BaseConstruct.ComparisonDifference); //} } } catch (Exception ex) { diffFile.ParseErrorDescription = ex.Message; } bool ignoreAllOmits = false; if (File.Exists(diffFile.FilePathTemplate) && !File.Exists(diffFile.FilePathUser)) { // If the user file is missing, then all code objects are also going to be missing and // will therefore get marked at 'Omit = true', but infact we need to generate them. ignoreAllOmits = true; } TypeOfDiff resultingDiffType; Providers.CodeProvider.CSharp.Utility utility = new Providers.CodeProvider.CSharp.Utility(); diffFile.CodeRootAll = utility.CreateCombinedCodeRoot(diffFile.CodeRootTemplate, diffFile.CodeRootUser, diffFile.CodeRootParent, out resultingDiffType, ignoreAllOmits); diffFile.CodeRootAll.SortAllMembers(); diffFile.DiffType = resultingDiffType; break; default: // No SuperDiff available for this type of file (no parser created yet). break; } } catch (Exception ex) { Controller.ReportError(ex); } }
private void RefreshDatabasesAsync() { Font originalFont = comboBoxServers.Font; Font boldFont = new Font(comboBoxServers.Font, FontStyle.Bold); try { string server = (string)GetCrossThreadProperty(comboBoxServers, "Text"); string userName = (string)GetCrossThreadProperty(textBoxUserName, "Text"); string password = (string)GetCrossThreadProperty(textBoxPassword, "Text"); bool useItegratedSecurity = (bool)GetCrossThreadProperty(checkBoxUseIntegratedSecurity, "Checked"); string[] databaseNames = new string[0]; switch (DatabaseType) { #if USE_SMO case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerDmo: databaseNames = ArchAngel.SQLServerDAL_DMO.Database.GetDatabases(server, userName, password, ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerDmo, useItegratedSecurity); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerSmo: databaseNames = ArchAngel.SQLServerDAL_SMO.Database.GetDatabases(server, userName, password, ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerSmo, useItegratedSecurity); break; #endif case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2000: databaseNames = ArchAngel.Providers.Database.SQLServerDAL_2000.Database.GetDatabases(server, userName, password, ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2000, useItegratedSecurity); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2005: databaseNames = ArchAngel.Providers.Database.SQLServerDAL_2005.Database.GetDatabases(server, userName, password, ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2005, useItegratedSecurity); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerExpress: databaseNames = ArchAngel.Providers.Database.SQLServerDAL_Express.Database.GetDatabases(server, userName, password, ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2005, useItegratedSecurity); break; default: MessageBox.Show("This type of database is not yet handled: " + DatabaseType.ToString()); break; } CallCrossThreadMethod(comboBoxServers.Items, "Clear", null); SetCrossThreadProperty(comboBoxDatabases, "Text", ""); SetCrossThreadProperty(comboBoxDatabases, "Font", originalFont); SetCrossThreadProperty(comboBoxDatabases, "ForeColor", Color.Black); foreach (string databaseName in databaseNames) { CallCrossThreadMethod(comboBoxDatabases.Items, "Add", new object[] { databaseName }); } if (comboBoxDatabases.Items.Count > 0) { SetCrossThreadProperty(comboBoxDatabases, "SelectedIndex", 0); } } catch (Exception ex) { SetCrossThreadProperty(comboBoxDatabases, "Text", ""); SetCrossThreadProperty(comboBoxDatabases, "Font", originalFont); SetCrossThreadProperty(comboBoxDatabases, "ForeColor", Color.Black); if (ex.InnerException != null && ex.InnerException.Message.IndexOf("Login failed for user") >= 0) { MessageBox.Show("The username or password is incorrect.", "Invalid login", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (ex.InnerException != null && ex.InnerException.Message.ToLower().IndexOf("an error has occurred while establishing a connection to the server") >= 0) { MessageBox.Show(string.Format("'{0}' cannot be found, or you don't have access to it.", comboBoxServers.Text), "Database not found", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { Controller.ReportError(ex); } } finally { SetCrossThreadProperty(this, "Cursor", Cursors.Default); } }
private void RefreshServersAsync() { Font originalFont = comboBoxServers.Font; Font boldFont = new Font(comboBoxServers.Font, FontStyle.Bold); try { string[] registeredServerNames = new string[0]; switch (DatabaseType) { #if USE_SMO case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerDmo: registeredServerNames = ArchAngel.SQLServerDAL_DMO.SQLServer.GetSqlServers(); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerSmo: registeredServerNames = ArchAngel.SQLServerDAL_SMO.SQLServer.GetSqlServers(); break; #endif case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2000: registeredServerNames = ArchAngel.Providers.Database.SQLServerDAL_2000.SQLServer.GetSqlServers(); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServer2005: registeredServerNames = ArchAngel.Providers.Database.SQLServerDAL_2005.SQLServer.GetSqlServers(); break; case ArchAngel.Providers.Database.BLL.ConnectionStringHelper.DatabaseTypes.SQLServerExpress: registeredServerNames = ArchAngel.Providers.Database.SQLServerDAL_Express.SQLServer.GetSqlServers(); break; default: MessageBox.Show("This type of database is not yet handled: " + DatabaseType.ToString()); break; } CallCrossThreadMethod(comboBoxServers.Items, "Clear", null); SetCrossThreadProperty(comboBoxServers, "Text", ""); SetCrossThreadProperty(comboBoxServers, "Font", originalFont); SetCrossThreadProperty(comboBoxServers, "ForeColor", Color.Black); foreach (string server in registeredServerNames) { CallCrossThreadMethod(comboBoxServers.Items, "Add", new object[] { server }); } if (comboBoxServers.Items.Count > 0) { SetCrossThreadProperty(comboBoxServers, "SelectedIndex", 0); } } catch (Exception ex) { SetCrossThreadProperty(comboBoxServers, "Text", ""); SetCrossThreadProperty(comboBoxServers, "Font", originalFont); SetCrossThreadProperty(comboBoxServers, "ForeColor", Color.Black); Controller.ReportError(ex); } finally { SetCrossThreadProperty(this, "Cursor", Cursors.Default); } }