private void PerformGeneration(
nHydrateModel model,
List <nHydrateGeneratorProject> genList,
Microsoft.VisualStudio.Modeling.Store store,
Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData,
List <Type> excludeList,
nHydrate.Generator.Common.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.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.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);
}
}