PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Condor.Core/ORMFrameworkBase.cs

http://github.com/kahanu/CondorXE
C# | 257 lines | 230 code | 25 blank | 2 comment | 10 complexity | e7041d8d5de80dd4895e0791f61e41b5 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using GizmoBeach.Condor.Core.Interfaces;
  6. using MyMeta;
  7. using Zeus;
  8. namespace GizmoBeach.Condor.Core
  9. {
  10. public abstract class ORMFrameworkBase : RenderBase, IORMFramework
  11. {
  12. protected IDataStore _dataStore;
  13. protected RequestContext _context;
  14. protected ScriptSettings _script;
  15. protected IDatabase _database;
  16. protected IZeusOutput output;
  17. protected ProgressDialogWrapper _dialog;
  18. public ORMFrameworkBase(IDataStore dataStore, RequestContext context):base(context.Zeus.Output)
  19. {
  20. this._dataStore = dataStore;
  21. this._context = context;
  22. this._script = context.ScriptSettings;
  23. this._database = context.Database;
  24. this._dialog = context.Dialog;
  25. }
  26. #region IORMFramework Members
  27. public abstract string Name { get; }
  28. public void Generate()
  29. {
  30. foreach (string tableName in _script.Tables)
  31. {
  32. ITable table = _database.Tables[tableName];
  33. RenderBaseClass(table);
  34. }
  35. foreach (string tableName in _script.Tables)
  36. {
  37. ITable table = _database.Tables[tableName];
  38. RenderConcreteClass(table);
  39. }
  40. foreach (string tableName in _script.Tables)
  41. {
  42. ITable table = _database.Tables[tableName];
  43. RenderMapperClass(table);
  44. }
  45. foreach (string tableName in _script.Tables)
  46. {
  47. ITable table = _database.Tables[tableName];
  48. RenderInterface(table);
  49. }
  50. RenderCRUDInterface();
  51. }
  52. private void RenderCRUDInterface()
  53. {
  54. }
  55. private void RenderInterface(ITable table)
  56. {
  57. }
  58. private void RenderMapperClass(ITable table)
  59. {
  60. string str = "";
  61. // To BusinessObject loop
  62. foreach (Column c in table.Columns)
  63. {
  64. if (c.Name.ToLower() != _script.Settings.DataOptions.VersionColumnName.ToLower())
  65. {
  66. if (c.IsNullable && (c.LanguageType != "string"))
  67. {
  68. str += " " + _context.Utility.CleanUpProperty(c.Name, false) + " = " + "entity." + _context.Utility.CleanUpProperty(c.Name, false) + ".HasValue ? (" + c.LanguageType + ")entity." + _context.Utility.CleanUpProperty(c.Name, false) + " : default(" + c.LanguageType + ")," + Environment.NewLine;
  69. }
  70. else
  71. {
  72. str += " " + _context.Utility.CleanUpProperty(c.Name, false) + " = " + "entity." + _context.Utility.CleanUpProperty(c.Name, false) + "," + Environment.NewLine;
  73. }
  74. }
  75. else
  76. {
  77. str += " " + _context.Utility.CleanUpProperty(c.Name, false) + " = " + "VersionConverter.ToString(entity." + _context.Utility.CleanUpProperty(c.Name, false) + ")," + Environment.NewLine;
  78. }
  79. }
  80. int lastComma = str.LastIndexOf(",");
  81. str = str.Substring(0, lastComma);
  82. string strEntity = string.Empty;
  83. // ToEntity loop
  84. foreach (Column c in table.Columns)
  85. {
  86. if (c.Name.ToLower() != _script.Settings.DataOptions.VersionColumnName.ToLower())
  87. {
  88. strEntity += " " + _context.Utility.CleanUpProperty(c.Name, false) + " = model." + _context.Utility.CleanUpProperty(c.Name, false) + "," + Environment.NewLine;
  89. }
  90. else if (!c.IsInPrimaryKey && c.IsInForeignKey)
  91. {
  92. }
  93. else
  94. {
  95. strEntity += " " + _context.Utility.CleanUpProperty(c.Name, false) + " = VersionConverter.ToBinary(model." + _context.Utility.CleanUpProperty(c.Name, false) + ")," + Environment.NewLine;
  96. }
  97. }
  98. lastComma = strEntity.LastIndexOf(",");
  99. strEntity = strEntity.Substring(0, lastComma);
  100. output.autoTabLn("using System;");
  101. output.autoTabLn("using System.Data;");
  102. output.autoTabLn("using System.Linq;");
  103. output.autoTabLn("using System.Linq.Dynamic;");
  104. output.autoTabLn("using System.Collections.Generic;");
  105. output.autoTabLn("using System.Data.Objects.DataClasses;");
  106. output.autoTabLn("");
  107. output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace);
  108. output.autoTabLn("{");
  109. output.tabLevel++;
  110. output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "Mapper");
  111. output.autoTabLn("{");
  112. output.tabLevel++;
  113. output.autoTabLn("public static " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToBusinessObject(" + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " entity)");
  114. output.autoTabLn("{");
  115. output.tabLevel++;
  116. output.autoTabLn("if (entity == null) return null;");
  117. output.autoTabLn("");
  118. output.autoTabLn("return new " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)));
  119. output.autoTabLn("{");
  120. output.tabLevel++;
  121. output.autoTabLn(str);
  122. output.tabLevel--;
  123. output.autoTabLn("};");
  124. output.tabLevel--;
  125. output.autoTabLn("}");
  126. output.autoTabLn("");
  127. output.autoTabLn("public static " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToEntity(" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " model)");
  128. output.autoTabLn("{");
  129. output.tabLevel++;
  130. output.autoTabLn("if (model == null) return null;");
  131. output.autoTabLn("");
  132. output.autoTabLn("return new " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)));
  133. output.autoTabLn("{");
  134. output.tabLevel++;
  135. output.autoTabLn(strEntity);
  136. output.tabLevel--;
  137. output.autoTabLn("};");
  138. output.tabLevel--;
  139. output.autoTabLn("}");
  140. output.autoTabLn("");
  141. output.autoTabLn("public static List<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> ToBusinessObjects(EntityCollection<" + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> entities)");
  142. output.autoTabLn("{");
  143. output.tabLevel++;
  144. output.autoTabLn("if (entities == null) return null;");
  145. output.autoTabLn("return entities.Select(o => ToBusinessObject(o)).ToList();");
  146. output.tabLevel--;
  147. output.autoTabLn("}");
  148. output.tabLevel--;
  149. output.autoTabLn("}");
  150. output.tabLevel--;
  151. output.autoTabLn("}");
  152. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs");
  153. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\EntityMapper", StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs"), SaveActions.DontOverwrite);
  154. }
  155. private void RenderConcreteClass(ITable table)
  156. {
  157. hdrUtil.WriteClassHeader(output);
  158. output.autoTabLn("using System;");
  159. output.autoTabLn("using System.Collections.Generic;");
  160. output.autoTabLn("using System.Linq;");
  161. output.autoTabLn("using System.Text;");
  162. output.autoTabLn("using System.Data.Linq;");
  163. output.autoTabLn("");
  164. output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  165. output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  166. output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".EntityFramework;");
  167. output.autoTabLn("");
  168. output.autoTabLn("using System.Linq.Dynamic;");
  169. output.autoTabLn("");
  170. output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + ".SQLServer");
  171. output.autoTabLn("{");
  172. output.tabLevel++;
  173. output.autoTabLn("public class " + _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + " : " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ", I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name);
  174. output.autoTabLn("{");
  175. output.tabLevel--;
  176. output.autoTabLn("");
  177. _dataStore.GetById(table);
  178. _dataStore.GetAllWithSortingAndPaging(table);
  179. output.autoTabLn("");
  180. output.autoTabLn("");
  181. output.tabLevel++;
  182. output.autoTabLn("}");
  183. output.tabLevel--;
  184. output.autoTabLn("}");
  185. _context.FileList.Add(" " + _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  186. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.DataStore.Selected, _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.DontOverwrite);
  187. }
  188. private void RenderBaseClass(ITable table)
  189. {
  190. hdrUtil.WriteClassHeader(output);
  191. output.autoTabLn("using System;");
  192. output.autoTabLn("using System.Collections.Generic;");
  193. output.autoTabLn("using System.Linq;");
  194. output.autoTabLn("using System.Text;");
  195. output.autoTabLn("using System.Data.Linq;");
  196. output.autoTabLn("");
  197. output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  198. output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  199. output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".EntityFramework;");
  200. output.autoTabLn("");
  201. output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + ".SQLServer");
  202. output.autoTabLn("{");
  203. output.tabLevel++;
  204. output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "BaseDao : ICRUDDao<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + ">");
  205. output.autoTabLn("{");
  206. output.tabLevel++;
  207. output.autoTabLn("#region CRUD Methods");
  208. output.autoTabLn("");
  209. output.tabLevel--;
  210. output.autoTabLn("");
  211. _dataStore.GetAll(table);
  212. _dataStore.Insert(table);
  213. _dataStore.Update(table);
  214. _dataStore.Delete(table);
  215. output.autoTabLn("");
  216. output.tabLevel++;
  217. output.autoTabLn("#endregion");
  218. output.tabLevel--;
  219. output.autoTabLn("}");
  220. output.tabLevel--;
  221. output.autoTabLn("}");
  222. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  223. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.DataStore.Selected + "\\Generated", StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.Overwrite);
  224. }
  225. #endregion
  226. }
  227. }