Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

unit uROR_VistAStore;
{$I Components.inc}

interface

uses
SysUtils, Classes, Forms, OvcStore, TRPCB;

type

TRPCStringList = class(TStringList)
protected
fRPCBroker: TRPCBroker;
fRPCLoadParams: String;
fRPCSaveParams: String;

public
constructor Create(const aLoadParamsRPC: String; const aSaveParamsRPC: String);
destructor Destroy; override;

procedure LoadFromFile(const FileName: String); override;
procedure SaveToFile(const FileName: String); override;

property RPCBroker: TRPCBRoker read fRPCBroker write fRPCBroker;

end;

TCCRVistAStore = class(TO32XMLFileStore)
protected
fLocked: Boolean;
fOnAfterOpen: TNotifyEvent;
fOnBeforeClose: TNotifyEvent;
fOnBeforeOpen: TNotifyEvent;
fOptimization: Boolean;
fRPCBroker: TRPCBroker;
fRPCLoadParams: String;
fRPCSaveParams: String;

protected
procedure DoClose; override;
procedure DoOpen; override;

public
constructor Create(anOwner: TComponent); override;
destructor Destroy; override;

procedure Close;

property XMLText: TStringList read FStore;

published
property OnAfterOpen: TNotifyEvent read fOnAfterOpen write fOnAfterOpen;
property OnBeforeClose: TNotifyEvent read fOnBeforeClose write fOnBeforeClose;
property OnBeforeOpen: TNotifyEvent read fOnBeforeOpen write fOnBeforeOpen;
property Optimization: Boolean read fOptimization write fOptimization;
property RPCBroker: TRPCBRoker read fRPCBroker write fRPCBroker;
property RPCLoadParams: String read fRPCLoadParams write fRPCLoadParams;
property RPCSaveParams: String read fRPCSaveParams write fRPCSaveParams;

end;

implementation

uses
fROR_PCall, uROR_Utilities;

///////////////////////////////// TRPCStringList \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

constructor TRPCStringList.Create(const aLoadParamsRPC: String; const aSaveParamsRPC: String);
begin
inherited Create;
fRPCBroker := nil;
fRPCLoadParams := aLoadParamsRPC;
fRPCSaveParams := aSaveParamsRPC;
end;

destructor TRPCStringList.Destroy;
begin
fRPCBroker := nil;
inherited;
end;

procedure TRPCStringList.LoadFromFile(const FileName: String);
var
prmName: String;
begin
if not Assigned(RPCBroker) or (fRPCLoadParams = '') then
begin
Clear;
Exit;
end;

prmName := ExtractFileName(FileName);
try
CallRemoteProc(RPCBroker, fRPCLoadParams,
[prmName, 'USR'], nil, [rpcSilent], self);
except
end;
if Count > 0 then Delete(0);
end;

procedure TRPCStringList.SaveToFile(const FileName: String);
var
prmName: String;
begin
if not Assigned(RPCBroker) or (fRPCSaveParams = '') then Exit;

prmName := ExtractFileName(FileName);
try
if Count > 0 then
CallRemoteProc(RPCBroker, fRPCSaveParams,
[prmName, 'USR'], Self, [rpcSilent])
else
CallRemoteProc(RPCBroker, fRPCSaveParams,
[prmName, 'USR', '@'], nil, [rpcSilent]);
except
end;
end;

///////////////////////////////// TCCRVistAStore \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

constructor TCCRVistAStore.Create(anOwner: TComponent);
begin
inherited;
fRPCBroker := nil;
end;

destructor TCCRVistAStore.Destroy;
begin
if fOptimization then Close;
fRPCBroker := nil;
inherited;
end;

procedure TCCRVistAStore.Close;
begin
try
fLocked := False;
if Assigned(FStore) then
inherited Close;
except
end;
end;

procedure TCCRVistAStore.DoClose;
begin
if not fLocked then
begin
if Assigned(OnBeforeClose) then OnBeforeClose(self);
inherited;
end;
end;

procedure TCCRVistAStore.DoOpen;
begin
if not fLocked then
begin
if Assigned(OnBeforeOpen) then OnBeforeOpen(self);
FStore := TRPCStringList.Create(RPCLoadParams, RPCSaveParams);
TRPCStringList(FStore).RPCBroker := RPCBroker;
FStore.LoadFromFile(XMLFileName);
try
xsInitialize;
except
FStore.Clear;
xsInitialize;
end;
if fOptimization then fLocked := True;
if Assigned(OnAfterOpen) then OnAfterOpen(self);
end;
end;

end.