public int WriteFiles( ProjectFileTreeNode parentNode, ArchAngel.Interfaces.Scripting.NHibernate.Model.IProject project, string targetFolder, ArchAngel.Interfaces.Template.TemplateProject templateProject, out List<FilenameInfo> duplicateFiles) { if (!Directory.Exists(targetFolder)) throw new FileNotFoundException("Output folder doesn't exist: " + targetFolder, targetFolder); //////////////////////////////////////// TargetFolder = targetFolder; SharedData.IsBusyGenerating = true; SharedData.CurrentProject.StartNewFileGenerationRun(); // Reset the Template before the File name validation run. _Loader.CallTemplateFunction(TemplateHelper.ClearTemplateCacheFunctionName); // Run the pre generation template function. var data = new PreGenerationData { OutputFolder = SharedData.CurrentProject.ProjectSettings.OutputPath, OverwriteFiles = SharedData.CurrentProject.ProjectSettings.OverwriteFiles }; foreach (var uo in SharedData.CurrentProject.Options.Where(o => o.IsVirtualProperty == false)) { var optionValue = SharedData.CurrentProject.GetUserOption(uo.VariableName); data.UserOptions.Add(uo.VariableName, optionValue); } foreach (var provider in SharedData.CurrentProject.Providers) { ArchAngel.Interfaces.ProviderInfo[] otherProviders = new ProviderInfo[SharedData.CurrentProject.Providers.Count]; SharedData.CurrentProject.Providers.CopyTo(otherProviders); data.OtherProviderInfos = otherProviders.ToList(); data.OtherProviderInfos.Remove(provider); _Loader.CallPreGenerationInitialisationFunction(provider, data); } ((ProjectFileTree)parentNode).TreeRestructuring = true; ((ProjectFileTree)parentNode).Clear(); ArchAngel.Interfaces.SharedData.CurrentProject.ScriptProject.OutputFolder = project.OutputFolder; ArchAngel.Interfaces.SharedData.CurrentProject.ScriptProject.TempFolder = project.TempFolder; ArchAngel.Interfaces.SharedData.CurrentProject.InitialiseScriptObjects(); SetProjectInCode(ArchAngel.Interfaces.SharedData.CurrentProject.ScriptProject); project = ArchAngel.Interfaces.SharedData.CurrentProject.ScriptProject; //SetProjectInCode(project); //////////////////////////////////////// // TODO: Check for duplicate files and folders ScriptProject = project; NumFiles = 0; //SkipFileProperty = CurrentAssembly.GetType("Slyce.FunctionRunner.FunctionProcessor").GetProperty("SkipCurrentFile"); foreach (Folder subFolder in templateProject.OutputFolder.Folders) ProcessFolder(subFolder, targetFolder, parentNode); foreach (ArchAngel.Interfaces.Template.File file in templateProject.OutputFolder.Files) ProcessFile(file, targetFolder, parentNode, null); foreach (ArchAngel.Interfaces.Template.StaticFile staticFile in templateProject.OutputFolder.StaticFiles) ProcessStaticFile(staticFile, targetFolder, parentNode); targetFolder += Path.DirectorySeparatorChar.ToString(); duplicateFiles = new List<FilenameInfo>(); foreach (var f in AllTextFilenames) f.RelativePath = f.RelativePath.Replace(targetFolder, ""); foreach (var group in AllTextFilenames.GroupBy(n => n.RelativePath).Where(g => g.Count() > 1)) duplicateFiles.AddRange(group.Select(g => g)); return NumFiles; }
public void InitialiseScriptObjects() { var data = new PreGenerationData { OutputFolder = this.ProjectSettings.OutputPath, OverwriteFiles = this.ProjectSettings.OverwriteFiles }; foreach (var uo in this.Options.Where(o => o.IsVirtualProperty == false)) { var optionValue = this.GetUserOption(uo.VariableName); data.UserOptions.Add(uo.VariableName, optionValue); } foreach (var provider in this.Providers) { ArchAngel.Interfaces.ProviderInfo[] otherProviders = new ProviderInfo[this.Providers.Count]; this.Providers.CopyTo(otherProviders); data.OtherProviderInfos = otherProviders.ToList(); data.OtherProviderInfos.Remove(provider); //provider.InitialiseScriptObjects(data); } foreach (var provider in this.Providers) provider.InitialiseScriptObjects(data); }