Main.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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,
  7. FMX.ScrollBox, FMX.Memo;
  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. TCar = class
  24. private
  25. fModel : string;
  26. fCarType : TCarType;
  27. published
  28. property Model : string read fModel write fModel;
  29. property CarType : TCarType read fCarType write fCarType;
  30. end;
  31. TUserBase = class(TJsonRecord)
  32. private
  33. fName : string;
  34. fAge : Integer;
  35. fCreationDate : TDateTime;
  36. fNumbers : TArray<Integer>;
  37. published
  38. property Name : string read fName write fName;
  39. property Age : Integer read fAge write fAge;
  40. property CreationDate : TDateTime read fCreationDate write fCreationDate;
  41. property Numbers : TArray<Integer> read fNumbers write fNumbers;
  42. end;
  43. TUser = class(TUserBase)
  44. private
  45. fId : Int64;
  46. fCash : Integer;
  47. fJob : TJob;
  48. fCar : TCar;
  49. public
  50. constructor Create;
  51. destructor Destroy; override;
  52. published
  53. property Id : Int64 read fId write fId;
  54. property Cash : Integer read fCash write fCash;
  55. property Job : TJob read fJob write fJob;
  56. property Car : TCar read fCar write fCar;
  57. end;
  58. TUser2 = class(TUserBase)
  59. private
  60. fIdUser : Int64;
  61. fJob : TJob;
  62. fMoney : Integer;
  63. fCar : TCar;
  64. public
  65. constructor Create;
  66. destructor Destroy; override;
  67. published
  68. property IdUser : Int64 read fIdUser write fIdUser;
  69. property Money : Integer read fMoney write fMoney;
  70. property Job : TJob read fJob write fJob;
  71. property Car : TCar read fCar write fCar;
  72. end;
  73. var
  74. User : TUser;
  75. User2 : TUser2;
  76. UserClone : TUser;
  77. job : TJob;
  78. AutoMapper : TAutoMapper<TUser,TUser2>;
  79. var
  80. Form1: TForm1;
  81. implementation
  82. {$R *.fmx}
  83. { TUser }
  84. constructor TUser.Create;
  85. begin
  86. fCar := TCar.Create;
  87. end;
  88. destructor TUser.Destroy;
  89. begin
  90. fCar.Free;
  91. inherited;
  92. end;
  93. { TUser2 }
  94. constructor TUser2.Create;
  95. begin
  96. fCar := TCar.Create;
  97. end;
  98. destructor TUser2.Destroy;
  99. begin
  100. fCar.Free;
  101. inherited;
  102. end;
  103. procedure TForm1.FormCreate(Sender: TObject);
  104. begin
  105. User := TUser.Create;
  106. User.Id := 17;
  107. User.CreationDate := Now();
  108. User.Name := 'Jhon Miller';
  109. User.Age := 30;
  110. User.Numbers := [1,2,3,4,5];
  111. User.Cash := 3500;
  112. job.Name := 'Designer';
  113. job.DateFrom := IncMonth(Now(),-12);
  114. job.DateTo := Now();
  115. User.Job := job;
  116. User.Car.Model := 'Ferrari';
  117. User.Car.CarType := ctOil;
  118. //User2 := TMapper<TUser2>.Map(User);
  119. AutoMapper := TAutoMapper<TUser,TUser2>.Create;
  120. try
  121. AutoMapper.CustomMapping.AddMap('Cash','Money');
  122. AutoMapper.CustomMapping.AddMap('Id','IdUser');
  123. User2 := AutoMapper.Map(User);
  124. //User2 := TUser2.Create;
  125. //User.MapTo(User2);
  126. //User2.MapFrom(User);
  127. //User2 := User.Map<TUser2>;
  128. //UserClone := User.Clone as TUser;
  129. //User2 := TUser2(User.Clone);
  130. //User2 := TMapper<TUserBase>.Clone(User) as TUser2;
  131. Memo1.Lines.Add('COMPARE USER VS USER2');
  132. Memo1.Lines.Add(Format('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser]));
  133. Memo1.Lines.Add(Format('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)]));
  134. Memo1.Lines.Add(Format('User.Name = %s / User2.Name = %s',[User.Name,User2.Name]));
  135. Memo1.Lines.Add(Format('User.Age = %d / User2.Age = %d',[User.Age,User2.Age]));
  136. Memo1.Lines.Add(Format('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]]));
  137. Memo1.Lines.Add(Format('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money]));
  138. Memo1.Lines.Add(Format('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name]));
  139. Memo1.Lines.Add(Format('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)]));
  140. Memo1.Lines.Add(Format('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model]));
  141. Memo1.Lines.Add(' ');
  142. Memo1.Lines.Add('USER AS JSON RESULT');
  143. Memo1.Lines.Add(Format('%s',[User.ToJson]));
  144. Memo1.Lines.Add(' ');
  145. Memo1.Lines.Add('USER2 AS JSON RESULT');
  146. Memo1.Lines.Add(Format('%s',[User2.ToJson]));
  147. finally
  148. AutoMapper.Free;
  149. User.Free;
  150. User2.Free;
  151. end;
  152. end;
  153. end.