public void Generate(nHydrateModel model, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram, Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData) { this.ErrorList = new List <string>(); GeneratedFileList = new List <nHydrate.Generator.Common.EventArgs.ProjectItemGeneratedEventArgs>(); try { #region Generation //Clean up delete tracking model.RemovedTables.Remove(x => model.Entities.Select(y => y.PascalName).Contains(x)); model.RemovedViews.Remove(x => model.Views.Select(y => y.PascalName).Contains(x)); var g = new nHydrate.Generator.GeneratorFramework.GeneratorHelper(); g.ProjectItemGenerated += new nHydrate.Generator.Common.GeneratorFramework.ProjectItemGeneratedEventHandler(g_ProjectItemGenerated); var genList = BuildModelList(model, diagram, docData); var excludeList = new List <Type>(); var generatorTypeList = g.GetProjectGenerators(genList.First()); if (generatorTypeList.Count == 0) { return; //add message box } if (ChooseGenerators(model, genList, generatorTypeList, excludeList, g)) { //Perform actual generation if (genList.Count > 0) { PerformGeneration(model, genList, diagram.Store, docData, excludeList, g); } model.RemovedTables.Clear(); model.RemovedViews.Clear(); } #endregion //Remove temp file try { genList.ForEach(x => System.IO.File.Delete(x.FileName)); } catch { } #if DEBUG if (this.ErrorList.Count > 0) { var F = new nHydrate.DslPackage.Forms.ErrorForm(); F.SetErrors(this.ErrorList); F.ShowDialog(); } #endif } catch (Exception ex) { throw; } }
private bool ChooseGenerators( nHydrateModel model, List <nHydrateGeneratorProject> genList, List <Type> generatorTypeList, List <Type> excludeList, nHydrate.Generator.GeneratorFramework.GeneratorHelper genHelper) { if (!genList.Any()) { MessageBox.Show("There are no generators defined", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } var cacheFile = new nHydrate.Generator.Common.ModelCacheFile(genList.First()); if (cacheFile.ModelerVersion > System.Reflection.Assembly.GetExecutingAssembly().GetName().Version) { if (MessageBox.Show($"This model schema was last generated with a newer modeler version ({cacheFile.ModelerVersion}). Your current version is {System.Reflection.Assembly.GetExecutingAssembly().GetName().Version}. Generating with an older modeler may cause many files to change unexpectedly. Do you wish to proceed with the generation?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return(false); } } //Initialize all the model configuration objects var modelRoot = genList.First().Model as ModelRoot; modelRoot.ModelConfigurations = new Dictionary <string, IModelConfiguration>(); foreach (var genType in generatorTypeList) { var generator = genHelper.GetProjectGenerator(genType); modelRoot.ModelConfigurations.Add(generator.GetType().Name, generator.ModelConfiguration); } //Show generator list using (var F = new GenerateSettings(genList.First(), generatorTypeList, null)) { if (F.ShowDialog() != DialogResult.OK) { return(false); } excludeList.AddRange(F.ExcludeList); } return(true); }
private void PerformGeneration( nHydrateModel model, List <nHydrateGeneratorProject> genList, Microsoft.VisualStudio.Modeling.Store store, Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData, List <Type> excludeList, nHydrate.Generator.GeneratorFramework.GeneratorHelper genHelper) { _totalFileCount = 0; _processedFileCount = 0; var pkey = string.Empty; try { var startTime = DateTime.Now; var isLicenseError = false; try { //Get the last version we generated on this machine //We will use this to determine if any other generations have been performed on other machines var cacheFile = new nHydrate.Generator.Common.ModelCacheFile(genList.First()); var cachedGeneratedVersion = cacheFile.GeneratedVersion; var generatedVersion = cachedGeneratedVersion + 1; pkey = ProgressHelper.ProgressingStarted("Generating...", false, 240000); //Put a 4 minute timer on it foreach (var generator in genList) { var modelRoot = (generator.Model as nHydrate.Generator.Common.Models.ModelRoot); modelRoot.GeneratedVersion = generatedVersion; _totalFileCount += genHelper.GetFileCount(generator, excludeList); } System.Diagnostics.Debug.WriteLine($"File count: {_totalFileCount}"); //Save document var isDirty = 0; docData.IsDirty(out isDirty); if (model.IsDirty || (isDirty != 0)) { (docData as nHydrateDocData).Save(docData.FileName, 1, 0); } _startTime = DateTime.Now; foreach (var item in genList) { genHelper.GenerateAll(item, excludeList); } var modelKey = (genList.FirstOrDefault()?.Model as nHydrate.Generator.Common.Models.ModelRoot)?.Key; //Save model statistics var eCount = model.Entities.Count; var fCount = model.Entities.SelectMany(x => x.FieldList).Count(); ModelStatsFile.Log(modelKey, eCount, fCount); //Save local copy of last generated version cacheFile.GeneratedVersion = generatedVersion; cacheFile.ModelerVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; cacheFile.Save(); this.ErrorList = genHelper.GetErrorList().ToList(); } catch (nHydrate.Generator.Common.Exceptions.LicenseException ex) { ProgressHelper.ProgressingComplete(pkey); MessageBox.Show("This product is not properly licensed.", "License Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); isLicenseError = true; } catch (Exception ex) { throw; } finally { ProgressHelper.ProgressingComplete(pkey); } var endTime = DateTime.Now; var duration = endTime.Subtract(startTime); #region Show Generation Complete Dialog if (!isLicenseError) { using (var F = new StatisticsForm()) { var text = "The generation was successful.\r\n\r\n"; text += "Files generated: " + this.FilesSuccess + "\r\n"; text += "Files skipped: " + this.FilesSkipped + "\r\n"; text += "Files failed: " + this.FilesFailed + "\r\n"; text += "\r\n\r\n"; text += "Generation time: " + duration.Hours.ToString("00") + ":" + duration.Minutes.ToString("00") + ":" + duration.Seconds.ToString("00"); F.DisplayText = text; F.GeneratedFileList = this.GeneratedFileList; F.ShowDialog(); } } #endregion } catch (Exception ex) { ProgressHelper.ProgressingComplete(pkey); GlobalHelper.ShowError(ex); } }