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); } }
/* * --model=C:\code\nHydrateTestAug\ConsoleApp1\Model1.nhydrate --output=C:\code\nHydrateTestAug --generators=nHydrate.Generator.EFCodeFirstNetCore.EFCodeFirstNetCoreProjectGenerator,nHydrate.Generator.PostgresInstaller.PostgresDatabaseProjectGenerator,nHydrate.Generator.SQLInstaller.Core.DatabaseProjectGenerator */ static int Main(string[] args) { IConfiguration Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile("appsettings.development.json", optional: true, reloadOnChange: true) .AddCommandLine(args) .Build(); var modelFile = string.Empty; var output = string.Empty; var generators = new string[0]; //AppSettings var allValues = Configuration.GetChildren().Select(x => new { x.Key, x.Value }).ToDictionary(x => x.Key.ToString(), x => x.Value?.ToString()); if (allValues.ContainsKey(ModelKey)) { modelFile = allValues[ModelKey]; } if (allValues.ContainsKey(OutputKey)) { output = allValues[OutputKey]; } if (allValues.ContainsKey(GeneratorsKey)) { generators = allValues[GeneratorsKey].Split(",", StringSplitOptions.RemoveEmptyEntries); } if (modelFile.IsEmpty()) { return(ShowError("The model is required.")); } if (output.IsEmpty()) { return(ShowError("The output folder is required.")); } //If there are no generators specified on the command line then check for the file "nhydrate.generators" if (!generators.Any()) { var folderName = (new FileInfo(modelFile)).DirectoryName; var genDefFile = Path.Combine(folderName, "nhydrate.generators"); if (File.Exists(genDefFile)) { generators = File.ReadAllLines(genDefFile).Where(x => x.Trim() != string.Empty).ToArray(); } if (!generators.Any()) { return(ShowError("The generators are required.")); } } Console.WriteLine($"modelFile='{modelFile}'"); Console.WriteLine($"output='{output}'"); Console.WriteLine($"generators='{string.Join(",", generators)}'"); //NOTE: Yaml Model files must end with ".nhydrate.yaml" //Old Xml file ends with ".nhydrate" //Specified a folder so look for the file string actualFile = null; if (Directory.Exists(modelFile)) { var folderName = modelFile; //Look for new Yaml file var f = Directory.GetFiles(folderName, "*" + FileManagement.ModelExtension).FirstOrDefault(); if (File.Exists(f)) { actualFile = f; } //Look for old xml file if (actualFile.IsEmpty()) { f = Directory.GetFiles(folderName, "*" + FileManagement.OldModelExtension).FirstOrDefault(); if (File.Exists(f)) { actualFile = f; } } if (actualFile.IsEmpty()) { //Back 1 folder folderName = (new DirectoryInfo(folderName)).Parent.FullName; f = Directory.GetFiles(folderName, "*" + FileManagement.ModelExtension).FirstOrDefault(); if (File.Exists(f)) { actualFile = f; } //Look for old xml file if (actualFile.IsEmpty()) { f = Directory.GetFiles(folderName, "*" + FileManagement.OldModelExtension).FirstOrDefault(); if (File.Exists(f)) { actualFile = f; } } } } else { //Is this the Yaml model? if (modelFile.EndsWith(FileManagement.ModelExtension)) { actualFile = modelFile; } //Is this the Xml model? if (modelFile.EndsWith(FileManagement.OldModelExtension)) { actualFile = modelFile; } //Look one folder back for Yaml if (actualFile.IsEmpty()) { var folderName = (new FileInfo(modelFile)).Directory.Parent.FullName; var f = Directory.GetFiles(folderName, "*" + FileManagement.ModelExtension).FirstOrDefault(); if (File.Exists(f)) { actualFile = f; } } } if (actualFile.IsEmpty()) { return(ShowError("Model file not found.")); } modelFile = actualFile; var timer = System.Diagnostics.Stopwatch.StartNew(); var formatModel = (allValues.ContainsKey("formatmodel") && allValues["formatmodel"] == "true"); //TODO: when model files missing ID, it generates all fields as first one nHydrate.Generator.Common.Models.ModelRoot model = null; try { Console.WriteLine(); Console.WriteLine("Loading model..."); model = ModelHelper.CreatePOCOModel(modelFile, formatModel); } catch (ModelException ex) { //All YAML validation errors will come here Console.WriteLine(ex.Message); return(1); } catch (Exception ex) { Console.WriteLine("Unknown error."); return(1); } //Generate if (model != null && !formatModel) { Console.WriteLine("Loading generators..."); var genHelper = new nHydrate.Command.Core.GeneratorHelper(output); genHelper.ProjectItemGenerated += new nHydrate.Generator.Common.GeneratorFramework.ProjectItemGeneratedEventHandler(g_ProjectItemGenerated); var genList = new List <nHydrateGeneratorProject>(); var genProject = new nHydrateGeneratorProject(); genList.Add(genProject); model.ResetKey(model.Key); model.GeneratorProject = genProject; genProject.Model = model; genProject.FileName = $"{modelFile}.generating"; var document = new System.Xml.XmlDocument(); document.LoadXml($"<modelRoot guid=\"{model.Key}\" type=\"nHydrate.Generator.nHydrateGeneratorProject\" assembly=\"nHydrate.Generator.dll\"><ModelRoot></ModelRoot></modelRoot>"); ((nHydrate.Generator.Common.GeneratorFramework.IXMLable)model).XmlAppend(document.DocumentElement.ChildNodes[0]); System.IO.File.WriteAllText(genProject.FileName, document.ToIndentedString()); var allgenerators = genHelper.GetProjectGenerators(genProject); var excludeList = allgenerators.Where(x => !generators.Contains(x.FullName)).ToList(); //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; model.GeneratedVersion = generatedVersion; Console.WriteLine($"Generating code..."); foreach (var item in genList) { genHelper.GenerateAll(item, excludeList); } //Save local copy of last generated version cacheFile.GeneratedVersion = generatedVersion; cacheFile.ModelerVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; cacheFile.Save(); if (File.Exists(genProject.FileName)) { File.Delete(genProject.FileName); } //Write stats Console.WriteLine(); Console.WriteLine("Generation Summary"); Console.WriteLine($"Total Files: {_stats.ProcessedFileCount}"); Console.WriteLine($"Files Success: {_stats.FilesSuccess}"); Console.WriteLine($"Files Skipped: {_stats.FilesSkipped}"); Console.WriteLine($"Files Failed: {_stats.FilesFailed}"); Console.WriteLine(); } else if (!formatModel) { Console.WriteLine("The model could not be loaded."); } timer.Stop(); Console.WriteLine($"Generation complete. Elapsed={timer.ElapsedMilliseconds}ms"); return(0); }
private void SaveSettings() { //Save settings var cacheFile = new ModelCacheFile(((ModelRoot)_tableCollection.Root).GeneratorProject); var document = new XmlDocument(); document.LoadXml("<a><z></z></a>"); var containerNode = document.DocumentElement.ChildNodes[0]; XmlHelper.AddAttribute(containerNode, "prefixChecked", optPrefix.Checked); XmlHelper.AddAttribute(containerNode, "prefix", txtPrefix.Text); XmlHelper.AddAttribute(containerNode, "replaceText", chkReplaceText.Checked); XmlHelper.AddAttribute(containerNode, "replaceSource", txtReplaceSource.Text); XmlHelper.AddAttribute(containerNode, "replaceTarget", txtReplaceTarget.Text); XmlHelper.AddAttribute(containerNode, "upcase", optUpcase.Checked); XmlHelper.AddAttribute(containerNode, "underscore", optUnderscore.Checked); XmlHelper.AddAttribute(containerNode, "TwoCaps", chkSkip2Caps.Checked); cacheFile.TableFacadeSettings = document.OuterXml; cacheFile.Save(); }
private void wizard1_Finish(object sender, EventArgs e) { if (chkModule.Items.Count > 0) { if (chkModule.CheckedItems.Count == 0) { MessageBox.Show("You must select one or more modules for generation.", "Check Modules", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } var cacheFile = new ModelCacheFile(_generator); cacheFile.ExcludeList.Clear(); foreach (var t in this.ExcludeList) { cacheFile.ExcludeList.Add(t.FullName); } cacheFile.GeneratedModuleList.Clear(); foreach (string s in chkModule.CheckedItems) { cacheFile.GeneratedModuleList.Add(s); } cacheFile.Save(); this.DialogResult = DialogResult.OK; this.Close(); }
private void SaveSettings() { //Save settings var cacheFile = new ModelCacheFile(_model.ModelFileName); var document = new XmlDocument(); document.LoadXml("<a><z></z></a>"); var containerNode = document.DocumentElement.ChildNodes[0]; XmlHelper.AddAttribute(containerNode, "prefixChecked", optPrefix.Checked); XmlHelper.AddAttribute(containerNode, "prefix", txtPrefix.Text); XmlHelper.AddAttribute(containerNode, "replaceText", chkReplaceText.Checked); XmlHelper.AddAttribute(containerNode, "replaceSource", txtReplaceSource.Text); XmlHelper.AddAttribute(containerNode, "replaceTarget", txtReplaceTarget.Text); XmlHelper.AddAttribute(containerNode, "casing", cboCasing.SelectedIndex); cacheFile.TableFacadeSettings = document.OuterXml; cacheFile.Save(); }