xtool/contrib/mORMot/SQLite3/Samples/20 - DTO interface based se.../Project20Interface.pas

138 lines
3.2 KiB
ObjectPascal

/// some common definitions shared by both client and server side
unit Project20Interface;
interface
uses
Classes,
SynCommons,
mORMot;
type
TDTOAirport = class(TCollectionItem)
private
FDCS: RawUTF8;
FLocation: RawUTF8;
FBHS: RawUTF8;
FGate: TRawUTF8DynArray;
FTerminal: TRawUTF8DynArray;
published
property Location: RawUTF8 read FLocation write FLocation;
property Terminal: TRawUTF8DynArray read FTerminal write FTerminal;
property Gate: TRawUTF8DynArray read FGate write FGate;
property BHS: RawUTF8 read FBHS write FBHS;
property DCS: RawUTF8 read FDCS write FDCS;
end;
TDTOAirports = class(TInterfacedCollection)
private
function GetCollItem(aIndex: Integer): TDTOAirport;
protected
class function GetClass: TCollectionItemClass; override;
public
function Add: TDTOAirport;
property Item[aIndex: Integer]: TDTOAirport read GetCollItem; default;
end;
TDTOAirline = class(TCollectionItem)
private
FSQ: RawUTF8;
FET: RawUTF8;
FQR: TRawUTF8DynArray;
FCX: TRawUTF8DynArray;
published
property CX: TRawUTF8DynArray read FCX write FCX;
property QR: TRawUTF8DynArray read FQR write FQR;
property ET: RawUTF8 read FET write FET;
property SQ: RawUTF8 read FSQ write FSQ;
end;
TDTOAirlines = class(TInterfacedCollection)
private
function GetCollItem(aIndex: Integer): TDTOAirline;
protected
class function GetClass: TCollectionItemClass; override;
public
function Add: TDTOAirline;
property Item[aIndex: Integer]: TDTOAirline read GetCollItem; default;
end;
TDTOAirportDefinition = class(TPersistentWithCustomCreate)
private
fAirline: TDTOAirlines;
fAirport: TDTOAirports;
fGroundHandler: TRawUTF8DynArray;
public
constructor Create; override;
destructor Destroy; override;
published
property Airport: TDTOAirports read fAirport;
property Airline: TDTOAirlines read fAirline;
property GroundHandler: TRawUTF8DynArray read fGroundHandler write fGroundHandler;
end;
IAirportService = interface(IInvokable)
['{4A613FCE-3B0D-4582-97C5-4244B06C2006}']
procedure GetAirportDefinition(const AirPortID: integer; out Definition: TDTOAirportDefinition);
end;
const
ROOT_NAME = 'project20';
PORT_NAME = '888';
implementation
{ TDTOAirports }
function TDTOAirports.Add: TDTOAirport;
begin
result := TDTOAirport(inherited Add);
end;
class function TDTOAirports.GetClass: TCollectionItemClass;
begin
result := TDTOAirport;
end;
function TDTOAirports.GetCollItem(aIndex: Integer): TDTOAirport;
begin
result := TDTOAirport(GetItem(aIndex));
end;
{ TDTOAirlines }
function TDTOAirlines.Add: TDTOAirline;
begin
result := TDTOAirline(inherited Add);
end;
class function TDTOAirlines.GetClass: TCollectionItemClass;
begin
result := TDTOAirline;
end;
function TDTOAirlines.GetCollItem(aIndex: Integer): TDTOAirline;
begin
result := TDTOAirline(GetItem(aIndex));
end;
{ TDTOAirportDefinition }
constructor TDTOAirportDefinition.Create;
begin
fAirport := TDTOAirports.Create;
fAirline := TDTOAirlines.Create;
end;
destructor TDTOAirportDefinition.Destroy;
begin
fAirline.Free;
fAirport.Free;
inherited;
end;
end.