- Recompilación en Delphi10 de todos los paquetes de RO para generar las DCU's en Lib\D10 - Recompilación en Delphi10 de todos los paquetes de DA para generar las DCU's en Lib\D10 git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@9 b6239004-a887-0f4b-9937-50029ccdca16
365 lines
10 KiB
ObjectPascal
365 lines
10 KiB
ObjectPascal
unit RODLMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, {$IFDEF VER140}Variants, {$ENDIF}Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, uRODL, ComCtrls;
|
|
|
|
type
|
|
TRODLMainForm = class(TForm)
|
|
GenerateButton: TButton;
|
|
LoadButton: TButton;
|
|
ConvertButton: TButton;
|
|
cbWriters: TComboBox;
|
|
Memo: TMemo;
|
|
OpenDialog: TOpenDialog;
|
|
Label1: TLabel;
|
|
StatusBar: TStatusBar;
|
|
cbServices: TComboBox;
|
|
lServices: TLabel;
|
|
SaveButton: TButton;
|
|
SaveDialog: TSaveDialog;
|
|
Panel1: TPanel;
|
|
TreeView: TTreeView;
|
|
Splitter1: TSplitter;
|
|
procedure GenerateButtonClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure ConvertButtonClick(Sender: TObject);
|
|
procedure LoadButtonClick(Sender: TObject);
|
|
procedure cbWritersChange(Sender: TObject);
|
|
procedure SaveButtonClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
private
|
|
fLibrary: TRODLLibrary;
|
|
function CheckLibrary(AShowMessage: Boolean): Boolean;
|
|
procedure FillLibrary;
|
|
public
|
|
end;
|
|
|
|
var
|
|
RODLMainForm: TRODLMainForm;
|
|
|
|
implementation
|
|
|
|
uses uRODLToXML, uRODLToPascalInvk, uRODLToPascalIntf, uRODLToPascalImpl,
|
|
uRODLGenTools, uRODLToWSDL, uRODLToPascalAsync, uROClasses;
|
|
|
|
{$R *.dfm}
|
|
|
|
const
|
|
Writers: array[0..5] of TRODLConverterClass =
|
|
(TRODLToInvk, TRODLToIntf, TRODLToImpl, TRODLToXML, TRODLToWSDL, TRODLToPascalAsync);
|
|
|
|
procedure TRODLMainForm.GenerateButtonClick(Sender: TObject);
|
|
var
|
|
struct: TRODLStruct;
|
|
stelem: TRODLTypedEntity;
|
|
arr: TRODLArray;
|
|
svc: TRODLService;
|
|
enum: TRODLEnum;
|
|
eval: TRODLEnumValue;
|
|
intf: TRODLServiceInterface;
|
|
op: TRODLOperation;
|
|
par: TRODLOperationParam;
|
|
|
|
// ent: TRODLEntity;
|
|
// emsg: string;
|
|
begin
|
|
Memo.Clear;
|
|
if fLibrary <> nil then fLibrary.Free;
|
|
fLibrary := TRODLLibrary.Create;
|
|
|
|
fLibrary.Info.Name := 'TestLibrary';
|
|
fLibrary.Info.UID := NewGuid;
|
|
fLibrary.Info.Attributes.Values['Test'] := 'a library attribute';
|
|
|
|
svc := TRODLService.Create;
|
|
svc.Info.Name := 'Gadget';
|
|
svc.Default.Info.UID := NewGuid;
|
|
svc.Default.Info.Documentation := 'Default interface for Gadget';
|
|
svc.Default.Info.Attributes.Values['TestName1'] := 'TestValue1';
|
|
svc.Default.Info.Attributes.Values['TestName2'] := 'TestValue2';
|
|
|
|
intf := svc.Default;
|
|
|
|
op := intf.Add;
|
|
op.Info.Name := 'Sum';
|
|
op.Info.UID := NewGuid;
|
|
op.Info.Documentation := 'Sum message';
|
|
op.Info.Attributes.Values['TestAttr1'] := 'TestAttrValue2';
|
|
op.Info.Attributes.Values['TestAttr2'] := 'TestAttrValue2';
|
|
|
|
par := op.Add;
|
|
par.Name := 'A';
|
|
par.DataType := 'integer';
|
|
par.Flag := fIn;
|
|
|
|
par := op.Add;
|
|
par.Name := 'B';
|
|
par.DataType := 'integer';
|
|
par.Flag := fIn;
|
|
par.Attributes.Values['Test'] := 'a parameter attribute';
|
|
par.Attributes.Values['Test'] := 'a parameter attribute #2';
|
|
|
|
par := op.AddResult;
|
|
// par.Name := 'result';
|
|
par.DataType := 'integer';
|
|
// par.Flag := fResult;
|
|
|
|
op := intf.Add;
|
|
op.Name := 'GetServerTime';
|
|
op.Attributes.Values['TestAttr1'] := 'TestAttrValue2';
|
|
op.Attributes.Values['TestAttr2'] := 'TestAttrValue2';
|
|
op.UID := NewGuid;
|
|
op.Documentation := 'GetServerTime message';
|
|
|
|
par := op.AddResult;
|
|
// par.Name := 'result';
|
|
par.DataType := 'datetime';
|
|
// par.Flag := fResult;
|
|
|
|
fLibrary.Add(svc);
|
|
|
|
svc := TRODLService.Create;
|
|
svc.Name := 'Test2';
|
|
svc.Default.UID := NewGuid;
|
|
svc.Default.Documentation := 'Default interface for Test2';
|
|
|
|
intf := svc.Default;
|
|
|
|
op := intf.Add;
|
|
op.Name := 'GetNumber';
|
|
op.UID := NewGuid;
|
|
op.Documentation := 'GetNumber message';
|
|
|
|
par := op.AddResult;
|
|
// par.Name := 'result';
|
|
par.DataType := 'integer';
|
|
// par.Flag := fResult;
|
|
|
|
fLibrary.Add(svc);
|
|
|
|
struct := TRODLStruct.Create;
|
|
struct.Attributes.Values['TestAttr1'] := 'TestAttrValue2';
|
|
struct.Attributes.Values['TestAttr2'] := 'TestAttrValue2';
|
|
|
|
struct.Name := 'TAddress';
|
|
struct.UID := NewGuid;
|
|
struct.Documentation := 'An address';
|
|
|
|
stelem := struct.Add;
|
|
stelem.Name := 'Street1';
|
|
stelem.DataType := 'string';
|
|
|
|
stelem := struct.Add;
|
|
stelem.Name := 'Street2';
|
|
stelem.DataType := 'string';
|
|
|
|
fLibrary.Add(struct);
|
|
|
|
struct := TRODLStruct.Create;
|
|
struct.Name := 'TPerson';
|
|
struct.UID := NewGuid;
|
|
struct.Documentation := 'A person';
|
|
|
|
stelem := struct.Add;
|
|
stelem.Name := 'FullName';
|
|
stelem.DataType := 'string';
|
|
|
|
stelem := struct.Add;
|
|
stelem.Name := 'Age';
|
|
stelem.DataType := 'integer';
|
|
|
|
fLibrary.Add(struct);
|
|
|
|
enum := TRODLEnum.Create;
|
|
enum.Name := 'TColor';
|
|
enum.UID := NewGuid;
|
|
enum.Documentation := 'This is TColor';
|
|
enum.Attributes.Values['TestAttr1'] := 'TestAttrValue2';
|
|
enum.Attributes.Values['TestAttr2'] := 'TestAttrValue2';
|
|
|
|
eval := enum.Add;
|
|
eval.Name := 'clRed';
|
|
|
|
eval := enum.Add;
|
|
eval.Name := 'clBlue';
|
|
|
|
fLibrary.Add(enum);
|
|
|
|
enum := TRODLEnum.Create;
|
|
enum.Name := 'TSex';
|
|
enum.UID := NewGuid;
|
|
enum.Documentation := 'This is TSex';
|
|
|
|
eval := enum.Add;
|
|
eval.Name := 'Male';
|
|
|
|
eval := enum.Add;
|
|
eval.Name := 'Female';
|
|
|
|
fLibrary.Add(enum);
|
|
|
|
arr := TRODLArray.Create;
|
|
arr.Name := 'TIntegerArray';
|
|
arr.Documentation := 'Thisis an integer array';
|
|
arr.UID := NewGuid;
|
|
arr.ElementType := 'integer';
|
|
arr.Attributes.Values['TestAttr1'] := 'TestAttrValue2';
|
|
arr.Attributes.Values['TestAttr2'] := 'TestAttrValue2';
|
|
|
|
fLibrary.Add(arr);
|
|
|
|
{if not fLibrary.Validate(ent, emsg)
|
|
then Caption := 'Libary is NOT valid: '+ent.Name+', '+emsg
|
|
else Caption := 'Libary is valid'}
|
|
FillLibrary;
|
|
StatusBar.SimpleText := 'Test RODL generated.';
|
|
end;
|
|
|
|
procedure TRODLMainForm.FormCreate(Sender: TObject);
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i := 0 to High(Writers) do
|
|
cbWriters.Items.Add(Writers[i].ClassName);
|
|
cbWriters.ItemIndex := cbWriters.Items.Count - 1;
|
|
cbWriters.OnChange(cbWriters);
|
|
end;
|
|
|
|
procedure TRODLMainForm.ConvertButtonClick(Sender: TObject);
|
|
begin
|
|
with Writers[cbWriters.ItemIndex].Create(fLibrary, cbServices.Text) do try
|
|
Memo.Lines.Text := Buffer.Text
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TRODLMainForm.LoadButtonClick(Sender: TObject);
|
|
var
|
|
fs: TFileStream;
|
|
begin
|
|
|
|
if not OpenDialog.Execute then Exit;
|
|
|
|
FreeAndNIL(fLibrary);
|
|
Memo.Clear;
|
|
FillLibrary;
|
|
|
|
fs := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
|
|
with TXMLToRODL.Create do try
|
|
fLibrary := Read(fs);
|
|
finally
|
|
Free;
|
|
fs.Free;
|
|
end;
|
|
FillLibrary;
|
|
StatusBar.SimpleText := ExtractFileName(OpenDialog.FileName) + ' loaded. Please specify the convertor and click ''Convert''';
|
|
// ConvertButton.Click;
|
|
end;
|
|
|
|
procedure TRODLMainForm.cbWritersChange(Sender: TObject);
|
|
var
|
|
i: integer;
|
|
begin
|
|
cbServices.Clear;
|
|
if Writers[cbWriters.ItemIndex] = TRODLToImpl then begin
|
|
if fLibrary <> nil then
|
|
for i := 0 to fLibrary.ServiceCount - 1 do
|
|
cbServices.Items.Add(fLibrary.Services[i].Name);
|
|
if cbServices.Items.Count > 0 then cbServices.ItemIndex := 0;
|
|
end
|
|
else if Writers[cbWriters.ItemIndex] = TRODLToWSDL then begin
|
|
cbServices.Items.Add('');
|
|
if fLibrary <> nil then
|
|
for i := 0 to fLibrary.ServiceCount - 1 do
|
|
cbServices.Items.Add(fLibrary.Services[i].Name);
|
|
cbServices.ItemIndex := 0;
|
|
end;
|
|
|
|
lServices.Enabled := (Writers[cbWriters.ItemIndex] = TRODLToImpl) or (Writers[cbWriters.ItemIndex] = TRODLToWSDL);
|
|
cbServices.Enabled := lServices.Enabled;
|
|
if cbServices.Enabled then
|
|
cbServices.Color := clWindow
|
|
else
|
|
cbServices.ParentColor := True;
|
|
end;
|
|
|
|
procedure TRODLMainForm.SaveButtonClick(Sender: TObject);
|
|
var
|
|
FFileName: string;
|
|
begin
|
|
if not CheckLibrary(True) then Exit;
|
|
ConvertButton.Click;
|
|
fFileName := Writers[cbWriters.ItemIndex].GetTargetFileName(fLibrary, cbServices.Text);
|
|
if FFileName = '' then FFileName := ChangeFileExt(fLibrary.Name, '.xml');
|
|
SaveDialog.FileName := fFileName;
|
|
SaveDialog.DefaultExt := ExtractFileExt(SaveDialog.FileName);
|
|
if SaveDialog.Execute then Memo.Lines.SaveToFile(SaveDialog.FileName);
|
|
end;
|
|
|
|
function TRODLMainForm.CheckLibrary(AShowMessage: Boolean): Boolean;
|
|
begin
|
|
Result := fLibrary <> nil;
|
|
if not result then ShowMessage('Please load or generate a RODL library');
|
|
end;
|
|
|
|
procedure TRODLMainForm.FillLibrary;
|
|
var
|
|
FRootNode, tempNode: TTreeNode;
|
|
i: integer;
|
|
begin
|
|
with TreeView do begin
|
|
Items.Clear;
|
|
if fLibrary = nil then Exit;
|
|
FRootNode := Items.AddChild(nil, fLibrary.Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Structs');
|
|
for i := 0 to fLibrary.StructCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Structs[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Arrays');
|
|
for i := 0 to fLibrary.ArrayCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Arrays[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Enums');
|
|
for i := 0 to fLibrary.EnumCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Enums[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Services');
|
|
for i := 0 to fLibrary.ServiceCount - 1 do begin
|
|
Items.AddChild(tempNode, fLibrary.Services[i].Name);
|
|
end;
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Exceptions');
|
|
for i := 0 to fLibrary.ExceptionCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Exceptions[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Use');
|
|
for i := 0 to fLibrary.UseCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Use[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Groups');
|
|
for i := 0 to fLibrary.GroupCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.Groups[i].Name);
|
|
|
|
tempNode := Items.AddChild(FRootNode, 'Event Sinks');
|
|
for i := 0 to fLibrary.EventSinkCount - 1 do
|
|
Items.AddChild(tempNode, fLibrary.EventSinks[i].Name);
|
|
|
|
FRootNode.Expand(True);
|
|
FRootNode.Selected := True;
|
|
FRootNode.MakeVisible;
|
|
end;
|
|
end;
|
|
|
|
procedure TRODLMainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
if fLibrary <> nil then fLibrary.Free;
|
|
end;
|
|
|
|
end.
|
|
|