Browse Source

AutoMapper fpc sample added

Unknown 7 years ago
parent
commit
16e799c193

+ 64 - 0
samples/fpc/AutoMapper/AutoMapperObjects.lpi

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="AutoMapperObjects"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="0"/>
+    </RunParams>
+    <RequiredPackages Count="1">
+      <Item1>
+        <PackageName Value="QuickLib"/>
+      </Item1>
+    </RequiredPackages>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="AutoMapperObjects.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="AutoMapperObjects"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 171 - 0
samples/fpc/AutoMapper/AutoMapperObjects.lpr

@@ -0,0 +1,171 @@
+program AutoMapperObjects;
+
+uses
+  SysUtils,
+  Quick.Commons,
+  Quick.Console,
+  Quick.JSONRecord,
+  Quick.AutoMapper;
+
+type
+
+  TJob = class
+  private
+    fName : string;
+    fDateFrom : TDateTime;
+    fDateTo : TDateTime;
+  published
+    property Name : string read fName write fName;
+    property DateFrom : TDateTime read fDateFrom write fDateFrom;
+    property DateTo : TDateTime read fDateTo write fDateTo;
+  end;
+
+  TCarType = (ctOil, ctDiesel);
+
+  TCar = class
+  private
+    fModel : string;
+    fCarType : TCarType;
+  published
+    property Model : string read fModel write fModel;
+    property CarType : TCarType read fCarType write fCarType;
+  end;
+
+  TArrayOfInteger = array of Integer;
+
+  TUserBase = class(TJsonRecord)
+  private
+    fName : string;
+    fAge : Integer;
+    fCreationDate : TDateTime;
+    fNumbers : TArrayOfInteger;
+  published
+    property Name : string read fName write fName;
+    property Age : Integer read fAge write fAge;
+    property CreationDate : TDateTime read fCreationDate write fCreationDate;
+    property Numbers : TArrayOfInteger read fNumbers write fNumbers;
+  end;
+
+  TUser = class(TUserBase)
+  private
+    fId : Int64;
+    fCash : Integer;
+    fJob : TJob;
+    fCar : TCar;
+  public
+    constructor Create;
+    destructor Destroy; override;
+  published
+    property Id : Int64 read fId write fId;
+    property Cash : Integer read fCash write fCash;
+    property Job : TJob read fJob write fJob;
+    property Car : TCar read fCar write fCar;
+  end;
+
+  TUser2 = class(TUserBase)
+  private
+    fIdUser : Int64;
+    fJob : TJob;
+    fMoney : Integer;
+    fCar : TCar;
+  public
+    constructor Create;
+    destructor Destroy; override;
+  published
+    property IdUser : Int64 read fIdUser write fIdUser;
+    property Money : Integer read fMoney write fMoney;
+    property Job : TJob read fJob write fJob;
+    property Car : TCar read fCar write fCar;
+  end;
+
+var
+  User : TUser;
+  User2 : TUser2;
+  AutoMapper : specialize TAutoMapper<TUser,TUser2>;
+
+{ TUser }
+
+constructor TUser.Create;
+begin
+  fCar := TCar.Create;
+  fJob := TJob.Create;
+end;
+
+destructor TUser.Destroy;
+begin
+  fCar.Free;
+  fJob.Free;
+  inherited;
+end;
+
+{ TUser2 }
+
+constructor TUser2.Create;
+begin
+  fCar := TCar.Create;
+  fJob := TJob.Create;
+end;
+
+destructor TUser2.Destroy;
+begin
+  fCar.Free;
+  fJob.Free;
+  inherited;
+end;
+
+begin
+  try
+    User := TUser.Create;
+    User.Id := 17;
+    User.CreationDate := Now();
+    User.Name := 'John Miller';
+    User.Age := 30;
+    User.Numbers := [1,2,3,4,5];
+    User.Cash := 3500;
+    User.Job.Name := 'Designer';
+    User.Job.DateFrom := IncMonth(Now(),-12);
+    User.Job.DateTo := Now();
+    User.Car.Model := 'Ferrari';
+    User.Car.CarType := ctOil;
+    //User2 := TMapper<TUser2>.Map(User);
+    AutoMapper := specialize TAutoMapper<TUser,TUser2>.Create;
+    try
+      AutoMapper.CustomMapping.AddMap('Cash','Money');
+      AutoMapper.CustomMapping.AddMap('Id','IdUser');
+      User2 := AutoMapper.Map(User);
+      //User2 := TUser2.Create;
+      //User.MapTo(User2);
+      //User2.MapFrom(User);
+      //User2 := User.Map<TUser2>;
+      //User2 := TUser2(User.Clone);
+      //User2 := TMapper<TUserBase>.Clone(User) as TUser2;
+
+      cout('COMPARE USER VS USER2',etTrace);
+      cout('User.Id = %d / User2.IdUser = %d',[User.Id,User2.IdUser],etInfo);
+      cout('User.CreationDate = %s / User2.CreationDate = %s',[DateTimeToStr(User.CreationDate),DateTimetoStr(User2.CreationDate)],etInfo);
+      cout('User.Name = %s / User2.Name = %s',[User.Name,User2.Name],etInfo);
+      cout('User.Age = %d / User2.Age = %d',[User.Age,User2.Age],etInfo);
+      //cout('User.Numbers = %d / User2.Numbers = %d',[User.Numbers[1],User2.Numbers[1]],etInfo);
+      cout('User.Cash = %d / User2.Money = %d',[User.Cash,User2.Money],etInfo);
+      cout('User.Job.Name = %s / User2.Job.Name = %s',[User.Job.Name,User2.Job.Name],etInfo);
+      cout('User.Job.DateFrom = %s / User2.Job.DateFrom = %s',[DateTimeToStr(User.Job.DateFrom),DateTimeToStr(User2.Job.DateFrom)],etInfo);
+      cout('User.Car.Model = %s / User2.Car.Model = %s',[User.Car.Model,User2.Car.Model],etInfo);
+
+      cout(' ',etInfo);
+      cout('USER AS JSON RESULT',etTrace);
+      cout('%s',[User.ToJson],etInfo);
+      cout(' ',etInfo);
+      cout('USER2 AS JSON RESULT',etTrace);
+      cout('%s',[User2.ToJson],etInfo);
+
+    finally
+      AutoMapper.Free;
+      User.Free;
+      User2.Free;
+    end;
+    ConsoleWaitForEnterKey;
+  except
+    on E: Exception do
+      Writeln(E.ClassName, ': ', E.Message);
+  end;
+end.