PageRenderTime 43ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/Plugins/GizmoBeach.Components/UI/AspNetMvcUILayerObjects.cs

http://github.com/kahanu/CondorXE
C# | 464 lines | 406 code | 57 blank | 1 comment | 7 complexity | 9beddc621f5b0f768296d807fb20401d MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using Condor.Core;
  4. using Condor.Core.Interfaces;
  5. using MyMeta;
  6. namespace GizmoBeach.Components.UI
  7. {
  8. public class AspNetMvcUILayerObjects : RenderBase, IUIObjects
  9. {
  10. #region ctors
  11. private readonly IAutoMapperFramework _autoMapperFramework;
  12. private readonly ProgressDialogWrapper _dialog;
  13. private readonly IDatabase _database;
  14. private readonly RequestContext _context;
  15. public AspNetMvcUILayerObjects(RequestContext context):this(context, null)
  16. {
  17. }
  18. public AspNetMvcUILayerObjects(RequestContext context, IAutoMapperFramework autoMapperFramework):base(context.Zeus.Output)
  19. {
  20. this._autoMapperFramework = autoMapperFramework;
  21. this._context = context;
  22. this._dialog = context.Dialog;
  23. this._database = context.Database;
  24. }
  25. #endregion
  26. #region IRenderObject Members
  27. public void Render()
  28. {
  29. _dialog.InitDialog();
  30. _context.FileList.Add("");
  31. _context.FileList.Add("Generated UI MVC ViewData classes:");
  32. bool useUIDtos = false;
  33. if (_autoMapperFramework != null)
  34. useUIDtos = true;
  35. foreach (string tableName in _script.Tables)
  36. {
  37. MyMeta.ITable table = _database.Tables[tableName];
  38. BuildViewDataClass(table, useUIDtos);
  39. }
  40. _dialog.InitDialog(3);
  41. _dialog.Display("Processing UI MVC BaseViewData class.");
  42. BuildBaseViewDataClass();
  43. _dialog.Display("Processing UI MVC BaseViewDataBuilder class.");
  44. BuildBaseViewDataBuilderClass();
  45. _dialog.Display("Processing UI MVC ViewDataFactory class.");
  46. BuildViewDataFactory();
  47. CreateCommonClass();
  48. CreateConfigSettingsClass();
  49. CreateJsonResponseClass();
  50. BuildControllerCodeTemplate();
  51. BuildBaseController();
  52. BuildAutoMapperFramework();
  53. }
  54. private void BuildAutoMapperFramework()
  55. {
  56. if (_autoMapperFramework != null)
  57. {
  58. bool useWebService = false;
  59. _autoMapperFramework.RenderAutoMapperExtensionClass(useWebService);
  60. _autoMapperFramework.RenderAutoMapperConfiguration(useWebService);
  61. _autoMapperFramework.RenderAutoMapperAppStart();
  62. foreach (string tableName in _script.Tables)
  63. {
  64. ITable table = _database.Tables[tableName];
  65. _autoMapperFramework.BuildModelClass(table, useWebService);
  66. }
  67. }
  68. }
  69. private void BuildBaseController()
  70. {
  71. _hdrUtil.WriteClassHeader(_output);
  72. _output.autoTabLn("using " + _script.Settings.ServiceLayer.ServiceNamespace + ".Interfaces;");
  73. _output.autoTabLn("using System.Linq;");
  74. _output.autoTabLn("using System.Web.Mvc;");
  75. _output.autoTabLn("");
  76. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".Controllers");
  77. _output.autoTabLn("{");
  78. _output.tabLevel++;
  79. _output.autoTabLn("public class BaseController : Controller");
  80. _output.autoTabLn("{");
  81. _output.autoTabLn("");
  82. _output.tabLevel++;
  83. _output.autoTabLn("#region DI stuff");
  84. _output.autoTabLn("private ISiteSettingService siteSettingService;");
  85. _output.autoTabLn("");
  86. _output.autoTabLn("public BaseController(ISiteSettingService siteSettingService)");
  87. _output.autoTabLn("{");
  88. _output.tabLevel++;
  89. _output.autoTabLn("this.siteSettingService = siteSettingService;");
  90. _output.tabLevel--;
  91. _output.autoTabLn("}");
  92. _output.autoTabLn("");
  93. _output.autoTabLn("public BaseController()");
  94. _output.autoTabLn("{");
  95. _output.autoTabLn("");
  96. _output.autoTabLn("}");
  97. _output.autoTabLn("");
  98. _output.autoTabLn("#endregion");
  99. _output.autoTabLn("");
  100. _output.autoTabLn("#region Public Methods");
  101. _output.autoTabLn("");
  102. _output.autoTabLn("/// <summary>");
  103. _output.autoTabLn("/// Get the value of a SiteSetting.");
  104. _output.autoTabLn("/// </summary>");
  105. _output.autoTabLn("/// <param name=\"key\"></param>");
  106. _output.autoTabLn("/// <returns></returns>");
  107. _output.autoTabLn("public string GetSetting(string key)");
  108. _output.autoTabLn("{");
  109. _output.tabLevel++;
  110. _output.autoTabLn("string result = string.Empty;");
  111. _output.tabLevel--;
  112. _output.autoTabLn("");
  113. _output.tabLevel++;
  114. _output.autoTabLn("var query = siteSettingService.GetAll(\"\", 0, 0);");
  115. _output.autoTabLn("result = query.Where(q => q.Name == key)");
  116. _output.tabLevel++;
  117. _output.autoTabLn(".Select(q => q.Value).SingleOrDefault();");
  118. _output.tabLevel--;
  119. _output.autoTabLn("");
  120. _output.tabLevel++;
  121. _output.autoTabLn("return result;");
  122. _output.tabLevel--;
  123. _output.autoTabLn("}");
  124. _output.autoTabLn("");
  125. _output.autoTabLn("#endregion");
  126. _output.autoTabLn("");
  127. _output.autoTabLn("#region Overrides");
  128. _output.autoTabLn("/// <summary>");
  129. _output.autoTabLn("/// This provides simple feedback to the modelstate in the case of errors.");
  130. _output.autoTabLn("/// </summary>");
  131. _output.autoTabLn("/// <param name=\"filterContext\"></param>");
  132. _output.autoTabLn("protected override void OnActionExecuted(ActionExecutedContext filterContext)");
  133. _output.autoTabLn("{");
  134. _output.tabLevel++;
  135. _output.autoTabLn("if (filterContext.Result is RedirectToRouteResult)");
  136. _output.autoTabLn("{");
  137. _output.tabLevel++;
  138. _output.autoTabLn("// put the ModelState into TempData");
  139. _output.autoTabLn("TempData.Add(\"_MODELSTATE\", ModelState);");
  140. _output.tabLevel--;
  141. _output.autoTabLn("}");
  142. _output.autoTabLn("else if (filterContext.Result is ViewResult && TempData.ContainsKey(\"_MODELSTATE\"))");
  143. _output.autoTabLn("{");
  144. _output.tabLevel++;
  145. _output.autoTabLn("// merge modelstate from TempData");
  146. _output.autoTabLn("var modelState = TempData[\"_MODELSTATE\"] as ModelStateDictionary;");
  147. _output.autoTabLn("foreach (var item in modelState)");
  148. _output.autoTabLn("{");
  149. _output.tabLevel++;
  150. _output.autoTabLn("if (!ModelState.ContainsKey(item.Key))");
  151. _output.tabLevel++;
  152. _output.autoTabLn("ModelState.Add(item);");
  153. _output.tabLevel--;
  154. _output.autoTabLn("}");
  155. _output.tabLevel--;
  156. _output.autoTabLn("}");
  157. _output.autoTabLn("base.OnActionExecuted(filterContext);");
  158. _output.tabLevel--;
  159. _output.autoTabLn("}");
  160. _output.autoTabLn("#endregion");
  161. _output.autoTabLn("");
  162. _output.tabLevel--;
  163. _output.autoTabLn("}");
  164. _output.tabLevel--;
  165. _output.autoTabLn("}");
  166. _context.FileList.Add(" BaseController.cs");
  167. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\Controllers", "BaseController.cs"), SaveActions.DontOverwrite);
  168. }
  169. private void BuildControllerCodeTemplate()
  170. {
  171. // Am I building a PIA patterned code template, no. (false)
  172. bool useDtos = false;
  173. if (_autoMapperFramework != null)
  174. useDtos = true;
  175. ICodeTemplateBuilder builder = new KingsMvcServiceLibraryCodeTemplates(_context, false, useDtos);
  176. builder.RenderControllerTemplate();
  177. builder.RenderAspNetViewTemplates();
  178. builder.RenderRazorViewTemplates();
  179. builder.RenderWebApiTemplates();
  180. }
  181. private void CreateJsonResponseClass()
  182. {
  183. _hdrUtil.WriteClassHeader(_output);
  184. _output.autoTabLn("using System;");
  185. _output.autoTabLn("using System.Collections.Generic;");
  186. _output.autoTabLn("using System.Linq;");
  187. _output.autoTabLn("using System.Web;");
  188. _output.autoTabLn("");
  189. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".ViewData");
  190. _output.autoTabLn("{");
  191. _output.tabLevel++;
  192. _output.autoTabLn("public class JsonResponse");
  193. _output.autoTabLn("{");
  194. _output.tabLevel++;
  195. _output.autoTabLn("public bool Success { get; set; }");
  196. _output.autoTabLn("public string Message { get; set; }");
  197. _output.autoTabLn("public bool Exists { get; set; }");
  198. _output.tabLevel--;
  199. _output.autoTabLn("}");
  200. _output.tabLevel--;
  201. _output.autoTabLn("}");
  202. _context.FileList.Add(" JsonResponse.cs");
  203. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\ViewData", "JsonResponse.cs"), SaveActions.DontOverwrite);
  204. }
  205. private void CreateConfigSettingsClass()
  206. {
  207. _hdrUtil.WriteClassHeader(_output);
  208. _output.autoTabLn("using System;");
  209. _output.autoTabLn("using System.Configuration;");
  210. _output.autoTabLn("");
  211. _output.autoTabLn("namespace " + _script.Settings.Namespace + ".Core");
  212. _output.autoTabLn("{");
  213. _output.tabLevel++;
  214. _output.autoTabLn("public class ConfigSettings");
  215. _output.autoTabLn("{");
  216. _output.tabLevel++;
  217. _output.autoTabLn("public static string SiteTitle { get { return ConfigurationManager.AppSettings[\"SiteTitle\"]; } }");
  218. _output.autoTabLn("public static string MetaKeywords { get { return ConfigurationManager.AppSettings[\"MetaKeywords\"]; } }");
  219. _output.autoTabLn("public static string MetaDescription { get { return ConfigurationManager.AppSettings[\"MetaDescription\"]; } }");
  220. _output.autoTabLn("public static string FromEmail { get { return ConfigurationManager.AppSettings[\"FromEmail\"]; } }");
  221. _output.tabLevel--;
  222. _output.autoTabLn("}");
  223. _output.tabLevel--;
  224. _output.autoTabLn("}");
  225. _context.FileList.Add(" ConfigSettings.cs");
  226. SaveOutput(CreateFullPath(_script.Settings.Namespace + ".Core", "ConfigSettings.cs"), SaveActions.DontOverwrite);
  227. }
  228. private void CreateCommonClass()
  229. {
  230. _hdrUtil.WriteClassHeader(_output);
  231. _output.autoTabLn("using System.Web;");
  232. _output.autoTabLn("");
  233. _output.autoTabLn("namespace " + _script.Settings.Namespace + ".Core");
  234. _output.autoTabLn("{");
  235. _output.tabLevel++;
  236. _output.autoTabLn("public class Common");
  237. _output.autoTabLn("{");
  238. _output.tabLevel++;
  239. _output.autoTabLn("public static string GetSiteUrl()");
  240. _output.autoTabLn("{");
  241. _output.tabLevel++;
  242. _output.autoTabLn("HttpContext current = HttpContext.Current;");
  243. _output.autoTabLn("string str = current.Request.ServerVariables[\"SERVER_PORT\"];");
  244. _output.autoTabLn("switch (str)");
  245. _output.autoTabLn("{");
  246. _output.tabLevel++;
  247. _output.autoTabLn("case null:");
  248. _output.autoTabLn("case \"80\":");
  249. _output.autoTabLn("case \"443\":");
  250. _output.tabLevel++;
  251. _output.autoTabLn("str = \"\";");
  252. _output.autoTabLn("break;");
  253. _output.tabLevel--;
  254. _output.autoTabLn("");
  255. _output.autoTabLn("default:");
  256. _output.tabLevel++;
  257. _output.autoTabLn("str = \":\" + str;");
  258. _output.autoTabLn("break;");
  259. _output.tabLevel--;
  260. _output.autoTabLn("}");
  261. _output.autoTabLn("string str2 = current.Request.ServerVariables[\"SERVER_PORT_SECURE\"];");
  262. _output.autoTabLn("switch (str2)");
  263. _output.autoTabLn("{");
  264. _output.tabLevel++;
  265. _output.autoTabLn("case null:");
  266. _output.autoTabLn("case \"0\":");
  267. _output.tabLevel++;
  268. _output.autoTabLn("str2 = \"http://\";");
  269. _output.autoTabLn("break;");
  270. _output.tabLevel--;
  271. _output.autoTabLn("");
  272. _output.autoTabLn("default:");
  273. _output.tabLevel++;
  274. _output.autoTabLn("str2 = \"https://\";");
  275. _output.autoTabLn("break;");
  276. _output.tabLevel--;
  277. _output.autoTabLn("}");
  278. _output.autoTabLn("string applicationPath = current.Request.ApplicationPath;");
  279. _output.autoTabLn("if (applicationPath == \"/\")");
  280. _output.autoTabLn("{");
  281. _output.tabLevel++;
  282. _output.autoTabLn("applicationPath = \"\";");
  283. _output.tabLevel--;
  284. _output.autoTabLn("}");
  285. _output.autoTabLn("return (str2 + current.Request.ServerVariables[\"SERVER_NAME\"] + str + applicationPath);");
  286. _output.tabLevel--;
  287. _output.autoTabLn("}");
  288. _output.tabLevel--;
  289. _output.autoTabLn("}");
  290. _output.tabLevel--;
  291. _output.autoTabLn("}");
  292. _context.FileList.Add(" Common.cs");
  293. SaveOutput(CreateFullPath(_script.Settings.Namespace + ".Core", "Common.cs"), SaveActions.DontOverwrite);
  294. }
  295. private void BuildViewDataFactory()
  296. {
  297. _hdrUtil.WriteClassHeader(_output);
  298. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".ViewData");
  299. _output.autoTabLn("{");
  300. _output.tabLevel++;
  301. _output.autoTabLn("public class ViewDataFactory : BaseViewDataBuilder");
  302. _output.autoTabLn("{");
  303. _output.tabLevel++;
  304. _output.autoTabLn("public static T CreateBaseViewData<T>(string pageTitle) where T : BaseViewData, new()");
  305. _output.autoTabLn("{");
  306. _output.tabLevel++;
  307. _output.autoTabLn("T viewData = CreateViewData<T>(pageTitle);");
  308. _output.autoTabLn("");
  309. _output.autoTabLn("return viewData;");
  310. _output.tabLevel--;
  311. _output.autoTabLn("}");
  312. _output.tabLevel--;
  313. _output.autoTabLn("}");
  314. _output.tabLevel--;
  315. _output.autoTabLn("}");
  316. _context.FileList.Add(" ViewDataFactory.cs");
  317. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\ViewData", "ViewDataFactory.cs"), SaveActions.DontOverwrite);
  318. }
  319. private void BuildBaseViewDataBuilderClass()
  320. {
  321. _hdrUtil.WriteClassHeader(_output);
  322. _output.autoTabLn("using " + _script.Settings.Namespace + ".Core;");
  323. _output.autoTabLn("");
  324. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".ViewData");
  325. _output.autoTabLn("{");
  326. _output.tabLevel++;
  327. _output.autoTabLn("public class BaseViewDataBuilder");
  328. _output.autoTabLn("{");
  329. _output.tabLevel++;
  330. _output.autoTabLn("public static T CreateViewData<T>(string pageTitle) where T : BaseViewData, new()");
  331. _output.autoTabLn("{");
  332. _output.tabLevel++;
  333. _output.autoTabLn("T viewData = new T");
  334. _output.autoTabLn("{");
  335. _output.tabLevel++;
  336. _output.autoTabLn("SiteTitle = ConfigSettings.SiteTitle,");
  337. _output.autoTabLn("MetaKeywords = ConfigSettings.MetaKeywords,");
  338. _output.autoTabLn("MetaDescription = ConfigSettings.MetaDescription,");
  339. _output.autoTabLn("PageTitle = pageTitle");
  340. _output.tabLevel--;
  341. _output.autoTabLn("};");
  342. _output.autoTabLn("return viewData;");
  343. _output.tabLevel--;
  344. _output.autoTabLn("}");
  345. _output.tabLevel--;
  346. _output.autoTabLn("}");
  347. _output.tabLevel--;
  348. _output.autoTabLn("}");
  349. _context.FileList.Add(" BaseViewDataBuilder.cs");
  350. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\ViewData", "BaseViewDataBuilder.cs"), SaveActions.DontOverwrite);
  351. }
  352. private void BuildBaseViewDataClass()
  353. {
  354. _hdrUtil.WriteClassHeader(_output);
  355. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".ViewData");
  356. _output.autoTabLn("{");
  357. _output.tabLevel++;
  358. _output.autoTabLn("public abstract class BaseViewData");
  359. _output.autoTabLn("{");
  360. _output.tabLevel++;
  361. _output.autoTabLn("public string SiteTitle { get; set; }");
  362. _output.autoTabLn("public string MetaKeywords { get; set; }");
  363. _output.autoTabLn("public string MetaDescription { get; set; }");
  364. _output.autoTabLn("public string PageTitle { get; set; }");
  365. _output.autoTabLn("public bool IsAdmin { get; set; }");
  366. _output.tabLevel--;
  367. _output.autoTabLn("}");
  368. _output.tabLevel--;
  369. _output.autoTabLn("}");
  370. _context.FileList.Add(" BaseViewData.cs");
  371. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\ViewData", "BaseViewData.cs"), SaveActions.DontOverwrite);
  372. }
  373. private void BuildViewDataClass(MyMeta.ITable table, bool useUIDtos)
  374. {
  375. _hdrUtil.WriteClassHeader(_output);
  376. _output.autoTabLn("using System;");
  377. _output.autoTabLn("using System.Collections.Generic;");
  378. _output.autoTabLn("using System.Linq;");
  379. _output.autoTabLn("using System.Web;");
  380. _output.autoTabLn("");
  381. if (useUIDtos)
  382. {
  383. _output.autoTabLn("using " + _script.Settings.UI.UINamespace + ".Models;");
  384. }
  385. else
  386. {
  387. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  388. }
  389. _output.autoTabLn("");
  390. _output.autoTabLn("namespace " + _script.Settings.UI.UINamespace + ".ViewData");
  391. _output.autoTabLn("{");
  392. _output.tabLevel++;
  393. _output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "ViewData : BaseViewData");
  394. _output.autoTabLn("{");
  395. _output.tabLevel++;
  396. _output.autoTabLn("public " + StringFormatter.CleanUpClassName(table.Name) + ((useUIDtos)? "Model" : "") + " " + StringFormatter.CleanUpClassName(table.Name) + " { get; set; }");
  397. _output.autoTabLn("public List<" + StringFormatter.CleanUpClassName(table.Name) + ((useUIDtos) ? "Model" : "") + "> " + StringFormatter.CleanUpClassName(table.Name) + "List { get; set; }");
  398. _output.tabLevel--;
  399. _output.autoTabLn("}");
  400. _output.tabLevel--;
  401. _output.autoTabLn("}");
  402. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "ViewData.cs");
  403. SaveOutput(CreateFullPath(_script.Settings.UI.UINamespace + "\\ViewData", StringFormatter.CleanUpClassName(table.Name) + "ViewData.cs"), SaveActions.DontOverwrite);
  404. }
  405. #endregion
  406. }
  407. }