PageRenderTime 59ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/Plugins/GizmoBeach.Components/DataObjects/EntitySpacesOrmFramework.cs

http://github.com/kahanu/CondorXE
C# | 618 lines | 554 code | 57 blank | 7 comment | 15 complexity | 28d3c67985fcd983d184bc028d4d261d MD5 | raw file
  1. using System;
  2. using Condor.Core;
  3. using Condor.Core.Infrastructure;
  4. using Condor.Core.Interfaces;
  5. using MyMeta;
  6. using Zeus;
  7. namespace GizmoBeach.Components.DataObjects
  8. {
  9. public class EntitySpacesOrmFramework : RenderBase, IORMFramework
  10. {
  11. #region ctors
  12. protected IDataStore _dataStore;
  13. protected RequestContext _context;
  14. protected IDatabase _database;
  15. protected IZeusOutput output;
  16. protected ProgressDialogWrapper _dialog;
  17. protected ICommonGenerators _commonGenerators;
  18. protected IAutoMapperFramework _autoMapperFramework;
  19. public EntitySpacesOrmFramework(IDataStore dataStore, RequestContext context)
  20. : this(dataStore, context, null)
  21. {
  22. }
  23. public EntitySpacesOrmFramework(IDataStore dataStore, RequestContext context, IAutoMapperFramework autoMapperFramework)
  24. : base(context.Zeus.Output)
  25. {
  26. this._dataStore = dataStore;
  27. this._context = context;
  28. this._database = context.Database;
  29. this._dialog = context.Dialog;
  30. this._commonGenerators = new CommonGenerators(context);
  31. this._autoMapperFramework = autoMapperFramework;
  32. }
  33. #endregion
  34. #region IORMFramework Members
  35. public string Name
  36. {
  37. get { return "EntitySpaces"; }
  38. }
  39. public void Generate()
  40. {
  41. _dialog.InitDialog();
  42. _context.FileList.Add("");
  43. _context.FileList.Add("Starting DataObjects classes for " + Name + " Framework");
  44. _dialog.InitDialog();
  45. _context.FileList.Add("");
  46. _context.FileList.Add("Generated DataObjects CRUD Interface:");
  47. RenderCRUDInterface();
  48. _dialog.InitDialog();
  49. _context.FileList.Add("");
  50. _context.FileList.Add("Generated DataObjects Interfaces:");
  51. foreach (string tableName in _script.Tables)
  52. {
  53. ITable table = _database.Tables[tableName];
  54. _dialog.Display("Processing DataObjects interface for '" + table.Name + "'");
  55. RenderInterface(table);
  56. }
  57. _dialog.InitDialog();
  58. _context.FileList.Add("");
  59. _context.FileList.Add("Generated DataObjects Base classes:");
  60. foreach (string tableName in _script.Tables)
  61. {
  62. ITable table = _database.Tables[tableName];
  63. _dialog.Display("Processing DataObjects Base class for '" + table.Name + "'");
  64. RenderBaseClass(table);
  65. }
  66. _dialog.InitDialog();
  67. _context.FileList.Add("");
  68. _context.FileList.Add("Generated DataObjects Concrete classes:");
  69. foreach (string tableName in _script.Tables)
  70. {
  71. ITable table = _database.Tables[tableName];
  72. _dialog.Display("Processing DataObjects Concrete class for '" + table.Name + "'");
  73. RenderConcreteClass(table);
  74. }
  75. if (_autoMapperFramework == null)
  76. {
  77. _dialog.InitDialog();
  78. _context.FileList.Add("");
  79. _context.FileList.Add("Generated DataObjects Mapper classes:");
  80. foreach (string tableName in _script.Tables)
  81. {
  82. ITable table = _database.Tables[tableName];
  83. _dialog.Display("Processing DataObjects Mapper class for '" + table.Name + "'");
  84. RenderMapperClass(table);
  85. }
  86. }
  87. RenderAutoMapperExtensions();
  88. //CreateEntitySpacesFolder();
  89. RenderDataObjectsExtensions();
  90. }
  91. private void RenderMapperClass(ITable table)
  92. {
  93. _hdrUtil.WriteClassHeader(_output);
  94. _output.autoTabLn("using System;");
  95. _output.autoTabLn("using System.Collections.Generic;");
  96. _output.autoTabLn("using System.Linq;");
  97. _output.autoTabLn("");
  98. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper");
  99. _output.autoTabLn("{");
  100. _output.tabLevel++;
  101. _output.autoTabLn("public static class " + StringFormatter.CleanUpClassName(table.Name) + "Mapper");
  102. _output.autoTabLn("{");
  103. _output.tabLevel++;
  104. _output.autoTabLn("public static " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToBusinessObject(this " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " entity)");
  105. _output.autoTabLn("{");
  106. _output.tabLevel++;
  107. _output.autoTabLn("if (entity == null) return null;");
  108. _output.autoTabLn("");
  109. _output.autoTabLn("var model = new " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "();");
  110. _output.autoTabLn("");
  111. string line = string.Empty;
  112. // ToBusinessObject Loop
  113. foreach (Column c in table.Columns)
  114. {
  115. if (c.IsInPrimaryKey)
  116. {
  117. _output.autoTabLn("model." + _context.Utility.CleanUpProperty(c.Name) + " = " + "(int)entity." + _context.Utility.CleanUpProperty(c.Name) + ";");
  118. }
  119. else if (c.Name.ToLower() == _context.ScriptSettings.Settings.DataOptions.VersionColumnName)
  120. {
  121. _output.autoTabLn("model." + _context.ScriptSettings.Settings.DataOptions.VersionColumnName + " = entity." + _context.Utility.CleanUpProperty(c.Name, true) + ".AsBase64String();");
  122. }
  123. else
  124. {
  125. line = "model." + _context.Utility.CleanUpProperty(c.Name) + " = " + "entity." + _context.Utility.CleanUpProperty(c.Name);
  126. if (c.LanguageType.ToLower() != "string")
  127. {
  128. //if (c.IsNullable)
  129. //{
  130. line += ".HasValue ? (" + c.LanguageType + ")entity." + _context.Utility.CleanUpProperty(c.Name) + " : default(" + c.LanguageType + ")";
  131. //}
  132. }
  133. _output.autoTabLn(line + ";");
  134. }
  135. }
  136. // Now include any foreign key relationships
  137. foreach (IForeignKey key in table.ForeignKeys)
  138. {
  139. if (_script.Tables.Contains(key.PrimaryTable.Name))
  140. {
  141. if (key.PrimaryTable.Name != table.Name)
  142. _output.autoTabLn("model." + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + " = " + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + "Mapper.ToBusinessObject(entity.UpTo" + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + "By" + key.ForeignColumns[0].Name + ");");
  143. }
  144. }
  145. _output.autoTabLn("");
  146. _output.autoTabLn("return model;");
  147. _output.tabLevel--;
  148. _output.autoTabLn("}");
  149. _output.autoTabLn("");
  150. _output.autoTabLn("public static " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToEntity(this " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " model, " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " entity)");
  151. _output.autoTabLn("{");
  152. _output.tabLevel++;
  153. _output.autoTabLn("if (model == null) return null;");
  154. _output.autoTabLn("");
  155. _output.tabLevel++;
  156. // ToEntity Loop
  157. foreach (Column c in table.Columns)
  158. {
  159. if (c.Name.ToLower() == _context.ScriptSettings.Settings.DataOptions.VersionColumnName.ToLower())
  160. {
  161. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, true) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ".AsByteArray();");
  162. }
  163. else
  164. {
  165. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name) + " = " + "model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  166. }
  167. }
  168. _output.autoTabLn("return entity;");
  169. _output.tabLevel--;
  170. _output.tabLevel--;
  171. _output.autoTabLn("}");
  172. _output.autoTabLn("");
  173. _output.autoTabLn("public static List<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> ToBusinessObjects(this " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "Collection entities)");
  174. _output.autoTabLn("{");
  175. _output.tabLevel++;
  176. _output.autoTabLn("if (entities == null) return null;");
  177. _output.autoTabLn("return entities.Select(o => o.ToBusinessObject()).ToList();");
  178. _output.tabLevel--;
  179. _output.autoTabLn("}");
  180. _output.tabLevel--;
  181. _output.autoTabLn("}");
  182. _output.tabLevel--;
  183. _output.autoTabLn("}");
  184. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs");
  185. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\EntityMapper", StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs"), SaveActions.DontOverwrite);
  186. }
  187. private void RenderCRUDInterface()
  188. {
  189. _hdrUtil.WriteClassHeader(_output);
  190. _commonGenerators.RenderDaoCRUDInterface();
  191. _context.FileList.Add(" ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  192. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Interfaces", "ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.Overwrite);
  193. }
  194. private void CreateEntitySpacesFolder()
  195. {
  196. // Create a dummy file to just have the folder created.
  197. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + Name, "Dummy.txt"), SaveActions.DontOverwrite);
  198. }
  199. private void RenderConcreteClass(ITable table)
  200. {
  201. _hdrUtil.WriteClassHeader(_output);
  202. _output.autoTabLn("using System;");
  203. _output.autoTabLn("using System.Collections.Generic;");
  204. _output.autoTabLn("using System.Linq;");
  205. _output.autoTabLn("");
  206. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".EntitySpaces;");
  207. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  208. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper;");
  209. _output.autoTabLn("");
  210. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + "." + _script.Settings.DataOptions.DataStore.Selected);
  211. _output.autoTabLn("{");
  212. _output.tabLevel++;
  213. _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);
  214. _output.autoTabLn("{");
  215. _output.autoTabLn("");
  216. _dataStore.GetById(table);
  217. _dataStore.GetAllWithSortingAndPaging(table);
  218. _output.autoTabLn("");
  219. _output.autoTabLn("}");
  220. _output.tabLevel--;
  221. _output.autoTabLn("}");
  222. _context.FileList.Add(" " + _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  223. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\" + _script.Settings.DataOptions.DataStore.Selected, _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.DontOverwrite);
  224. }
  225. private void RenderBaseClass(ITable table)
  226. {
  227. _hdrUtil.WriteClassHeader(_output);
  228. _output.autoTabLn("using System;");
  229. _output.autoTabLn("using System.Collections.Generic;");
  230. _output.autoTabLn("using System.Linq;");
  231. _output.autoTabLn("");
  232. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".EntitySpaces;");
  233. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  234. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper;");
  235. _output.autoTabLn("");
  236. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + "." + _script.Settings.DataOptions.DataStore.Selected);
  237. _output.autoTabLn("{");
  238. _output.tabLevel++;
  239. _output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + " : ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + "<" + _script.Settings.BusinessObjects.BusinessObjectsNamespace + "." + StringFormatter.CleanUpClassName(table.Name) + ">");
  240. _output.autoTabLn("{");
  241. _output.tabLevel++;
  242. _output.autoTabLn("#region CRUD Methods");
  243. _output.autoTabLn("");
  244. _output.tabLevel--;
  245. _output.autoTabLn("");
  246. _dataStore.GetAll(table);
  247. _dataStore.Insert(table);
  248. _dataStore.Update(table);
  249. _dataStore.Delete(table);
  250. _output.autoTabLn("");
  251. _output.tabLevel++;
  252. _output.autoTabLn("#endregion");
  253. _output.tabLevel--;
  254. _output.autoTabLn("}");
  255. _output.tabLevel--;
  256. _output.autoTabLn("}");
  257. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  258. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\" + _script.Settings.DataOptions.DataStore.Selected + "\\Generated", StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.Overwrite);
  259. }
  260. private void RenderInterface(ITable table)
  261. {
  262. _hdrUtil.WriteClassHeader(_output);
  263. _commonGenerators.RenderDaoInterface(table);
  264. _context.FileList.Add(" " + "I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  265. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Interfaces", "I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.DontOverwrite);
  266. }
  267. private void RenderAutoMapperExtensions()
  268. {
  269. if (_autoMapperFramework != null)
  270. {
  271. bool useWebService = false;
  272. _autoMapperFramework.RenderAutoMapperExtensionClass(useWebService);
  273. _autoMapperFramework.RenderAutoMapperConfiguration(useWebService);
  274. _autoMapperFramework.RenderAutoMapperAppStart();
  275. foreach (string tableName in _script.Tables)
  276. {
  277. ITable table = _database.Tables[tableName];
  278. _autoMapperFramework.BuildModelClass(table, useWebService);
  279. }
  280. }
  281. }
  282. private void RenderDataObjectsExtensions()
  283. {
  284. _hdrUtil.WriteClassHeader(_output);
  285. _output.autoTabLn("using System;");
  286. _output.autoTabLn("using System.Collections.Generic;");
  287. _output.autoTabLn("using System.Linq;");
  288. _output.autoTabLn("using System.Data.Linq;");
  289. _output.autoTabLn("");
  290. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace);
  291. _output.autoTabLn("{");
  292. _output.tabLevel++;
  293. _output.autoTabLn("/// <summary>");
  294. _output.autoTabLn("/// Useful set of Extension methods for Data Access purposes.");
  295. _output.autoTabLn("/// </summary>");
  296. _output.autoTabLn("public static class Extensions");
  297. _output.autoTabLn("{");
  298. _output.tabLevel++;
  299. _output.autoTabLn("/// <summary>");
  300. _output.autoTabLn("/// Transform object into Identity data type (integer).");
  301. _output.autoTabLn("/// </summary>");
  302. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  303. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is -1.</param>");
  304. _output.autoTabLn("/// <returns>Identity value.</returns>");
  305. _output.autoTabLn("public static int AsId(this object item, int defaultId = -1)");
  306. _output.autoTabLn("{");
  307. _output.tabLevel++;
  308. _output.autoTabLn("if (item == null)");
  309. _output.tabLevel++;
  310. _output.autoTabLn("return defaultId;");
  311. _output.tabLevel--;
  312. _output.autoTabLn("");
  313. _output.autoTabLn("int result;");
  314. _output.autoTabLn("if (!int.TryParse(item.ToString(), out result))");
  315. _output.tabLevel++;
  316. _output.autoTabLn("return defaultId;");
  317. _output.tabLevel--;
  318. _output.autoTabLn("");
  319. _output.autoTabLn("return result;");
  320. _output.tabLevel--;
  321. _output.autoTabLn("}");
  322. _output.autoTabLn("");
  323. _output.autoTabLn("/// <summary>");
  324. _output.autoTabLn("/// Transform object into integer data type.");
  325. _output.autoTabLn("/// </summary>");
  326. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  327. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(int).</param>");
  328. _output.autoTabLn("/// <returns>The integer value.</returns>");
  329. _output.autoTabLn("public static int AsInt(this object item, int defaultInt = default(int))");
  330. _output.autoTabLn("{");
  331. _output.tabLevel++;
  332. _output.autoTabLn("if (item == null)");
  333. _output.tabLevel++;
  334. _output.autoTabLn("return defaultInt;");
  335. _output.tabLevel--;
  336. _output.autoTabLn("");
  337. _output.autoTabLn("int result;");
  338. _output.autoTabLn("if (!int.TryParse(item.ToString(), out result))");
  339. _output.tabLevel++;
  340. _output.autoTabLn("return defaultInt;");
  341. _output.tabLevel--;
  342. _output.autoTabLn("");
  343. _output.autoTabLn("return result;");
  344. _output.tabLevel--;
  345. _output.autoTabLn("}");
  346. _output.autoTabLn("");
  347. _output.autoTabLn("/// <summary>");
  348. _output.autoTabLn("/// Transform object into double data type.");
  349. _output.autoTabLn("/// </summary>");
  350. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  351. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(double).</param>");
  352. _output.autoTabLn("/// <returns>The double value.</returns>");
  353. _output.autoTabLn("public static double AsDouble(this object item, double defaultDouble = default(double))");
  354. _output.autoTabLn("{");
  355. _output.tabLevel++;
  356. _output.autoTabLn("if (item == null)");
  357. _output.tabLevel++;
  358. _output.autoTabLn("return defaultDouble;");
  359. _output.tabLevel--;
  360. _output.autoTabLn("");
  361. _output.autoTabLn("double result;");
  362. _output.autoTabLn("if (!double.TryParse(item.ToString(), out result))");
  363. _output.tabLevel++;
  364. _output.autoTabLn("return defaultDouble;");
  365. _output.tabLevel--;
  366. _output.autoTabLn("");
  367. _output.autoTabLn("return result;");
  368. _output.tabLevel--;
  369. _output.autoTabLn("}");
  370. _output.autoTabLn("");
  371. _output.autoTabLn("/// <summary>");
  372. _output.autoTabLn("/// Transform object into string data type.");
  373. _output.autoTabLn("/// </summary>");
  374. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  375. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(string).</param>");
  376. _output.autoTabLn("/// <returns>The string value.</returns>");
  377. _output.autoTabLn("public static string AsString(this object item, string defaultString = default(string))");
  378. _output.autoTabLn("{");
  379. _output.tabLevel++;
  380. _output.autoTabLn("if (item == null || item.Equals(System.DBNull.Value))");
  381. _output.tabLevel++;
  382. _output.autoTabLn("return defaultString;");
  383. _output.tabLevel--;
  384. _output.autoTabLn("");
  385. _output.autoTabLn("return item.ToString().Trim();");
  386. _output.tabLevel--;
  387. _output.autoTabLn("}");
  388. _output.autoTabLn("");
  389. _output.autoTabLn("/// <summary>");
  390. _output.autoTabLn("/// Transform object into DateTime data type.");
  391. _output.autoTabLn("/// </summary>");
  392. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  393. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(DateTime).</param>");
  394. _output.autoTabLn("/// <returns>The DateTime value.</returns>");
  395. _output.autoTabLn("public static DateTime AsDateTime(this object item, DateTime defaultDateTime = default(DateTime))");
  396. _output.autoTabLn("{");
  397. _output.tabLevel++;
  398. _output.autoTabLn("if (item == null || string.IsNullOrEmpty(item.ToString()))");
  399. _output.tabLevel++;
  400. _output.autoTabLn("return defaultDateTime;");
  401. _output.tabLevel--;
  402. _output.autoTabLn("");
  403. _output.autoTabLn("DateTime result;");
  404. _output.autoTabLn("if (!DateTime.TryParse(item.ToString(), out result))");
  405. _output.tabLevel++;
  406. _output.autoTabLn("return defaultDateTime;");
  407. _output.tabLevel--;
  408. _output.autoTabLn("");
  409. _output.autoTabLn("return result;");
  410. _output.tabLevel--;
  411. _output.autoTabLn("}");
  412. _output.autoTabLn("");
  413. _output.autoTabLn("/// <summary>");
  414. _output.autoTabLn("/// Transform object into bool data type.");
  415. _output.autoTabLn("/// </summary>");
  416. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  417. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(bool).</param>");
  418. _output.autoTabLn("/// <returns>The bool value.</returns>");
  419. _output.autoTabLn("public static bool AsBool(this object item, bool defaultBool = default(bool))");
  420. _output.autoTabLn("{");
  421. _output.tabLevel++;
  422. _output.autoTabLn("if (item == null)");
  423. _output.tabLevel++;
  424. _output.autoTabLn("return defaultBool;");
  425. _output.tabLevel--;
  426. _output.autoTabLn("");
  427. _output.autoTabLn("return new List<string>() { \"yes\", \"y\", \"true\" }.Contains(item.ToString().ToLower());");
  428. _output.tabLevel--;
  429. _output.autoTabLn("}");
  430. _output.autoTabLn("");
  431. _output.autoTabLn("/// <summary>");
  432. _output.autoTabLn("/// Transform string into byte array.");
  433. _output.autoTabLn("/// </summary>");
  434. _output.autoTabLn("/// <param name=\"s\">The object to be transformed.</param>");
  435. _output.autoTabLn("/// <returns>The transformed byte array.</returns>");
  436. _output.autoTabLn("public static byte[] AsByteArray(this string s)");
  437. _output.autoTabLn("{");
  438. _output.tabLevel++;
  439. _output.autoTabLn("if (string.IsNullOrEmpty(s))");
  440. _output.tabLevel++;
  441. _output.autoTabLn("return null;");
  442. _output.tabLevel--;
  443. _output.autoTabLn("");
  444. _output.autoTabLn("return Convert.FromBase64String(s);");
  445. _output.tabLevel--;
  446. _output.autoTabLn("}");
  447. _output.autoTabLn("");
  448. _output.autoTabLn("/// <summary>");
  449. _output.autoTabLn("/// Transform object into base64 string.");
  450. _output.autoTabLn("/// </summary>");
  451. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  452. _output.autoTabLn("/// <returns>The base64 string value.</returns>");
  453. _output.autoTabLn("public static string AsBase64String(this object item)");
  454. _output.autoTabLn("{");
  455. _output.tabLevel++;
  456. _output.autoTabLn("if (item == null)");
  457. _output.tabLevel++;
  458. _output.autoTabLn("return null;");
  459. _output.tabLevel--;
  460. _output.autoTabLn("");
  461. _output.autoTabLn("return Convert.ToBase64String((byte[]) item); ");
  462. _output.tabLevel--;
  463. _output.autoTabLn("}");
  464. _output.autoTabLn("");
  465. _output.autoTabLn("/// <summary>");
  466. _output.autoTabLn("/// Transform Binary into base64 string data type. ");
  467. _output.autoTabLn("/// Note: This is used in LINQ to SQL only.");
  468. _output.autoTabLn("/// </summary>");
  469. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  470. _output.autoTabLn("/// <returns>The base64 string value.</returns>");
  471. _output.autoTabLn("public static string AsBase64String(this Binary item)");
  472. _output.autoTabLn("{");
  473. _output.tabLevel++;
  474. _output.autoTabLn("if (item == null)");
  475. _output.tabLevel++;
  476. _output.autoTabLn("return null;");
  477. _output.tabLevel--;
  478. _output.autoTabLn("");
  479. _output.autoTabLn("return Convert.ToBase64String(item.ToArray());");
  480. _output.tabLevel--;
  481. _output.autoTabLn("}");
  482. _output.autoTabLn("");
  483. _output.autoTabLn("/// <summary>");
  484. _output.autoTabLn("/// Transform base64 string to Binary data type. ");
  485. _output.autoTabLn("/// Note: This is used in LINQ to SQL only.");
  486. _output.autoTabLn("/// </summary>");
  487. _output.autoTabLn("/// <param name=\"s\">The base 64 string to be transformed.</param>");
  488. _output.autoTabLn("/// <returns>The Binary value.</returns>");
  489. _output.autoTabLn("public static Binary AsBinary(this string s)");
  490. _output.autoTabLn("{");
  491. _output.tabLevel++;
  492. _output.autoTabLn("if (string.IsNullOrEmpty(s))");
  493. _output.tabLevel++;
  494. _output.autoTabLn("return null;");
  495. _output.tabLevel--;
  496. _output.autoTabLn("");
  497. _output.autoTabLn("return new Binary(Convert.FromBase64String(s));");
  498. _output.tabLevel--;
  499. _output.autoTabLn("}");
  500. _output.autoTabLn("");
  501. _output.autoTabLn("/// <summary>");
  502. _output.autoTabLn("/// Transform object into Guid data type.");
  503. _output.autoTabLn("/// </summary>");
  504. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  505. _output.autoTabLn("/// <returns>The Guid value.</returns>");
  506. _output.autoTabLn("public static Guid AsGuid(this object item)");
  507. _output.autoTabLn("{");
  508. _output.tabLevel++;
  509. _output.autoTabLn("try { return new Guid(item.ToString()); }");
  510. _output.autoTabLn("catch { return Guid.Empty; }");
  511. _output.tabLevel--;
  512. _output.autoTabLn("}");
  513. _output.autoTabLn("");
  514. _output.autoTabLn("/// <summary>");
  515. _output.autoTabLn("/// Concatenates SQL and ORDER BY clauses into a single string. ");
  516. _output.autoTabLn("/// </summary>");
  517. _output.autoTabLn("/// <param name=\"sql\">The SQL string</param>");
  518. _output.autoTabLn("/// <param name=\"sortExpression\">The Sort Expression.</param>");
  519. _output.autoTabLn("/// <returns>Contatenated SQL Statement.</returns>");
  520. _output.autoTabLn("public static string OrderBy(this string sql, string sortExpression)");
  521. _output.autoTabLn("{");
  522. _output.tabLevel++;
  523. _output.autoTabLn("if (string.IsNullOrEmpty(sortExpression))");
  524. _output.tabLevel++;
  525. _output.autoTabLn("return sql;");
  526. _output.tabLevel--;
  527. _output.autoTabLn("");
  528. _output.autoTabLn("return sql + \" ORDER BY \" + sortExpression;");
  529. _output.tabLevel--;
  530. _output.autoTabLn("}");
  531. _output.autoTabLn("");
  532. _output.autoTabLn("/// <summary>");
  533. _output.autoTabLn("/// Takes an enumerable source and returns a comma separate string.");
  534. _output.autoTabLn("/// Handy to build SQL Statements (for example with IN () statements) from object collections.");
  535. _output.autoTabLn("/// </summary>");
  536. _output.autoTabLn("/// <typeparam name=\"T\">The Enumerable type</typeparam>");
  537. _output.autoTabLn("/// <typeparam name=\"U\">The original data type (typically identities - int).</typeparam>");
  538. _output.autoTabLn("/// <param name=\"source\">The enumerable input collection.</param>");
  539. _output.autoTabLn("/// <param name=\"func\">The function that extracts property value in object.</param>");
  540. _output.autoTabLn("/// <returns>The comma separated string.</returns>");
  541. _output.autoTabLn("public static string CommaSeparate<T, U>(this IEnumerable<T> source, Func<T, U> func)");
  542. _output.autoTabLn("{");
  543. _output.tabLevel++;
  544. _output.autoTabLn("return string.Join(\",\", source.Select(s => func(s).ToString()).ToArray());");
  545. _output.tabLevel--;
  546. _output.autoTabLn("}");
  547. _output.tabLevel--;
  548. _output.autoTabLn("}");
  549. _output.tabLevel--;
  550. _output.autoTabLn("}");
  551. _output.autoTabLn("");
  552. _context.FileList.Add(" Extensions.cs");
  553. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Shared", "Extensions.cs"), SaveActions.Overwrite);
  554. }
  555. #endregion
  556. }
  557. }