You've already forked lazarus-ccr
+Object Collection support
All WST custom attributes are now namespace qualified Correct XDS generator for complex type extending simple type git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@520 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -627,6 +627,51 @@ type
|
||||
property mustUnderstand : Integer read FmustUnderstand write SetmustUnderstand stored HasmustUnderstand;
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotable
|
||||
An implementation for array handling. The array items are "owned" by
|
||||
this class instance, so one has not to free them.
|
||||
}
|
||||
TObjectCollectionRemotable = class(TAbstractComplexRemotable)
|
||||
private
|
||||
FList : TObjectList;
|
||||
protected
|
||||
function GetItem(AIndex : PtrInt) : TBaseRemotable;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
class function GetItemName():string;virtual;
|
||||
class function GetStyle():TArrayStyle;virtual;
|
||||
function GetLength : PtrInt;
|
||||
public
|
||||
class procedure Save(
|
||||
AObject : TBaseRemotable;
|
||||
AStore : IFormatterBase;
|
||||
const AName : string;
|
||||
const ATypeInfo : PTypeInfo
|
||||
);override;
|
||||
class procedure Load(
|
||||
var AObject : TObject;
|
||||
AStore : IFormatterBase;
|
||||
var AName : string;
|
||||
const ATypeInfo : PTypeInfo
|
||||
);override;
|
||||
class function GetItemClass():TBaseRemotableClass;virtual;abstract;
|
||||
class function GetItemTypeInfo():PTypeInfo;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
|
||||
constructor Create();override;
|
||||
destructor Destroy();override;
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
function Equal(const ACompareTo : TBaseRemotable) : Boolean;override;
|
||||
|
||||
function Add(): TBaseRemotable;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function AddAt(const APosition : PtrInt): TBaseRemotable;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function Extract(const AIndex : PtrInt): TBaseRemotable;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
procedure Delete(const AIndex : PtrInt);{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
procedure Exchange(const Index1,Index2 : PtrInt);{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
procedure Clear();{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function IndexOf(AObject : TBaseRemotable) : PtrInt;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
|
||||
property Item[AIndex:PtrInt] : TBaseRemotable read GetItem;default;
|
||||
property Length : PtrInt read GetLength;
|
||||
end;
|
||||
|
||||
TBaseArrayRemotableClass = class of TBaseArrayRemotable;
|
||||
|
||||
{ TBaseArrayRemotable }
|
||||
@@ -2940,6 +2985,254 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotable }
|
||||
|
||||
function TObjectCollectionRemotable.GetItem(AIndex : PtrInt) : TBaseRemotable;
|
||||
begin
|
||||
Result := TBaseRemotable(FList[AIndex]);
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.GetLength : PtrInt;
|
||||
begin
|
||||
Result := FList.Count;
|
||||
end;
|
||||
|
||||
class function TObjectCollectionRemotable.GetItemName() : string;
|
||||
var
|
||||
tri : TTypeRegistryItem;
|
||||
begin
|
||||
tri := GetTypeRegistry().Find(PTypeInfo(Self.ClassInfo),False);
|
||||
if Assigned(tri) then
|
||||
Result := Trim(tri.GetExternalPropertyName(sARRAY_ITEM));
|
||||
if ( System.Length(Result) = 0 ) then
|
||||
Result := sARRAY_ITEM;
|
||||
end;
|
||||
|
||||
class function TObjectCollectionRemotable.GetStyle() : TArrayStyle;
|
||||
var
|
||||
tri : TTypeRegistryItem;
|
||||
begin
|
||||
tri := GetTypeRegistry().Find(PTypeInfo(Self.ClassInfo),False);
|
||||
if Assigned(tri) and AnsiSameText(sEmbedded,Trim(tri.GetExternalPropertyName(sARRAY_STYLE))) then begin
|
||||
Result := asEmbeded;
|
||||
end else begin
|
||||
Result := asScoped;
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TObjectCollectionRemotable.Save(
|
||||
AObject : TBaseRemotable;
|
||||
AStore : IFormatterBase;
|
||||
const AName : string;
|
||||
const ATypeInfo : PTypeInfo
|
||||
);
|
||||
Var
|
||||
itmTypInfo : PTypeInfo;
|
||||
i,j : Integer;
|
||||
nativObj : TObjectCollectionRemotable;
|
||||
itm : TObject;
|
||||
itmName : string;
|
||||
styl : TArrayStyle;
|
||||
begin
|
||||
if Assigned(AObject) then begin
|
||||
Assert(AObject.InheritsFrom(TObjectCollectionRemotable));
|
||||
nativObj := AObject as TObjectCollectionRemotable;
|
||||
j := nativObj.Length;
|
||||
end else begin
|
||||
j := 0;
|
||||
end;
|
||||
itmTypInfo := PTypeInfo(GetItemClass().ClassInfo);
|
||||
styl := GetStyle();
|
||||
AStore.BeginArray(AName,PTypeInfo(Self.ClassInfo),itmTypInfo,[0,Pred(j)],styl);
|
||||
try
|
||||
if ( styl = asScoped ) then begin
|
||||
itmName := GetItemName();
|
||||
end else begin
|
||||
itmName := AName;
|
||||
end;
|
||||
for i := 0 to Pred(j) do begin
|
||||
itm := nativObj.Item[i];
|
||||
AStore.Put(itmName,itmTypInfo,itm);
|
||||
end;
|
||||
finally
|
||||
AStore.EndScope();
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TObjectCollectionRemotable.Load(
|
||||
var AObject : TObject;
|
||||
AStore : IFormatterBase;
|
||||
var AName : String;
|
||||
const ATypeInfo : PTypeInfo
|
||||
);
|
||||
Var
|
||||
i, len : Integer;
|
||||
nativObj : TObjectCollectionRemotable;
|
||||
s : string;
|
||||
itmTypInfo : PTypeInfo;
|
||||
itm : TBaseRemotable;
|
||||
itmName : string;
|
||||
styl : TArrayStyle;
|
||||
begin
|
||||
styl := GetStyle();
|
||||
if ( styl = asScoped ) then begin
|
||||
itmName := GetItemName();
|
||||
end else begin
|
||||
itmName := AName;
|
||||
end;
|
||||
len := AStore.BeginArrayRead(AName,ATypeInfo,styl,itmName);
|
||||
if ( len >= 0 ) then begin
|
||||
Try
|
||||
If Not Assigned(AObject) Then
|
||||
AObject := Create();
|
||||
itmTypInfo := PTypeInfo(GetItemClass().ClassInfo);
|
||||
nativObj := AObject as TObjectCollectionRemotable;
|
||||
If ( len > 0 ) Then Begin
|
||||
s := '';
|
||||
nativObj.Clear();
|
||||
For i := 0 To Pred(len) Do Begin
|
||||
itm := nativObj.Add();
|
||||
AStore.Get(itmTypInfo,s,itm);
|
||||
End;
|
||||
End;
|
||||
Finally
|
||||
AStore.EndScopeRead();
|
||||
End;
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TObjectCollectionRemotable.GetItemTypeInfo() : PTypeInfo;
|
||||
begin
|
||||
Result := PTypeInfo(GetItemClass().ClassInfo);
|
||||
end;
|
||||
|
||||
constructor TObjectCollectionRemotable.Create();
|
||||
begin
|
||||
inherited Create();
|
||||
FList := TObjectList.Create(True);
|
||||
end;
|
||||
|
||||
destructor TObjectCollectionRemotable.Destroy();
|
||||
begin
|
||||
FList.Free();
|
||||
inherited Destroy();
|
||||
end;
|
||||
|
||||
procedure TObjectCollectionRemotable.Assign(Source : TPersistent);
|
||||
var
|
||||
srcCol : TObjectCollectionRemotable;
|
||||
src : TBaseObjectArrayRemotable;
|
||||
i, c : PtrInt;
|
||||
begin
|
||||
if Assigned(Source) then begin
|
||||
if Source.InheritsFrom(TObjectCollectionRemotable) then begin
|
||||
srcCol := TObjectCollectionRemotable(Source);
|
||||
c := srcCol.Length;
|
||||
FList.Clear();
|
||||
FList.Capacity := c;
|
||||
for i := 0 to Pred(c) do begin
|
||||
Add().Assign(srcCol.Item[i]);
|
||||
end;
|
||||
end else if Source.InheritsFrom(TBaseObjectArrayRemotable) then begin
|
||||
src := TBaseObjectArrayRemotable(Source);
|
||||
c := src.Length;
|
||||
FList.Clear();
|
||||
FList.Capacity := c;
|
||||
for i := 0 to Pred(c) do begin
|
||||
Add().Assign(src.Item[i]);
|
||||
end;
|
||||
end else begin
|
||||
inherited Assign(Source);
|
||||
end;
|
||||
end else begin
|
||||
FList.Clear();
|
||||
end;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.Equal(const ACompareTo : TBaseRemotable) : Boolean;
|
||||
var
|
||||
i : PtrInt;
|
||||
nativeCol : TObjectCollectionRemotable;
|
||||
nativeArray : TBaseObjectArrayRemotable;
|
||||
res : Boolean;
|
||||
begin
|
||||
res := False;
|
||||
if ( ACompareTo <> nil ) then begin
|
||||
if ACompareTo.InheritsFrom(TObjectCollectionRemotable) then begin
|
||||
nativeCol := TObjectCollectionRemotable(ACompareTo);
|
||||
if ( nativeCol.Length = Length ) then begin
|
||||
res := True;
|
||||
for i := 0 to Pred(Length) do begin
|
||||
if not Item[i].Equal(nativeCol[i]) then begin
|
||||
res := False;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end else if ACompareTo.InheritsFrom(TBaseObjectArrayRemotable) then begin
|
||||
nativeArray := TBaseObjectArrayRemotable(ACompareTo);
|
||||
if ( nativeArray.Length = Length ) then begin
|
||||
res := True;
|
||||
for i := 0 to Pred(Length) do begin
|
||||
if not Item[i].Equal(nativeArray[i]) then begin
|
||||
res := False;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Result := res;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.Add() : TBaseRemotable;
|
||||
begin
|
||||
Result := GetItemClass().Create();
|
||||
try
|
||||
FList.Add(Result);
|
||||
except
|
||||
Result.Free();
|
||||
raise;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.AddAt(const APosition : PtrInt) : TBaseRemotable;
|
||||
begin
|
||||
FList.Insert(APosition,nil);
|
||||
try
|
||||
Result := GetItemClass().Create();
|
||||
except
|
||||
FList.Delete(APosition);
|
||||
raise;
|
||||
end;
|
||||
FList[APosition] := Result;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.Extract(const AIndex : PtrInt) : TBaseRemotable;
|
||||
begin
|
||||
Result := TBaseRemotable(FList.Extract(FList[AIndex]));
|
||||
end;
|
||||
|
||||
procedure TObjectCollectionRemotable.Delete(const AIndex : PtrInt);
|
||||
begin
|
||||
FList.Delete(AIndex);
|
||||
end;
|
||||
|
||||
procedure TObjectCollectionRemotable.Exchange(const Index1, Index2 : PtrInt);
|
||||
begin
|
||||
FList.Exchange(Index1,Index2);
|
||||
end;
|
||||
|
||||
procedure TObjectCollectionRemotable.Clear();
|
||||
begin
|
||||
FList.Clear();
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotable.IndexOf(AObject : TBaseRemotable) : PtrInt;
|
||||
begin
|
||||
Result := FList.IndexOf(AObject);
|
||||
end;
|
||||
|
||||
{ TBaseArrayRemotable }
|
||||
|
||||
class function TBaseArrayRemotable.GetItemName(): string;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
object formImport: TformImport
|
||||
Left = 574
|
||||
Height = 553
|
||||
Top = 132
|
||||
Top = 133
|
||||
Width = 526
|
||||
HorzScrollBar.Page = 525
|
||||
VertScrollBar.Page = 552
|
||||
@@ -10,6 +10,7 @@ object formImport: TformImport
|
||||
Caption = 'WSDL Importer'
|
||||
ClientHeight = 553
|
||||
ClientWidth = 526
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel2: TPanel
|
||||
Height = 505
|
||||
Width = 526
|
||||
@@ -226,7 +227,6 @@ object formImport: TformImport
|
||||
end
|
||||
end
|
||||
object OD: TOpenDialog
|
||||
Title = 'Ouvrir un fichier existant'
|
||||
Filter = 'WSDL Files ( *.wsdl )|*.wsdl'
|
||||
FilterIndex = 0
|
||||
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
|
||||
@@ -234,7 +234,6 @@ object formImport: TformImport
|
||||
top = 32
|
||||
end
|
||||
object SDD: TSelectDirectoryDialog
|
||||
Title = 'Choisir un r�pertoire'
|
||||
FilterIndex = 0
|
||||
left = 224
|
||||
top = 176
|
||||
|
@@ -2,67 +2,66 @@
|
||||
|
||||
LazarusResources.Add('TformImport','FORMDATA',[
|
||||
'TPF0'#11'TformImport'#10'formImport'#4'Left'#3'>'#2#6'Height'#3')'#2#3'Top'#3
|
||||
+#132#0#5'Width'#3#14#2#18'HorzScrollBar.Page'#3#13#2#18'VertScrollBar.Page'#3
|
||||
+#133#0#5'Width'#3#14#2#18'HorzScrollBar.Page'#3#13#2#18'VertScrollBar.Page'#3
|
||||
+'('#2#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7'C'
|
||||
+'aption'#6#13'WSDL Importer'#12'ClientHeight'#3')'#2#11'ClientWidth'#3#14#2#0
|
||||
+#6'TPanel'#6'Panel2'#6'Height'#3#249#1#5'Width'#3#14#2#5'Align'#7#8'alClient'
|
||||
+#12'ClientHeight'#3#249#1#11'ClientWidth'#3#14#2#8'TabOrder'#2#1#0#9'TGroupB'
|
||||
+'ox'#9'GroupBox1'#4'Left'#2#8#6'Height'#3#168#0#3'Top'#2#8#5'Width'#3#250#1#7
|
||||
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#12'ClientHeight'#3#150#0#11'Cli'
|
||||
+'entWidth'#3#246#1#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Heigh'
|
||||
+'t'#2#14#3'Top'#2#4#5'Width'#3#186#0#7'Caption'#6'&Web Services Description '
|
||||
+'File ( WSDL )'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#9#6'Heig'
|
||||
+'ht'#2#14#3'Top'#2'E'#5'Width'#2'Q'#7'Caption'#6#16'Output directory'#11'Par'
|
||||
+'entColor'#8#0#0#5'TEdit'#12'edtInputFile'#4'Left'#2#9#6'Height'#2#23#3'Top'
|
||||
+#2#31#5'Width'#3'|'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrd'
|
||||
+'er'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3#151#1#6'Height'#2#25#3'Top'#2#31
|
||||
+#5'Width'#2'('#6'Action'#7#11'actOpenFile'#7'Anchors'#11#5'akTop'#7'akRight'
|
||||
+#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#1#0#0#5'TEdit'#12'edtOutp'
|
||||
+'utDir'#4'Left'#2#9#6'Height'#2#23#3'Top'#2'X'#5'Width'#3'|'#1#7'Anchors'#11
|
||||
+#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#2#0#0#7'TButton'#7'Button3'#4
|
||||
+'Left'#3#151#1#6'Height'#2#25#3'Top'#2'X'#5'Width'#2'('#6'Action'#7#10'actOp'
|
||||
+'enDir'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4
|
||||
+#8'TabOrder'#2#3#0#0#9'TCheckBox'#15'edtAddToProject'#4'Left'#2#9#6'Height'#2
|
||||
+#19#3'Top'#3#128#0#5'Width'#3#182#0#7'Caption'#6'"Add the generated files to'
|
||||
+' project'#8'TabOrder'#2#4#0#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'#2#8#6'Hei'
|
||||
+'ght'#3#161#0#3'Top'#3'P'#1#5'Width'#3#250#1#7'Anchors'#11#5'akTop'#6'akLeft'
|
||||
+#7'akRight'#8'akBottom'#0#7'Caption'#6#12' Messages '#12'ClientHeight'#3
|
||||
+#143#0#11'ClientWidth'#3#246#1#8'TabOrder'#2#2#0#5'TMemo'#6'mmoLog'#6'Height'
|
||||
+#3#143#0#5'Width'#3#246#1#5'Align'#7#8'alClient'#8'ReadOnly'#9#10'ScrollBars'
|
||||
+#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#9'TGroupBox'#9'GroupBox3'#4'Left'#2#8#6'H'
|
||||
+'eight'#3#136#0#3'Top'#3#184#0#5'Width'#3#250#1#7'Anchors'#11#5'akTop'#6'akL'
|
||||
+'eft'#7'akRight'#0#7'Caption'#6#11' Options '#12'ClientHeight'#2'v'#11'Cli'
|
||||
+'entWidth'#3#246#1#8'TabOrder'#2#1#0#9'TCheckBox'#13'edtOptionIntf'#4'Left'#2
|
||||
+#9#6'Height'#2#19#3'Top'#2#8#5'Width'#2'T'#7'Caption'#6#14'Interface file'#7
|
||||
+'Checked'#9#7'OnClick'#7#18'edtOptionIntfClick'#5'State'#7#9'cbChecked'#8'Ta'
|
||||
+'bOrder'#2#0#0#0#9'TCheckBox'#14'edtOptionProxy'#4'Left'#2#9#6'Height'#2#19#3
|
||||
+'Top'#2'8'#5'Width'#2'D'#7'Caption'#6#10'Proxy file'#7'Checked'#9#5'State'#7
|
||||
+#9'cbChecked'#8'TabOrder'#2#2#0#0#9'TCheckBox'#15'edtOptionBinder'#4'Left'#3
|
||||
+'&'#1#6'Height'#2#19#3'Top'#2#8#5'Width'#2'o'#7'Caption'#6#19'Service Binder'
|
||||
+' file'#8'TabOrder'#2#3#0#0#9'TCheckBox'#12'edtOptionImp'#4'Left'#3'&'#1#6'H'
|
||||
+'eight'#2#19#3'Top'#2'8'#5'Width'#3#158#0#7'Caption'#6#28'Implementation Ske'
|
||||
+'leton file'#8'TabOrder'#2#4#0#0#9'TCheckBox'#16'edtOptionIntfALL'#4'Left'#2
|
||||
+#30#6'Height'#2#19#3'Top'#2' '#5'Width'#2'^'#7'Caption'#6#15'Parse all types'
|
||||
+#7'OnClick'#7#21'edtOptionIntfALLClick'#8'TabOrder'#2#1#0#0#9'TCheckBox'#22
|
||||
+'edtOptionWrappedParams'#4'Left'#2#9#6'Height'#2#19#3'Top'#2'`'#5'Width'#3'"'
|
||||
+#1#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6'5Generate easy access '
|
||||
+'interface for wrapped parameters'#8'TabOrder'#2#5#0#0#0#0#6'TPanel'#6'Panel'
|
||||
+'1'#6'Height'#2'0'#3'Top'#3#249#1#5'Width'#3#14#2#5'Align'#7#8'alBottom'#12
|
||||
+'ClientHeight'#2'0'#11'ClientWidth'#3#14#2#8'TabOrder'#2#0#0#7'TButton'#7'Bu'
|
||||
+'tton1'#4'Left'#3'_'#1#6'Height'#2#25#3'Top'#2#8#5'Width'#2'K'#6'Action'#7#5
|
||||
+'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4
|
||||
+#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Button4'#4'Left'#3#183#1#6'He'
|
||||
+'ight'#2#25#3'Top'#2#8#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25
|
||||
+'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalR'
|
||||
+'esult'#2#2#8'TabOrder'#2#1#0#0#0#11'TActionList'#2'AL'#4'left'#2'h'#3'top'#3
|
||||
+'H'#1#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'On'
|
||||
+'Execute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'TAction'#11
|
||||
+'actOpenFile'#7'Caption'#6#3'...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#18
|
||||
+'actOpenFileExecute'#0#0#7'TAction'#10'actOpenDir'#7'Caption'#6#3'...'#18'Di'
|
||||
+'sableIfNoHandler'#9#9'OnExecute'#7#17'actOpenDirExecute'#0#0#0#11'TOpenDial'
|
||||
+'og'#2'OD'#5'Title'#6#26'Ouvrir un fichier existant'#6'Filter'#6#28'WSDL Fil'
|
||||
+'es ( *.wsdl )|*.wsdl'#11'FilterIndex'#2#0#7'Options'#11#15'ofFileMustExist'
|
||||
+#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#16#1#3'top'#2' '#0#0#22'TSe'
|
||||
+'lectDirectoryDialog'#3'SDD'#5'Title'#6#21'Choisir un r'#233'pertoire'#11'Fi'
|
||||
+'lterIndex'#2#0#4'left'#3#224#0#3'top'#3#176#0#0#0#0
|
||||
+'aption'#6#13'WSDL Importer'#12'ClientHeight'#3')'#2#11'ClientWidth'#3#14#2
|
||||
+#10'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#6'Panel2'#6'Height'#3#249#1#5'Width'
|
||||
+#3#14#2#5'Align'#7#8'alClient'#12'ClientHeight'#3#249#1#11'ClientWidth'#3#14
|
||||
+#2#8'TabOrder'#2#1#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#8#6'Height'#3#168#0
|
||||
+#3'Top'#2#8#5'Width'#3#250#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#12
|
||||
+'ClientHeight'#3#150#0#11'ClientWidth'#3#246#1#8'TabOrder'#2#0#0#6'TLabel'#6
|
||||
+'Label1'#4'Left'#2#9#6'Height'#2#14#3'Top'#2#4#5'Width'#3#186#0#7'Caption'#6
|
||||
+'&Web Services Description File ( WSDL )'#11'ParentColor'#8#0#0#6'TLabel'#6
|
||||
+'Label2'#4'Left'#2#9#6'Height'#2#14#3'Top'#2'E'#5'Width'#2'Q'#7'Caption'#6#16
|
||||
+'Output directory'#11'ParentColor'#8#0#0#5'TEdit'#12'edtInputFile'#4'Left'#2
|
||||
+#9#6'Height'#2#23#3'Top'#2#31#5'Width'#3'|'#1#7'Anchors'#11#5'akTop'#6'akLef'
|
||||
+'t'#7'akRight'#0#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3#151#1#6
|
||||
+'Height'#2#25#3'Top'#2#31#5'Width'#2'('#6'Action'#7#11'actOpenFile'#7'Anchor'
|
||||
+'s'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2
|
||||
+#1#0#0#5'TEdit'#12'edtOutputDir'#4'Left'#2#9#6'Height'#2#23#3'Top'#2'X'#5'Wi'
|
||||
+'dth'#3'|'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#2#0
|
||||
+#0#7'TButton'#7'Button3'#4'Left'#3#151#1#6'Height'#2#25#3'Top'#2'X'#5'Width'
|
||||
+#2'('#6'Action'#7#10'actOpenDir'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'Bord'
|
||||
+'erSpacing.InnerBorder'#2#4#8'TabOrder'#2#3#0#0#9'TCheckBox'#15'edtAddToProj'
|
||||
+'ect'#4'Left'#2#9#6'Height'#2#19#3'Top'#3#128#0#5'Width'#3#182#0#7'Caption'#6
|
||||
+'"Add the generated files to project'#8'TabOrder'#2#4#0#0#0#9'TGroupBox'#9'G'
|
||||
+'roupBox2'#4'Left'#2#8#6'Height'#3#161#0#3'Top'#3'P'#1#5'Width'#3#250#1#7'An'
|
||||
+'chors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#12' Mes'
|
||||
+'sages '#12'ClientHeight'#3#143#0#11'ClientWidth'#3#246#1#8'TabOrder'#2#2#0
|
||||
+#5'TMemo'#6'mmoLog'#6'Height'#3#143#0#5'Width'#3#246#1#5'Align'#7#8'alClient'
|
||||
+#8'ReadOnly'#9#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#9'TGroupBox'
|
||||
+#9'GroupBox3'#4'Left'#2#8#6'Height'#3#136#0#3'Top'#3#184#0#5'Width'#3#250#1#7
|
||||
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#7'Caption'#6#11' Options '#12
|
||||
+'ClientHeight'#2'v'#11'ClientWidth'#3#246#1#8'TabOrder'#2#1#0#9'TCheckBox'#13
|
||||
+'edtOptionIntf'#4'Left'#2#9#6'Height'#2#19#3'Top'#2#8#5'Width'#2'T'#7'Captio'
|
||||
+'n'#6#14'Interface file'#7'Checked'#9#7'OnClick'#7#18'edtOptionIntfClick'#5
|
||||
+'State'#7#9'cbChecked'#8'TabOrder'#2#0#0#0#9'TCheckBox'#14'edtOptionProxy'#4
|
||||
+'Left'#2#9#6'Height'#2#19#3'Top'#2'8'#5'Width'#2'D'#7'Caption'#6#10'Proxy fi'
|
||||
+'le'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#2#0#0#9'TCheckBox'#15
|
||||
+'edtOptionBinder'#4'Left'#3'&'#1#6'Height'#2#19#3'Top'#2#8#5'Width'#2'o'#7'C'
|
||||
+'aption'#6#19'Service Binder file'#8'TabOrder'#2#3#0#0#9'TCheckBox'#12'edtOp'
|
||||
+'tionImp'#4'Left'#3'&'#1#6'Height'#2#19#3'Top'#2'8'#5'Width'#3#158#0#7'Capti'
|
||||
+'on'#6#28'Implementation Skeleton file'#8'TabOrder'#2#4#0#0#9'TCheckBox'#16
|
||||
+'edtOptionIntfALL'#4'Left'#2#30#6'Height'#2#19#3'Top'#2' '#5'Width'#2'^'#7'C'
|
||||
+'aption'#6#15'Parse all types'#7'OnClick'#7#21'edtOptionIntfALLClick'#8'TabO'
|
||||
+'rder'#2#1#0#0#9'TCheckBox'#22'edtOptionWrappedParams'#4'Left'#2#9#6'Height'
|
||||
+#2#19#3'Top'#2'`'#5'Width'#3'"'#1#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Ca'
|
||||
+'ption'#6'5Generate easy access interface for wrapped parameters'#8'TabOrder'
|
||||
+#2#5#0#0#0#0#6'TPanel'#6'Panel1'#6'Height'#2'0'#3'Top'#3#249#1#5'Width'#3#14
|
||||
+#2#5'Align'#7#8'alBottom'#12'ClientHeight'#2'0'#11'ClientWidth'#3#14#2#8'Tab'
|
||||
+'Order'#2#0#0#7'TButton'#7'Button1'#4'Left'#3'_'#1#6'Height'#2#25#3'Top'#2#8
|
||||
+#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'B'
|
||||
+'orderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7
|
||||
+'Button4'#4'Left'#3#183#1#6'Height'#2#25#3'Top'#2#8#5'Width'#2'K'#7'Anchors'
|
||||
+#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Ca'
|
||||
+'ption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#11'TActionList'
|
||||
+#2'AL'#4'left'#2'h'#3'top'#3'H'#1#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18
|
||||
+'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actO'
|
||||
+'KUpdate'#0#0#7'TAction'#11'actOpenFile'#7'Caption'#6#3'...'#18'DisableIfNoH'
|
||||
+'andler'#9#9'OnExecute'#7#18'actOpenFileExecute'#0#0#7'TAction'#10'actOpenDi'
|
||||
+'r'#7'Caption'#6#3'...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actOpenDi'
|
||||
+'rExecute'#0#0#0#11'TOpenDialog'#2'OD'#6'Filter'#6#28'WSDL Files ( *.wsdl )|'
|
||||
+'*.wsdl'#11'FilterIndex'#2#0#7'Options'#11#15'ofFileMustExist'#14'ofEnableSi'
|
||||
+'zing'#12'ofViewDetail'#0#4'left'#3#16#1#3'top'#2' '#0#0#22'TSelectDirectory'
|
||||
+'Dialog'#3'SDD'#11'FilterIndex'#2#0#4'left'#3#224#0#3'top'#3#176#0#0#0#0
|
||||
]);
|
||||
|
@@ -141,20 +141,21 @@ Item0=DUnit
|
||||
Count=1
|
||||
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||
[HistoryLists\hlSearchPath]
|
||||
Count=13
|
||||
Count=14
|
||||
Item0=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item1=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\ws_helper
|
||||
Item2=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\fcl-units\fcl-passrc\src
|
||||
Item3=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item4=..\;..\..\;..\..\..\;C:\Programmes\lazarus\wst\trunk\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item5=..\;..\..\;..\..\..\;..\..\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item6=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item7=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;C:\Programmes\lazarus\wst\trunk\ws_helper
|
||||
Item8=..\;..\..\;..\..\..\;..\..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item9=..\;..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item10=..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item11=C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item12=..\
|
||||
Item1=$(DELPHI)\Lib\Debug;C:\PROGRA~1\Borland\Delphi7\MyTools\JVCL\3.20\jcl\lib\d7\debug;..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;..\..\..\ws_helper;..\..\..\wst_rtti_filter;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item2=..\;..\..\;..\..\..\;..\..\..\fcl-units\fcl-passrc\src;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\ws_helper
|
||||
Item3=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;..\..\..\fcl-units\fcl-passrc\src
|
||||
Item4=..\;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item5=..\;..\..\;..\..\..\;C:\Programmes\lazarus\wst\trunk\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item6=..\;..\..\;..\..\..\;..\..\ws_helper;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item7=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item8=..\;..\..\;..\..\..\;..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src;C:\Programmes\lazarus\wst\trunk\ws_helper
|
||||
Item9=..\;..\..\;..\..\..\;..\..\..\ws_helper\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item10=..\;..\..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item11=..\;C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item12=C:\Program Files\Borland\Delphi7\plate_forme\dunit\dunit-9.3.0\src
|
||||
Item13=..\
|
||||
[HistoryLists\hlUnitOutputDirectory]
|
||||
Count=1
|
||||
Item0=obj
|
||||
|
@@ -20,7 +20,10 @@ uses
|
||||
xsd_consts in '..\..\..\ws_helper\xsd_consts.pas',
|
||||
xsd_generator in '..\..\..\ws_helper\xsd_generator.pas',
|
||||
test_generators in '..\test_generators.pas',
|
||||
test_suite_utils in '..\test_suite_utils.pas';
|
||||
test_suite_utils in '..\test_suite_utils.pas',
|
||||
test_std_cursors in '..\test_std_cursors.pas',
|
||||
test_rtti_filter in '..\test_rtti_filter.pas',
|
||||
test_wst_cursors in '..\test_wst_cursors.pas';
|
||||
|
||||
{$R *.res}
|
||||
|
||||
|
@@ -9,7 +9,10 @@ uses
|
||||
testformatter_unit in '..\testformatter_unit.pas',
|
||||
test_parsers in '..\test_parsers.pas',
|
||||
testmetadata_unit,
|
||||
test_support in '..\test_support.pas';
|
||||
test_support in '..\test_support.pas',
|
||||
test_std_cursors in '..\test_std_cursors.pas',
|
||||
test_rtti_filter in '..\test_rtti_filter.pas',
|
||||
test_wst_cursors in '..\test_wst_cursors.pas';
|
||||
|
||||
{$R *.res}
|
||||
|
||||
|
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<schema xmlns:tns="class_extent_native_type" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="class_extent_native_type">
|
||||
|
||||
<xsd:complexType name="TExtendString">
|
||||
<xsd:simpleContent>
|
||||
<xsd:extension base="xsd:string">
|
||||
<xsd:attribute use="required" name="intAtt" type="xsd:int"/>
|
||||
</xsd:extension>
|
||||
</xsd:simpleContent>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="TExtendBase64String">
|
||||
<xsd:simpleContent>
|
||||
<xsd:extension base="xsd:base64Binary">
|
||||
<xsd:attribute use="required" name="strAtt" type="xsd:string"/>
|
||||
</xsd:extension>
|
||||
</xsd:simpleContent>
|
||||
</xsd:complexType>
|
||||
|
||||
</schema>
|
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0"?>
|
||||
<definitions name="wst_test"
|
||||
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<types>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:tns="urn:wst-test"
|
||||
xmlns:wst="urn:wst_base"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:complexType name="TComplexType" />
|
||||
|
||||
<xsd:complexType name="TCollectionComplexType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="field" type="tns:TComplexType" minOccurs="0" maxOccurs="unbounded" wst:wst_collection="true"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="TCollectionItemType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" wst:wst_collection="true" >
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
|
||||
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
|
||||
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="strAtt" type="xsd:string"/>
|
||||
<xsd:attribute name="intAtt" type="xsd:int"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
</xsd:schema>
|
||||
</types>
|
||||
|
||||
|
||||
</definitions>
|
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:tns="urn:wst-test"
|
||||
xmlns:wst="urn:wst_base"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:complexType name="TComplexType" />
|
||||
|
||||
<xsd:complexType name="TCollectionComplexType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="field" type="tns:TComplexType" minOccurs="0" maxOccurs="unbounded" wst:wst_collection="true"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="TCollectionItemType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" wst:wst_collection="true" >
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
<xsd:element name="floatField" type="xsd:float" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="byteField" type="xsd:byte" maxOccurs="1"/>
|
||||
<xsd:element name="charField" type="xsd:char" minOccurs="1"/>
|
||||
<xsd:element name="longField" type="xsd:long" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="strAtt" type="xsd:string"/>
|
||||
<xsd:attribute name="intAtt" type="xsd:int"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
</xsd:schema>
|
@@ -7,9 +7,9 @@
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<types>
|
||||
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test" xmlns:n="urn:wst-test" >
|
||||
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wst="urn:wst_base" targetNamespace="urn:wst-test" xmlns:n="urn:wst-test" >
|
||||
|
||||
<xsd:complexType name="TRecordSampleType" wst_record="true">
|
||||
<xsd:complexType name="TRecordSampleType" wst:wst_record="true">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
|
||||
|
||||
<xsd:complexType name="TRecordSampleTypeAll" wst_record="true">
|
||||
<xsd:complexType name="TRecordSampleTypeAll" wst:wst_record="true">
|
||||
<xsd:all>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
|
@@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:wst="urn:wst_base"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:complexType name="TRecordSampleType" wst_record="true">
|
||||
<xsd:complexType name="TRecordSampleType" wst:wst_record="true">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
@@ -18,7 +19,7 @@
|
||||
|
||||
<xsd:element name="TRecordSample" type="n:TRecordSampleType"/>
|
||||
|
||||
<xsd:complexType name="TRecordSampleTypeAll" wst_record="true">
|
||||
<xsd:complexType name="TRecordSampleTypeAll" wst:wst_record="true">
|
||||
<xsd:all>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
|
@@ -4,13 +4,14 @@
|
||||
xmlns:tns="library1"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:wst="urn:wst_base"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<types>
|
||||
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst-test" xmlns:n="urn:wst-test" >
|
||||
|
||||
<xsd:element name="TRecordSampleType">
|
||||
<xsd:complexType wst_record="true">
|
||||
<xsd:complexType wst:wst_record="true">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
@@ -25,7 +26,7 @@
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="TRecordSampleTypeAll">
|
||||
<xsd:complexType wst_record="true">
|
||||
<xsd:complexType wst:wst_record="true">
|
||||
<xsd:all>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
|
@@ -1,10 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:wst="urn:wst_base"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:element name="TRecordSampleType">
|
||||
<xsd:complexType wst_record="true">
|
||||
<xsd:complexType wst:wst_record="true">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
@@ -19,7 +20,7 @@
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="TRecordSampleTypeAll">
|
||||
<xsd:complexType wst_record="true">
|
||||
<xsd:complexType wst:wst_record="true">
|
||||
<xsd:all>
|
||||
<xsd:element name="intField" type="xsd:int" />
|
||||
<xsd:element name="strField" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||
|
20
wst/trunk/tests/test_suite/files/pascal_class_parent.WSDL
Normal file
20
wst/trunk/tests/test_suite/files/pascal_class_parent.WSDL
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<definitions name="wst_test"
|
||||
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="library1"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<types>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:complexType name="TClassSample" />
|
||||
|
||||
</xsd:schema>
|
||||
</types>
|
||||
|
||||
|
||||
</definitions>
|
8
wst/trunk/tests/test_suite/files/pascal_class_parent.xsd
Normal file
8
wst/trunk/tests/test_suite/files/pascal_class_parent.xsd
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsd:schema xmlns:n="urn:wst-test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="urn:wst-test">
|
||||
|
||||
<xsd:complexType name="TClassSample" />
|
||||
|
||||
</xsd:schema>
|
@@ -26,6 +26,8 @@ type
|
||||
|
||||
TPropertyType = ( ptField, ptAttribute );
|
||||
|
||||
{ TTest_CustomXsdGenerator }
|
||||
|
||||
TTest_CustomXsdGenerator = class(TTestCase)
|
||||
protected
|
||||
function CreateGenerator(const ADoc : TXMLDocument) : IXsdGenerator;virtual;abstract;
|
||||
@@ -33,6 +35,7 @@ type
|
||||
published
|
||||
procedure class_properties_default();
|
||||
procedure class_properties_extended_metadata();
|
||||
procedure class_extent_native_type();
|
||||
end;
|
||||
|
||||
TTest_XsdGenerator = class(TTest_CustomXsdGenerator)
|
||||
@@ -181,6 +184,76 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_CustomXsdGenerator.class_extent_native_type();
|
||||
var
|
||||
tr : TwstPasTreeContainer;
|
||||
mdl : TPasModule;
|
||||
cltyp : TPasClassType;
|
||||
|
||||
procedure AddProperty(
|
||||
const AName,
|
||||
ATypeName,
|
||||
ADefault : string;
|
||||
const AKind : TPropertyType
|
||||
);
|
||||
var
|
||||
p : TPasProperty;
|
||||
begin
|
||||
p := TPasProperty(tr.CreateElement(TPasProperty,AName,cltyp,visDefault,'',0));
|
||||
cltyp.Members.Add(p);
|
||||
p.ReadAccessorName := 'F' + AName;
|
||||
p.WriteAccessorName := 'F' + AName;
|
||||
p.VarType := tr.FindElement(ATypeName) as TPasType;
|
||||
Check( (p.VarType <> nil), Format('Type not found : "%s".',[ATypeName]));
|
||||
p.VarType.AddRef();
|
||||
p.DefaultValue := ADefault;
|
||||
p.Visibility := visPublished;
|
||||
p.StoredAccessorName := 'True';
|
||||
if ( AKind = ptAttribute ) then
|
||||
tr.SetPropertyAsAttribute(p,True);
|
||||
end;
|
||||
|
||||
var
|
||||
g : IGenerator;
|
||||
locDoc, locExistDoc : TXMLDocument;
|
||||
begin
|
||||
locDoc := nil;
|
||||
locExistDoc := nil;
|
||||
tr := TwstPasTreeContainer.Create();
|
||||
try
|
||||
CreateWstInterfaceSymbolTable(tr);
|
||||
mdl := TPasModule(tr.CreateElement(TPasModule,'class_extent_native_type',tr.Package,visDefault,'',0));
|
||||
tr.Package.Modules.Add(mdl);
|
||||
mdl.InterfaceSection := TPasSection(tr.CreateElement(TPasSection,'',mdl,visDefault,'',0));
|
||||
cltyp := TPasClassType(tr.CreateElement(TPasClassType,'TExtendString',mdl.InterfaceSection,visDefault,'',0));
|
||||
cltyp.ObjKind := okClass;
|
||||
cltyp.AncestorType := tr.FindElementNS('TComplexStringContentRemotable',sXSD_NS) as TPasType;
|
||||
cltyp.AncestorType.AddRef();
|
||||
mdl.InterfaceSection.Declarations.Add(cltyp);
|
||||
mdl.InterfaceSection.Types.Add(cltyp);
|
||||
AddProperty('intAtt','integer','',ptAttribute);
|
||||
|
||||
cltyp := TPasClassType(tr.CreateElement(TPasClassType,'TExtendBase64String',mdl.InterfaceSection,visDefault,'',0));
|
||||
cltyp.ObjKind := okClass;
|
||||
cltyp.AncestorType := tr.FindElementNS('TBase64StringExtRemotable',sXSD_NS) as TPasType;
|
||||
cltyp.AncestorType.AddRef();
|
||||
mdl.InterfaceSection.Declarations.Add(cltyp);
|
||||
mdl.InterfaceSection.Types.Add(cltyp);
|
||||
AddProperty('strAtt','string','',ptAttribute);
|
||||
|
||||
locDoc := CreateDoc();
|
||||
g := CreateGenerator(locDoc);
|
||||
g.Execute(tr,mdl.Name);
|
||||
WriteXMLFile(locDoc,'.\class_extent_native_type.xsd');
|
||||
locExistDoc := LoadXmlFromFilesList('class_extent_native_type.xsd');
|
||||
Check(CompareNodes(locExistDoc,locDoc),'generated document differs from the existent one.');
|
||||
finally
|
||||
ReleaseDomNode(locExistDoc);
|
||||
ReleaseDomNode(locDoc);
|
||||
FreeAndNil(tr);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TTest_CustomXsdGenerator.LoadXmlFromFilesList(const AFileName: string): TXMLDocument;
|
||||
var
|
||||
locFileName : string;
|
||||
|
@@ -45,6 +45,10 @@ type
|
||||
|
||||
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;virtual;abstract;
|
||||
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;virtual;abstract;
|
||||
|
||||
function LoadComplexType_CollectionSequence_Schema() : TwstPasTreeContainer;virtual;abstract;
|
||||
|
||||
function LoadComplexType_pascal_class_parent() : TwstPasTreeContainer;virtual;abstract;
|
||||
published
|
||||
procedure EmptySchema();
|
||||
|
||||
@@ -63,6 +67,9 @@ type
|
||||
|
||||
procedure ComplexType_ArraySequence();
|
||||
procedure ComplexType_ArraySequence_Embedded();
|
||||
|
||||
procedure ComplexType_CollectionSequence();
|
||||
procedure pascal_class_default_parent();
|
||||
end;
|
||||
|
||||
{ TTest_XsdParser }
|
||||
@@ -88,6 +95,10 @@ type
|
||||
|
||||
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
|
||||
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
|
||||
|
||||
function LoadComplexType_CollectionSequence_Schema() : TwstPasTreeContainer;override;
|
||||
|
||||
function LoadComplexType_pascal_class_parent() : TwstPasTreeContainer;override;
|
||||
end;
|
||||
|
||||
{ TTest_WsdlParser }
|
||||
@@ -113,6 +124,10 @@ type
|
||||
|
||||
function LoadComplexType_ArraySequence_Schema() : TwstPasTreeContainer;override;
|
||||
function LoadComplexType_ArraySequence_Embedded_Schema() : TwstPasTreeContainer;override;
|
||||
|
||||
function LoadComplexType_CollectionSequence_Schema() : TwstPasTreeContainer;override;
|
||||
|
||||
function LoadComplexType_pascal_class_parent() : TwstPasTreeContainer;override;
|
||||
published
|
||||
procedure no_binding_style();
|
||||
end;
|
||||
@@ -123,6 +138,11 @@ uses parserutils;
|
||||
const
|
||||
x_complexType_SampleArrayIntFieldType = 'TArrayIntFieldType';
|
||||
x_complexType_SampleArrayItemType = 'TArrayItemType';
|
||||
|
||||
x_complexType_SampleCollectionComplexType = 'TComplexType';
|
||||
x_complexType_SampleCollectionCollectionComplexType = 'TCollectionComplexType';
|
||||
x_complexType_SampleCollectionItemType = 'TCollectionItemType';
|
||||
|
||||
x_complexType_SampleDerivedType = 'TClassSampleDerivedType';
|
||||
x_complexType_SampleClassType = 'TClassSampleType';
|
||||
x_complexType_SampleClassTypeA = 'TClassSampleTypeA';
|
||||
@@ -135,6 +155,8 @@ const
|
||||
|
||||
x_complexType_array_sequence = 'complex_array_sequence';
|
||||
x_complexType_array_sequence_embedded = 'complex_array_sequence_embedded';
|
||||
x_complexType_array_sequence_collection = 'complex_array_sequence_collection';
|
||||
|
||||
x_complexType_class = 'complex_class';
|
||||
x_complexType_class_default = 'complex_class_default';
|
||||
x_complexType_class_properties_extended_metadata = 'class_properties_extended_metadata';
|
||||
@@ -162,6 +184,7 @@ const
|
||||
x_charField = 'charField';
|
||||
x_classField = 'classField';
|
||||
x_enumField = 'enumField';
|
||||
x_field = 'field';
|
||||
x_floatField = 'floatField';
|
||||
x_intField = 'intField';
|
||||
x_longField = 'longField';
|
||||
@@ -586,6 +609,7 @@ var
|
||||
i : Integer;
|
||||
prpLs : TList;
|
||||
begin
|
||||
tr := nil;
|
||||
prpLs := TList.Create();
|
||||
try
|
||||
tr := LoadComplexType_Class_Extend_Simple_Schema();
|
||||
@@ -602,6 +626,9 @@ begin
|
||||
CheckEquals(x_complexType_SampleClassType,tr.GetExternalName(elt));
|
||||
CheckIs(elt,TPasClassType);
|
||||
clsType := elt as TPasClassType;
|
||||
CheckNotNull(clsType.AncestorType,'AncestorType is null');
|
||||
CheckSame(tr.FindElementNS('TComplexStringContentRemotable',sXSD_NS),clsType.AncestorType);
|
||||
|
||||
prpLs.Clear();
|
||||
for i := 0 to Pred(clsType.Members.Count) do begin
|
||||
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
|
||||
@@ -617,6 +644,9 @@ begin
|
||||
CheckEquals(x_complexType_SampleClassTypeA,tr.GetExternalName(elt));
|
||||
CheckIs(elt,TPasClassType);
|
||||
clsType := elt as TPasClassType;
|
||||
CheckNotNull(clsType.AncestorType,'AncestorType is null');
|
||||
CheckSame(tr.FindElementNS('TBase64StringExtRemotable',sXSD_NS),clsType.AncestorType);
|
||||
|
||||
prpLs.Clear();
|
||||
for i := 0 to Pred(clsType.Members.Count) do begin
|
||||
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
|
||||
@@ -625,6 +655,7 @@ begin
|
||||
CheckEquals(1,prpLs.Count);
|
||||
CheckProperty(x_floatField,'float',ptAttribute);
|
||||
finally
|
||||
tr.Free();
|
||||
FreeAndNil(prpLs);
|
||||
end;
|
||||
end;
|
||||
@@ -982,7 +1013,121 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_CustomXsdParser.ComplexType_Class_default_values;
|
||||
procedure TTest_CustomXsdParser.ComplexType_CollectionSequence();
|
||||
var
|
||||
tr : TwstPasTreeContainer;
|
||||
clsType : TPasClassType;
|
||||
|
||||
procedure CheckProperty(const AName,ATypeName : string; const AFieldType : TPropertyType);
|
||||
var
|
||||
prp : TPasProperty;
|
||||
begin
|
||||
prp := FindMember(clsType,AName) as TPasProperty;
|
||||
CheckNotNull(prp);
|
||||
CheckEquals(AName,prp.Name);
|
||||
CheckEquals(AName,tr.GetExternalName(prp));
|
||||
CheckNotNull(prp.VarType);
|
||||
CheckEquals(ATypeName,tr.GetExternalName(prp.VarType));
|
||||
CheckEquals(PropertyType_Att[AFieldType],tr.IsAttributeProperty(prp));
|
||||
end;
|
||||
|
||||
var
|
||||
mdl : TPasModule;
|
||||
ls : TList;
|
||||
elt : TPasElement;
|
||||
arrayType : TPasArrayType;
|
||||
aliasType : TPasAliasType;
|
||||
i : Integer;
|
||||
prpLs : TList;
|
||||
nestedClassName : string;
|
||||
begin
|
||||
prpLs := TList.Create();
|
||||
try
|
||||
tr := LoadComplexType_CollectionSequence_Schema();
|
||||
|
||||
mdl := tr.FindModule(x_targetNamespace);
|
||||
CheckNotNull(mdl);
|
||||
CheckEquals(x_complexType_array_sequence_collection,mdl.Name);
|
||||
CheckEquals(x_targetNamespace,tr.GetExternalName(mdl));
|
||||
ls := mdl.InterfaceSection.Declarations;
|
||||
CheckEquals(4,ls.Count);
|
||||
elt := tr.FindElement(x_complexType_SampleCollectionCollectionComplexType);
|
||||
CheckNotNull(elt,x_complexType_SampleCollectionCollectionComplexType);
|
||||
CheckEquals(x_complexType_SampleCollectionCollectionComplexType,elt.Name);
|
||||
CheckEquals(x_complexType_SampleCollectionCollectionComplexType,tr.GetExternalName(elt));
|
||||
CheckIs(elt,TPasArrayType);
|
||||
arrayType := elt as TPasArrayType;
|
||||
Check(tr.IsCollection(arrayType));
|
||||
CheckNotNull(arrayType.ElType);
|
||||
CheckEquals(x_complexType_SampleCollectionComplexType,tr.GetExternalName(arrayType.ElType));
|
||||
CheckEquals(x_field,tr.GetArrayItemName(arrayType));
|
||||
CheckEquals(x_field,tr.GetArrayItemExternalName(arrayType));
|
||||
|
||||
|
||||
nestedClassName := Format('%s_%s_Type',[x_complexType_SampleCollectionItemType,x_Item]);
|
||||
elt := tr.FindElement(nestedClassName);
|
||||
CheckNotNull(elt,nestedClassName);
|
||||
CheckEquals(nestedClassName,elt.Name,'Item Name');
|
||||
CheckEquals(nestedClassName,tr.GetExternalName(elt),'Item ExternalName');
|
||||
CheckIs(elt,TPasClassType);
|
||||
clsType := elt as TPasClassType;
|
||||
|
||||
prpLs.Clear();
|
||||
for i := 0 to Pred(clsType.Members.Count) do begin
|
||||
if TPasElement(clsType.Members[i]).InheritsFrom(TPasProperty) then
|
||||
prpLs.Add(clsType.Members[i]);
|
||||
end;
|
||||
CheckEquals(8,prpLs.Count);
|
||||
CheckProperty(x_intField,'int',ptField);
|
||||
CheckProperty(x_strField,'string',ptField);
|
||||
CheckProperty(x_floatField,'float',ptField);
|
||||
CheckProperty(x_byteField,'byte',ptField);
|
||||
CheckProperty(x_charField,'char',ptField);
|
||||
CheckProperty(x_longField,'long',ptField);
|
||||
CheckProperty(x_strAtt,'string',ptAttribute);
|
||||
CheckProperty(x_intAtt,'int',ptAttribute);
|
||||
|
||||
elt := tr.FindElement(x_complexType_SampleCollectionItemType);
|
||||
CheckNotNull(elt,x_complexType_SampleCollectionItemType);
|
||||
CheckEquals(x_complexType_SampleCollectionItemType,elt.Name, 'Array name');
|
||||
CheckEquals(x_complexType_SampleCollectionItemType,tr.GetExternalName(elt), 'Array external name');
|
||||
CheckIs(elt,TPasArrayType);
|
||||
arrayType := elt as TPasArrayType;
|
||||
Check(tr.IsCollection(arrayType));
|
||||
CheckNotNull(arrayType.ElType);
|
||||
CheckEquals(nestedClassName,tr.GetExternalName(arrayType.ElType));
|
||||
CheckEquals(x_Item,tr.GetArrayItemExternalName(arrayType));
|
||||
|
||||
finally
|
||||
FreeAndNil(prpLs);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_CustomXsdParser.pascal_class_default_parent();
|
||||
var
|
||||
tr : TwstPasTreeContainer;
|
||||
mdl : TPasModule;
|
||||
clsType : TPasClassType;
|
||||
elt : TPasElement;
|
||||
begin
|
||||
tr := LoadComplexType_pascal_class_parent();
|
||||
try
|
||||
mdl := tr.FindModule(x_targetNamespace);
|
||||
CheckNotNull(mdl);
|
||||
elt := tr.FindElement(x_complexType_SampleClass);
|
||||
CheckNotNull(elt,x_complexType_SampleClass);
|
||||
CheckEquals(x_complexType_SampleClass,elt.Name);
|
||||
CheckEquals(x_complexType_SampleClass,tr.GetExternalName(elt));
|
||||
CheckIs(elt,TPasClassType);
|
||||
clsType := elt as TPasClassType;
|
||||
CheckNotNull(clsType.AncestorType,'AncestorType is null');
|
||||
CheckSame(tr.FindElementNS('TBaseComplexRemotable',sXSD_NS),clsType.AncestorType);
|
||||
finally
|
||||
tr.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_CustomXsdParser.ComplexType_Class_default_values();
|
||||
var
|
||||
tr : TwstPasTreeContainer;
|
||||
clsType : TPasClassType;
|
||||
@@ -1198,6 +1343,16 @@ begin
|
||||
Result := ParseDoc(x_complexType_array_sequence_embedded);
|
||||
end;
|
||||
|
||||
function TTest_XsdParser.LoadComplexType_CollectionSequence_Schema() : TwstPasTreeContainer;
|
||||
begin
|
||||
Result := ParseDoc(x_complexType_array_sequence_collection);
|
||||
end;
|
||||
|
||||
function TTest_XsdParser.LoadComplexType_pascal_class_parent() : TwstPasTreeContainer;
|
||||
begin
|
||||
Result := ParseDoc('pascal_class_parent');
|
||||
end;
|
||||
|
||||
function TTest_XsdParser.LoadComplexType_Class_default_values() : TwstPasTreeContainer;
|
||||
begin
|
||||
Result := ParseDoc(x_complexType_class_default);
|
||||
@@ -1286,6 +1441,16 @@ begin
|
||||
Result := ParseDoc(x_complexType_array_sequence_embedded);
|
||||
end;
|
||||
|
||||
function TTest_WsdlParser.LoadComplexType_CollectionSequence_Schema() : TwstPasTreeContainer;
|
||||
begin
|
||||
Result := ParseDoc(x_complexType_array_sequence_collection);
|
||||
end;
|
||||
|
||||
function TTest_WsdlParser.LoadComplexType_pascal_class_parent() : TwstPasTreeContainer;
|
||||
begin
|
||||
Result := ParseDoc('pascal_class_parent');
|
||||
end;
|
||||
|
||||
procedure TTest_WsdlParser.no_binding_style();
|
||||
var
|
||||
symTable : TwstPasTreeContainer;
|
||||
|
@@ -60,7 +60,9 @@ type
|
||||
procedure Create_Test();
|
||||
procedure Evaluate_Equal();
|
||||
procedure Evaluate_Lesser();
|
||||
procedure Evaluate_LesserOrEqual();
|
||||
procedure Evaluate_Greater();
|
||||
procedure Evaluate_GreaterOrEqual();
|
||||
end;
|
||||
|
||||
{ TRttiExpEnumNodeItem_Test }
|
||||
@@ -71,7 +73,9 @@ type
|
||||
procedure Evaluate_Equal();
|
||||
procedure Evaluate_Equal_bool();
|
||||
procedure Evaluate_Lesser();
|
||||
procedure Evaluate_LesserOrEqual();
|
||||
procedure Evaluate_Greater();
|
||||
procedure Evaluate_GreaterOrEqual();
|
||||
end;
|
||||
|
||||
{ TRttiExpAnsiStringNodeItem_Test }
|
||||
@@ -203,6 +207,31 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpIntegerNodeItem_Test.Evaluate_LesserOrEqual();
|
||||
const VAL_1 : Integer = 1210;
|
||||
var
|
||||
x : TRttiExpIntegerNodeItem;
|
||||
t : TClass_A;
|
||||
begin
|
||||
x := nil;
|
||||
t := TClass_A.Create();
|
||||
try
|
||||
x := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesserOrEqual,VAL_1);
|
||||
|
||||
t.IntProp := 0;
|
||||
Check( x.Evaluate(t) = True ,'True');
|
||||
|
||||
t.IntProp := -VAL_1;
|
||||
Check( x.Evaluate(t) = True ,'True');
|
||||
|
||||
t.IntProp := VAL_1 + 1;
|
||||
Check( x.Evaluate(t) = False, 'False' );
|
||||
finally
|
||||
x.Free();
|
||||
t.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpIntegerNodeItem_Test.Evaluate_Greater();
|
||||
const VAL_1 : Integer = 1210;
|
||||
var
|
||||
@@ -225,6 +254,31 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpIntegerNodeItem_Test.Evaluate_GreaterOrEqual();
|
||||
const VAL_1 : Integer = 1210;
|
||||
var
|
||||
x : TRttiExpIntegerNodeItem;
|
||||
t : TClass_A;
|
||||
begin
|
||||
x := nil;
|
||||
t := TClass_A.Create();
|
||||
try
|
||||
x := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreaterOrEqual,VAL_1);
|
||||
|
||||
t.IntProp := 0;
|
||||
Check( x.Evaluate(t) = False, 'False' );
|
||||
|
||||
t.IntProp := VAL_1;
|
||||
Check( x.Evaluate(t) = True ,'True');
|
||||
|
||||
t.IntProp := VAL_1 + 1;
|
||||
Check( x.Evaluate(t) = True ,'True');
|
||||
finally
|
||||
x.Free();
|
||||
t.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{ TRttiExpNode_Test }
|
||||
|
||||
@@ -1250,6 +1304,31 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpEnumNodeItem_Test.Evaluate_LesserOrEqual();
|
||||
const VAL_1 : TSampleEnum = SampleEnum_C;
|
||||
var
|
||||
x : TRttiExpEnumNodeItem;
|
||||
t : TClass_A;
|
||||
begin
|
||||
x := nil;
|
||||
t := TClass_A.Create();
|
||||
try
|
||||
x := TRttiExpEnumNodeItem.Create(GetPropInfo(t,'EnumProp'),nfoLesserOrEqual,GetEnumName(TypeInfo(TSampleEnum),Ord(VAL_1)));
|
||||
|
||||
t.EnumProp := SampleEnum_D;
|
||||
Check( x.Evaluate(t) = False ,'False');
|
||||
|
||||
t.EnumProp := SampleEnum_B;
|
||||
Check( x.Evaluate(t) = True, 'True' );
|
||||
|
||||
t.EnumProp := VAL_1;
|
||||
Check( x.Evaluate(t) = True, 'True' );
|
||||
finally
|
||||
x.Free();
|
||||
t.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpEnumNodeItem_Test.Evaluate_Greater();
|
||||
const VAL_1 : TSampleEnum = SampleEnum_C;
|
||||
var
|
||||
@@ -1272,6 +1351,31 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRttiExpEnumNodeItem_Test.Evaluate_GreaterOrEqual();
|
||||
const VAL_1 : TSampleEnum = SampleEnum_C;
|
||||
var
|
||||
x : TRttiExpEnumNodeItem;
|
||||
t : TClass_A;
|
||||
begin
|
||||
x := nil;
|
||||
t := TClass_A.Create();
|
||||
try
|
||||
x := TRttiExpEnumNodeItem.Create(GetPropInfo(t,'EnumProp'),nfoGreaterOrEqual,GetEnumName(TypeInfo(TSampleEnum),Ord(VAL_1)));
|
||||
|
||||
t.EnumProp := SampleEnum_A;
|
||||
Check( x.Evaluate(t) = False ,'False');
|
||||
|
||||
t.EnumProp := SampleEnum_D;
|
||||
Check( x.Evaluate(t) = True, 'True' );
|
||||
|
||||
t.EnumProp := VAL_1;
|
||||
Check( x.Evaluate(t) = True, 'True' );
|
||||
finally
|
||||
x.Free();
|
||||
t.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
Initialization
|
||||
RegisterTest('Cursors',TRttiExpIntegerNodeItem_Test.Suite);
|
||||
RegisterTest('Cursors',TRttiExpEnumNodeItem_Test.Suite);
|
||||
|
@@ -351,6 +351,31 @@ type
|
||||
procedure SetEncodedString();
|
||||
end;
|
||||
|
||||
{ TClass_A_CollectionRemotable }
|
||||
|
||||
TClass_A_CollectionRemotable = class(TObjectCollectionRemotable)
|
||||
private
|
||||
function GetItem(AIndex : PtrInt) : TClass_A;
|
||||
public
|
||||
class function GetItemClass():TBaseRemotableClass;override;
|
||||
function Add(): TClass_A;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function AddAt(const APosition : PtrInt): TClass_A;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
property Item[AIndex:PtrInt] : TClass_A read GetItem;default;
|
||||
end;
|
||||
|
||||
{ TTest_TObjectCollectionRemotable }
|
||||
|
||||
TTest_TObjectCollectionRemotable = class(TTestCase)
|
||||
published
|
||||
procedure GetItemTypeInfo();
|
||||
procedure Add();
|
||||
procedure Delete();
|
||||
procedure Equal();
|
||||
procedure test_Assign();
|
||||
procedure Exchange();
|
||||
procedure IndexOf();
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses Math, basex_encode;
|
||||
|
||||
@@ -2541,7 +2566,235 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TClass_A_CollectionRemotable }
|
||||
|
||||
function TClass_A_CollectionRemotable.GetItem(AIndex : PtrInt) : TClass_A;
|
||||
begin
|
||||
Result := TClass_A(inherited Item[AIndex]);
|
||||
end;
|
||||
|
||||
class function TClass_A_CollectionRemotable.GetItemClass() : TBaseRemotableClass;
|
||||
begin
|
||||
Result := TClass_A;
|
||||
end;
|
||||
|
||||
function TClass_A_CollectionRemotable.Add() : TClass_A;
|
||||
begin
|
||||
Result := TClass_A(inherited Add());
|
||||
end;
|
||||
|
||||
function TClass_A_CollectionRemotable.AddAt(const APosition : PtrInt) : TClass_A;
|
||||
begin
|
||||
Result := TClass_A(inherited AddAt(APosition));
|
||||
end;
|
||||
|
||||
{ TTest_TObjectCollectionRemotable }
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.GetItemTypeInfo();
|
||||
begin
|
||||
CheckEquals(
|
||||
PtrUInt(TClass_A_CollectionRemotable.GetItemClass().ClassInfo),
|
||||
PtrUInt(TClass_A_CollectionRemotable.GetItemTypeInfo())
|
||||
);
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.Add();
|
||||
var
|
||||
ls : TClass_A_CollectionRemotable;
|
||||
aa,ab : TClass_A;
|
||||
begin
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
aa := ls.Add();
|
||||
CheckNotNull(aa);
|
||||
CheckEquals(1,ls.Length);
|
||||
CheckSame(aa, ls[0]);
|
||||
ab := ls.Add();
|
||||
CheckNotNull(ab);
|
||||
CheckEquals(2,ls.Length);
|
||||
CheckSame(ab, ls[1]);
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.Delete();
|
||||
var
|
||||
ls : TClass_A_CollectionRemotable;
|
||||
aa,ab : TClass_A;
|
||||
ok : Boolean;
|
||||
begin
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
ok := False;
|
||||
try
|
||||
ls.Delete(-112);
|
||||
except
|
||||
ok := True;
|
||||
end;
|
||||
Check(ok);
|
||||
|
||||
ok := False;
|
||||
try
|
||||
ls.Delete(0);
|
||||
except
|
||||
ok := True;
|
||||
end;
|
||||
Check(ok);
|
||||
|
||||
ok := False;
|
||||
try
|
||||
ls.Delete(112);
|
||||
except
|
||||
ok := True;
|
||||
end;
|
||||
Check(ok);
|
||||
|
||||
aa := ls.Add();
|
||||
ls.Delete(0);
|
||||
CheckEquals(0,ls.Length);
|
||||
|
||||
aa := ls.Add();
|
||||
ab := ls.Add();
|
||||
ls.Delete(0);
|
||||
CheckEquals(1,ls.Length);
|
||||
CheckSame(ab,ls[0]);
|
||||
|
||||
FreeAndNil(ls);
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
aa := ls.Add();
|
||||
ab := ls.Add();
|
||||
ls.Delete(1);
|
||||
CheckEquals(1,ls.Length);
|
||||
CheckSame(aa,ls[0]);
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.Equal();
|
||||
var
|
||||
a, b : TClass_A_CollectionRemotable;
|
||||
begin
|
||||
b := nil;
|
||||
a := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
b := TClass_A_CollectionRemotable.Create();
|
||||
Check(a.Equal(b));
|
||||
Check(b.Equal(a));
|
||||
a.Add().Val_16S := 1;
|
||||
a.Add().Val_16S := 2;
|
||||
Check(not a.Equal(nil));
|
||||
Check(a.Equal(a));
|
||||
Check(not a.Equal(b));
|
||||
Check(not b.Equal(a));
|
||||
|
||||
b.Add().Val_16S := 1;
|
||||
Check(not a.Equal(b));
|
||||
Check(not b.Equal(a));
|
||||
b.Add().Val_16S := 2;
|
||||
Check(a.Equal(b));
|
||||
Check(b.Equal(a));
|
||||
finally
|
||||
b.Free();
|
||||
a.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.test_Assign();
|
||||
|
||||
procedure Check_List(Aa, Ab : TClass_A_CollectionRemotable);
|
||||
var
|
||||
k : PtrInt;
|
||||
begin
|
||||
if ( Aa = nil ) then begin
|
||||
CheckNull(Ab);
|
||||
end else begin
|
||||
CheckNotNull(Ab);
|
||||
CheckEquals(Aa.Length,Ab.Length);
|
||||
if ( Aa.Length > 0 ) then begin
|
||||
for k := 0 to Pred(Aa.Length) do begin
|
||||
Check(Aa[k].Equal(Ab[k]));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
a, b : TClass_A_CollectionRemotable;
|
||||
begin
|
||||
b := nil;
|
||||
a := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
b := TClass_A_CollectionRemotable.Create();
|
||||
Check_List(a,b);
|
||||
a.Add().Val_16S := 1;
|
||||
a.Add().Val_16S := 2;
|
||||
b.Assign(a);
|
||||
Check_List(a,b);
|
||||
|
||||
b.Add().Val_16S := 3;
|
||||
a.Assign(b);
|
||||
Check_List(a,b);
|
||||
|
||||
a.Clear();
|
||||
b.Assign(a);
|
||||
Check_List(a,b);
|
||||
finally
|
||||
b.Free();
|
||||
a.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.Exchange();
|
||||
var
|
||||
ls : TClass_A_CollectionRemotable;
|
||||
a, b, c : TClass_A;
|
||||
begin
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
a := ls.Add();
|
||||
ls.Exchange(0,0);
|
||||
CheckSame(a,ls[0]);
|
||||
b := ls.Add();
|
||||
ls.Exchange(0,1);
|
||||
CheckSame(a,ls[1]);
|
||||
CheckSame(b,ls[0]);
|
||||
c := ls.Add();
|
||||
ls.Exchange(0,2);
|
||||
CheckSame(c,ls[0]);
|
||||
CheckSame(b,ls[2]);
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTest_TObjectCollectionRemotable.IndexOf();
|
||||
var
|
||||
ls : TClass_A_CollectionRemotable;
|
||||
begin
|
||||
ls := TClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
CheckEquals(-1, ls.IndexOf(nil));
|
||||
ls.Add();
|
||||
CheckEquals(-1, ls.IndexOf(nil));
|
||||
CheckEquals(0, ls.IndexOf(ls[0]));
|
||||
ls.Add();
|
||||
CheckEquals(-1, ls.IndexOf(nil));
|
||||
CheckEquals(0, ls.IndexOf(ls[0]));
|
||||
CheckEquals(1, ls.IndexOf(ls[1]));
|
||||
ls.Add();
|
||||
CheckEquals(-1, ls.IndexOf(nil));
|
||||
CheckEquals(0, ls.IndexOf(ls[0]));
|
||||
CheckEquals(1, ls.IndexOf(ls[1]));
|
||||
CheckEquals(2, ls.IndexOf(ls[2]));
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterTest('Support',TTest_TObjectCollectionRemotable.Suite);
|
||||
RegisterTest('Support',TTest_TBaseComplexRemotable.Suite);
|
||||
RegisterTest('Support',TTest_TStringBufferRemotable.Suite);
|
||||
RegisterTest('Support-Date',TTest_TDateRemotable.Suite);
|
||||
|
@@ -35,6 +35,13 @@ type
|
||||
class function GetItemClass():TBaseRemotableClass;override;
|
||||
end;
|
||||
|
||||
{ TTClass_A_CollectionRemotable }
|
||||
|
||||
TTClass_A_CollectionRemotable = class(TObjectCollectionRemotable)
|
||||
public
|
||||
class function GetItemClass():TBaseRemotableClass;override;
|
||||
end;
|
||||
|
||||
{ TClass_B }
|
||||
|
||||
TClass_B = class(TClass_A)
|
||||
@@ -69,12 +76,21 @@ type
|
||||
procedure All();
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotableCursor_Test }
|
||||
|
||||
TObjectCollectionRemotableCursor_Test = class(TTestCase)
|
||||
published
|
||||
procedure All();
|
||||
end;
|
||||
|
||||
{ TUtilsProcs_Test }
|
||||
|
||||
TUtilsProcs_Test = class(TTestCase)
|
||||
published
|
||||
procedure test_Find();
|
||||
procedure test_Filter();
|
||||
procedure test_Find_array();
|
||||
procedure test_Find_collection();
|
||||
procedure test_Filter_array();
|
||||
procedure test_Filter_collection();
|
||||
end;
|
||||
|
||||
implementation
|
||||
@@ -277,7 +293,7 @@ end;
|
||||
|
||||
{ TUtilsProcs_Test }
|
||||
|
||||
procedure TUtilsProcs_Test.test_Find();
|
||||
procedure TUtilsProcs_Test.test_Find_array();
|
||||
const O_COUNT : PtrInt = 10;
|
||||
var
|
||||
ls : TTClass_A_ArrayRemotable;
|
||||
@@ -306,14 +322,43 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TUtilsProcs_Test.test_Filter();
|
||||
procedure TUtilsProcs_Test.test_Find_collection();
|
||||
const O_COUNT : PtrInt = 10;
|
||||
var
|
||||
ls : TTClass_A_CollectionRemotable;
|
||||
i : PtrInt;
|
||||
begin
|
||||
ls := TTClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
CheckNull(Find(ls,''));
|
||||
CheckNull(Find(ls,'IntProp = 12'));
|
||||
|
||||
ls.Add();
|
||||
CheckSame(ls[0], Find(ls,''));
|
||||
CheckSame(ls[0], Find(ls,'IntProp = 0'));
|
||||
CheckNull(Find(ls,'IntProp = 12'));
|
||||
|
||||
ls.Clear();
|
||||
for i := 0 to ( O_COUNT - 1 ) do
|
||||
TClass_A(ls.Add()).FIntProp := i;
|
||||
CheckSame(ls[0], Find(ls,''));
|
||||
CheckSame(ls[0], Find(ls,'IntProp = 0'));
|
||||
CheckNull(Find(ls,Format('IntProp = %d',[2*O_COUNT])));
|
||||
for i := 0 to ( O_COUNT - 1 ) do
|
||||
CheckSame(ls[i],Find(ls,Format('IntProp = %d',[i])));
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TUtilsProcs_Test.test_Filter_array();
|
||||
const O_COUNT : PtrInt = 10;
|
||||
var
|
||||
ls : TTClass_A_ArrayRemotable;
|
||||
i : PtrInt;
|
||||
crs : IObjectCursor;
|
||||
begin
|
||||
CheckNull(Filter(nil,''), 'filter(nil) = nil');
|
||||
CheckNull(Filter(TTClass_A_ArrayRemotable(nil),''), 'filter(nil) = nil');
|
||||
ls := TTClass_A_ArrayRemotable.Create();
|
||||
try
|
||||
crs := Filter(ls,'');
|
||||
@@ -346,9 +391,120 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TUtilsProcs_Test.test_Filter_collection();
|
||||
const O_COUNT : PtrInt = 10;
|
||||
var
|
||||
ls : TTClass_A_CollectionRemotable;
|
||||
i : PtrInt;
|
||||
crs : IObjectCursor;
|
||||
begin
|
||||
CheckNull(Filter(TTClass_A_CollectionRemotable(nil),''), 'filter(nil) = nil');
|
||||
ls := TTClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
crs := Filter(ls,'');
|
||||
Check( ( crs <> nil ) );
|
||||
crs.Reset();
|
||||
Check(not crs.MoveNext());
|
||||
|
||||
ls.Clear();
|
||||
for i := 0 to ( O_COUNT - 1 ) do
|
||||
TClass_A(ls.Add()).FIntProp := i;
|
||||
crs := Filter(ls,'');
|
||||
Check( ( crs <> nil ) );
|
||||
crs.Reset();
|
||||
for i := 0 to ( O_COUNT - 1 ) do begin
|
||||
Check(crs.MoveNext());
|
||||
CheckSame(ls[i], crs.GetCurrent());
|
||||
end;
|
||||
Check(not crs.MoveNext());
|
||||
|
||||
for i := 0 to ( O_COUNT - 1 ) do begin
|
||||
crs := Filter(ls,Format('IntProp = %d',[i]));
|
||||
Check( ( crs <> nil ) );
|
||||
crs.Reset();
|
||||
Check(crs.MoveNext());
|
||||
CheckSame(ls[i], crs.GetCurrent());
|
||||
Check(not crs.MoveNext());
|
||||
end;
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TTClass_A_CollectionRemotable }
|
||||
|
||||
class function TTClass_A_CollectionRemotable.GetItemClass() : TBaseRemotableClass;
|
||||
begin
|
||||
Result := TClass_A;
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotableCursor_Test }
|
||||
|
||||
procedure TObjectCollectionRemotableCursor_Test.All();
|
||||
const O_COUNT = 100;
|
||||
var
|
||||
x : IObjectCursor;
|
||||
ls : TObjectCollectionRemotable;
|
||||
c, i : PtrInt;
|
||||
begin
|
||||
ls := TTClass_A_CollectionRemotable.Create();
|
||||
try
|
||||
x := TObjectCollectionRemotableCursor.Create(ls);
|
||||
x.Reset();
|
||||
CheckEquals(False,x.MoveNext());
|
||||
x.Reset();
|
||||
CheckEquals(False,x.MoveNext());
|
||||
CheckEquals(False,x.MoveNext());
|
||||
try
|
||||
x.GetCurrent();
|
||||
Check(False);
|
||||
except
|
||||
on e : ECursorException do begin
|
||||
// GOOD
|
||||
end;
|
||||
end;
|
||||
|
||||
ls.Add();
|
||||
x.Reset();
|
||||
CheckEquals(True,x.MoveNext());
|
||||
CheckSame(ls[0],x.GetCurrent());
|
||||
CheckEquals(False,x.MoveNext());
|
||||
try
|
||||
x.GetCurrent();
|
||||
Check(False);
|
||||
except
|
||||
on e : ECursorException do begin
|
||||
// GOOD
|
||||
end;
|
||||
end;
|
||||
x.Reset();
|
||||
CheckEquals(True,x.MoveNext());
|
||||
CheckSame(ls[0],x.GetCurrent());
|
||||
CheckEquals(False,x.MoveNext());
|
||||
|
||||
ls.Clear();
|
||||
for i := 0 to Pred(O_COUNT) do
|
||||
TClass_A(ls.Add()).FIntProp := i;
|
||||
x.Reset();
|
||||
for i := 0 to Pred(O_COUNT) do begin
|
||||
CheckEquals(True,x.MoveNext());
|
||||
CheckSame(ls[i],x.GetCurrent());
|
||||
end;
|
||||
CheckEquals(False,x.MoveNext());
|
||||
x.Reset();
|
||||
for i := 0 to Pred(O_COUNT) do begin
|
||||
CheckEquals(True,x.MoveNext());
|
||||
CheckSame(ls[i],x.GetCurrent());
|
||||
end;
|
||||
finally
|
||||
ls.Free();
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterTest('Cursors',TBaseObjectArrayRemotableCursor_Test.Suite);
|
||||
RegisterTest('Cursors',TBaseObjectArrayRemotableFilterableCursor_Test.Suite);
|
||||
RegisterTest('Cursors',TObjectCollectionRemotableCursor_Test.Suite);
|
||||
RegisterTest('Cursors',TUtilsProcs_Test.Suite);
|
||||
|
||||
end.
|
||||
|
@@ -26,7 +26,7 @@
|
||||
<PackageName Value="FPCUnitTestRunner"/>
|
||||
</Item1>
|
||||
</RequiredPackages>
|
||||
<Units Count="35">
|
||||
<Units Count="38">
|
||||
<Unit0>
|
||||
<Filename Value="wst_test_suite.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@@ -202,6 +202,21 @@
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_suite_utils"/>
|
||||
</Unit34>
|
||||
<Unit35>
|
||||
<Filename Value="test_std_cursors.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_std_cursors"/>
|
||||
</Unit35>
|
||||
<Unit36>
|
||||
<Filename Value="test_rtti_filter.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_rtti_filter"/>
|
||||
</Unit36>
|
||||
<Unit37>
|
||||
<Filename Value="test_wst_cursors.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_wst_cursors"/>
|
||||
</Unit37>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@@ -1,7 +1,6 @@
|
||||
{$INCLUDE wst_global.inc}
|
||||
program wst_test_suite;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
{$DEFINE UseCThreads}
|
||||
|
||||
uses
|
||||
@@ -19,7 +18,8 @@ uses
|
||||
server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator,
|
||||
xsd_consts, base_json_formatter, wsdl_parser, test_support, basex_encode,
|
||||
test_basex_encode, json_formatter, server_service_json, test_json,
|
||||
test_suite_utils, test_generators;
|
||||
test_suite_utils, test_generators, test_std_cursors, test_rtti_filter,
|
||||
test_wst_cursors;
|
||||
|
||||
Const
|
||||
ShortOpts = 'alh';
|
||||
|
@@ -34,7 +34,7 @@
|
||||
<PackageName Value="fpcunittestrunner"/>
|
||||
</Item3>
|
||||
</RequiredPackages>
|
||||
<Units Count="10">
|
||||
<Units Count="16">
|
||||
<Unit0>
|
||||
<Filename Value="wst_test_suite_gui.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@@ -85,6 +85,36 @@
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_suite_utils"/>
|
||||
</Unit9>
|
||||
<Unit10>
|
||||
<Filename Value="test_std_cursors.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_std_cursors"/>
|
||||
</Unit10>
|
||||
<Unit11>
|
||||
<Filename Value="test_rtti_filter.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_rtti_filter"/>
|
||||
</Unit11>
|
||||
<Unit12>
|
||||
<Filename Value="..\..\wst_rtti_filter\rtti_filters.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="rtti_filters"/>
|
||||
</Unit12>
|
||||
<Unit13>
|
||||
<Filename Value="..\..\wst_rtti_filter\wst_cursors.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="wst_cursors"/>
|
||||
</Unit13>
|
||||
<Unit14>
|
||||
<Filename Value="test_wst_cursors.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="test_wst_cursors"/>
|
||||
</Unit14>
|
||||
<Unit15>
|
||||
<Filename Value="wst_collections.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="wst_collections"/>
|
||||
</Unit15>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@@ -16,7 +16,8 @@ uses
|
||||
server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator,
|
||||
xsd_consts, base_json_formatter, wsdl_parser, test_support, basex_encode,
|
||||
test_basex_encode, json_formatter, server_service_json, test_json,
|
||||
test_suite_utils, test_generators, fpcunittestrunner;
|
||||
test_suite_utils, test_generators, fpcunittestrunner, test_std_cursors,
|
||||
test_rtti_filter, rtti_filters, wst_cursors, test_wst_cursors;
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
|
@@ -25,10 +25,10 @@
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="LCL"/>
|
||||
<PackageName Value="SynEdit"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="SynEdit"/>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="24">
|
||||
|
@@ -1,19 +1,24 @@
|
||||
object fBindingEdit: TfBindingEdit
|
||||
Left = 759
|
||||
Height = 354
|
||||
Top = 90
|
||||
Height = 335
|
||||
Top = 91
|
||||
Width = 400
|
||||
HorzScrollBar.Page = 399
|
||||
VertScrollBar.Page = 353
|
||||
VertScrollBar.Page = 334
|
||||
ActiveControl = edtName
|
||||
BorderStyle = bsSizeToolWin
|
||||
Caption = 'fBindingEdit'
|
||||
ClientHeight = 335
|
||||
ClientWidth = 400
|
||||
Position = poMainFormCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel1: TPanel
|
||||
Height = 50
|
||||
Top = 304
|
||||
Top = 285
|
||||
Width = 400
|
||||
Align = alBottom
|
||||
ClientHeight = 50
|
||||
ClientWidth = 400
|
||||
TabOrder = 0
|
||||
object Button1: TButton
|
||||
Left = 224
|
||||
@@ -40,7 +45,7 @@ object fBindingEdit: TfBindingEdit
|
||||
end
|
||||
end
|
||||
object PageControl1: TPageControl
|
||||
Height = 304
|
||||
Height = 285
|
||||
Width = 400
|
||||
ActivePage = TabSheet1
|
||||
Align = alClient
|
||||
@@ -48,13 +53,14 @@ object fBindingEdit: TfBindingEdit
|
||||
TabOrder = 1
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Interface Binding'
|
||||
ClientHeight = 259
|
||||
ClientWidth = 392
|
||||
object Label1: TLabel
|
||||
Left = 12
|
||||
Height = 14
|
||||
Top = 26
|
||||
Width = 28
|
||||
Caption = 'Name'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
@@ -63,14 +69,13 @@ object fBindingEdit: TfBindingEdit
|
||||
Top = 98
|
||||
Width = 40
|
||||
Caption = 'Address'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object edtName: TEdit
|
||||
Left = 12
|
||||
Height = 23
|
||||
Top = 50
|
||||
Width = 356
|
||||
Width = 348
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 0
|
||||
Text = 'edtName'
|
||||
@@ -79,16 +84,17 @@ object fBindingEdit: TfBindingEdit
|
||||
Left = 12
|
||||
Height = 23
|
||||
Top = 114
|
||||
Width = 356
|
||||
Width = 348
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 1
|
||||
Text = 'edtAddress'
|
||||
end
|
||||
object edtStyle: TRadioGroup
|
||||
Left = 12
|
||||
Height = 92
|
||||
Height = 81
|
||||
Top = 165
|
||||
Width = 360
|
||||
Width = 352
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoFill = True
|
||||
Caption = ' Style '
|
||||
ChildSizing.LeftRightSpacing = 6
|
||||
@@ -99,6 +105,8 @@ object fBindingEdit: TfBindingEdit
|
||||
ChildSizing.ShrinkVertical = crsScaleChilds
|
||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||
ChildSizing.ControlsPerLine = 2
|
||||
ClientHeight = 63
|
||||
ClientWidth = 348
|
||||
Columns = 2
|
||||
Items.Strings = (
|
||||
'Document'
|
||||
|
@@ -1,37 +1,40 @@
|
||||
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
|
||||
|
||||
LazarusResources.Add('TfBindingEdit','FORMDATA',[
|
||||
'TPF0'#13'TfBindingEdit'#12'fBindingEdit'#4'Left'#3#247#2#6'Height'#3'b'#1#3
|
||||
+'Top'#2'Z'#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.'
|
||||
+'Page'#3'a'#1#13'ActiveControl'#7#7'edtName'#11'BorderStyle'#7#13'bsSizeTool'
|
||||
+'Win'#7'Caption'#6#12'fBindingEdit'#8'Position'#7#16'poMainFormCenter'#0#6'T'
|
||||
+'Panel'#6'Panel1'#6'Height'#2'2'#3'Top'#3'0'#1#5'Width'#3#144#1#5'Align'#7#8
|
||||
+'alBottom'#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#224#0#6'Height'
|
||||
+#2#25#3'Top'#2#10#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7
|
||||
+'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#0#0
|
||||
+#0#7'TButton'#7'Button2'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2
|
||||
+'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6
|
||||
+'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0
|
||||
+#12'TPageControl'#12'PageControl1'#6'Height'#3'0'#1#5'Width'#3#144#1#10'Acti'
|
||||
+'vePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2
|
||||
+#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#17'Interface Binding'#0#6'TLabel'
|
||||
+#6'Label1'#4'Left'#2#12#6'Height'#2#14#3'Top'#2#26#5'Width'#2#28#7'Caption'#6
|
||||
+#4'Name'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Le'
|
||||
+'ft'#2#12#6'Height'#2#14#3'Top'#2'b'#5'Width'#2'('#7'Caption'#6#7'Address'#5
|
||||
+'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#12#6
|
||||
+'Height'#2#23#3'Top'#2'2'#5'Width'#3'd'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
||||
+'akRight'#0#8'TabOrder'#2#0#4'Text'#6#7'edtName'#0#0#5'TEdit'#10'edtAddress'
|
||||
+#4'Left'#2#12#6'Height'#2#23#3'Top'#2'r'#5'Width'#3'd'#1#7'Anchors'#11#5'akT'
|
||||
+'op'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#1#4'Text'#6#10'edtAddress'#0#0#11
|
||||
+'TRadioGroup'#8'edtStyle'#4'Left'#2#12#6'Height'#2'\'#3'Top'#3#165#0#5'Width'
|
||||
+#3'h'#1#8'AutoFill'#9#7'Caption'#6#9' Style '#28'ChildSizing.LeftRightSpac'
|
||||
+'ing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizon'
|
||||
+'tal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'cr'
|
||||
+'sHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChild'
|
||||
+'s'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layou'
|
||||
+'t'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#2#7
|
||||
+'Columns'#2#2#13'Items.Strings'#1#6#8'Document'#6#3'RPC'#0#8'TabOrder'#2#2#0
|
||||
+#0#0#0#11'TActionList'#2'AL'#4'left'#2'U'#3'top'#2'd'#0#7'TAction'#5'actOK'#7
|
||||
+'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8
|
||||
+'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
|
||||
'TPF0'#13'TfBindingEdit'#12'fBindingEdit'#4'Left'#3#247#2#6'Height'#3'O'#1#3
|
||||
+'Top'#2'['#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.'
|
||||
+'Page'#3'N'#1#13'ActiveControl'#7#7'edtName'#11'BorderStyle'#7#13'bsSizeTool'
|
||||
+'Win'#7'Caption'#6#12'fBindingEdit'#12'ClientHeight'#3'O'#1#11'ClientWidth'#3
|
||||
+#144#1#8'Position'#7#16'poMainFormCenter'#10'LCLVersion'#6#6'0.9.25'#0#6'TPa'
|
||||
+'nel'#6'Panel1'#6'Height'#2'2'#3'Top'#3#29#1#5'Width'#3#144#1#5'Align'#7#8'a'
|
||||
+'lBottom'#12'ClientHeight'#2'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#0#0#7
|
||||
+'TButton'#7'Button1'#4'Left'#3#224#0#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'
|
||||
+#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.I'
|
||||
+'nnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Le'
|
||||
+'ft'#3'8'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7
|
||||
+'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Can'
|
||||
+'cel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#12'TPageControl'#12'PageCont'
|
||||
+'rol1'#6'Height'#3#29#1#5'Width'#3#144#1#10'ActivePage'#7#9'TabSheet1'#5'Ali'
|
||||
+'gn'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet'
|
||||
+'1'#7'Caption'#6#17'Interface Binding'#12'ClientHeight'#3#3#1#11'ClientWidth'
|
||||
+#3#136#1#0#6'TLabel'#6'Label1'#4'Left'#2#12#6'Height'#2#14#3'Top'#2#26#5'Wid'
|
||||
+'th'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'L'
|
||||
+'eft'#2#12#6'Height'#2#14#3'Top'#2'b'#5'Width'#2'('#7'Caption'#6#7'Address'
|
||||
+#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#12#6'Height'#2#23#3'Top'
|
||||
+#2'2'#5'Width'#3'\'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrd'
|
||||
+'er'#2#0#4'Text'#6#7'edtName'#0#0#5'TEdit'#10'edtAddress'#4'Left'#2#12#6'Hei'
|
||||
+'ght'#2#23#3'Top'#2'r'#5'Width'#3'\'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'ak'
|
||||
+'Right'#0#8'TabOrder'#2#1#4'Text'#6#10'edtAddress'#0#0#11'TRadioGroup'#8'edt'
|
||||
+'Style'#4'Left'#2#12#6'Height'#2'Q'#3'Top'#3#165#0#5'Width'#3'`'#1#7'Anchors'
|
||||
+#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'AutoFill'#9#7'Caption'#6#9
|
||||
+' Style '#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpa'
|
||||
+'cing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'
|
||||
+#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizi'
|
||||
+'ng.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7
|
||||
+#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBotto'
|
||||
+'m'#27'ChildSizing.ControlsPerLine'#2#2#12'ClientHeight'#2'?'#11'ClientWidth'
|
||||
+#3'\'#1#7'Columns'#2#2#13'Items.Strings'#1#6#8'Document'#6#3'RPC'#0#8'TabOrd'
|
||||
+'er'#2#2#0#0#0#0#11'TActionList'#2'AL'#4'left'#2'U'#3'top'#2'd'#0#7'TAction'
|
||||
+#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actO'
|
||||
+'KExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
|
||||
]);
|
||||
|
@@ -1,19 +1,24 @@
|
||||
object fArrayEdit: TfArrayEdit
|
||||
Left = 327
|
||||
Height = 361
|
||||
Top = 131
|
||||
Height = 375
|
||||
Top = 132
|
||||
Width = 392
|
||||
HorzScrollBar.Page = 391
|
||||
VertScrollBar.Page = 360
|
||||
VertScrollBar.Page = 374
|
||||
ActiveControl = Button1
|
||||
BorderStyle = bsSizeToolWin
|
||||
Caption = 'fArrayEdit'
|
||||
ClientHeight = 375
|
||||
ClientWidth = 392
|
||||
Position = poMainFormCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel1: TPanel
|
||||
Height = 50
|
||||
Top = 311
|
||||
Top = 325
|
||||
Width = 392
|
||||
Align = alBottom
|
||||
ClientHeight = 50
|
||||
ClientWidth = 392
|
||||
TabOrder = 0
|
||||
object Button1: TButton
|
||||
Left = 216
|
||||
@@ -39,7 +44,7 @@ object fArrayEdit: TfArrayEdit
|
||||
end
|
||||
end
|
||||
object PageControl1: TPageControl
|
||||
Height = 311
|
||||
Height = 325
|
||||
Width = 392
|
||||
ActivePage = TabSheet1
|
||||
Align = alClient
|
||||
@@ -47,46 +52,45 @@ object fArrayEdit: TfArrayEdit
|
||||
TabOrder = 1
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Array definition'
|
||||
ClientHeight = 299
|
||||
ClientWidth = 384
|
||||
object Label1: TLabel
|
||||
Left = 19
|
||||
Left = 20
|
||||
Height = 14
|
||||
Top = 21
|
||||
Width = 28
|
||||
Caption = 'Name'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 19
|
||||
Left = 20
|
||||
Height = 14
|
||||
Top = 102
|
||||
Width = 66
|
||||
Caption = 'Element Type'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 19
|
||||
Left = 20
|
||||
Height = 14
|
||||
Top = 170
|
||||
Width = 69
|
||||
Caption = 'Element Name'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object edtName: TEdit
|
||||
Left = 20
|
||||
Height = 23
|
||||
Top = 42
|
||||
Width = 345
|
||||
Width = 337
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 0
|
||||
end
|
||||
object edtElementType: TComboBox
|
||||
Left = 19
|
||||
Left = 20
|
||||
Height = 21
|
||||
Top = 122
|
||||
Width = 345
|
||||
Width = 337
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
|
||||
ItemHeight = 13
|
||||
@@ -95,22 +99,30 @@ object fArrayEdit: TfArrayEdit
|
||||
TabOrder = 1
|
||||
end
|
||||
object edtEmbedded: TCheckBox
|
||||
Left = 19
|
||||
Height = 13
|
||||
Top = 242
|
||||
Width = 71
|
||||
Caption = 'Embedded'
|
||||
TabOrder = 2
|
||||
Left = 20
|
||||
Height = 19
|
||||
Top = 226
|
||||
Width = 337
|
||||
Caption = 'Embedded ( items are expanded directly in the enclosing element )'
|
||||
TabOrder = 3
|
||||
end
|
||||
object edtElementName: TEdit
|
||||
Left = 19
|
||||
Left = 20
|
||||
Height = 23
|
||||
Top = 186
|
||||
Width = 345
|
||||
Width = 337
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 3
|
||||
TabOrder = 2
|
||||
Text = 'Item'
|
||||
end
|
||||
object edtCollection: TCheckBox
|
||||
Left = 20
|
||||
Height = 19
|
||||
Top = 258
|
||||
Width = 352
|
||||
Caption = 'Collection ( Pascal type will derive from TObjectCollectionRemotable )'
|
||||
TabOrder = 4
|
||||
end
|
||||
end
|
||||
end
|
||||
object AL: TActionList
|
||||
|
@@ -1,36 +1,41 @@
|
||||
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
|
||||
|
||||
LazarusResources.Add('TfArrayEdit','FORMDATA',[
|
||||
'TPF0'#11'TfArrayEdit'#10'fArrayEdit'#4'Left'#3'G'#1#6'Height'#3'i'#1#3'Top'#3
|
||||
+#131#0#5'Width'#3#136#1#18'HorzScrollBar.Page'#3#135#1#18'VertScrollBar.Page'
|
||||
+#3'h'#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7
|
||||
+'Caption'#6#10'fArrayEdit'#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6
|
||||
+'Panel1'#6'Height'#2'2'#3'Top'#3'7'#1#5'Width'#3#136#1#5'Align'#7#8'alBottom'
|
||||
+#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#216#0#6'Height'#2#25#3'To'
|
||||
+'p'#2#9#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'
|
||||
+#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#0#0#0#7'TButton'#7'Button'
|
||||
+'2'#4'Left'#3'0'#1#6'Height'#2#25#3'Top'#2#9#5'Width'#2'K'#7'Anchors'#11#5'a'
|
||||
+'kTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'
|
||||
+#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#12'TPageControl'#12'P'
|
||||
+'ageControl1'#6'Height'#3'7'#1#5'Width'#3#136#1#10'ActivePage'#7#9'TabSheet1'
|
||||
+#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'Tab'
|
||||
+'Sheet1'#7'Caption'#6#16'Array definition'#0#6'TLabel'#6'Label1'#4'Left'#2#19
|
||||
+#6'Height'#2#14#3'Top'#2#21#5'Width'#2#28#7'Caption'#6#4'Name'#5'Color'#7#6
|
||||
+'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#19#6'Height'#2
|
||||
+#14#3'Top'#2'f'#5'Width'#2'B'#7'Caption'#6#12'Element Type'#5'Color'#7#6'clN'
|
||||
+'one'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#19#6'Height'#2#14#3
|
||||
+'Top'#3#170#0#5'Width'#2'E'#7'Caption'#6#12'Element Name'#5'Color'#7#6'clNon'
|
||||
+'e'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#20#6'Height'#2#23#3
|
||||
+'Top'#2'*'#5'Width'#3'Y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'T'
|
||||
+'abOrder'#2#0#0#0#9'TComboBox'#14'edtElementType'#4'Left'#2#19#6'Height'#2#21
|
||||
+#3'Top'#2'z'#5'Width'#3'Y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#16
|
||||
+'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0
|
||||
+#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrd'
|
||||
+'er'#2#1#0#0#9'TCheckBox'#11'edtEmbedded'#4'Left'#2#19#6'Height'#2#13#3'Top'
|
||||
+#3#242#0#5'Width'#2'G'#7'Caption'#6#8'Embedded'#8'TabOrder'#2#2#0#0#5'TEdit'
|
||||
+#14'edtElementName'#4'Left'#2#19#6'Height'#2#23#3'Top'#3#186#0#5'Width'#3'Y'
|
||||
+#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#3#4'Text'#6#4
|
||||
+'Item'#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#215#0#3'top'#3#185#0#0#7'TAct'
|
||||
+'ion'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12
|
||||
+'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
|
||||
'TPF0'#11'TfArrayEdit'#10'fArrayEdit'#4'Left'#3'G'#1#6'Height'#3'w'#1#3'Top'#3
|
||||
+#132#0#5'Width'#3#136#1#18'HorzScrollBar.Page'#3#135#1#18'VertScrollBar.Page'
|
||||
+#3'v'#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7
|
||||
+'Caption'#6#10'fArrayEdit'#12'ClientHeight'#3'w'#1#11'ClientWidth'#3#136#1#8
|
||||
+'Position'#7#16'poMainFormCenter'#10'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#6'P'
|
||||
+'anel1'#6'Height'#2'2'#3'Top'#3'E'#1#5'Width'#3#136#1#5'Align'#7#8'alBottom'
|
||||
+#12'ClientHeight'#2'2'#11'ClientWidth'#3#136#1#8'TabOrder'#2#0#0#7'TButton'#7
|
||||
+'Button1'#4'Left'#3#216#0#6'Height'#2#25#3'Top'#2#9#5'Width'#2'K'#6'Action'#7
|
||||
+#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2
|
||||
+#4#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'0'#1#6'Height'#2#25#3
|
||||
+'Top'#2#9#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing'
|
||||
+'.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8
|
||||
+'TabOrder'#2#1#0#0#0#12'TPageControl'#12'PageControl1'#6'Height'#3'E'#1#5'Wi'
|
||||
+'dth'#3#136#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabInde'
|
||||
+'x'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#16'Array de'
|
||||
+'finition'#12'ClientHeight'#3'+'#1#11'ClientWidth'#3#128#1#0#6'TLabel'#6'Lab'
|
||||
+'el1'#4'Left'#2#20#6'Height'#2#14#3'Top'#2#21#5'Width'#2#28#7'Caption'#6#4'N'
|
||||
+'ame'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#20#6'Height'#2#14#3
|
||||
+'Top'#2'f'#5'Width'#2'B'#7'Caption'#6#12'Element Type'#11'ParentColor'#8#0#0
|
||||
+#6'TLabel'#6'Label3'#4'Left'#2#20#6'Height'#2#14#3'Top'#3#170#0#5'Width'#2'E'
|
||||
+#7'Caption'#6#12'Element Name'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'L'
|
||||
+'eft'#2#20#6'Height'#2#23#3'Top'#2'*'#5'Width'#3'Q'#1#7'Anchors'#11#5'akTop'
|
||||
+#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TComboBox'#14'edtElementType'#4
|
||||
+'Left'#2#20#6'Height'#2#21#3'Top'#2'z'#5'Width'#3'Q'#1#7'Anchors'#11#5'akTop'
|
||||
+#6'akLeft'#7'akRight'#0#16'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20
|
||||
+'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14
|
||||
+'csDropDownList'#8'TabOrder'#2#1#0#0#9'TCheckBox'#11'edtEmbedded'#4'Left'#2
|
||||
+#20#6'Height'#2#19#3'Top'#3#226#0#5'Width'#3'Q'#1#7'Caption'#6'AEmbedded ( i'
|
||||
+'tems are expanded directly in the enclosing element )'#8'TabOrder'#2#3#0#0#5
|
||||
+'TEdit'#14'edtElementName'#4'Left'#2#20#6'Height'#2#23#3'Top'#3#186#0#5'Widt'
|
||||
+'h'#3'Q'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#2#4'T'
|
||||
+'ext'#6#4'Item'#0#0#9'TCheckBox'#13'edtCollection'#4'Left'#2#20#6'Height'#2
|
||||
+#19#3'Top'#3#2#1#5'Width'#3'`'#1#7'Caption'#6'FCollection ( Pascal type will'
|
||||
+' derive from TObjectCollectionRemotable )'#8'TabOrder'#2#4#0#0#0#0#11'TActi'
|
||||
+'onList'#2'AL'#4'left'#3#215#0#3'top'#3#185#0#0#7'TAction'#5'actOK'#7'Captio'
|
||||
+'n'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpd'
|
||||
+'ate'#7#11'actOKUpdate'#0#0#0#0
|
||||
]);
|
||||
|
@@ -18,6 +18,7 @@ type
|
||||
AL : TActionList;
|
||||
Button1 : TButton;
|
||||
Button2 : TButton;
|
||||
edtCollection : TCheckBox;
|
||||
edtEmbedded : TCheckBox;
|
||||
edtElementName : TEdit;
|
||||
edtElementType : TComboBox;
|
||||
@@ -67,7 +68,21 @@ begin
|
||||
end;
|
||||
|
||||
procedure TfArrayEdit.actOKExecute(Sender : TObject);
|
||||
var
|
||||
eltType : TPasType;
|
||||
ok : Boolean;
|
||||
begin
|
||||
ok := True;
|
||||
if edtCollection.Checked then begin
|
||||
eltType := edtElementType.Items.Objects[edtElementType.ItemIndex] as TPasType;
|
||||
if eltType.InheritsFrom(TPasUnresolvedTypeRef) then
|
||||
eltType := FSymbolTable.FindElement(FSymbolTable.GetExternalName(eltType)) as TPasType;
|
||||
if eltType.InheritsFrom(TPasNativeSimpleType) or eltType.InheritsFrom(TPasNativeSimpleContentClassType) then begin
|
||||
ok := False;
|
||||
ShowMessage('Collections for simple types are not supported.');
|
||||
end;
|
||||
end;
|
||||
if ok then
|
||||
ModalResult := mrOK;
|
||||
end;
|
||||
|
||||
@@ -87,6 +102,7 @@ begin
|
||||
edtElementName.Text := FSymbolTable.GetArrayItemExternalName(FObject);
|
||||
edtElementType.ItemIndex := edtElementType.Items.IndexOf(FSymbolTable.GetExternalName(FObject.ElType));
|
||||
edtEmbedded.Checked := ( FSymbolTable.GetArrayStyle(FObject) = asEmbeded );
|
||||
edtCollection.Checked:= FSymbolTable.IsCollection(FObject);
|
||||
end else begin
|
||||
Self.Caption := 'NewArray';
|
||||
end;
|
||||
@@ -129,6 +145,8 @@ begin
|
||||
FSymbolTable.SetArrayStyle(locObj,arrStyle);
|
||||
FSymbolTable.SetArrayItemExternalName(locObj,eltExtName);
|
||||
end;
|
||||
if ( edtCollection.Checked <> FSymbolTable.IsCollection(FObject) ) then
|
||||
FSymbolTable.SetCollectionFlag(FObject,edtCollection.Checked);
|
||||
FSymbolTable.RegisterExternalAlias(locObj,typExtName);
|
||||
end;
|
||||
|
||||
|
@@ -11,6 +11,7 @@ object fClassEdit: TfClassEdit
|
||||
ClientHeight = 547
|
||||
ClientWidth = 518
|
||||
Position = poDesktopCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel1: TPanel
|
||||
Height = 50
|
||||
Top = 497
|
||||
|
@@ -5,54 +5,55 @@ LazarusResources.Add('TfClassEdit','FORMDATA',[
|
||||
+'*'#5'Width'#3#6#2#18'HorzScrollBar.Page'#3#5#2#18'VertScrollBar.Page'#3'"'#2
|
||||
+#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7'Captio'
|
||||
+'n'#6#10'fClassEdit'#12'ClientHeight'#3'#'#2#11'ClientWidth'#3#6#2#8'Positio'
|
||||
+'n'#7#15'poDesktopCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'#3#241#1
|
||||
+#5'Width'#3#6#2#5'Align'#7#8'alBottom'#12'ClientHeight'#2'2'#11'ClientWidth'
|
||||
+#3#6#2#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#174#1#6'Height'#2#25
|
||||
+#3'Top'#2#10#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpac'
|
||||
+'ing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2
|
||||
+#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'T'#1#6'Height'#2#25#3'T'
|
||||
+'op'#2#10#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRigh'
|
||||
+'t'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#1#0#0#0#12
|
||||
+'TPageControl'#2'PC'#6'Height'#3#241#1#5'Width'#3#6#2#10'ActivePage'#7#9'Tab'
|
||||
+'Sheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabShee'
|
||||
+'t'#9'TabSheet1'#7'Caption'#6#15'Compound Object'#12'ClientHeight'#3#215#1#11
|
||||
+'ClientWidth'#3#254#1#0#6'TLabel'#6'Label1'#4'Left'#2#4#6'Height'#2#14#3'Top'
|
||||
+#2#18#5'Width'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#6'TLabel'#6'L'
|
||||
+'abel2'#4'Left'#2#4#6'Height'#2#14#3'Top'#2';'#5'Width'#2'C'#7'Caption'#6#14
|
||||
+'Inheritts from'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2'\'#6'He'
|
||||
+'ight'#2#23#3'Top'#2#18#5'Width'#3#150#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
||||
+'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#4#6'Heig'
|
||||
+'ht'#3'8'#1#3'Top'#2'b'#5'Width'#3#239#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
||||
+'akRight'#8'akBottom'#0#7'Caption'#6#14' Properties '#12'ClientHeight'#3'&'
|
||||
+#1#11'ClientWidth'#3#235#1#8'TabOrder'#2#1#0#9'TListView'#7'edtProp'#6'Heigh'
|
||||
+'t'#3'&'#1#5'Width'#3#235#1#5'Align'#7#8'alClient'#11'BorderWidth'#2#2#7'Col'
|
||||
+'umns'#14#1#8'AutoSize'#9#7'Caption'#6#4'Name'#5'Width'#3#210#0#0#1#7'Captio'
|
||||
+'n'#6#4'Type'#5'Width'#3#200#0#0#1#7'Caption'#6#9'Attribute'#5'Width'#2'<'#0
|
||||
+#0#9'PopupMenu'#7#10'PopupMenu1'#9'RowSelect'#9#8'TabOrder'#2#0#9'ViewStyle'
|
||||
+#7#8'vsReport'#10'OnDblClick'#7#15'edtPropDblClick'#0#0#0#7'TButton'#7'Butto'
|
||||
+'n3'#4'Left'#2#4#6'Height'#2#25#3'Top'#3#165#1#5'Width'#2'd'#6'Action'#7#10
|
||||
+'actPropAdd'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBor'
|
||||
+'der'#2#4#8'TabOrder'#2#2#0#0#7'TButton'#7'Button4'#4'Left'#2't'#6'Height'#2
|
||||
+#25#3'Top'#3#165#1#5'Width'#2'd'#6'Action'#7#11'actPropEdit'#7'Anchors'#11#6
|
||||
+'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#3#0#0
|
||||
+#7'TButton'#7'Button5'#4'Left'#3#228#0#6'Height'#2#25#3'Top'#3#165#1#5'Width'
|
||||
+#2'd'#6'Action'#7#13'actPropDelete'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25
|
||||
+'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#4#0#0#9'TComboBox'#9'edtParent'
|
||||
+#4'Left'#2'\'#6'Height'#2#21#3'Top'#2':'#5'Width'#3#150#1#7'Anchors'#11#5'ak'
|
||||
+'Top'#6'akLeft'#7'akRight'#0#16'AutoCompleteText'#11#22'cbactEndOfLineComple'
|
||||
+'te'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'
|
||||
+#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#0#0#11'TActionList'#11'ActionList1'
|
||||
+#4'left'#3#232#0#3'top'#3#200#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18
|
||||
+'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actO'
|
||||
+'KUpdate'#0#0#7'TAction'#10'actPropAdd'#7'Caption'#6#12'New Property'#18'Dis'
|
||||
+'ableIfNoHandler'#9#9'OnExecute'#7#17'actPropAddExecute'#0#0#7'TAction'#11'a'
|
||||
+'ctPropEdit'#7'Caption'#6#13'Edit Property'#18'DisableIfNoHandler'#9#9'OnExe'
|
||||
+'cute'#7#18'actPropEditExecute'#8'OnUpdate'#7#17'actPropEditUpdate'#0#0#7'TA'
|
||||
+'ction'#13'actPropDelete'#7'Caption'#6#15'Delete Property'#18'DisableIfNoHan'
|
||||
+'dler'#9#9'OnExecute'#7#20'actPropDeleteExecute'#8'OnUpdate'#7#17'actPropEdi'
|
||||
+'tUpdate'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#2'i'#3'top'#3#186#0#0#9
|
||||
+'TMenuItem'#9'MenuItem1'#6'Action'#7#10'actPropAdd'#7'OnClick'#7#17'actPropA'
|
||||
+'ddExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'Action'#7#11'actPropEdit'#7'OnCl'
|
||||
+'ick'#7#18'actPropEditExecute'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#13
|
||||
+'actPropDelete'#7'OnClick'#7#20'actPropDeleteExecute'#0#0#0#0
|
||||
+'n'#7#15'poDesktopCenter'#10'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#6'Panel1'#6
|
||||
+'Height'#2'2'#3'Top'#3#241#1#5'Width'#3#6#2#5'Align'#7#8'alBottom'#12'Client'
|
||||
+'Height'#2'2'#11'ClientWidth'#3#6#2#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4
|
||||
+'Left'#3#174#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#7'Anchors'#11#5'akTo'
|
||||
+'p'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6
|
||||
+'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Lef'
|
||||
+'t'#3'T'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#6'Action'#7#5'actOK'#7'A'
|
||||
+'nchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Defaul'
|
||||
+'t'#9#8'TabOrder'#2#1#0#0#0#12'TPageControl'#2'PC'#6'Height'#3#241#1#5'Width'
|
||||
+#3#6#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8
|
||||
+'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#15'Compound Object'
|
||||
+#12'ClientHeight'#3#215#1#11'ClientWidth'#3#254#1#0#6'TLabel'#6'Label1'#4'Le'
|
||||
+'ft'#2#4#6'Height'#2#14#3'Top'#2#18#5'Width'#2#28#7'Caption'#6#4'Name'#11'Pa'
|
||||
+'rentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#4#6'Height'#2#14#3'Top'#2';'
|
||||
+#5'Width'#2'C'#7'Caption'#6#14'Inheritts from'#11'ParentColor'#8#0#0#5'TEdit'
|
||||
+#7'edtName'#4'Left'#2'\'#6'Height'#2#23#3'Top'#2#18#5'Width'#3#150#1#7'Ancho'
|
||||
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'G'
|
||||
+'roupBox1'#4'Left'#2#4#6'Height'#3'8'#1#3'Top'#2'b'#5'Width'#3#239#1#7'Ancho'
|
||||
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#14' Proper'
|
||||
+'ties '#12'ClientHeight'#3'&'#1#11'ClientWidth'#3#235#1#8'TabOrder'#2#1#0#9
|
||||
+'TListView'#7'edtProp'#6'Height'#3'&'#1#5'Width'#3#235#1#5'Align'#7#8'alClie'
|
||||
+'nt'#11'BorderWidth'#2#2#7'Columns'#14#1#8'AutoSize'#9#7'Caption'#6#4'Name'#5
|
||||
+'Width'#3#210#0#0#1#7'Caption'#6#4'Type'#5'Width'#3#200#0#0#1#7'Caption'#6#9
|
||||
+'Attribute'#5'Width'#2'<'#0#0#9'PopupMenu'#7#10'PopupMenu1'#9'RowSelect'#9#8
|
||||
+'TabOrder'#2#0#9'ViewStyle'#7#8'vsReport'#10'OnDblClick'#7#15'edtPropDblClic'
|
||||
+'k'#0#0#0#7'TButton'#7'Button3'#4'Left'#2#4#6'Height'#2#25#3'Top'#3#165#1#5
|
||||
+'Width'#2'd'#6'Action'#7#10'actPropAdd'#7'Anchors'#11#6'akLeft'#8'akBottom'#0
|
||||
+#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#7'TButton'#7'Button4'
|
||||
+#4'Left'#2't'#6'Height'#2#25#3'Top'#3#165#1#5'Width'#2'd'#6'Action'#7#11'act'
|
||||
+'PropEdit'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorde'
|
||||
+'r'#2#4#8'TabOrder'#2#3#0#0#7'TButton'#7'Button5'#4'Left'#3#228#0#6'Height'#2
|
||||
+#25#3'Top'#3#165#1#5'Width'#2'd'#6'Action'#7#13'actPropDelete'#7'Anchors'#11
|
||||
+#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#4#0
|
||||
+#0#9'TComboBox'#9'edtParent'#4'Left'#2'\'#6'Height'#2#21#3'Top'#2':'#5'Width'
|
||||
+#3#150#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#16'AutoCompleteText'
|
||||
+#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13
|
||||
+#9'MaxLength'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#0#0#11'T'
|
||||
+'ActionList'#11'ActionList1'#4'left'#3#232#0#3'top'#3#200#0#0#7'TAction'#5'a'
|
||||
+'ctOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKEx'
|
||||
+'ecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'TAction'#10'actPropAdd'#7'Captio'
|
||||
+'n'#6#12'New Property'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actPropAdd'
|
||||
+'Execute'#0#0#7'TAction'#11'actPropEdit'#7'Caption'#6#13'Edit Property'#18'D'
|
||||
+'isableIfNoHandler'#9#9'OnExecute'#7#18'actPropEditExecute'#8'OnUpdate'#7#17
|
||||
+'actPropEditUpdate'#0#0#7'TAction'#13'actPropDelete'#7'Caption'#6#15'Delete '
|
||||
+'Property'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actPropDeleteExecute'#8
|
||||
+'OnUpdate'#7#17'actPropEditUpdate'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'lef'
|
||||
+'t'#2'i'#3'top'#3#186#0#0#9'TMenuItem'#9'MenuItem1'#6'Action'#7#10'actPropAd'
|
||||
+'d'#7'OnClick'#7#17'actPropAddExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'Actio'
|
||||
+'n'#7#11'actPropEdit'#7'OnClick'#7#18'actPropEditExecute'#0#0#9'TMenuItem'#9
|
||||
+'MenuItem3'#6'Action'#7#13'actPropDelete'#7'OnClick'#7#20'actPropDeleteExecu'
|
||||
+'te'#0#0#0#0
|
||||
]);
|
||||
|
@@ -298,7 +298,8 @@ begin
|
||||
trueParent := TPasNativeSimpleType(trueParent).ExtendableType;
|
||||
end;
|
||||
end else begin
|
||||
trueParent := nil;
|
||||
//trueParent := nil;
|
||||
trueParent := FSymbolTable.FindElementNS('TBaseComplexRemotable',sXSD_NS) as TPasType;
|
||||
end;
|
||||
if ( trueParent <> FOldAncestor ) then begin
|
||||
if ( FOldAncestor <> nil ) then
|
||||
|
@@ -1,7 +1,7 @@
|
||||
object fInterfaceEdit: TfInterfaceEdit
|
||||
Left = 361
|
||||
Height = 564
|
||||
Top = 373
|
||||
Top = 293
|
||||
Width = 531
|
||||
HorzScrollBar.Page = 530
|
||||
VertScrollBar.Page = 563
|
||||
@@ -12,6 +12,7 @@ object fInterfaceEdit: TfInterfaceEdit
|
||||
ClientWidth = 531
|
||||
OnCreate = FormCreate
|
||||
Position = poDesktopCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel1: TPanel
|
||||
Height = 50
|
||||
Top = 514
|
||||
|
@@ -2,56 +2,56 @@
|
||||
|
||||
LazarusResources.Add('TfInterfaceEdit','FORMDATA',[
|
||||
'TPF0'#15'TfInterfaceEdit'#14'fInterfaceEdit'#4'Left'#3'i'#1#6'Height'#3'4'#2
|
||||
+#3'Top'#3'u'#1#5'Width'#3#19#2#18'HorzScrollBar.Page'#3#18#2#18'VertScrollBa'
|
||||
+#3'Top'#3'%'#1#5'Width'#3#19#2#18'HorzScrollBar.Page'#3#18#2#18'VertScrollBa'
|
||||
+'r.Page'#3'3'#2#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeTo'
|
||||
+'olWin'#7'Caption'#6#14'fInterfaceEdit'#12'ClientHeight'#3'4'#2#11'ClientWid'
|
||||
+'th'#3#19#2#8'OnCreate'#7#10'FormCreate'#8'Position'#7#15'poDesktopCenter'#0
|
||||
+#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'#3#2#2#5'Width'#3#19#2#5'Align'#7#8
|
||||
+'alBottom'#12'ClientHeight'#2'2'#11'ClientWidth'#3#19#2#8'TabOrder'#2#0#0#7
|
||||
+'TButton'#7'Button1'#4'Left'#3#180#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'
|
||||
+#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Can'
|
||||
+'cel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7'TBu'
|
||||
+'tton'#7'Button2'#4'Left'#3'Z'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#6
|
||||
+'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.Inn'
|
||||
+'erBorder'#2#4#7'Default'#9#8'TabOrder'#2#1#0#0#0#12'TPageControl'#2'PC'#6'H'
|
||||
+'eight'#3#2#2#5'Width'#3#19#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alC'
|
||||
+'lient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Captio'
|
||||
+'n'#6#20'Interface definition'#12'ClientHeight'#3#232#1#11'ClientWidth'#3#11
|
||||
+#2#0#6'TLabel'#6'Label1'#4'Left'#2#20#6'Height'#2#14#3'Top'#2#26#5'Width'#2
|
||||
+#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2
|
||||
+'<'#6'Height'#2#23#3'Top'#2#26#5'Width'#3#187#1#7'Anchors'#11#5'akTop'#6'akL'
|
||||
+'eft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#20
|
||||
+#6'Height'#3'p'#1#3'Top'#2'J'#5'Width'#3#228#1#7'Anchors'#11#5'akTop'#6'akLe'
|
||||
+'ft'#7'akRight'#8'akBottom'#0#7'Caption'#6#11' Methods '#12'ClientHeight'#3
|
||||
+'^'#1#11'ClientWidth'#3#224#1#8'TabOrder'#2#1#0#9'TTreeView'#10'trvMethods'#6
|
||||
+'Height'#3'^'#1#5'Width'#3#224#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'
|
||||
+#2#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'#2#0#0#0#0#7'TButton'#7'Butto'
|
||||
+'n3'#4'Left'#2#20#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'c'#6'Action'#7#12
|
||||
+'actNewMethod'#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#7'TButt'
|
||||
+'on'#7'Button4'#4'Left'#3#132#0#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'k'#6
|
||||
+'Action'#7#18'actUpdateOperation'#25'BorderSpacing.InnerBorder'#2#4#8'TabOrd'
|
||||
+'er'#2#3#0#0#7'TButton'#7'Button5'#4'Left'#3#252#0#6'Height'#2#25#3'Top'#3
|
||||
+#194#1#5'Width'#2'h'#6'Action'#7#18'actDeleteOperation'#25'BorderSpacing.Inn'
|
||||
+'erBorder'#2#4#8'TabOrder'#2#4#0#0#7'TButton'#7'Button6'#4'Left'#3#140#1#6'H'
|
||||
+'eight'#2#25#3'Top'#3#194#1#5'Width'#2'k'#6'Action'#7#14'actBindingEdit'#7'A'
|
||||
+'nchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrd'
|
||||
+'er'#2#5#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#130#0#3'top'#3#200#0#0#7'TA'
|
||||
+'ction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7
|
||||
+#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'TAction'#12'actNewMeth'
|
||||
+'od'#7'Caption'#6#13'New operation'#18'DisableIfNoHandler'#9#9'OnExecute'#7
|
||||
+#19'actNewMethodExecute'#0#0#7'TAction'#18'actUpdateOperation'#7'Caption'#6
|
||||
+#14'Edit Operation'#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actUpdateOper'
|
||||
+'ationExecute'#8'OnUpdate'#7#24'actUpdateOperationUpdate'#0#0#7'TAction'#18
|
||||
+'actDeleteOperation'#7'Caption'#6#16'Delete Operation'#18'DisableIfNoHandler'
|
||||
+#9#9'OnExecute'#7#25'actDeleteOperationExecute'#8'OnUpdate'#7#24'actUpdateOp'
|
||||
+'erationUpdate'#0#0#7'TAction'#14'actBindingEdit'#7'Caption'#6#12'Edit Bindi'
|
||||
+'ng'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actBindingEditExecute'#8'OnU'
|
||||
+'pdate'#7#20'actBindingEditUpdate'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'lef'
|
||||
+'t'#2'T'#3'top'#3#233#0#0#9'TMenuItem'#9'MenuItem1'#6'Action'#7#12'actNewMet'
|
||||
+'hod'#7'OnClick'#7#19'actNewMethodExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'A'
|
||||
+'ction'#7#18'actUpdateOperation'#7'OnClick'#7#25'actUpdateOperationExecute'#0
|
||||
+#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#18'actDeleteOperation'#7'OnClick'#7
|
||||
+#25'actDeleteOperationExecute'#0#0#9'TMenuItem'#9'MenuItem4'#7'Caption'#6#1
|
||||
+'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#14'actBindingEdit'#7'OnClick'#7
|
||||
+#21'actBindingEditExecute'#0#0#0#0
|
||||
+'th'#3#19#2#8'OnCreate'#7#10'FormCreate'#8'Position'#7#15'poDesktopCenter'#10
|
||||
+'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'#3#2#2#5
|
||||
+'Width'#3#19#2#5'Align'#7#8'alBottom'#12'ClientHeight'#2'2'#11'ClientWidth'#3
|
||||
+#19#2#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#180#1#6'Height'#2#25
|
||||
+#3'Top'#2#10#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpac'
|
||||
+'ing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2
|
||||
+#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'Z'#1#6'Height'#2#25#3'T'
|
||||
+'op'#2#10#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRigh'
|
||||
+'t'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#1#0#0#0#12
|
||||
+'TPageControl'#2'PC'#6'Height'#3#2#2#5'Width'#3#19#2#10'ActivePage'#7#9'TabS'
|
||||
+'heet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'
|
||||
+#9'TabSheet1'#7'Caption'#6#20'Interface definition'#12'ClientHeight'#3#232#1
|
||||
+#11'ClientWidth'#3#11#2#0#6'TLabel'#6'Label1'#4'Left'#2#20#6'Height'#2#14#3
|
||||
+'Top'#2#26#5'Width'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#5'TEdit'
|
||||
+#7'edtName'#4'Left'#2'<'#6'Height'#2#23#3'Top'#2#26#5'Width'#3#187#1#7'Ancho'
|
||||
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'G'
|
||||
+'roupBox1'#4'Left'#2#20#6'Height'#3'p'#1#3'Top'#2'J'#5'Width'#3#228#1#7'Anch'
|
||||
+'ors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#11' Metho'
|
||||
+'ds '#12'ClientHeight'#3'^'#1#11'ClientWidth'#3#224#1#8'TabOrder'#2#1#0#9'T'
|
||||
+'TreeView'#10'trvMethods'#6'Height'#3'^'#1#5'Width'#3#224#1#5'Align'#7#8'alC'
|
||||
+'lient'#17'DefaultItemHeight'#2#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'
|
||||
+#2#0#0#0#0#7'TButton'#7'Button3'#4'Left'#2#20#6'Height'#2#25#3'Top'#3#194#1#5
|
||||
+'Width'#2'c'#6'Action'#7#12'actNewMethod'#25'BorderSpacing.InnerBorder'#2#4#8
|
||||
+'TabOrder'#2#2#0#0#7'TButton'#7'Button4'#4'Left'#3#132#0#6'Height'#2#25#3'To'
|
||||
+'p'#3#194#1#5'Width'#2'k'#6'Action'#7#18'actUpdateOperation'#25'BorderSpacin'
|
||||
+'g.InnerBorder'#2#4#8'TabOrder'#2#3#0#0#7'TButton'#7'Button5'#4'Left'#3#252#0
|
||||
+#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'h'#6'Action'#7#18'actDeleteOperati'
|
||||
+'on'#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#4#0#0#7'TButton'#7'Butt'
|
||||
+'on6'#4'Left'#3#140#1#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'k'#6'Action'#7
|
||||
+#14'actBindingEdit'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.Inn'
|
||||
+'erBorder'#2#4#8'TabOrder'#2#5#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#130#0
|
||||
+#3'top'#3#200#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandl'
|
||||
+'er'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'T'
|
||||
+'Action'#12'actNewMethod'#7'Caption'#6#13'New operation'#18'DisableIfNoHandl'
|
||||
+'er'#9#9'OnExecute'#7#19'actNewMethodExecute'#0#0#7'TAction'#18'actUpdateOpe'
|
||||
+'ration'#7'Caption'#6#14'Edit Operation'#18'DisableIfNoHandler'#9#9'OnExecut'
|
||||
+'e'#7#25'actUpdateOperationExecute'#8'OnUpdate'#7#24'actUpdateOperationUpdat'
|
||||
+'e'#0#0#7'TAction'#18'actDeleteOperation'#7'Caption'#6#16'Delete Operation'
|
||||
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actDeleteOperationExecute'#8'OnU'
|
||||
+'pdate'#7#24'actUpdateOperationUpdate'#0#0#7'TAction'#14'actBindingEdit'#7'C'
|
||||
+'aption'#6#12'Edit Binding'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actBi'
|
||||
+'ndingEditExecute'#8'OnUpdate'#7#20'actBindingEditUpdate'#0#0#0#10'TPopupMen'
|
||||
+'u'#10'PopupMenu1'#4'left'#2'T'#3'top'#3#233#0#0#9'TMenuItem'#9'MenuItem1'#6
|
||||
+'Action'#7#12'actNewMethod'#7'OnClick'#7#19'actNewMethodExecute'#0#0#9'TMenu'
|
||||
+'Item'#9'MenuItem2'#6'Action'#7#18'actUpdateOperation'#7'OnClick'#7#25'actUp'
|
||||
+'dateOperationExecute'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#18'actDelet'
|
||||
+'eOperation'#7'OnClick'#7#25'actDeleteOperationExecute'#0#0#9'TMenuItem'#9'M'
|
||||
+'enuItem4'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#14'ac'
|
||||
+'tBindingEdit'#7'OnClick'#7#21'actBindingEditExecute'#0#0#0#0
|
||||
]);
|
||||
|
@@ -1,19 +1,24 @@
|
||||
object fModuleEdit: TfModuleEdit
|
||||
Left = 750
|
||||
Height = 300
|
||||
Top = 92
|
||||
Top = 93
|
||||
Width = 400
|
||||
HorzScrollBar.Page = 399
|
||||
VertScrollBar.Page = 299
|
||||
ActiveControl = Button1
|
||||
BorderStyle = bsSizeToolWin
|
||||
Caption = 'fModuleEdit'
|
||||
Caption = 'Module properties'
|
||||
ClientHeight = 300
|
||||
ClientWidth = 400
|
||||
Position = poMainFormCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object Panel1: TPanel
|
||||
Height = 50
|
||||
Top = 250
|
||||
Width = 400
|
||||
Align = alBottom
|
||||
ClientHeight = 50
|
||||
ClientWidth = 400
|
||||
TabOrder = 0
|
||||
object Button1: TButton
|
||||
Left = 224
|
||||
@@ -46,13 +51,14 @@ object fModuleEdit: TfModuleEdit
|
||||
TabOrder = 1
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Module'
|
||||
ClientHeight = 224
|
||||
ClientWidth = 392
|
||||
object Label1: TLabel
|
||||
Left = 20
|
||||
Height = 14
|
||||
Top = 39
|
||||
Width = 28
|
||||
Caption = 'Name'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
@@ -61,14 +67,13 @@ object fModuleEdit: TfModuleEdit
|
||||
Top = 127
|
||||
Width = 56
|
||||
Caption = 'Namespace'
|
||||
Color = clNone
|
||||
ParentColor = False
|
||||
end
|
||||
object edtName: TEdit
|
||||
Left = 20
|
||||
Height = 23
|
||||
Top = 55
|
||||
Width = 352
|
||||
Width = 344
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 0
|
||||
Text = 'edtName'
|
||||
@@ -77,7 +82,7 @@ object fModuleEdit: TfModuleEdit
|
||||
Left = 20
|
||||
Height = 23
|
||||
Top = 143
|
||||
Width = 352
|
||||
Width = 344
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
TabOrder = 1
|
||||
Text = 'edtNamespace'
|
||||
|
@@ -2,27 +2,29 @@
|
||||
|
||||
LazarusResources.Add('TfModuleEdit','FORMDATA',[
|
||||
'TPF0'#12'TfModuleEdit'#11'fModuleEdit'#4'Left'#3#238#2#6'Height'#3','#1#3'To'
|
||||
+'p'#2'\'#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Pa'
|
||||
+'p'#2']'#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Pa'
|
||||
+'ge'#3'+'#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWi'
|
||||
+'n'#7'Caption'#6#11'fModuleEdit'#8'Position'#7#16'poMainFormCenter'#0#6'TPan'
|
||||
+'el'#6'Panel1'#6'Height'#2'2'#3'Top'#3#250#0#5'Width'#3#144#1#5'Align'#7#8'a'
|
||||
+'lBottom'#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#224#0#6'Height'#2
|
||||
+#25#3'Top'#2#14#5'Width'#2'K'#6'Action'#7#5'actOK'#25'BorderSpacing.InnerBor'
|
||||
+'der'#2#4#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'8'
|
||||
+#1#6'Height'#2#25#3'Top'#2#14#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4
|
||||
+#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0
|
||||
+#12'TPageControl'#12'PageControl1'#6'Height'#3#250#0#5'Width'#3#144#1#10'Act'
|
||||
+'ivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2
|
||||
+#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#6'Module'#0#6'TLabel'#6'Label1'#4
|
||||
+'Left'#2#20#6'Height'#2#14#3'Top'#2''''#5'Width'#2#28#7'Caption'#6#4'Name'#5
|
||||
+'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#20#6
|
||||
+'Height'#2#14#3'Top'#2''#5'Width'#2'8'#7'Caption'#6#9'Namespace'#5'Color'#7
|
||||
+#6'clNone'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#20#6'Height'#2
|
||||
+#23#3'Top'#2'7'#5'Width'#3'`'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0
|
||||
+#8'TabOrder'#2#0#4'Text'#6#7'edtName'#0#0#5'TEdit'#12'edtNamespace'#4'Left'#2
|
||||
+#20#6'Height'#2#23#3'Top'#3#143#0#5'Width'#3'`'#1#7'Anchors'#11#5'akTop'#6'a'
|
||||
+'kLeft'#7'akRight'#0#8'TabOrder'#2#1#4'Text'#6#12'edtNamespace'#0#0#0#0#11'T'
|
||||
+'ActionList'#2'AL'#4'left'#2's'#3'top'#2'~'#0#7'TAction'#5'actOK'#7'Caption'
|
||||
+#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'
|
||||
+#7#11'actOKUpdate'#0#0#0#0
|
||||
+'n'#7'Caption'#6#17'Module properties'#12'ClientHeight'#3','#1#11'ClientWidt'
|
||||
+'h'#3#144#1#8'Position'#7#16'poMainFormCenter'#10'LCLVersion'#6#6'0.9.25'#0#6
|
||||
+'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'#3#250#0#5'Width'#3#144#1#5'Align'#7
|
||||
+#8'alBottom'#12'ClientHeight'#2'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#0#0
|
||||
+#7'TButton'#7'Button1'#4'Left'#3#224#0#6'Height'#2#25#3'Top'#2#14#5'Width'#2
|
||||
+'K'#6'Action'#7#5'actOK'#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'Ta'
|
||||
+'bOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2
|
||||
+#14#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6
|
||||
+#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#12'TPageControl'#12'Pag'
|
||||
+'eControl1'#6'Height'#3#250#0#5'Width'#3#144#1#10'ActivePage'#7#9'TabSheet1'
|
||||
+#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'Tab'
|
||||
+'Sheet1'#7'Caption'#6#6'Module'#12'ClientHeight'#3#224#0#11'ClientWidth'#3
|
||||
+#136#1#0#6'TLabel'#6'Label1'#4'Left'#2#20#6'Height'#2#14#3'Top'#2''''#5'Widt'
|
||||
+'h'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Le'
|
||||
+'ft'#2#20#6'Height'#2#14#3'Top'#2''#5'Width'#2'8'#7'Caption'#6#9'Namespace'
|
||||
+#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#20#6'Height'#2#23#3'Top'
|
||||
+#2'7'#5'Width'#3'X'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrd'
|
||||
+'er'#2#0#4'Text'#6#7'edtName'#0#0#5'TEdit'#12'edtNamespace'#4'Left'#2#20#6'H'
|
||||
+'eight'#2#23#3'Top'#3#143#0#5'Width'#3'X'#1#7'Anchors'#11#5'akTop'#6'akLeft'
|
||||
+#7'akRight'#0#8'TabOrder'#2#1#4'Text'#6#12'edtNamespace'#0#0#0#0#11'TActionL'
|
||||
+'ist'#2'AL'#4'left'#2's'#3'top'#2'~'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'
|
||||
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'a'
|
||||
+'ctOKUpdate'#0#0#0#0
|
||||
]);
|
||||
|
@@ -153,6 +153,11 @@ type
|
||||
FImpTempStream : ISourceStream;
|
||||
FImpLastStream : ISourceStream;
|
||||
FRttiFunc : ISourceStream;
|
||||
private
|
||||
// Array handling helper routines
|
||||
procedure WriteObjectArray(ASymbol : TPasArrayType);
|
||||
procedure WriteSimpleTypeArray(ASymbol : TPasArrayType);
|
||||
procedure WriteObjectCollection(ASymbol : TPasArrayType);
|
||||
private
|
||||
function GenerateIntfName(AIntf : TPasElement):string;
|
||||
|
||||
@@ -1756,6 +1761,230 @@ end;
|
||||
|
||||
{ TInftGenerator }
|
||||
|
||||
procedure TInftGenerator.WriteObjectArray(ASymbol : TPasArrayType);
|
||||
begin
|
||||
SetCurrentStream(FDecStream);
|
||||
NewLine();
|
||||
IncIndent();
|
||||
BeginAutoIndent();
|
||||
try
|
||||
WriteLn('%s = class(TBaseObjectArrayRemotable)',[ASymbol.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
||||
WriteLn('public');
|
||||
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ElType.Name]);
|
||||
WriteLn('end;');
|
||||
finally
|
||||
EndAutoIndent();
|
||||
DecIndent();
|
||||
end;
|
||||
|
||||
SetCurrentStream(FImpStream);
|
||||
NewLine();
|
||||
WriteLn('{ %s }',[ASymbol.Name]);
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result:= %s;',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
end;
|
||||
|
||||
procedure TInftGenerator.WriteSimpleTypeArray(ASymbol : TPasArrayType);
|
||||
begin
|
||||
SetCurrentStream(FDecStream);
|
||||
NewLine();
|
||||
IncIndent();
|
||||
BeginAutoIndent();
|
||||
try
|
||||
WriteLn('%s = class(TBaseSimpleTypeArrayRemotable)',[ASymbol.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('FData : array of %s;',[ASymbol.ElType.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
||||
Indent();WriteLn('procedure SetItem(AIndex: Integer; const AValue: %s);',[ASymbol.ElType.Name]);
|
||||
WriteLn('protected');
|
||||
Indent();WriteLn('function GetLength():Integer;override;');
|
||||
Indent();WriteLn('procedure SaveItem(AStore : IFormatterBase;const AName : String;const AIndex : Integer);override;');
|
||||
Indent();WriteLn('procedure LoadItem(AStore : IFormatterBase;const AIndex : Integer);override;');
|
||||
WriteLn('public');
|
||||
Indent();WriteLn('class function GetItemTypeInfo():PTypeInfo;override;');
|
||||
Indent();WriteLn('procedure SetLength(const ANewSize : Integer);override;');
|
||||
Indent();WriteLn('procedure Assign(Source: TPersistent); override;');
|
||||
Indent();WriteLn('property Item[AIndex:Integer] : %s read GetItem write SetItem; default;',[ASymbol.ElType.Name]);
|
||||
WriteLn('end;');
|
||||
finally
|
||||
EndAutoIndent();
|
||||
DecIndent();
|
||||
end;
|
||||
|
||||
SetCurrentStream(FImpStream);
|
||||
NewLine();
|
||||
WriteLn('{ %s }',[ASymbol.Name]);
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('CheckIndex(AIndex);');
|
||||
Indent();WriteLn('Result := FData[AIndex];');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('procedure %s.SetItem(AIndex: Integer;const AValue: %S);',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('CheckIndex(AIndex);');
|
||||
Indent();WriteLn('FData[AIndex] := AValue;');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetLength(): Integer;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := System.Length(FData);');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('procedure %s.SaveItem(AStore: IFormatterBase;const AName: String; const AIndex: Integer);',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('AStore.Put(%s,TypeInfo(%s),FData[AIndex]);',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol)),ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.LoadItem(AStore: IFormatterBase;const AIndex: Integer);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('sName : string;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('sName := %s;',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol))]);
|
||||
Indent();WriteLn('AStore.Get(TypeInfo(%s),sName,FData[AIndex]);',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('class function %s.GetItemTypeInfo(): PTypeInfo;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := TypeInfo(%s);',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.SetLength(const ANewSize: Integer);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('i : Integer;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('if ( ANewSize < 0 ) then');
|
||||
Indent();Indent();WriteLn('i := 0');
|
||||
Indent();WriteLn('else');
|
||||
Indent();Indent();WriteLn('i := ANewSize;');
|
||||
Indent();WriteLn('System.SetLength(FData,i);');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.Assign(Source: TPersistent);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('src : %s;',[ASymbol.Name]);
|
||||
Indent();WriteLn('i, c : PtrInt;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('if Assigned(Source) and Source.InheritsFrom(%s) then begin',[ASymbol.Name]);
|
||||
IncIndent();
|
||||
Indent();WriteLn('src := %s(Source);',[ASymbol.Name]);
|
||||
Indent();WriteLn('c := src.Length;');
|
||||
Indent();WriteLn('Self.SetLength(c);');
|
||||
Indent();WriteLn('if ( c > 0 ) then begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('for i := 0 to Pred(c) do begin');
|
||||
IncIndent(); Indent(); WriteLn('Self[i] := src[i];'); DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
Indent();WriteLn('end else begin');
|
||||
IncIndent(); Indent(); WriteLn('inherited Assign(Source);'); DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
end;
|
||||
|
||||
procedure TInftGenerator.WriteObjectCollection(ASymbol : TPasArrayType);
|
||||
begin
|
||||
SetCurrentStream(FDecStream);
|
||||
NewLine();
|
||||
IncIndent();
|
||||
BeginAutoIndent();
|
||||
try
|
||||
WriteLn('%s = class(TObjectCollectionRemotable)',[ASymbol.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
||||
WriteLn('public');
|
||||
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||
Indent();WriteLn('function Add(): %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[ASymbol.ElType.Name]);
|
||||
Indent();WriteLn('function AddAt(const APosition : Integer) : %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[ASymbol.ElType.Name]);
|
||||
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ElType.Name]);
|
||||
WriteLn('end;');
|
||||
finally
|
||||
EndAutoIndent();
|
||||
DecIndent();
|
||||
end;
|
||||
|
||||
SetCurrentStream(FImpStream);
|
||||
NewLine();
|
||||
WriteLn('{ %s }',[ASymbol.Name]);
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result:= %s;',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.Add() : %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := %s(inherited Add());',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.AddAt(const APosition : Integer) : %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := %s(inherited AddAt(APosition));',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
end;
|
||||
|
||||
function TInftGenerator.GenerateIntfName(AIntf: TPasElement): string;
|
||||
begin
|
||||
Result := ExtractserviceName(AIntf);
|
||||
@@ -2240,173 +2469,6 @@ begin
|
||||
end;
|
||||
|
||||
procedure TInftGenerator.GenerateArray(ASymbol: TPasArrayType);
|
||||
|
||||
procedure WriteObjectArray();
|
||||
begin
|
||||
SetCurrentStream(FDecStream);
|
||||
NewLine();
|
||||
IncIndent();
|
||||
BeginAutoIndent();
|
||||
try
|
||||
WriteLn('%s = class(TBaseObjectArrayRemotable)',[ASymbol.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
||||
WriteLn('public');
|
||||
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ElType.Name]);
|
||||
WriteLn('end;');
|
||||
finally
|
||||
EndAutoIndent();
|
||||
DecIndent();
|
||||
end;
|
||||
|
||||
SetCurrentStream(FImpStream);
|
||||
NewLine();
|
||||
WriteLn('{ %s }',[ASymbol.Name]);
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := Inherited GetItem(AIndex) As %s;',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result:= %s;',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
end;
|
||||
|
||||
procedure WriteSimpleTypeArray();
|
||||
begin
|
||||
SetCurrentStream(FDecStream);
|
||||
NewLine();
|
||||
IncIndent();
|
||||
BeginAutoIndent();
|
||||
try
|
||||
WriteLn('%s = class(TBaseSimpleTypeArrayRemotable)',[ASymbol.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('FData : array of %s;',[ASymbol.ElType.Name]);
|
||||
WriteLn('private');
|
||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
||||
Indent();WriteLn('procedure SetItem(AIndex: Integer; const AValue: %s);',[ASymbol.ElType.Name]);
|
||||
WriteLn('protected');
|
||||
Indent();WriteLn('function GetLength():Integer;override;');
|
||||
Indent();WriteLn('procedure SaveItem(AStore : IFormatterBase;const AName : String;const AIndex : Integer);override;');
|
||||
Indent();WriteLn('procedure LoadItem(AStore : IFormatterBase;const AIndex : Integer);override;');
|
||||
WriteLn('public');
|
||||
Indent();WriteLn('class function GetItemTypeInfo():PTypeInfo;override;');
|
||||
Indent();WriteLn('procedure SetLength(const ANewSize : Integer);override;');
|
||||
Indent();WriteLn('procedure Assign(Source: TPersistent); override;');
|
||||
Indent();WriteLn('property Item[AIndex:Integer] : %s read GetItem write SetItem; default;',[ASymbol.ElType.Name]);
|
||||
WriteLn('end;');
|
||||
finally
|
||||
EndAutoIndent();
|
||||
DecIndent();
|
||||
end;
|
||||
|
||||
SetCurrentStream(FImpStream);
|
||||
NewLine();
|
||||
WriteLn('{ %s }',[ASymbol.Name]);
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('CheckIndex(AIndex);');
|
||||
Indent();WriteLn('Result := FData[AIndex];');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('procedure %s.SetItem(AIndex: Integer;const AValue: %S);',[ASymbol.Name,ASymbol.ElType.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('CheckIndex(AIndex);');
|
||||
Indent();WriteLn('FData[AIndex] := AValue;');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('function %s.GetLength(): Integer;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := System.Length(FData);');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('procedure %s.SaveItem(AStore: IFormatterBase;const AName: String; const AIndex: Integer);',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('AStore.Put(%s,TypeInfo(%s),FData[AIndex]);',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol)),ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.LoadItem(AStore: IFormatterBase;const AIndex: Integer);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('sName : string;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('sName := %s;',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol))]);
|
||||
Indent();WriteLn('AStore.Get(TypeInfo(%s),sName,FData[AIndex]);',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
WriteLn('class function %s.GetItemTypeInfo(): PTypeInfo;',[ASymbol.Name]);
|
||||
WriteLn('begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('Result := TypeInfo(%s);',[ASymbol.ElType.Name]);
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.SetLength(const ANewSize: Integer);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('i : Integer;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('if ( ANewSize < 0 ) then');
|
||||
Indent();Indent();WriteLn('i := 0');
|
||||
Indent();WriteLn('else');
|
||||
Indent();Indent();WriteLn('i := ANewSize;');
|
||||
Indent();WriteLn('System.SetLength(FData,i);');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
|
||||
NewLine();
|
||||
IncIndent();
|
||||
WriteLn('procedure %s.Assign(Source: TPersistent);',[ASymbol.Name]);
|
||||
WriteLn('var');
|
||||
Indent();WriteLn('src : %s;',[ASymbol.Name]);
|
||||
Indent();WriteLn('i, c : PtrInt;');
|
||||
WriteLn('begin');
|
||||
Indent();WriteLn('if Assigned(Source) and Source.InheritsFrom(%s) then begin',[ASymbol.Name]);
|
||||
IncIndent();
|
||||
Indent();WriteLn('src := %s(Source);',[ASymbol.Name]);
|
||||
Indent();WriteLn('c := src.Length;');
|
||||
Indent();WriteLn('Self.SetLength(c);');
|
||||
Indent();WriteLn('if ( c > 0 ) then begin');
|
||||
IncIndent();
|
||||
Indent();WriteLn('for i := 0 to Pred(c) do begin');
|
||||
IncIndent(); Indent(); WriteLn('Self[i] := src[i];'); DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
Indent();WriteLn('end else begin');
|
||||
IncIndent(); Indent(); WriteLn('inherited Assign(Source);'); DecIndent();
|
||||
Indent();WriteLn('end;');
|
||||
DecIndent();
|
||||
WriteLn('end;');
|
||||
end;
|
||||
|
||||
var
|
||||
classItemArray : Boolean;
|
||||
eltType : TPasType;
|
||||
@@ -2418,9 +2480,12 @@ begin
|
||||
classItemArray := SymbolTable.IsOfType(eltType,TPasClassType) or SymbolTable.IsOfType(eltType,TPasArrayType);
|
||||
|
||||
if classItemArray then begin
|
||||
WriteObjectArray();
|
||||
if FSymbolTable.IsCollection(ASymbol) then
|
||||
WriteObjectCollection(ASymbol)
|
||||
else
|
||||
WriteObjectArray(ASymbol);
|
||||
end else begin
|
||||
WriteSimpleTypeArray();
|
||||
WriteSimpleTypeArray(ASymbol);
|
||||
end;
|
||||
|
||||
FImpTempStream.Indent();
|
||||
|
@@ -282,7 +282,7 @@ var
|
||||
begin
|
||||
Result := False;
|
||||
if Assigned(ANode) and ( ANode.Attributes <> nil ) then begin
|
||||
nd := ANode.Attributes.GetNamedItem(AAttribute);
|
||||
nd := ANode.Attributes.GetNamedItem(Format('%s:%s',[s_WST,AAttribute]));
|
||||
if Assigned(nd) then begin
|
||||
Result := True;
|
||||
AValue := nd.NodeValue;
|
||||
|
@@ -27,6 +27,7 @@ const
|
||||
sARRAY_STYLE = 'ARRAY_STYLE';
|
||||
sARRAY_STYLE_SCOPED = 'ARRAY_STYLE_SCOPED';
|
||||
sARRAY_STYLE_EMBEDDED = 'ARRAY_STYLE_EMBEDDED';
|
||||
sARRAY_IS_COLLECTION = 'ARRAY_COLLECTION';
|
||||
|
||||
sXSD_NS = 'http://www.w3.org/2001/XMLSchema';
|
||||
|
||||
@@ -112,6 +113,8 @@ type
|
||||
function GetArrayStyle(AArray : TPasArrayType) : TArrayStyle;
|
||||
procedure SetArrayStyle(AArray : TPasArrayType; const AStyle : TArrayStyle);
|
||||
procedure SetArrayItemExternalName(AArray : TPasArrayType; const AExternalName : string);
|
||||
function IsCollection(AArray : TPasArrayType) : Boolean;
|
||||
procedure SetCollectionFlag(AArray : TPasArrayType; const AFlag : Boolean);
|
||||
function FindElement(const AName: String): TPasElement; override;
|
||||
function FindElementNS(const AName, ANameSpace : string): TPasElement;
|
||||
function FindElementInModule(const AName: String; AModule: TPasModule): TPasElement;
|
||||
@@ -605,6 +608,22 @@ begin
|
||||
Properties.SetValue(AArray,sARRAY_ITEM_EXT_NAME,AExternalName);
|
||||
end;
|
||||
|
||||
function TwstPasTreeContainer.IsCollection(AArray : TPasArrayType) : Boolean;
|
||||
begin
|
||||
Result := AnsiSameText('true',Properties.GetValue(AArray,sARRAY_IS_COLLECTION));
|
||||
end;
|
||||
|
||||
procedure TwstPasTreeContainer.SetCollectionFlag(
|
||||
AArray : TPasArrayType;
|
||||
const AFlag : Boolean
|
||||
);
|
||||
begin
|
||||
if AFlag then
|
||||
Properties.SetValue(AArray,sARRAY_IS_COLLECTION,'true')
|
||||
else
|
||||
Properties.SetValue(AArray,sARRAY_IS_COLLECTION,'false');
|
||||
end;
|
||||
|
||||
function TwstPasTreeContainer.FindElementInModule(const AName: String; AModule : TPasModule): TPasElement;
|
||||
var
|
||||
decs : TList;
|
||||
|
@@ -148,8 +148,10 @@
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="True"/>
|
||||
<UseLineInfoUnit Value="False"/>
|
||||
<StripSymbols Value="True"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CustomOptions Value="-Xi
|
||||
|
@@ -15,7 +15,7 @@ unit ws_parser_imp;
|
||||
|
||||
interface
|
||||
uses
|
||||
Classes, SysUtils,
|
||||
Classes, SysUtils, Contnrs,
|
||||
{$IFNDEF FPC}xmldom, wst_delphi_xml{$ELSE}DOM, wst_fpc_xml{$ENDIF},
|
||||
cursor_intf, rtti_filters,
|
||||
pastree, pascal_parser_intf, logger_intf,
|
||||
@@ -69,6 +69,31 @@ type
|
||||
TDerivationMode = ( dmNone, dmExtension, dmRestriction );
|
||||
TSequenceType = ( stElement, stAll );
|
||||
|
||||
{ TPropInfoReference }
|
||||
|
||||
TPropInfoReference = class
|
||||
private
|
||||
FIsCollection : Boolean;
|
||||
FProp : TPasProperty;
|
||||
public
|
||||
property Prop : TPasProperty read FProp;
|
||||
property IsCollection : Boolean read FIsCollection;
|
||||
end;
|
||||
|
||||
{ TPropInfoReferenceList }
|
||||
|
||||
TPropInfoReferenceList = class
|
||||
private
|
||||
FList : TObjectList;
|
||||
public
|
||||
constructor Create();
|
||||
destructor Destroy();override;
|
||||
function Add(AProp : TPasProperty) : TPropInfoReference;
|
||||
function GetItem(const AIndex : PtrInt) : TPropInfoReference;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function IndexOf(const AProp : TPasProperty) : PtrInt;
|
||||
function GetCount() : PtrInt;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
end;
|
||||
|
||||
{ TComplexTypeParser }
|
||||
|
||||
TComplexTypeParser = class(TAbstractTypeParser)
|
||||
@@ -81,6 +106,19 @@ type
|
||||
FDerivationMode : TDerivationMode;
|
||||
FDerivationNode : TDOMNode;
|
||||
FSequenceType : TSequenceType;
|
||||
private
|
||||
//helper routines
|
||||
function ExtractElementCursor(out AAttCursor : IObjectCursor):IObjectCursor;
|
||||
procedure ExtractExtendedMetadata(const AItem : TPasElement; const ANode : TDOMNode);
|
||||
procedure GenerateArrayTypes(
|
||||
const AClassName : string;
|
||||
AArrayPropList : TPropInfoReferenceList
|
||||
);
|
||||
function ExtractSoapArray(
|
||||
const ATypeName : string;
|
||||
const AInternalName : string;
|
||||
const AHasInternalName : Boolean
|
||||
) : TPasArrayType;
|
||||
private
|
||||
procedure CreateNodeCursors();
|
||||
procedure ExtractTypeName();
|
||||
@@ -119,7 +157,7 @@ type
|
||||
SResolveError = 'Unable to resolve this namespace : "%s".';
|
||||
|
||||
implementation
|
||||
uses dom_cursors, parserutils, StrUtils, Contnrs, xsd_consts;
|
||||
uses dom_cursors, parserutils, StrUtils, xsd_consts;
|
||||
|
||||
{ TAbstractTypeParser }
|
||||
|
||||
@@ -273,6 +311,194 @@ end;
|
||||
|
||||
{ TComplexTypeParser }
|
||||
|
||||
function TComplexTypeParser.ExtractElementCursor(out AAttCursor : IObjectCursor) : IObjectCursor;
|
||||
var
|
||||
frstCrsr, tmpCursor : IObjectCursor;
|
||||
parentNode, tmpNode : TDOMNode;
|
||||
begin
|
||||
Result := nil;
|
||||
AAttCursor := nil;
|
||||
case FDerivationMode of
|
||||
dmNone : parentNode := FContentNode;
|
||||
dmRestriction,
|
||||
dmExtension : parentNode := FDerivationNode;
|
||||
end;
|
||||
if parentNode.HasChildNodes() then begin;
|
||||
AAttCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(parentNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_attribute,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
frstCrsr := CreateChildrenCursor(parentNode,cetRttiNode);
|
||||
tmpCursor := CreateCursorOn(
|
||||
frstCrsr.Clone() as IObjectCursor,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_sequence,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
tmpCursor.Reset();
|
||||
if tmpCursor.MoveNext() then begin
|
||||
FSequenceType := stElement;
|
||||
tmpNode := (tmpCursor.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if tmpNode.HasChildNodes() then begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(tmpNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_element,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
Result := tmpCursor;
|
||||
end;
|
||||
end else begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
frstCrsr.Clone() as IObjectCursor,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_all,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
tmpCursor.Reset();
|
||||
if tmpCursor.MoveNext() then begin
|
||||
FSequenceType := stElement;
|
||||
tmpNode := (tmpCursor.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if tmpNode.HasChildNodes() then begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(tmpNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_element,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
Result := tmpCursor;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
end else begin
|
||||
Result := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TComplexTypeParser.ExtractExtendedMetadata(
|
||||
const AItem : TPasElement;
|
||||
const ANode : TDOMNode
|
||||
);
|
||||
var
|
||||
ls : TDOMNamedNodeMap;
|
||||
e : TDOMNode;
|
||||
k, q : PtrInt;
|
||||
ns_short, ns_long, localName, locBuffer, locBufferNS, locBufferNS_long, locBufferLocalName : string;
|
||||
begin
|
||||
if ( ANode.Attributes <> nil ) and ( GetNodeListCount(ANode.Attributes) > 0 ) then begin
|
||||
ls := ANode.Attributes;
|
||||
q := GetNodeListCount(ANode.Attributes);
|
||||
for k := 0 to ( q - 1 ) do begin
|
||||
e := ls.Item[k];
|
||||
if ( Pos(':', e.NodeName) > 1 ) then begin
|
||||
ExplodeQName(e.NodeName,localName,ns_short);
|
||||
if FContext.FindNameSpace(ns_short, ns_long) then begin
|
||||
locBuffer := e.NodeValue;
|
||||
ExplodeQName(locBuffer,locBufferLocalName,locBufferNS);
|
||||
if IsStrEmpty(locBufferNS) then
|
||||
locBuffer := locBufferLocalName
|
||||
else if FContext.FindNameSpace(locBufferNS, locBufferNS_long) then
|
||||
locBuffer := Format('%s#%s',[locBufferNS_long,locBufferLocalName]);
|
||||
FSymbols.Properties.SetValue(AItem,Format('%s#%s',[ns_long,localName]),locBuffer);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TComplexTypeParser.GenerateArrayTypes(
|
||||
const AClassName : string;
|
||||
AArrayPropList : TPropInfoReferenceList
|
||||
);
|
||||
var
|
||||
propRef : TPropInfoReference;
|
||||
locPropTyp : TPasProperty;
|
||||
k : Integer;
|
||||
locString : string;
|
||||
locSym : TPasElement;
|
||||
begin
|
||||
for k := 0 to Pred(AArrayPropList.GetCount()) do begin
|
||||
propRef := AArrayPropList.GetItem(k);
|
||||
locPropTyp := propRef.Prop;
|
||||
locString := Format('%s_%sArray',[AClassName,locPropTyp.Name]);
|
||||
locSym := FSymbols.FindElement(locString);
|
||||
if ( locSym = nil ) then begin
|
||||
locSym := FSymbols.CreateArray(
|
||||
locString,
|
||||
locPropTyp.VarType,
|
||||
locPropTyp.Name,
|
||||
FSymbols.GetExternalName(locPropTyp),
|
||||
asEmbeded
|
||||
);
|
||||
Self.Module.InterfaceSection.Declarations.Add(locSym);
|
||||
Self.Module.InterfaceSection.Types.Add(locSym);
|
||||
if propRef.IsCollection then
|
||||
FSymbols.SetCollectionFlag(TPasArrayType(locSym),True);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TComplexTypeParser.ExtractSoapArray(
|
||||
const ATypeName : string;
|
||||
const AInternalName : string;
|
||||
const AHasInternalName : Boolean
|
||||
) : TPasArrayType;
|
||||
var
|
||||
ls : TStringList;
|
||||
crs, locCrs : IObjectCursor;
|
||||
s : string;
|
||||
i : Integer;
|
||||
locSym : TPasElement;
|
||||
ok : Boolean;
|
||||
nd : TDOMNode;
|
||||
begin
|
||||
if not FDerivationNode.HasChildNodes then begin
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid type definition, attributes not found : "%s".',[FTypeName]);
|
||||
end;
|
||||
crs := CreateCursorOn(
|
||||
CreateChildrenCursor(FDerivationNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_attribute,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
ls := TStringList.Create();
|
||||
try
|
||||
ok := False;
|
||||
crs.Reset();
|
||||
while crs.MoveNext() do begin
|
||||
nd := (crs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if Assigned(nd.Attributes) and ( nd.Attributes.Length > 0 ) then begin
|
||||
ls.Clear();
|
||||
ExtractNameSpaceShortNamesNested(nd,ls,s_wsdl);
|
||||
locCrs := CreateAttributesCursor(nd,cetRttiNode);
|
||||
locCrs := CreateCursorOn(
|
||||
locCrs,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_arrayType,ls),TDOMNodeRttiExposer)
|
||||
);
|
||||
if Assigned(locCrs) then begin
|
||||
locCrs.Reset();
|
||||
if locCrs.MoveNext() then begin
|
||||
ok := True;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
FreeAndNil(ls);
|
||||
end;
|
||||
if not ok then begin
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid type definition, unable to find the "%s" attribute : "%s".',[s_arrayType,FTypeName]);
|
||||
end;
|
||||
s := ExtractNameFromQName((locCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject.NodeValue);
|
||||
i := Pos('[',s);
|
||||
if ( i < 1 ) then begin
|
||||
i := MaxInt;
|
||||
end;
|
||||
s := Copy(s,1,Pred(i));
|
||||
locSym := FSymbols.FindElement(s);
|
||||
if not Assigned(locSym) then begin
|
||||
locSym := TPasUnresolvedTypeRef(FSymbols.CreateElement(TPasUnresolvedTypeRef,s,Self.Module.InterfaceSection,visDefault,'',0));
|
||||
Self.Module.InterfaceSection.Declarations.Add(locSym);
|
||||
Self.Module.InterfaceSection.Types.Add(locSym);
|
||||
end;
|
||||
if not locSym.InheritsFrom(TPasType) then
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid array type definition, invalid item type definition : "%s".',[FTypeName]);
|
||||
Result := FSymbols.CreateArray(AInternalName,locSym as TPasType,s_item,s_item,asScoped);
|
||||
if AHasInternalName then
|
||||
FSymbols.RegisterExternalAlias(Result,ATypeName);
|
||||
end;
|
||||
|
||||
procedure TComplexTypeParser.CreateNodeCursors();
|
||||
begin
|
||||
FAttCursor := CreateAttributesCursor(FTypeNode,cetRttiNode);
|
||||
@@ -402,94 +628,16 @@ begin
|
||||
end;
|
||||
|
||||
function TComplexTypeParser.ParseComplexContent(const ATypeName : string) : TPasType;
|
||||
|
||||
function ExtractElementCursor(out AAttCursor : IObjectCursor):IObjectCursor;
|
||||
var
|
||||
frstCrsr, tmpCursor : IObjectCursor;
|
||||
parentNode, tmpNode : TDOMNode;
|
||||
begin
|
||||
Result := nil;
|
||||
AAttCursor := nil;
|
||||
case FDerivationMode of
|
||||
dmNone : parentNode := FContentNode;
|
||||
dmRestriction,
|
||||
dmExtension : parentNode := FDerivationNode;
|
||||
end;
|
||||
if parentNode.HasChildNodes() then begin;
|
||||
AAttCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(parentNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_attribute,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
frstCrsr := CreateChildrenCursor(parentNode,cetRttiNode);
|
||||
tmpCursor := CreateCursorOn(
|
||||
frstCrsr.Clone() as IObjectCursor,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_sequence,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
tmpCursor.Reset();
|
||||
if tmpCursor.MoveNext() then begin
|
||||
FSequenceType := stElement;
|
||||
tmpNode := (tmpCursor.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if tmpNode.HasChildNodes() then begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(tmpNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_element,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
Result := tmpCursor;
|
||||
end;
|
||||
end else begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
frstCrsr.Clone() as IObjectCursor,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_all,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
tmpCursor.Reset();
|
||||
if tmpCursor.MoveNext() then begin
|
||||
FSequenceType := stElement;
|
||||
tmpNode := (tmpCursor.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if tmpNode.HasChildNodes() then begin
|
||||
tmpCursor := CreateCursorOn(
|
||||
CreateChildrenCursor(tmpNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_element,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
Result := tmpCursor;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
end else begin
|
||||
Result := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
classDef : TPasClassType;
|
||||
isArrayDef : Boolean;
|
||||
arrayItems : TObjectList;
|
||||
arrayItems : TPropInfoReferenceList;
|
||||
|
||||
procedure ExtractExtendedMetadata(const AItem : TPasElement; const ANode : TDOMNode);
|
||||
function IsCollectionArray(AElement : TDOMNode) : Boolean;
|
||||
var
|
||||
ls : TDOMNamedNodeMap;
|
||||
e : TDOMNode;
|
||||
k, q : PtrInt;
|
||||
ns_short, ns_long, localName, locBuffer, locBufferNS, locBufferNS_long, locBufferLocalName : string;
|
||||
strBuffer : string;
|
||||
begin
|
||||
if ( ANode.Attributes <> nil ) and ( GetNodeListCount(ANode.Attributes) > 0 ) then begin
|
||||
ls := ANode.Attributes;
|
||||
q := GetNodeListCount(ANode.Attributes);
|
||||
for k := 0 to ( q - 1 ) do begin
|
||||
e := ls.Item[k];
|
||||
if ( Pos(':', e.NodeName) > 1 ) then begin
|
||||
ExplodeQName(e.NodeName,localName,ns_short);
|
||||
if FContext.FindNameSpace(ns_short, ns_long) then begin
|
||||
locBuffer := e.NodeValue;
|
||||
ExplodeQName(locBuffer,locBufferLocalName,locBufferNS);
|
||||
if IsStrEmpty(locBufferNS) then
|
||||
locBuffer := locBufferLocalName
|
||||
else if FContext.FindNameSpace(locBufferNS, locBufferNS_long) then
|
||||
locBuffer := Format('%s#%s',[locBufferNS_long,locBufferLocalName]);
|
||||
FSymbols.Properties.SetValue(AItem,Format('%s#%s',[ns_long,localName]),locBuffer);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Result := wst_findCustomAttributeXsd(FContext.GetXsShortNames(),AElement,s_WST_collection,strBuffer) and AnsiSameText('true',Trim(strBuffer));
|
||||
end;
|
||||
|
||||
procedure ParseElement(AElement : TDOMNode);
|
||||
@@ -641,7 +789,7 @@ var
|
||||
end;
|
||||
isArrayDef := locMaxOccurUnbounded or ( locMaxOccur > 1 );
|
||||
if isArrayDef then begin
|
||||
arrayItems.Add(locProp);
|
||||
arrayItems.Add(locProp).FIsCollection := IsCollectionArray(AElement);
|
||||
end;
|
||||
if AnsiSameText(s_attribute,ExtractNameFromQName(AElement.NodeName)) then begin
|
||||
FSymbols.SetPropertyAsAttribute(locProp,True);
|
||||
@@ -653,99 +801,6 @@ var
|
||||
ExtractExtendedMetadata(locProp,AElement);
|
||||
end;
|
||||
|
||||
procedure GenerateArrayTypes(
|
||||
const AClassName : string;
|
||||
AArrayPropList : TObjectList
|
||||
);
|
||||
var
|
||||
locPropTyp : TPasProperty;
|
||||
k : Integer;
|
||||
locString : string;
|
||||
locSym : TPasElement;
|
||||
begin
|
||||
for k := 0 to Pred(AArrayPropList.Count) do begin
|
||||
locPropTyp := AArrayPropList[k] as TPasProperty;
|
||||
locString := Format('%s_%sArray',[AClassName,locPropTyp.Name]);
|
||||
locSym := FSymbols.FindElement(locString);
|
||||
if ( locSym = nil ) then begin
|
||||
locSym := FSymbols.CreateArray(
|
||||
locString,
|
||||
locPropTyp.VarType,
|
||||
locPropTyp.Name,
|
||||
FSymbols.GetExternalName(locPropTyp),
|
||||
asEmbeded
|
||||
);
|
||||
Self.Module.InterfaceSection.Declarations.Add(locSym);
|
||||
Self.Module.InterfaceSection.Types.Add(locSym);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function ExtractSoapArray(const AInternalName : string; const AHasInternalName : Boolean) : TPasArrayType;
|
||||
var
|
||||
ls : TStringList;
|
||||
crs, locCrs : IObjectCursor;
|
||||
s : string;
|
||||
i : Integer;
|
||||
locSym : TPasElement;
|
||||
ok : Boolean;
|
||||
nd : TDOMNode;
|
||||
begin
|
||||
if not FDerivationNode.HasChildNodes then begin
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid type definition, attributes not found : "%s".',[FTypeName]);
|
||||
end;
|
||||
crs := CreateCursorOn(
|
||||
CreateChildrenCursor(FDerivationNode,cetRttiNode),
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_attribute,FContext.GetXsShortNames()),TDOMNodeRttiExposer)
|
||||
);
|
||||
ls := TStringList.Create();
|
||||
try
|
||||
ok := False;
|
||||
crs.Reset();
|
||||
while crs.MoveNext() do begin
|
||||
nd := (crs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
|
||||
if Assigned(nd.Attributes) and ( nd.Attributes.Length > 0 ) then begin
|
||||
ls.Clear();
|
||||
ExtractNameSpaceShortNamesNested(nd,ls,s_wsdl);
|
||||
locCrs := CreateAttributesCursor(nd,cetRttiNode);
|
||||
locCrs := CreateCursorOn(
|
||||
locCrs,
|
||||
ParseFilter(CreateQualifiedNameFilterStr(s_arrayType,ls),TDOMNodeRttiExposer)
|
||||
);
|
||||
if Assigned(locCrs) then begin
|
||||
locCrs.Reset();
|
||||
if locCrs.MoveNext() then begin
|
||||
ok := True;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
FreeAndNil(ls);
|
||||
end;
|
||||
if not ok then begin
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid type definition, unable to find the "%s" attribute : "%s".',[s_arrayType,FTypeName]);
|
||||
end;
|
||||
s := ExtractNameFromQName((locCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject.NodeValue);
|
||||
i := Pos('[',s);
|
||||
if ( i < 1 ) then begin
|
||||
i := MaxInt;
|
||||
end;
|
||||
s := Copy(s,1,Pred(i));
|
||||
locSym := FSymbols.FindElement(s);
|
||||
if not Assigned(locSym) then begin
|
||||
locSym := TPasUnresolvedTypeRef(FSymbols.CreateElement(TPasUnresolvedTypeRef,s,Self.Module.InterfaceSection,visDefault,'',0));
|
||||
Self.Module.InterfaceSection.Declarations.Add(locSym);
|
||||
Self.Module.InterfaceSection.Types.Add(locSym);
|
||||
end;
|
||||
if not locSym.InheritsFrom(TPasType) then
|
||||
raise EXsdInvalidTypeDefinitionException.CreateFmt('Invalid array type definition, invalid item type definition : "%s".',[FTypeName]);
|
||||
Result := FSymbols.CreateArray(AInternalName,locSym as TPasType,s_item,s_item,asScoped);
|
||||
if AHasInternalName then
|
||||
FSymbols.RegisterExternalAlias(Result,ATypeName);
|
||||
end;
|
||||
|
||||
function IsHeaderBlock() : Boolean;
|
||||
var
|
||||
strBuffer : string;
|
||||
@@ -801,9 +856,9 @@ begin
|
||||
end;
|
||||
|
||||
if ( FDerivationMode = dmRestriction ) and FSymbols.SameName(FBaseType,s_array) then begin
|
||||
Result := ExtractSoapArray(internalName,hasInternalName);
|
||||
Result := ExtractSoapArray(ATypeName,internalName,hasInternalName);
|
||||
end else begin
|
||||
arrayItems := TObjectList.Create(False);
|
||||
arrayItems := TPropInfoReferenceList.Create();
|
||||
try
|
||||
classDef := TPasClassType(FSymbols.CreateElement(TPasClassType,internalName,Self.Module.InterfaceSection,visDefault,'',0));
|
||||
try
|
||||
@@ -824,16 +879,18 @@ begin
|
||||
if Assigned(eltCrs) or Assigned(eltAttCrs) then begin
|
||||
isArrayDef := False;
|
||||
ParseElementsAndAttributes(eltCrs,eltAttCrs);
|
||||
if ( arrayItems.Count > 0 ) then begin
|
||||
if ( arrayItems.Count = 1 ) and ( GetElementCount(classDef.Members,TPasProperty) = 1 ) then begin
|
||||
if ( arrayItems.GetCount() > 0 ) then begin
|
||||
if ( arrayItems.GetCount() = 1 ) and ( GetElementCount(classDef.Members,TPasProperty) = 1 ) then begin
|
||||
Result := nil;
|
||||
propTyp := arrayItems[0] as TPasProperty;
|
||||
propTyp := arrayItems.GetItem(0).Prop;
|
||||
arrayDef := FSymbols.CreateArray(internalName,propTyp.VarType,propTyp.Name,FSymbols.GetExternalName(propTyp),asScoped);
|
||||
FSymbols.FreeProperties(classDef);
|
||||
FreeAndNil(classDef);
|
||||
Result := arrayDef;
|
||||
if hasInternalName then
|
||||
FSymbols.RegisterExternalAlias(arrayDef,ATypeName);
|
||||
if arrayItems.GetItem(0).IsCollection then
|
||||
FSymbols.SetCollectionFlag(arrayDef,True);
|
||||
end else begin
|
||||
GenerateArrayTypes(internalName,arrayItems);
|
||||
tmpClassDef := classDef;
|
||||
@@ -1338,6 +1395,56 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TPropInfoReferenceList }
|
||||
|
||||
constructor TPropInfoReferenceList.Create();
|
||||
begin
|
||||
FList := TObjectList.Create(False);
|
||||
end;
|
||||
|
||||
destructor TPropInfoReferenceList.Destroy();
|
||||
begin
|
||||
FList.Free();
|
||||
inherited Destroy();
|
||||
end;
|
||||
|
||||
function TPropInfoReferenceList.Add(AProp : TPasProperty) : TPropInfoReference;
|
||||
var
|
||||
i : PtrInt;
|
||||
begin
|
||||
i := IndexOf(AProp);
|
||||
if ( i = -1 ) then begin
|
||||
Result := TPropInfoReference.Create();
|
||||
Result.FProp := AProp;
|
||||
FList.Add(Result);
|
||||
end else begin
|
||||
Result := TPropInfoReference(FList[i]);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPropInfoReferenceList.GetItem(const AIndex : PtrInt) : TPropInfoReference;
|
||||
begin
|
||||
Result := TPropInfoReference(FList[AIndex]);
|
||||
end;
|
||||
|
||||
function TPropInfoReferenceList.IndexOf(const AProp : TPasProperty) : PtrInt;
|
||||
var
|
||||
i : PtrInt;
|
||||
begin
|
||||
Result := -1;
|
||||
for i := 0 to Pred(FList.Count) do begin
|
||||
if ( TPropInfoReference(FList[i]).Prop = AProp ) then begin
|
||||
Result := i;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TPropInfoReferenceList.GetCount() : PtrInt;
|
||||
begin
|
||||
Result := FList.Count;
|
||||
end;
|
||||
|
||||
initialization
|
||||
TAbstractTypeParser.RegisterParser(TSimpleTypeParser);
|
||||
TAbstractTypeParser.RegisterParser(TComplexTypeParser);
|
||||
|
@@ -92,10 +92,14 @@ const
|
||||
s_xmlns = 'xmlns';
|
||||
|
||||
|
||||
s_WST = 'wst';
|
||||
s_WST_base_namespace = 'urn:wst_base';
|
||||
s_WST_collection = 'wst_collection';
|
||||
s_WST_headerBlock = 'wst_headerBlock';
|
||||
s_WST_record = 'wst_record';
|
||||
s_WST_storeType = 'StoreType';
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
|
@@ -123,6 +123,9 @@ type
|
||||
);virtual;abstract;
|
||||
function GetOwner() : IXsdGenerator;
|
||||
class function CanHandle(ASymbol : TObject) : Boolean;virtual;abstract;
|
||||
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
|
||||
procedure DeclareNameSpaceOf_WST(ADocument : TDOMDocument);
|
||||
procedure DeclareAttributeOf_WST(AElement : TDOMElement; const AAttName, AAttValue : DOMString);
|
||||
public
|
||||
constructor Create(AOwner : IGenerator);virtual;
|
||||
end;
|
||||
@@ -171,7 +174,6 @@ type
|
||||
ADocument : TDOMDocument
|
||||
);override;
|
||||
class function CanHandle(ASymbol : TObject) : Boolean;override;
|
||||
function GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
|
||||
end;
|
||||
|
||||
{ TTypeAliasDefinition_TypeHandler }
|
||||
@@ -390,6 +392,29 @@ begin
|
||||
Result := IXsdGenerator(FOwner);
|
||||
end;
|
||||
|
||||
function TBaseTypeHandler.GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
|
||||
begin
|
||||
Result := GetOwner().GetSchemaNode(ADocument);
|
||||
end;
|
||||
|
||||
procedure TBaseTypeHandler.DeclareNameSpaceOf_WST(ADocument : TDOMDocument);
|
||||
var
|
||||
defSchemaNode : TDOMElement;
|
||||
strBuffer : string;
|
||||
begin
|
||||
defSchemaNode := GetSchemaNode(ADocument) as TDOMElement;
|
||||
if not FindAttributeByValueInNode(s_WST_base_namespace,defSchemaNode,strBuffer) then
|
||||
defSchemaNode.SetAttribute(Format('%s:%s',[s_xmlns,s_WST]),s_WST_base_namespace);
|
||||
end;
|
||||
|
||||
procedure TBaseTypeHandler.DeclareAttributeOf_WST(
|
||||
AElement : TDOMElement;
|
||||
const AAttName, AAttValue : DOMString
|
||||
);
|
||||
begin
|
||||
AElement.SetAttribute(Format('%s:%s',[s_WST,AAttName]),AAttvalue);
|
||||
end;
|
||||
|
||||
constructor TBaseTypeHandler.Create(AOwner: IGenerator);
|
||||
begin
|
||||
Assert(Assigned(AOwner));
|
||||
@@ -412,11 +437,6 @@ begin
|
||||
Result := Assigned(ASymbol) and ASymbol.InheritsFrom(TPasType);
|
||||
end;
|
||||
|
||||
function TTypeDefinition_TypeHandler.GetSchemaNode(ADocument : TDOMDocument) : TDOMNode;
|
||||
begin
|
||||
Result := GetOwner().GetSchemaNode(ADocument);
|
||||
end;
|
||||
|
||||
{ TTypeAliasDefinition_TypeHandler }
|
||||
|
||||
procedure TTypeAliasDefinition_TypeHandler.Generate(
|
||||
@@ -612,12 +632,13 @@ var
|
||||
end else begin
|
||||
if AnsiSameText('Has',Copy(p.StoredAccessorName,1,3)) then
|
||||
propNode.SetAttribute(s_minOccurs,'0');
|
||||
{else
|
||||
propNode.SetAttribute(s_minOccurs,'1');}
|
||||
if isEmbeddedArray then
|
||||
propNode.SetAttribute(s_maxOccurs,s_unbounded)
|
||||
{else
|
||||
propNode.SetAttribute(s_maxOccurs,'1');}
|
||||
if isEmbeddedArray then begin
|
||||
propNode.SetAttribute(s_maxOccurs,s_unbounded);
|
||||
if AContainer.IsCollection(TPasArrayType(propItmUltimeType)) then begin
|
||||
DeclareNameSpaceOf_WST(ADocument);
|
||||
DeclareAttributeOf_WST(propNode,s_WST_collection,'true');
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
ProcessPropertyExtendedMetadata(p,propNode);
|
||||
@@ -649,7 +670,8 @@ begin
|
||||
if Assigned(typItm.AncestorType) then begin
|
||||
trueParent := typItm.AncestorType;
|
||||
if trueParent.InheritsFrom(TPasNativeClassType) and AnsiSameText('THeaderBlock',trueParent.Name) then begin
|
||||
cplxNode.SetAttribute(s_WST_headerBlock,'true');
|
||||
DeclareNameSpaceOf_WST(ADocument);
|
||||
DeclareAttributeOf_WST(cplxNode,s_WST_headerBlock,'true');
|
||||
end;
|
||||
if trueParent.InheritsFrom(TPasAliasType) then
|
||||
trueParent := GetUltimeType(trueParent);
|
||||
@@ -658,12 +680,21 @@ begin
|
||||
then begin
|
||||
typeCategory := tcSimpleContent;
|
||||
end;
|
||||
if trueParent.InheritsFrom(TPasNativeSimpleContentClassType) or
|
||||
( not trueParent.InheritsFrom(TPasNativeClassType) )
|
||||
then begin
|
||||
if ( typeCategory = tcSimpleContent ) then begin
|
||||
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_simpleContent]),cplxNode,ADocument);
|
||||
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),derivationNode,ADocument);
|
||||
end else begin
|
||||
derivationNode := CreateElement(Format('%s:%s',[s_xs_short,s_extension]),cplxNode,ADocument);
|
||||
end;
|
||||
s := Trim(GetNameSpaceShortName(GetTypeNameSpace(AContainer,trueParent),ADocument,GetOwner().GetPreferedShortNames()));
|
||||
if ( Length(s) > 0 ) then
|
||||
s := s + ':';
|
||||
s := s + AContainer.GetExternalName(trueParent);
|
||||
derivationNode.SetAttribute(s_base,s);
|
||||
end;
|
||||
hasSequence := False;
|
||||
end;
|
||||
if ( typItm.Members.Count > 0 ) then
|
||||
@@ -719,7 +750,8 @@ begin
|
||||
cplxNode := CreateElement(s,defSchemaNode,ADocument);
|
||||
cplxNode.SetAttribute(s_name, AContainer.GetExternalName(typItm)) ;
|
||||
|
||||
cplxNode.SetAttribute(s_WST_record,'true');
|
||||
DeclareNameSpaceOf_WST(ADocument);
|
||||
DeclareAttributeOf_WST(cplxNode,s_WST_record,'true');
|
||||
|
||||
hasSequence := False;
|
||||
for i := 0 to Pred(typItm.Members.Count) do begin
|
||||
@@ -791,7 +823,7 @@ procedure TBaseArrayRemotable_TypeHandler.Generate(
|
||||
ADocument : TDOMDocument
|
||||
);
|
||||
|
||||
function GetNameSpaceShortName(const ANameSpace : string):string;//inline;
|
||||
function GetNameSpaceShortName(const ANameSpace : string):string;
|
||||
begin
|
||||
if FindAttributeByValueInNode(ANameSpace,ADocument.DocumentElement,Result,0,s_xmlns) then begin
|
||||
Result := Copy(Result,Length(s_xmlns+':')+1,MaxInt);
|
||||
@@ -827,6 +859,10 @@ begin
|
||||
s := Format('%s:%s',[s_xs_short,s_element]);
|
||||
propNode := CreateElement(s,sqcNode,ADocument);
|
||||
propNode.SetAttribute(s_name,s_item);
|
||||
if AContainer.IsCollection(typItm) then begin
|
||||
DeclareNameSpaceOf_WST(ADocument);
|
||||
DeclareAttributeOf_WST(propNode,s_WST_collection,'true');
|
||||
end;
|
||||
if Assigned(propTypItm) then begin
|
||||
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm));// AContainer.GetExternalName(propTypItm.Parent.Parent));
|
||||
propNode.SetAttribute(s_type,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
|
||||
|
@@ -518,6 +518,10 @@ begin
|
||||
nfoGreater : Result := ( GetOrdProp(AInstance,PropInfo) > ComparedValue );
|
||||
nfoLesser : Result := ( GetOrdProp(AInstance,PropInfo) < ComparedValue );
|
||||
nfoNotEqual : Result := ( GetOrdProp(AInstance,PropInfo) <> ComparedValue );
|
||||
nfoGreaterOrEqual : Result := ( GetOrdProp(AInstance,PropInfo) >= ComparedValue );
|
||||
nfoLesserOrEqual : Result := ( GetOrdProp(AInstance,PropInfo) <= ComparedValue );
|
||||
else
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -737,6 +741,8 @@ begin
|
||||
sfoEqualCaseSensitive : Result := ( GetStrProp(AInstance,PropInfo) = ComparedValue );
|
||||
sfoEqualCaseInsensitive : Result := AnsiSameText(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||
sfoNotEqual : Result := ( GetStrProp(AInstance,PropInfo) <> ComparedValue);
|
||||
else
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -761,6 +767,8 @@ begin
|
||||
sfoEqualCaseSensitive : Result := AnsiSameStr(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||
sfoEqualCaseInsensitive : Result := AnsiSameText(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||
sfoNotEqual : Result := not AnsiSameText(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||
else
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@@ -50,15 +50,39 @@ type
|
||||
destructor Destroy();override;
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotableCursor }
|
||||
|
||||
TObjectCollectionRemotableCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
||||
private
|
||||
FList : TObjectCollectionRemotable;
|
||||
FCurrentIndex : PtrInt;
|
||||
protected
|
||||
procedure Reset();
|
||||
function MoveNext() : Boolean;virtual;
|
||||
function Clone():ICursor;
|
||||
function GetCount() : PtrInt;
|
||||
function GetCurrent() : TObject;
|
||||
public
|
||||
constructor Create(ADataList : TObjectCollectionRemotable);
|
||||
end;
|
||||
|
||||
function Find(
|
||||
const AList : TBaseObjectArrayRemotable;
|
||||
const AFilter : string
|
||||
) : TBaseRemotable;
|
||||
) : TBaseRemotable;overload;
|
||||
function Find(
|
||||
const AList : TObjectCollectionRemotable;
|
||||
const AFilter : string
|
||||
) : TBaseRemotable;overload;
|
||||
|
||||
function Filter(
|
||||
const AList : TBaseObjectArrayRemotable;
|
||||
const AFilter : string
|
||||
) : IFilterableObjectCursor;
|
||||
) : IFilterableObjectCursor;overload;
|
||||
function Filter(
|
||||
const AList : TObjectCollectionRemotable;
|
||||
const AFilter : string
|
||||
) : IFilterableObjectCursor;overload;
|
||||
|
||||
implementation
|
||||
uses
|
||||
@@ -88,6 +112,30 @@ begin
|
||||
Result := locRes;
|
||||
end;
|
||||
|
||||
function Find(
|
||||
const AList : TObjectCollectionRemotable;
|
||||
const AFilter : string
|
||||
) : TBaseRemotable ;
|
||||
var
|
||||
locRes : TBaseRemotable;
|
||||
crs : IObjectCursor;
|
||||
fltr : IObjectFilter;
|
||||
begin
|
||||
locRes := nil;
|
||||
if ( AList <> nil ) and ( AList.Length > 0 ) then begin
|
||||
if IsStrEmpty(AFilter) then begin
|
||||
locRes := AList[0];
|
||||
end else begin
|
||||
fltr := ParseFilter(AFilter,AList.GetItemClass());
|
||||
crs := CreateCursorOn(TObjectCollectionRemotableCursor.Create(AList),fltr);
|
||||
crs.Reset();
|
||||
if crs.MoveNext() then
|
||||
locRes := TBaseRemotable(crs.GetCurrent());
|
||||
end;
|
||||
end;
|
||||
Result := locRes;
|
||||
end;
|
||||
|
||||
function Filter(
|
||||
const AList : TBaseObjectArrayRemotable;
|
||||
const AFilter : string
|
||||
@@ -109,6 +157,27 @@ begin
|
||||
Result := crs;
|
||||
end;
|
||||
|
||||
function Filter(
|
||||
const AList : TObjectCollectionRemotable;
|
||||
const AFilter : string
|
||||
) : IFilterableObjectCursor ;
|
||||
var
|
||||
crs : IFilterableObjectCursor;
|
||||
fltr : IObjectFilter;
|
||||
begin
|
||||
crs := nil;
|
||||
if ( AList <> nil ) then begin
|
||||
if IsStrEmpty(AFilter) then begin
|
||||
crs := CreateCursorOn(TObjectCollectionRemotableCursor.Create(AList),nil);
|
||||
end else begin
|
||||
fltr := ParseFilter(AFilter,AList.GetItemClass());
|
||||
crs := CreateCursorOn(TObjectCollectionRemotableCursor.Create(AList),fltr);
|
||||
crs.Reset();
|
||||
end;
|
||||
end;
|
||||
Result := crs;
|
||||
end;
|
||||
|
||||
{ TBaseObjectArrayRemotableCursor }
|
||||
|
||||
procedure TBaseObjectArrayRemotableCursor.Reset();
|
||||
@@ -182,5 +251,42 @@ begin
|
||||
inherited Destroy();
|
||||
end;
|
||||
|
||||
{ TObjectCollectionRemotableCursor }
|
||||
|
||||
procedure TObjectCollectionRemotableCursor.Reset();
|
||||
begin
|
||||
FCurrentIndex := -1;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotableCursor.MoveNext() : Boolean;
|
||||
begin
|
||||
Inc(FCurrentIndex);
|
||||
Result := ( FCurrentIndex < FList.Length );
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotableCursor.Clone() : ICursor;
|
||||
begin
|
||||
Result := TObjectCollectionRemotableCursor.Create(FList) as ICursor;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotableCursor.GetCount() : PtrInt;
|
||||
begin
|
||||
Result := FList.Length;
|
||||
end;
|
||||
|
||||
function TObjectCollectionRemotableCursor.GetCurrent() : TObject;
|
||||
begin
|
||||
if ( FCurrentIndex < 0 ) or ( FCurrentIndex >= FList.Length ) then
|
||||
raise ECursorException.Create('Invalid cursor state.');
|
||||
Result := FList[FCurrentIndex];
|
||||
end;
|
||||
|
||||
constructor TObjectCollectionRemotableCursor.Create(ADataList : TObjectCollectionRemotable);
|
||||
begin
|
||||
Assert(Assigned(ADataList));
|
||||
FList := ADataList;
|
||||
Reset();
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
Reference in New Issue
Block a user