public override void RunCustomNewProjectLogic(ArchAngel.Interfaces.ProviderInfo theProviderInfo, IUserInteractor userInteractor) { NHibernateHelper.ProviderInfo providerInfo = (NHibernateHelper.ProviderInfo)theProviderInfo; providerInfo.Clear(); providerInfo.NhConfigFile = this.NhConfigFile; userInteractor.ShowWaitScreen("Loading from your existing NHibernate project"); // Run this in its own thread BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (s, args) => { try { var loader = new ProjectLoader(new FileController(), new IUserInteractorProgressUpdatorAdapter(userInteractor), userInteractor); var result = loader.LoadEntityModelFromCSProj(Filename, this.NhConfigFile); args.Result = new RunResult { MappingSet = result.MappingSet, DatabaseLoader = result.DatabaseLoader, NhConfigFile = result.NhConfigFile, CsProjFile = result.CsProjFile }; } catch (NHibernateLoaderException e) { //var sb = new StringBuilder(); //sb.Append("The HBM files [").Append(e.Filenames).AppendLine( // "] could not be loaded due to the following errors:"); //e.Errors.ForEach(err => sb.AppendLine(err.Message)); //sb.AppendLine("Please send this file to [email protected] so we can make our HBM Loader better."); args.Result = new RunResult { ErrorOccurred = true, Exception = e }; } catch (Exception e) { throw new NHibernateLoaderException(e.Message + Environment.NewLine + e.StackTrace, null, null); } }; worker.RunWorkerCompleted += (s, args) => { if (args.Error != null) { userInteractor.RemoveWaitScreen(); providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); throw new Exception("An error occurred in RunCustomNewProjectLogic. The inner exception is: " + args.Error.StackTrace, args.Error); //System.Windows.Forms.Clipboard.SetText(args.Error.StackTrace); //userInteractor.ShowError("An Error Occurred", args.Error.Message + Environment.NewLine + Environment.NewLine + "The stacktrace has been copied to the clipboard. Please email to [email protected]"); //providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); } else { var result = (RunResult)args.Result; if (result.ErrorOccurred) { userInteractor.RemoveWaitScreen(); providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); string errorMessage = string.Format("Unsupported elements or Schema Validation Errors occurred. Please submit this error.\nFiles: {0}", result.Exception.Filenames); throw new Exception(errorMessage, result.Exception); //var form = new NHibernateHBMLoadErrorView(); //form.Title = "Unsupported elements or Schema Validation Errors occurred"; //form.NameOfFileWithError = result.Exception.Filename; //form.SetErrors(result.Exception.Errors); //userInteractor.ShowDialog(form); } else { // Set the MappingSet to the result of our work. providerInfo.EntityProviderInfo.MappingSet = result.MappingSet; providerInfo.NhConfigFile = result.NhConfigFile; providerInfo.CsProjFile = result.CsProjFile; if (!string.IsNullOrEmpty(providerInfo.CsProjFile.GetProjectGuid())) { ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("ProjectGuid", providerInfo.CsProjFile.GetProjectGuid()); } ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("CacheProviderClass", providerInfo.NhConfigFile.cache_provider_class); // Then run the validation rules userInteractor.UpdateWaitScreen("Runnng Model Validation"); //var rulesEngine = new ValidationRulesEngine(result.MappingSet); //var database = result.DatabaseLoader.LoadDatabase(); //rulesEngine.AddModule(new NHibernateProjectLoaderModule(database)); providerInfo.EntityProviderInfo.RunValidationRules(); //rulesEngine); userInteractor.RemoveWaitScreen(); } } }; worker.RunWorkerAsync(); }
public override void RunCustomNewProjectLogic(ArchAngel.Interfaces.ProviderInfo theProviderInfo, IUserInteractor userInteractor) { NHibernateHelper.ProviderInfo providerInfo = (NHibernateHelper.ProviderInfo)theProviderInfo; providerInfo.Clear(); providerInfo.NhConfigFile = this.NhConfigFile; userInteractor.ShowWaitScreen("Loading from your existing NHibernate project"); // Run this in its own thread BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (s, args) => { try { var loader = new ProjectLoader(new FileController(), new IUserInteractorProgressUpdatorAdapter(userInteractor), userInteractor); var result = loader.LoadEntityModelFromCSProj(Filename, this.NhConfigFile); args.Result = new RunResult { MappingSet = result.MappingSet, DatabaseLoader = result.DatabaseLoader, NhConfigFile = result.NhConfigFile, CsProjFile = result.CsProjFile }; } catch (NHibernateLoaderException e) { //var sb = new StringBuilder(); //sb.Append("The HBM files [").Append(e.Filenames).AppendLine( // "] could not be loaded due to the following errors:"); //e.Errors.ForEach(err => sb.AppendLine(err.Message)); //sb.AppendLine("Please send this file to [email protected] so we can make our HBM Loader better."); args.Result = new RunResult { ErrorOccurred = true, Exception = e }; } catch (Exception e) { throw new NHibernateLoaderException(e.Message + Environment.NewLine + e.StackTrace, null, null); } }; worker.RunWorkerCompleted += (s, args) => { if (args.Error != null) { userInteractor.RemoveWaitScreen(); providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); throw new Exception("An error occurred in RunCustomNewProjectLogic. The inner exception is: " + args.Error.StackTrace, args.Error); //System.Windows.Forms.Clipboard.SetText(args.Error.StackTrace); //userInteractor.ShowError("An Error Occurred", args.Error.Message + Environment.NewLine + Environment.NewLine + "The stacktrace has been copied to the clipboard. Please email to [email protected]"); //providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); } else { var result = (RunResult)args.Result; if (result.ErrorOccurred) { userInteractor.RemoveWaitScreen(); providerInfo.EntityProviderInfo.MappingSet = new MappingSetImpl(); string errorMessage = string.Format("Unsupported elements or Schema Validation Errors occurred. Please submit this error.\nFiles: {0}", result.Exception.Filenames); throw new Exception(errorMessage, result.Exception); //var form = new NHibernateHBMLoadErrorView(); //form.Title = "Unsupported elements or Schema Validation Errors occurred"; //form.NameOfFileWithError = result.Exception.Filename; //form.SetErrors(result.Exception.Errors); //userInteractor.ShowDialog(form); } else { // Set the MappingSet to the result of our work. providerInfo.EntityProviderInfo.MappingSet = result.MappingSet; providerInfo.NhConfigFile = result.NhConfigFile; providerInfo.CsProjFile = result.CsProjFile; if (!string.IsNullOrEmpty(providerInfo.CsProjFile.GetProjectGuid())) ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("ProjectGuid", providerInfo.CsProjFile.GetProjectGuid()); ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("CacheProviderClass", providerInfo.NhConfigFile.cache_provider_class); // Then run the validation rules userInteractor.UpdateWaitScreen("Runnng Model Validation"); //var rulesEngine = new ValidationRulesEngine(result.MappingSet); //var database = result.DatabaseLoader.LoadDatabase(); //rulesEngine.AddModule(new NHibernateProjectLoaderModule(database)); providerInfo.EntityProviderInfo.RunValidationRules();//rulesEngine); userInteractor.RemoveWaitScreen(); } } }; worker.RunWorkerAsync(); }