public void GenerateDataServiceProject(DomainDataService dataService, string outputFolder) { outputFolder = Path.Combine(outputFolder, $"{dataService.Solution.NamespacePrefix}.{dataService.Name}.DataService"); var interfacesFolder = Path.Combine(outputFolder, "Interfaces"); var mappingsFolder = Path.Combine(outputFolder, "Mappings"); var recordTypesFolder = Path.Combine(outputFolder, "RecordTypes"); var validatorsFolder = Path.Combine(outputFolder, "Validators"); ReplaceDirectories(interfacesFolder, mappingsFolder, recordTypesFolder, validatorsFolder); var session = new Dictionary <string, object>(); session.Add("DomainDataService", dataService); DataServiceProjectTemplate projectTemplate = new DataServiceProjectTemplate(); projectTemplate.Session = session; projectTemplate.Initialize(); string content = projectTemplate.TransformText(); File.WriteAllText(Path.Combine(outputFolder, $"{dataService.Solution.NamespacePrefix}.{dataService.Name}.DataService.csproj"), content); IRepositoryTemplate repositoryInterfaceTemplate = new IRepositoryTemplate(); repositoryInterfaceTemplate.Session = session; repositoryInterfaceTemplate.Initialize(); content = repositoryInterfaceTemplate.TransformText(); File.WriteAllText(Path.Combine(interfacesFolder, $"I{dataService.Name}DataServiceRespository.cs"), content); IDataServiceTemplate dataServiceInterfaceTemplate = new IDataServiceTemplate(); dataServiceInterfaceTemplate.Session = session; dataServiceInterfaceTemplate.Initialize(); content = dataServiceInterfaceTemplate.TransformText(); File.WriteAllText(Path.Combine(interfacesFolder, $"I{dataService.Name}DataService.cs"), content); RepositoryTemplate repositoryTemplate = new RepositoryTemplate(); repositoryTemplate.Session = session; repositoryTemplate.Initialize(); content = repositoryTemplate.TransformText(); File.WriteAllText(Path.Combine(outputFolder, $"{dataService.Name}DataServiceRespository.cs"), content); DataServiceTemplate dataServiceTemplate = new DataServiceTemplate(); dataServiceTemplate.Session = session; dataServiceTemplate.Initialize(); content = dataServiceTemplate.TransformText(); File.WriteAllText(Path.Combine(outputFolder, $"{dataService.Name}DataService.cs"), content); KernelManipulationsTemplate kernelManipulationsTemplate = new KernelManipulationsTemplate(); kernelManipulationsTemplate.Session = session; kernelManipulationsTemplate.Initialize(); content = kernelManipulationsTemplate.TransformText(); File.WriteAllText(Path.Combine(outputFolder, $"{dataService.Name}KernelManipulations.cs"), content); StartupTaskTemplate startupTaskTemplate = new StartupTaskTemplate(); startupTaskTemplate.Session = session; startupTaskTemplate.Initialize(); content = startupTaskTemplate.TransformText(); File.WriteAllText(Path.Combine(outputFolder, $"{dataService.Name}Startup.cs"), content); if (!(dataService.Schemas is null)) { foreach (var domainObject in dataService.Schemas.SelectMany(s => s.Objects)) { session["CurrentObject"] = domainObject; MappingTemplate mappingTemplate = new MappingTemplate(); mappingTemplate.Session = session; mappingTemplate.Initialize(); content = mappingTemplate.TransformText(); File.WriteAllText(Path.Combine(mappingsFolder, $"{domainObject.ObjectName}Mapping.cs"), content); RecordTypeTemplate recordTypeTemplate = new RecordTypeTemplate(); recordTypeTemplate.Session = session; recordTypeTemplate.Initialize(); content = recordTypeTemplate.TransformText(); File.WriteAllText(Path.Combine(recordTypesFolder, $"{domainObject.ObjectName}RecordType.cs"), content); if (domainObject.SupportsIHaveId()) { var modelValidatorsFolder = Path.Combine(validatorsFolder, domainObject.ObjectName); ReplaceDirectories(modelValidatorsFolder); ValidatorTemplate validatorTemplate = new ValidatorTemplate(); validatorTemplate.Session = session; validatorTemplate.Initialize(); content = validatorTemplate.TransformText(); File.WriteAllText(Path.Combine(modelValidatorsFolder, $"{domainObject.ObjectName}Validator.cs"), content); DeleteValidatorTemplate deleteValidatorTemplate = new DeleteValidatorTemplate(); deleteValidatorTemplate.Session = session; deleteValidatorTemplate.Initialize(); content = deleteValidatorTemplate.TransformText(); File.WriteAllText(Path.Combine(modelValidatorsFolder, $"{domainObject.ObjectName}DeleteValidator.cs"), content); BatchValidatorTemplate batchValidatorTemplate = new BatchValidatorTemplate(); batchValidatorTemplate.Session = session; batchValidatorTemplate.Initialize(); content = batchValidatorTemplate.TransformText(); File.WriteAllText(Path.Combine(modelValidatorsFolder, $"{domainObject.ObjectName}BatchValidator.cs"), content); } } } }
public void ProjectFinishedGenerating(Project project) { DTE dte = project.DTE; var solItems = dte.Solution.Projects.Cast <Project>().FirstOrDefault(p => p.Name == "Solution Items" || p.Kind == EnvDTE.Constants.vsProjectItemKindSolutionItems); if (solItems == null) { Solution2 sol2 = (Solution2)dte.Solution; solItems = sol2.AddSolutionFolder("Solution Items"); string solDir = Path.GetDirectoryName(sol2.FullName); if (outputRepoFile) { RepositoryTemplate repositoryTemplate = new RepositoryTemplate { Session = templateParameters }; repositoryTemplate.Initialize(); string repositoryTemplateContent = repositoryTemplate.TransformText(); string repositoryFilePath = $"{solDir}\\repository.json"; File.WriteAllText(repositoryFilePath, repositoryTemplateContent); solItems.ProjectItems.AddFromFile(repositoryFilePath); } ConfigTemplate configTemplate = new ConfigTemplate { Session = templateParameters }; configTemplate.Initialize(); string configTemplateContent = configTemplate.TransformText(); string configFilePath = $"{solDir}\\config.json"; File.WriteAllText(configFilePath, configTemplateContent); solItems.ProjectItems.AddFromFile(configFilePath); string runtimePath = Directory.GetCurrentDirectory(); solItems.ProjectItems.AddFromFileCopy(runtimePath + "\\.gitignore"); solItems.ProjectItems.AddFromFileCopy(runtimePath + "\\pre_build.ps1"); solItems.ProjectItems.AddFromFileCopy(runtimePath + "\\post_build.ps1"); solItems.ProjectItems.AddFromFileCopy(runtimePath + "\\launch_game.ps1"); // pre-copy references Directory.CreateDirectory($"{solDir}\\references"); string referencesGitIgnorePath = $"{solDir}\\references\\.gitignore"; File.WriteAllText(referencesGitIgnorePath, "*\n!.gitignore"); string pre_build = $@"{solDir.Replace(@"\", @"\\")}\\pre_build.ps1"; string argument = $@"-ExecutionPolicy Unrestricted -File ""{pre_build}"" -SolutionDir ""{solDir.Replace(@"\", @"\\")}\\"""; if ((bool)templateParameters["UseModMenu"]) { argument += @" -ModAssemblyReferences ""blendermf.XLShredMenu\\XLShredLib.dll"""; } var process = new System.Diagnostics.Process { StartInfo = new System.Diagnostics.ProcessStartInfo { FileName = "powershell", Arguments = argument, UseShellExecute = false, RedirectStandardOutput = false, CreateNoWindow = true } }; process.Start(); process.WaitForExit(); } else { var repo = solItems.ProjectItems.Cast <ProjectItem>().FirstOrDefault(p => p.Name == "repository.json"); } (project.Object as VSProject)?.Refresh(); foreach (Configuration config in project.ConfigurationManager) { config.Properties.Item("StartAction").Value = 1; // Launch external program config.Properties.Item("StartProgram").Value = @"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe"; config.Properties.Item("StartArguments").Value = @"-ExecutionPolicy Unrestricted -File ""./launch_game.ps1"""; config.Properties.Item("StartWorkingDirectory").Value = @"../../../"; } project.Save(project.FileName); }