AutoMapperObjects.lpr 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. program AutoMapperObjects;
  2. uses
  3. SysUtils,
  4. Generics.Collections,
  5. Quick.Commons,
  6. Quick.Console,
  7. Quick.JSONRecord,
  8. Quick.AutoMapper;
  9. type
  10. TJob = class
  11. private
  12. fName : string;
  13. fDateFrom : TDateTime;
  14. fDateTo : TDateTime;
  15. published
  16. property Name : string read fName write fName;
  17. property DateFrom : TDateTime read fDateFrom write fDateFrom;
  18. property DateTo : TDateTime read fDateTo write fDateTo;
  19. end;
  20. TCarType = (ctOil, ctDiesel);
  21. TAgentStatus = (stActive, stIdle, stFail);
  22. TCar = class
  23. private
  24. fModel : string;
  25. fCarType : TCarType;
  26. published
  27. property Model : string read fModel write fModel;
  28. property CarType : TCarType read fCarType write fCarType;
  29. end;
  30. TCarList = specialize TObjectList<TCar>;
  31. TAgent = class
  32. private
  33. fName : string;
  34. fStatus : TAgentStatus;
  35. published
  36. property Name : string read fName write fName;
  37. property Status : TAgentStatus read fStatus write fStatus;
  38. end;
  39. TAgentList = specialize TList<TAgent>;
  40. TArrayNumbers = array of Integer;
  41. TUserBase = class(TJsonRecord)
  42. private
  43. fName : string;
  44. fAge : Integer;
  45. fCreationDate : TDateTime;
  46. fNumbers : TArrayNumbers;
  47. fAgent : TAgent;
  48. published
  49. property Name : string read fName write fName;
  50. property Age : Integer read fAge write fAge;
  51. property CreationDate : TDateTime read fCreationDate write fCreationDate;
  52. property Numbers : TArrayNumbers read fNumbers write fNumbers;
  53. property Agent : TAgent read fAgent write fAgent;
  54. end;
  55. TPointsList = specialize TList<Integer>;
  56. TUser = class(TUserBase)
  57. private
  58. fId : Int64;
  59. fCash : Integer;
  60. fJob : TJob;
  61. fCar : TCar;
  62. fCarList : TCarList;
  63. fPoints : TPointsList;
  64. fAgentList : TAgentList;
  65. public
  66. constructor Create;
  67. destructor Destroy; override;
  68. published
  69. property Id : Int64 read fId write fId;
  70. property Cash : Integer read fCash write fCash;
  71. property Job : TJob read fJob write fJob;
  72. property Car : TCar read fCar write fCar;
  73. property CarList : TCarList read fCarList write fCarList;
  74. property Points : TPointsList read fPoints write fPoints;
  75. property AgentList : TAgentList read fAgentList write fAgentList;
  76. end;
  77. TUser2 = class(TUserBase)
  78. private
  79. fIdUser : Int64;
  80. fJob : TJob;
  81. fMoney : Integer;
  82. fCar : TCar;
  83. fCarList : TCarList;
  84. fPoints : TPointsList;
  85. fAgentList : TAgentList;
  86. public
  87. constructor Create;
  88. destructor Destroy; override;
  89. published
  90. property IdUser : Int64 read fIdUser write fIdUser;
  91. property Money : Integer read fMoney write fMoney;
  92. property Job : TJob read fJob write fJob;
  93. property Car : TCar read fCar write fCar;
  94. property CarList : TCarList read fCarList write fCarList;
  95. property Points : TPointsList read fPoints write fPoints;
  96. property AgentList : TAgentList read fAgentList write fAgentList;
  97. end;
  98. var
  99. User : TUser;
  100. User2 : TUser2;
  101. AutoMapper : specialize TAutoMapper<TUser,TUser2>;
  102. job : TJob;
  103. car : TCar;
  104. agent : TAgent;
  105. { TUser }
  106. constructor TUser.Create;
  107. begin
  108. fCar := TCar.Create;
  109. fJob := TJob.Create;
  110. fCarList := TCarList.Create(True);
  111. fPoints := TPointsList.Create;
  112. fAgent := TAgent.Create;
  113. fAgentList := TAgentList.Create;
  114. end;
  115. destructor TUser.Destroy;
  116. begin
  117. fCar.Free;
  118. fJob.Free;
  119. fCarList.Free;
  120. fPoints.Free;
  121. fAgent.Free;
  122. fAgentList.Free;
  123. inherited;
  124. end;
  125. { TUser2 }
  126. constructor TUser2.Create;
  127. begin
  128. fCar := TCar.Create;
  129. fJob := TJob.Create;
  130. fCarList := TCarList.Create(True);
  131. fPoints := TPointsList.Create;
  132. fAgent := TAgent.Create;
  133. fAgentList := TAgentList.Create;
  134. end;
  135. destructor TUser2.Destroy;
  136. begin
  137. fCar.Free;
  138. fJob.Free;
  139. fCarList.Free;
  140. fPoints.Free;
  141. fAgent.Free;
  142. fAgentList.Free;
  143. inherited;
  144. end;
  145. begin
  146. try
  147. Console.LogVerbose := LOG_ALL;
  148. User := TUser.Create;
  149. User.Id := 17;
  150. User.CreationDate := Now();
  151. User.Name := 'John Miller';
  152. User.Age := 30;
  153. User.Numbers := [1,2,3,4,5];
  154. User.Cash := 3500;
  155. User.Job.Name := 'Designer';
  156. User.Job.DateFrom := IncMonth(Now(),-12);
  157. User.Job.DateTo := Now();
  158. User.Car.Model := 'Ferrari';
  159. User.Car.CarType := ctOil;
  160. car := TCar.Create;
  161. car.Model := 'Ford';
  162. car.CarType := ctDiesel;
  163. User.CarList.Add(car);
  164. car := TCar.Create;
  165. car.Model := 'Nissan';
  166. car.CarType := ctDiesel;
  167. User.CarList.Add(car);
  168. User.Points.Add(77);
  169. User.Points.Add(100);
  170. User.Points.Add(30);
  171. agent := TAgent.Create;
  172. agent.Name := 'FirstAgent';
  173. agent.Status := TAgentStatus.stIdle;
  174. User.Agent.Name := 'John';
  175. User.Agent.Status := TAgentStatus.stIdle;
  176. User.AgentList.Add(agent);
  177. agent := TAgent.Create;
  178. agent.Name := 'SecondAgent';
  179. agent.Status := TAgentStatus.stFail;
  180. User.AgentList.Add(agent);
  181. //User2 := TMapper<TUser2>.Map(User);
  182. AutoMapper := specialize TAutoMapper<TUser,TUser2>.Create;
  183. try
  184. AutoMapper.CustomMapping.AddMap('Cash','Money');
  185. AutoMapper.CustomMapping.AddMap('Id','IdUser');
  186. User2 := AutoMapper.Map(User);
  187. //User2 := TUser2.Create;
  188. //User.MapTo(User2);
  189. //User2.MapFrom(User);
  190. //User2 := User.Map<TUser2>;
  191. //User2 := TUser2(User.Clone);
  192. //User2 := TMapper<TUserBase>.Clone(User) as TUser2;
  193. cout('COMPARE USER VS USER2',etTrace);
  194. cout('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser],etInfo);
  195. cout('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)],etInfo);
  196. cout('User.Name = %s / User2.Name = %s',[User.Name,User2.Name],etInfo);
  197. cout('User.Age = %d / User2.Age = %d',[User.Age,User2.Age],etInfo);
  198. //cout('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]],etInfo);
  199. cout('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money],etInfo);
  200. cout('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name],etInfo);
  201. cout('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)],etInfo);
  202. cout('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model],etInfo);
  203. cout(' ',etInfo);
  204. cout('USER AS JSON RESULT',etTrace);
  205. cout('%s',[User.ToJson],etInfo);
  206. cout(' ',etInfo);
  207. cout('USER2 AS JSON RESULT',etTrace);
  208. cout('%s',[User2.ToJson],etInfo);
  209. finally
  210. AutoMapper.Free;
  211. User.Free;
  212. User2.Free;
  213. end;
  214. ConsoleWaitForEnterKey;
  215. except
  216. on E: Exception do
  217. Writeln(E.ClassName, ': ', E.Message);
  218. end;
  219. end.