Save() public method

public Save ( ) : void
return void
コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: aTiKhan/nHydrate
        /*
         *  --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);
        }
コード例 #3
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();
		}
コード例 #4
0
ファイル: GenerateSettings.cs プロジェクト: nHydrate/nHydrate
        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();
        }
コード例 #5
0
		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();
		}