mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-16 00:05:53 +01:00
8fc2614a1d
- TStream - TObjectList<T> (only if the list itself is already created on the object) - TObject (only if the list itself is already created on the object) MapperItemClassType has been aliased with MapperListOf to be more compliant to DORM and can be on the property itself or in the declaration of the type of the property (Check TEST TestComplexObjectToJSONObjectAndBack test)
144 lines
4.4 KiB
ObjectPascal
144 lines
4.4 KiB
ObjectPascal
unit MainFormU;
|
|
|
|
interface
|
|
|
|
uses
|
|
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
|
|
System.Classes, Vcl.Graphics,
|
|
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ComCtrls, FireDAC.Stan.Intf,
|
|
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
|
|
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.Mask, Vcl.DBCtrls, Vcl.ExtCtrls,
|
|
MVCFramework.RESTClient, Data.Bind.GenData, Vcl.Bind.GenData, Data.Bind.Components, Data.Bind.ObjectScope,
|
|
System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Data.Bind.EngExt, Vcl.Bind.DBEngExt, Vcl.Buttons,
|
|
Vcl.Bind.Navigator, WinesBO, Generics.Collections, Data.Bind.Controls;
|
|
|
|
type
|
|
TForm5 = class(TForm)
|
|
Button1: TButton;
|
|
PageControl1: TPageControl;
|
|
TabSheet1: TTabSheet;
|
|
TabSheet2: TTabSheet;
|
|
Memo1: TMemo;
|
|
TabSheet3: TTabSheet;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
Label6: TLabel;
|
|
PrototypeBindSource1: TPrototypeBindSource;
|
|
ListView1: TListView;
|
|
BindingsList1: TBindingsList;
|
|
LinkListControlToField1: TLinkListControlToField;
|
|
Edit1: TEdit;
|
|
Edit2: TEdit;
|
|
Edit3: TEdit;
|
|
Edit4: TEdit;
|
|
Edit5: TEdit;
|
|
Memo2: TMemo;
|
|
LinkControlToField1: TLinkControlToField;
|
|
LinkControlToField2: TLinkControlToField;
|
|
LinkControlToField3: TLinkControlToField;
|
|
LinkControlToField4: TLinkControlToField;
|
|
LinkControlToField5: TLinkControlToField;
|
|
LinkControlToField6: TLinkControlToField;
|
|
BindNavigator1: TBindNavigator;
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure ListView1DblClick(Sender: TObject);
|
|
procedure PrototypeBindSource1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter);
|
|
procedure BindNavigator1BeforeAction(Sender: TObject; Button: TNavigateButton);
|
|
|
|
private
|
|
RESTClient: TRESTClient;
|
|
WinesAdapter: TListBindSourceAdapter<TWine>;
|
|
FWines: TObjectList<TWine>;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
Form5: TForm5;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
uses ObjectsMappers, {$IFDEF VER270}System.JSON{$ELSE}Data.DBXJSON{$ENDIF}, MVCFramework.Commons;
|
|
|
|
procedure TForm5.BindNavigator1BeforeAction(Sender: TObject; Button: TNavigateButton);
|
|
var
|
|
Resp: IRESTResponse;
|
|
begin
|
|
Resp := nil;
|
|
case Button of
|
|
nbDelete:
|
|
begin
|
|
Resp := RESTClient.doDELETE('/wines', [(WinesAdapter.Current as TWine).id.ToString]);
|
|
end;
|
|
nbPost:
|
|
begin
|
|
case WinesAdapter.State of
|
|
seEdit:
|
|
begin
|
|
WinesAdapter.Post;
|
|
Resp := RESTClient.doPUT('/wines', [(WinesAdapter.Current as TWine).id.ToString],
|
|
Mapper.ObjectToJSONObject(WinesAdapter.Current));
|
|
Abort;
|
|
end;
|
|
seInsert:
|
|
begin
|
|
WinesAdapter.Post;
|
|
Resp := RESTClient.doPOST('/wines', [],
|
|
Mapper.ObjectToJSONObject(WinesAdapter.Current));
|
|
Abort;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if Assigned(Resp) and (not Resp.ResponseCode in [200, 201]) then
|
|
raise Exception.Create(Resp.ResponseText);
|
|
end;
|
|
|
|
procedure TForm5.Button1Click(Sender: TObject);
|
|
var
|
|
response: IRESTResponse;
|
|
begin
|
|
response := RESTClient.doGET('/wines', []);
|
|
Memo1.Lines.Text := response.BodyAsString;
|
|
FWines.Clear;
|
|
Mapper.JSONArrayToObjectList<TWine>(FWines,
|
|
response.BodyAsJsonValue as TJSONArray, false);
|
|
WinesAdapter.SetList(FWines, false);
|
|
WinesAdapter.Active := True;
|
|
end;
|
|
|
|
procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
RESTClient.free;
|
|
FWines.free;
|
|
end;
|
|
|
|
procedure TForm5.FormCreate(Sender: TObject);
|
|
begin
|
|
RESTClient := TRESTClient.Create('localhost', 3000);
|
|
FWines := TObjectList<TWine>.Create(True);
|
|
PrototypeBindSource1.Active := True;
|
|
end;
|
|
|
|
procedure TForm5.ListView1DblClick(Sender: TObject);
|
|
begin
|
|
PageControl1.ActivePageIndex := 1;
|
|
end;
|
|
|
|
procedure TForm5.PrototypeBindSource1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter);
|
|
begin
|
|
WinesAdapter := TListBindSourceAdapter<TWine>.Create(PrototypeBindSource1);
|
|
ABindSourceAdapter := WinesAdapter;
|
|
end;
|
|
|
|
end.
|