From 44ece7842e1fe7fbedb1f566ad154bb6557d337f Mon Sep 17 00:00:00 2001 From: "LukeHertert@LukeHertert-BC" Date: Wed, 27 Apr 2011 16:53:09 -0400 Subject: [PATCH] Modified template module project to include mvc project type. Modified module codegen command to include orchard controller t4 template. --HG-- branch : contributions --- .../CodeGenerationTemplates/Controller.tt | 98 +++++++++++++++++++ .../CodeGenerationTemplates/ModuleCsProj.txt | 2 +- .../Commands/CodeGenerationCommands.cs | 18 +++- .../Orchard.CodeGeneration.csproj | 3 + 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/Controller.tt diff --git a/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/Controller.tt b/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/Controller.tt new file mode 100644 index 000000000..16fdbda89 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/Controller.tt @@ -0,0 +1,98 @@ +<#@ template language="C#" HostSpecific="True" #> +<# +MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)(Host); +#> +using System.Web.Mvc; +using Orchard.Localization; +using Orchard; + +namespace <#= mvcHost.Namespace #> +{ + public class <#= mvcHost.ControllerName #> : Controller + { + public IOrchardServices Services { get; set; } + + public <#= mvcHost.ControllerName #>(IOrchardServices services) { + Services = services; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + +<# +if(mvcHost.AddActionMethods) { +#> + public ActionResult Index() + { + return View(); + } + + public ActionResult Details(int id) + { + return View(); + } + + public ActionResult Create() + { + return View(); + } + + [HttpPost] + public ActionResult Create(FormCollection collection) + { + try + { + // TODO: Add insert logic here + + return RedirectToAction("Index"); + } + catch + { + return View(); + } + } + + public ActionResult Edit(int id) + { + return View(); + } + + [HttpPost] + public ActionResult Edit(int id, FormCollection collection) + { + try + { + // TODO: Add update logic here + + return RedirectToAction("Index"); + } + catch + { + return View(); + } + } + + public ActionResult Delete(int id) + { + return View(); + } + + [HttpPost] + public ActionResult Delete(int id, FormCollection collection) + { + try + { + // TODO: Add delete logic here + + return RedirectToAction("Index"); + } + catch + { + return View(); + } + } +<# +} +#> + } +} diff --git a/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/ModuleCsProj.txt b/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/ModuleCsProj.txt index f80a065c7..228fa14cd 100644 --- a/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/ModuleCsProj.txt +++ b/src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/ModuleCsProj.txt @@ -6,7 +6,7 @@ 9.0.30729 2.0 {$$ModuleProjectGuid$$} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + {E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library Properties $$ModuleName$$ diff --git a/src/Orchard.Web/Modules/Orchard.CodeGeneration/Commands/CodeGenerationCommands.cs b/src/Orchard.Web/Modules/Orchard.CodeGeneration/Commands/CodeGenerationCommands.cs index 466f370c9..3505f48e7 100644 --- a/src/Orchard.Web/Modules/Orchard.CodeGeneration/Commands/CodeGenerationCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.CodeGeneration/Commands/CodeGenerationCommands.cs @@ -23,7 +23,7 @@ namespace Orchard.CodeGeneration.Commands { "", "Content", "Styles", "Scripts", "Views", "Zones" }; private static readonly string[] _moduleDirectories = new [] { - "", "Properties", "Controllers", "Views", "Models", "Scripts", "Styles" + "", "Properties", "Controllers", "Views", "Models", "Scripts", "Styles", "CodeTemplates/AddController" }; private const string ModuleName = "CodeGeneration"; @@ -210,6 +210,7 @@ namespace Orchard.CodeGeneration.Commands { string propertiesPath = modulePath + "Properties"; var content = new HashSet(); var folders = new HashSet(); + var contentNoDeploy = new HashSet(); foreach(var folder in _moduleDirectories) { Directory.CreateDirectory(modulePath + folder); @@ -226,6 +227,8 @@ namespace Orchard.CodeGeneration.Commands { content.Add(modulePath + "Scripts\\Web.config"); File.WriteAllText(modulePath + "Styles\\Web.config", File.ReadAllText(_codeGenTemplatePath + "StaticFilesWebConfig.txt")); content.Add(modulePath + "Styles\\Web.config"); + File.WriteAllText(modulePath + "CodeTemplates\\AddController\\Controller.tt", File.ReadAllText(_codeGenTemplatePath + "Controller.tt.")); + contentNoDeploy.Add(modulePath + "CodeTemplates\\AddController\\Controller.tt"); string templateText = File.ReadAllText(_codeGenTemplatePath + "ModuleAssemblyInfo.txt"); templateText = templateText.Replace("$$ModuleName$$", moduleName); @@ -238,7 +241,7 @@ namespace Orchard.CodeGeneration.Commands { File.WriteAllText(modulePath + "Module.txt", templateText); content.Add(modulePath + "Module.txt"); - var itemGroup = CreateProjectItemGroup(modulePath, content, folders); + var itemGroup = CreateProjectItemGroup(modulePath, content, folders, contentNoDeploy); File.WriteAllText(modulePath + moduleName + ".csproj", CreateCsProject(moduleName, projectGuid, itemGroup)); } @@ -321,7 +324,7 @@ namespace Orchard.CodeGeneration.Commands { // create new csproj for the theme if (projectGuid != null) { - var itemGroup = CreateProjectItemGroup(themePath, createdFiles, createdFolders); + var itemGroup = CreateProjectItemGroup(themePath, createdFiles, createdFolders, null); string projectText = CreateCsProject(themeName, projectGuid, itemGroup); File.WriteAllText(themePath + "\\" + themeName + ".csproj", projectText); } @@ -329,7 +332,7 @@ namespace Orchard.CodeGeneration.Commands { if (includeInSolution) { if (projectGuid == null) { // include in solution but dont create a project: just add the references to Orchard.Themes project - var itemGroup = CreateProjectItemGroup(HostingEnvironment.MapPath("~/Themes/"), createdFiles, createdFolders); + var itemGroup = CreateProjectItemGroup(HostingEnvironment.MapPath("~/Themes/"), createdFiles, createdFolders, null); AddFilesToOrchardThemesProject(output, itemGroup); TouchSolution(output); } @@ -356,7 +359,8 @@ namespace Orchard.CodeGeneration.Commands { } } - private static string CreateProjectItemGroup(string relativeFromPath, HashSet content, HashSet folders) { + private static string CreateProjectItemGroup(string relativeFromPath, HashSet content, HashSet folders, HashSet contentNoDeploy) + { var contentInclude = ""; if (relativeFromPath != null && !relativeFromPath.EndsWith("\\", StringComparison.OrdinalIgnoreCase)) { relativeFromPath += "\\"; @@ -374,6 +378,10 @@ namespace Orchard.CodeGeneration.Commands { contentInclude += "\r\n" + string.Join("\r\n", from folder in folders select " "); } + if (contentNoDeploy != null && contentNoDeploy.Count > 0) { + contentInclude += "\r\n" + string.Join("\r\n", from file in contentNoDeploy + select " "); + } return string.Format(CultureInfo.InvariantCulture, "\r\n{0}\r\n \r\n ", contentInclude); } diff --git a/src/Orchard.Web/Modules/Orchard.CodeGeneration/Orchard.CodeGeneration.csproj b/src/Orchard.Web/Modules/Orchard.CodeGeneration/Orchard.CodeGeneration.csproj index b490060bf..507b5419d 100644 --- a/src/Orchard.Web/Modules/Orchard.CodeGeneration/Orchard.CodeGeneration.csproj +++ b/src/Orchard.Web/Modules/Orchard.CodeGeneration/Orchard.CodeGeneration.csproj @@ -82,6 +82,9 @@ + + +