2
0

Main.pas 6.3 KB

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