You've already forked lazarus-ccr
First implementation of the "WSDL to Pascal" fonctionality support in ws_helper.
ws_helper now has the following parameters : ws_helper [-u] [-p] [-b] [-i] [-oPATH] inputFilename -u Generate the pascal translation of the WSDL input file -p Generate service proxy -b Generate service binder -i Generate service minimal implementation -o PATH Relative output directory -a PATH Absolute output directory git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@135 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -22,6 +22,7 @@ uses
|
|||||||
|
|
||||||
const
|
const
|
||||||
sROOT = 'ROOT';
|
sROOT = 'ROOT';
|
||||||
|
sSCOPE_INNER_NAME = 'INNER_VAL';
|
||||||
{$IFDEF wst_binary_header}
|
{$IFDEF wst_binary_header}
|
||||||
sHEADER = 'HEADER';
|
sHEADER = 'HEADER';
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -86,6 +87,7 @@ type
|
|||||||
Head : PObjectBufferItem;
|
Head : PObjectBufferItem;
|
||||||
Last : PObjectBufferItem;
|
Last : PObjectBufferItem;
|
||||||
Attributes : PObjectBuffer;
|
Attributes : PObjectBuffer;
|
||||||
|
InnerData : PDataBuffer;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
PDataBufferList = ^TDataBufferList;
|
PDataBufferList = ^TDataBufferList;
|
||||||
@ -111,6 +113,8 @@ type
|
|||||||
Const AName : String;
|
Const AName : String;
|
||||||
const ADataType : TDataType
|
const ADataType : TDataType
|
||||||
):PDataBuffer;virtual;abstract;
|
):PDataBuffer;virtual;abstract;
|
||||||
|
function CreateInnerBuffer(const ADataType : TDataType):PDataBuffer;virtual;abstract;
|
||||||
|
function GetInnerBuffer():PDataBuffer;virtual;abstract;
|
||||||
procedure NilCurrentScope();virtual;abstract;
|
procedure NilCurrentScope();virtual;abstract;
|
||||||
function IsCurrentScopeNil():Boolean;virtual;abstract;
|
function IsCurrentScopeNil():Boolean;virtual;abstract;
|
||||||
property ScopeObject : PDataBuffer Read FScopeObject;
|
property ScopeObject : PDataBuffer Read FScopeObject;
|
||||||
@ -129,6 +133,8 @@ type
|
|||||||
Const AName : String;
|
Const AName : String;
|
||||||
const ADataType : TDataType
|
const ADataType : TDataType
|
||||||
):PDataBuffer;override;
|
):PDataBuffer;override;
|
||||||
|
function CreateInnerBuffer(const ADataType : TDataType):PDataBuffer;override;
|
||||||
|
function GetInnerBuffer():PDataBuffer;override;
|
||||||
procedure NilCurrentScope();override;
|
procedure NilCurrentScope();override;
|
||||||
function IsCurrentScopeNil():Boolean;override;
|
function IsCurrentScopeNil():Boolean;override;
|
||||||
End;
|
End;
|
||||||
@ -147,6 +153,8 @@ type
|
|||||||
Const AName : String;
|
Const AName : String;
|
||||||
const ADataType : TDataType
|
const ADataType : TDataType
|
||||||
):PDataBuffer;override;
|
):PDataBuffer;override;
|
||||||
|
function CreateInnerBuffer(const ADataType : TDataType):PDataBuffer;override;
|
||||||
|
function GetInnerBuffer():PDataBuffer;
|
||||||
procedure NilCurrentScope();override;
|
procedure NilCurrentScope();override;
|
||||||
function IsCurrentScopeNil():Boolean;override;
|
function IsCurrentScopeNil():Boolean;override;
|
||||||
End;
|
End;
|
||||||
@ -162,6 +170,7 @@ type
|
|||||||
FHeaderEnterCount : Integer;
|
FHeaderEnterCount : Integer;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
private
|
private
|
||||||
|
function GetCurrentScope: String;
|
||||||
function GetCurrentScopeObject():PDataBuffer;
|
function GetCurrentScopeObject():PDataBuffer;
|
||||||
procedure SetSerializationStyle(const ASerializationStyle : TSerializationStyle);
|
procedure SetSerializationStyle(const ASerializationStyle : TSerializationStyle);
|
||||||
function GetSerializationStyle():TSerializationStyle;
|
function GetSerializationStyle():TSerializationStyle;
|
||||||
@ -250,7 +259,6 @@ type
|
|||||||
constructor Create();override;
|
constructor Create();override;
|
||||||
destructor Destroy();override;
|
destructor Destroy();override;
|
||||||
|
|
||||||
function GetCurrentScope():string;
|
|
||||||
procedure Clear();
|
procedure Clear();
|
||||||
|
|
||||||
procedure BeginObject(
|
procedure BeginObject(
|
||||||
@ -284,11 +292,19 @@ type
|
|||||||
Const ATypeInfo : PTypeInfo;
|
Const ATypeInfo : PTypeInfo;
|
||||||
Const AData
|
Const AData
|
||||||
);
|
);
|
||||||
|
procedure PutScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
const AData
|
||||||
|
);
|
||||||
procedure Get(
|
procedure Get(
|
||||||
Const ATypeInfo : PTypeInfo;
|
Const ATypeInfo : PTypeInfo;
|
||||||
Var AName : String;
|
Var AName : String;
|
||||||
Var AData
|
Var AData
|
||||||
);
|
);
|
||||||
|
procedure GetScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
var AData
|
||||||
|
);
|
||||||
|
|
||||||
procedure SaveToStream(AStream : TStream);
|
procedure SaveToStream(AStream : TStream);
|
||||||
procedure LoadFromStream(AStream : TStream);
|
procedure LoadFromStream(AStream : TStream);
|
||||||
@ -517,16 +533,22 @@ Begin
|
|||||||
dtEnum : ADest.WriteEnum(ARoot^.EnumData);
|
dtEnum : ADest.WriteEnum(ARoot^.EnumData);
|
||||||
dtObject :
|
dtObject :
|
||||||
Begin
|
Begin
|
||||||
i := ARoot^.ObjectData^.Count;
|
ADest.WriteBool(ARoot^.ObjectData^.NilObject) ;
|
||||||
ADest.WriteInt32S(i);
|
if not ARoot^.ObjectData^.NilObject then begin
|
||||||
|
i := ARoot^.ObjectData^.Count;
|
||||||
|
ADest.WriteInt32S(i);
|
||||||
|
|
||||||
If ( i > 0 ) Then Begin
|
If ( i > 0 ) Then Begin
|
||||||
p := ARoot^.ObjectData^.Head;
|
p := ARoot^.ObjectData^.Head;
|
||||||
For i := 1 To i Do Begin
|
For i := 1 To i Do Begin
|
||||||
SaveObjectToStream(p^.Data,ADest);
|
SaveObjectToStream(p^.Data,ADest);
|
||||||
p := p^.Next;
|
p := p^.Next;
|
||||||
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
ADest.WriteBool(Assigned(ARoot^.ObjectData^.InnerData));
|
||||||
|
if Assigned(ARoot^.ObjectData^.InnerData) then
|
||||||
|
SaveObjectToStream(ARoot^.ObjectData^.InnerData,ADest);
|
||||||
|
end;
|
||||||
End;
|
End;
|
||||||
dtArray :
|
dtArray :
|
||||||
Begin
|
Begin
|
||||||
@ -574,11 +596,16 @@ Begin
|
|||||||
dtEnum : Result^.EnumData := AStoreRdr.ReadEnum();
|
dtEnum : Result^.EnumData := AStoreRdr.ReadEnum();
|
||||||
dtObject :
|
dtObject :
|
||||||
Begin
|
Begin
|
||||||
i := AStoreRdr.ReadInt32S();
|
Result^.ObjectData^.NilObject := AStoreRdr.ReadBool();
|
||||||
For i := 1 To i Do Begin
|
if not Result^.ObjectData^.NilObject then begin
|
||||||
AddObj(Result,LoadObjectFromStream(AStoreRdr));
|
i := AStoreRdr.ReadInt32S();
|
||||||
End;
|
For i := 1 To i Do Begin
|
||||||
End;
|
AddObj(Result,LoadObjectFromStream(AStoreRdr));
|
||||||
|
End;
|
||||||
|
if AStoreRdr.ReadBool() then
|
||||||
|
Result^.ObjectData^.InnerData := LoadObjectFromStream(AStoreRdr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
dtArray :
|
dtArray :
|
||||||
Begin
|
Begin
|
||||||
i := AStoreRdr.ReadInt32S();
|
i := AStoreRdr.ReadInt32S();
|
||||||
@ -606,6 +633,10 @@ begin
|
|||||||
q^.Data := Nil;
|
q^.Data := Nil;
|
||||||
Freemem(q);
|
Freemem(q);
|
||||||
end;
|
end;
|
||||||
|
if Assigned(ABuffer^.InnerData) then begin
|
||||||
|
ClearObj(ABuffer^.InnerData);
|
||||||
|
ABuffer^.InnerData := nil;
|
||||||
|
end;
|
||||||
//ABuffer^.Head := nil;
|
//ABuffer^.Head := nil;
|
||||||
//ABuffer^.Last := nil;
|
//ABuffer^.Last := nil;
|
||||||
Freemem(ABuffer);
|
Freemem(ABuffer);
|
||||||
@ -698,6 +729,17 @@ begin
|
|||||||
Result := CreateObjBuffer(ADataType,AName,ScopeObject);
|
Result := CreateObjBuffer(ADataType,AName,ScopeObject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TObjectStackItem.CreateInnerBuffer(const ADataType: TDataType): PDataBuffer;
|
||||||
|
begin
|
||||||
|
Result := CreateObjBuffer(ADataType,sSCOPE_INNER_NAME,nil);
|
||||||
|
ScopeObject^.ObjectData^.InnerData := Result;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectStackItem.GetInnerBuffer(): PDataBuffer;
|
||||||
|
begin
|
||||||
|
Result := ScopeObject^.ObjectData^.InnerData;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TObjectStackItem.NilCurrentScope();
|
procedure TObjectStackItem.NilCurrentScope();
|
||||||
begin
|
begin
|
||||||
Assert(ScopeObject^.ObjectData^.Count = 0);
|
Assert(ScopeObject^.ObjectData^.Count = 0);
|
||||||
@ -706,7 +748,7 @@ end;
|
|||||||
|
|
||||||
function TObjectStackItem.IsCurrentScopeNil(): Boolean;
|
function TObjectStackItem.IsCurrentScopeNil(): Boolean;
|
||||||
begin
|
begin
|
||||||
Result:= ScopeObject^.ObjectData^.NilObject;
|
Result := ScopeObject^.ObjectData^.NilObject;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
@ -1040,7 +1082,6 @@ end;
|
|||||||
|
|
||||||
procedure TBaseBinaryFormatter.Put(const AName: String; const ATypeInfo: PTypeInfo;const AData);
|
procedure TBaseBinaryFormatter.Put(const AName: String; const ATypeInfo: PTypeInfo;const AData);
|
||||||
Var
|
Var
|
||||||
intData : Integer;
|
|
||||||
int64Data : Int64;
|
int64Data : Int64;
|
||||||
strData : string;
|
strData : string;
|
||||||
objData : TObject;
|
objData : TObject;
|
||||||
@ -1100,6 +1141,129 @@ begin
|
|||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TBaseBinaryFormatter.PutScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
const AData
|
||||||
|
);
|
||||||
|
var
|
||||||
|
int64SData : Int64;
|
||||||
|
int64UData : QWord;
|
||||||
|
strData : string;
|
||||||
|
boolData : Boolean;
|
||||||
|
enumData : TEnumData;
|
||||||
|
floatDt : TFloat_Extended_10;
|
||||||
|
begin
|
||||||
|
CheckScope();
|
||||||
|
case ATypeInfo^.Kind of
|
||||||
|
tkLString, tkAString :
|
||||||
|
begin
|
||||||
|
strData := string(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtString)^.StrData^.Data := strData;
|
||||||
|
end;
|
||||||
|
tkInt64 :
|
||||||
|
begin
|
||||||
|
int64SData := Int64(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt64S)^.Int64S := int64SData;
|
||||||
|
end;
|
||||||
|
tkQWord :
|
||||||
|
begin
|
||||||
|
int64UData := QWord(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt64U)^.Int64U := int64UData;
|
||||||
|
end;
|
||||||
|
tkClass :
|
||||||
|
begin
|
||||||
|
raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
|
||||||
|
end;
|
||||||
|
tkBool :
|
||||||
|
begin
|
||||||
|
boolData := Boolean(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtBool)^.BoolData := boolData;
|
||||||
|
end;
|
||||||
|
tkInteger :
|
||||||
|
begin
|
||||||
|
enumData := 0;
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType of
|
||||||
|
otSByte :
|
||||||
|
begin
|
||||||
|
enumData := ShortInt(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt8S)^.Int8S := enumData;
|
||||||
|
end;
|
||||||
|
otUByte :
|
||||||
|
begin
|
||||||
|
enumData := Byte(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt8U)^.Int8U := enumData;
|
||||||
|
end;
|
||||||
|
otSWord :
|
||||||
|
begin
|
||||||
|
enumData := SmallInt(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt16S)^.Int16S := enumData;
|
||||||
|
end;
|
||||||
|
otUWord :
|
||||||
|
begin
|
||||||
|
enumData := Word(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt16U)^.Int16U := enumData;
|
||||||
|
end;
|
||||||
|
otSLong :
|
||||||
|
begin
|
||||||
|
enumData := LongInt(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt32S)^.Int32S := enumData;
|
||||||
|
end;
|
||||||
|
otULong :
|
||||||
|
begin
|
||||||
|
enumData := LongWord(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtInt32U)^.Int32U := enumData;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
tkEnumeration :
|
||||||
|
begin
|
||||||
|
enumData := 0;
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType of
|
||||||
|
otSByte : enumData := ShortInt(AData);
|
||||||
|
otUByte : enumData := Byte(AData);
|
||||||
|
otSWord : enumData := SmallInt(AData);
|
||||||
|
otUWord : enumData := Word(AData);
|
||||||
|
otSLong : enumData := LongInt(AData);
|
||||||
|
otULong : enumData := LongWord(AData);
|
||||||
|
end;
|
||||||
|
StackTop().CreateInnerBuffer(dtEnum)^.EnumData := enumData;
|
||||||
|
end;
|
||||||
|
tkFloat :
|
||||||
|
begin
|
||||||
|
floatDt := 0;
|
||||||
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
|
ftSingle :
|
||||||
|
begin
|
||||||
|
floatDt := Single(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtSingle)^.SingleData := floatDt;
|
||||||
|
end;
|
||||||
|
ftDouble :
|
||||||
|
begin
|
||||||
|
floatDt := Double(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtDouble)^.DoubleData := floatDt;
|
||||||
|
end;
|
||||||
|
ftExtended :
|
||||||
|
begin
|
||||||
|
floatDt := Extended(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtExtended)^.ExtendedData := floatDt;
|
||||||
|
end;
|
||||||
|
ftCurr :
|
||||||
|
begin
|
||||||
|
floatDt := Currency(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtExtended)^.ExtendedData := floatDt;
|
||||||
|
end;
|
||||||
|
ftComp :
|
||||||
|
begin
|
||||||
|
floatDt := Comp(AData);
|
||||||
|
StackTop().CreateInnerBuffer(dtCurrency)^.CurrencyData := floatDt;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
StackTop().CreateInnerBuffer(dtExtended)^.ExtendedData := floatDt;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TBaseBinaryFormatter.Get(
|
procedure TBaseBinaryFormatter.Get(
|
||||||
const ATypeInfo: PTypeInfo;
|
const ATypeInfo: PTypeInfo;
|
||||||
var AName: String;
|
var AName: String;
|
||||||
@ -1169,6 +1333,58 @@ begin
|
|||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TBaseBinaryFormatter.GetScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
var AData
|
||||||
|
);
|
||||||
|
Var
|
||||||
|
dataBuffer : PDataBuffer;
|
||||||
|
begin
|
||||||
|
CheckScope();
|
||||||
|
dataBuffer := StackTop().GetInnerBuffer();
|
||||||
|
Case ATypeInfo^.Kind Of
|
||||||
|
tkInt64 : Int64(AData) := dataBuffer^.Int64S;
|
||||||
|
tkQWord : QWord(AData) := dataBuffer^.Int64U;
|
||||||
|
tkLString,
|
||||||
|
tkAString : string(AData) := dataBuffer^.StrData^.Data;
|
||||||
|
tkClass : raise EBinaryFormatterException.Create('Inner Scope value must be a "simple type" value.');
|
||||||
|
tkBool : Boolean(AData) := dataBuffer^.BoolData;
|
||||||
|
tkInteger :
|
||||||
|
begin
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType Of
|
||||||
|
otSByte : ShortInt(AData) := dataBuffer^.Int8S;
|
||||||
|
otUByte : Byte(AData) := dataBuffer^.Int8U;
|
||||||
|
otSWord : SmallInt(AData) := dataBuffer^.Int16S;
|
||||||
|
otUWord : Word(AData) := dataBuffer^.Int16U;
|
||||||
|
otSLong : LongInt(AData) := dataBuffer^.Int32S;
|
||||||
|
otULong : LongWord(AData) := dataBuffer^.Int32U;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
tkEnumeration :
|
||||||
|
begin
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType Of
|
||||||
|
otSByte : ShortInt(AData) := dataBuffer^.EnumData;
|
||||||
|
otUByte : Byte(AData) := dataBuffer^.EnumData;
|
||||||
|
otSWord : SmallInt(AData) := dataBuffer^.EnumData;
|
||||||
|
otUWord : Word(AData) := dataBuffer^.EnumData;
|
||||||
|
otSLong : LongInt(AData) := dataBuffer^.EnumData;
|
||||||
|
otULong : LongWord(AData) := dataBuffer^.EnumData;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
tkFloat :
|
||||||
|
begin
|
||||||
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
|
ftSingle : Single(AData) := dataBuffer^.SingleData;
|
||||||
|
ftDouble : Double(AData) := dataBuffer^.DoubleData;
|
||||||
|
ftExtended : Extended(AData) := dataBuffer^.ExtendedData;
|
||||||
|
ftCurr : Currency(AData) := dataBuffer^.CurrencyData;
|
||||||
|
else
|
||||||
|
Comp(AData) := dataBuffer^.ExtendedData;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TBaseBinaryFormatter.SaveToStream(AStream: TStream);
|
procedure TBaseBinaryFormatter.SaveToStream(AStream: TStream);
|
||||||
Var
|
Var
|
||||||
locStore : IDataStore;
|
locStore : IDataStore;
|
||||||
@ -1261,6 +1477,16 @@ begin
|
|||||||
Inc(FIndex);
|
Inc(FIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TArrayStackItem.CreateInnerBuffer(const ADataType: TDataType): PDataBuffer;
|
||||||
|
begin
|
||||||
|
raise EBinaryFormatterException.Create('Array do not support "inner value" feature.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TArrayStackItem.GetInnerBuffer(): PDataBuffer;
|
||||||
|
begin
|
||||||
|
raise EBinaryFormatterException.Create('Array do not support "inner value" feature.');
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TArrayStackItem.NilCurrentScope();
|
procedure TArrayStackItem.NilCurrentScope();
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -26,8 +26,8 @@ Const
|
|||||||
|
|
||||||
sXML_NS = 'xmlns';
|
sXML_NS = 'xmlns';
|
||||||
sXSI_NS = 'http://www.w3.org/1999/XMLSchema-instance';
|
sXSI_NS = 'http://www.w3.org/1999/XMLSchema-instance';
|
||||||
sXSI_TYPE = 'xsi:type';
|
sTYPE = 'type';
|
||||||
sXSI_NIL = 'xsi:nil';
|
sNIL = 'nil';
|
||||||
|
|
||||||
sSOAP_ENC = 'http://schemas.xmlsoap.org/soap/encoding/';
|
sSOAP_ENC = 'http://schemas.xmlsoap.org/soap/encoding/';
|
||||||
sSOAP_ENC_ABR = 'SOAP-ENC';
|
sSOAP_ENC_ABR = 'SOAP-ENC';
|
||||||
@ -198,6 +198,10 @@ Type
|
|||||||
):boolean;
|
):boolean;
|
||||||
function FindAttributeByValueInScope(Const AAttValue : String):String;
|
function FindAttributeByValueInScope(Const AAttValue : String):String;
|
||||||
function FindAttributeByNameInScope(Const AAttName : String):String;
|
function FindAttributeByNameInScope(Const AAttName : String):String;
|
||||||
|
function GetNameSpaceShortName(
|
||||||
|
const ANameSpace : string;
|
||||||
|
const ACreateIfNotFound : Boolean
|
||||||
|
):shortstring;
|
||||||
protected
|
protected
|
||||||
function GetCurrentScope():String;
|
function GetCurrentScope():String;
|
||||||
function GetCurrentScopeObject():TDOMElement;
|
function GetCurrentScopeObject():TDOMElement;
|
||||||
@ -254,11 +258,19 @@ Type
|
|||||||
Const ATypeInfo : PTypeInfo;
|
Const ATypeInfo : PTypeInfo;
|
||||||
Const AData
|
Const AData
|
||||||
);
|
);
|
||||||
|
procedure PutScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
const AData
|
||||||
|
);
|
||||||
procedure Get(
|
procedure Get(
|
||||||
Const ATypeInfo : PTypeInfo;
|
Const ATypeInfo : PTypeInfo;
|
||||||
Var AName : String;
|
Var AName : String;
|
||||||
Var AData
|
Var AData
|
||||||
);
|
);
|
||||||
|
procedure GetScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
var AData
|
||||||
|
);
|
||||||
|
|
||||||
procedure SaveToStream(AStream : TStream);
|
procedure SaveToStream(AStream : TStream);
|
||||||
procedure LoadFromStream(AStream : TStream);
|
procedure LoadFromStream(AStream : TStream);
|
||||||
@ -529,6 +541,22 @@ begin
|
|||||||
Result := '';
|
Result := '';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSOAPBaseFormatter.GetNameSpaceShortName(
|
||||||
|
const ANameSpace : string;
|
||||||
|
const ACreateIfNotFound : Boolean
|
||||||
|
): shortstring;
|
||||||
|
begin
|
||||||
|
Result := FindAttributeByValueInScope(ANameSpace);
|
||||||
|
if IsStrEmpty(Result) then begin
|
||||||
|
if ACreateIfNotFound then begin
|
||||||
|
Result := 'ns' + IntToStr(NextNameSpaceCounter());
|
||||||
|
AddScopeAttribute('xmlns:'+Result, ANameSpace);
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
Result := Copy(Result,Length('xmlns:')+1,MaxInt);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSOAPBaseFormatter.CheckScope();
|
procedure TSOAPBaseFormatter.CheckScope();
|
||||||
begin
|
begin
|
||||||
If Not HasScope() Then
|
If Not HasScope() Then
|
||||||
@ -570,26 +598,29 @@ begin
|
|||||||
Result := FDoc.CreateElement(strNodeName);
|
Result := FDoc.CreateElement(strNodeName);
|
||||||
Result.AppendChild(FDoc.CreateTextNode(AData));
|
Result.AppendChild(FDoc.CreateTextNode(AData));
|
||||||
GetCurrentScopeObject().AppendChild(Result);
|
GetCurrentScopeObject().AppendChild(Result);
|
||||||
|
If ( EncodingStyle = Encoded ) Then Begin
|
||||||
|
regItem := GetTypeRegistry().ItemByTypeInfo[ATypeInfo];
|
||||||
|
strName := regItem.DeclaredName;
|
||||||
|
namespaceLongName := regItem.NameSpace;
|
||||||
|
If Not IsStrEmpty(namespaceLongName) Then Begin
|
||||||
|
namespaceShortName := FindAttributeByValueInScope(namespaceLongName);
|
||||||
|
If IsStrEmpty(namespaceShortName) Then Begin
|
||||||
|
namespaceShortName := Format('ns%d',[NextNameSpaceCounter()]);
|
||||||
|
AddScopeAttribute(sXML_NS + ':'+namespaceShortName,namespaceLongName);
|
||||||
|
End Else Begin
|
||||||
|
namespaceShortName := ExtractNameSpaceShortName(namespaceShortName);//Copy(namespaceShortName,AnsiPos(':',namespaceShortName) + 1,MaxInt);
|
||||||
|
End;
|
||||||
|
strName := Format('%s:%s',[namespaceShortName,strName])
|
||||||
|
End;
|
||||||
|
namespaceShortName := GetNameSpaceShortName(sXSI_NS,True);
|
||||||
|
if not IsStrEmpty(namespaceShortName) then
|
||||||
|
namespaceShortName := namespaceShortName + ':';
|
||||||
|
(Result As TDOMElement).SetAttribute(namespaceShortName + sTYPE,strName);
|
||||||
|
End;
|
||||||
end else begin
|
end else begin
|
||||||
Result := GetCurrentScopeObject();
|
Result := GetCurrentScopeObject();
|
||||||
(Result as TDOMElement).SetAttribute(strNodeName,AData);
|
(Result as TDOMElement).SetAttribute(strNodeName,AData);
|
||||||
end;
|
end;
|
||||||
If ( EncodingStyle = Encoded ) Then Begin
|
|
||||||
regItem := GetTypeRegistry().ItemByTypeInfo[ATypeInfo];
|
|
||||||
strName := regItem.DeclaredName;
|
|
||||||
namespaceLongName := regItem.NameSpace;
|
|
||||||
If Not IsStrEmpty(namespaceLongName) Then Begin
|
|
||||||
namespaceShortName := FindAttributeByValueInScope(namespaceLongName);
|
|
||||||
If IsStrEmpty(namespaceShortName) Then Begin
|
|
||||||
namespaceShortName := Format('ns%d',[NextNameSpaceCounter()]);
|
|
||||||
AddScopeAttribute(sXML_NS + ':'+namespaceShortName,namespaceLongName);
|
|
||||||
End Else Begin
|
|
||||||
namespaceShortName := ExtractNameSpaceShortName(namespaceShortName);//Copy(namespaceShortName,AnsiPos(':',namespaceShortName) + 1,MaxInt);
|
|
||||||
End;
|
|
||||||
strName := Format('%s:%s',[namespaceShortName,strName])
|
|
||||||
End;
|
|
||||||
(Result As TDOMElement).SetAttribute(sXSI_TYPE,strName);
|
|
||||||
End;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSOAPBaseFormatter.PutEnum(
|
function TSOAPBaseFormatter.PutEnum(
|
||||||
@ -598,7 +629,11 @@ function TSOAPBaseFormatter.PutEnum(
|
|||||||
const AData: TEnumIntType
|
const AData: TEnumIntType
|
||||||
): TDOMNode;
|
): TDOMNode;
|
||||||
begin
|
begin
|
||||||
Result := InternalPutData(AName,ATypeInfo,GetEnumName(ATypeInfo,AData));
|
Result := InternalPutData(
|
||||||
|
AName,
|
||||||
|
ATypeInfo,
|
||||||
|
GetTypeRegistry().ItemByTypeInfo[ATypeInfo].GetExternalPropertyName(GetEnumName(ATypeInfo,AData))
|
||||||
|
);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSOAPBaseFormatter.PutBool(
|
function TSOAPBaseFormatter.PutBool(
|
||||||
@ -688,7 +723,7 @@ begin
|
|||||||
else
|
else
|
||||||
Result := locElt.NodeValue;
|
Result := locElt.NodeValue;
|
||||||
end else begin
|
end else begin
|
||||||
Error('Param not found : "%s"',[AName]);
|
Error('Param or Attribute not found : "%s"',[AName]);
|
||||||
end;
|
end;
|
||||||
//WriteLn(StringOfChar(' ',FStack.Count), AName,' = ',Result);
|
//WriteLn(StringOfChar(' ',FStack.Count), AName,' = ',Result);
|
||||||
end;
|
end;
|
||||||
@ -824,7 +859,7 @@ procedure TSOAPBaseFormatter.BeginObject(
|
|||||||
);
|
);
|
||||||
Var
|
Var
|
||||||
typData : TTypeRegistryItem;
|
typData : TTypeRegistryItem;
|
||||||
nmspc,nmspcSH : string;
|
nmspc,nmspcSH, xsiNmspcSH : string;
|
||||||
mustAddAtt : Boolean;
|
mustAddAtt : Boolean;
|
||||||
strNodeName : string;
|
strNodeName : string;
|
||||||
begin
|
begin
|
||||||
@ -858,8 +893,12 @@ begin
|
|||||||
BeginScope(strNodeName,'');
|
BeginScope(strNodeName,'');
|
||||||
If mustAddAtt Then
|
If mustAddAtt Then
|
||||||
AddScopeAttribute('xmlns:'+nmspcSH, nmspc);
|
AddScopeAttribute('xmlns:'+nmspcSH, nmspc);
|
||||||
if ( EncodingStyle = Encoded ) then
|
if ( EncodingStyle = Encoded ) then begin
|
||||||
AddScopeAttribute(sXSI_TYPE,Format('%s:%s',[nmspcSH,typData.DeclaredName]));
|
xsiNmspcSH := GetNameSpaceShortName(sXSI_NS,True);
|
||||||
|
if not IsStrEmpty(xsiNmspcSH) then
|
||||||
|
xsiNmspcSH := xsiNmspcSH + ':';
|
||||||
|
AddScopeAttribute(xsiNmspcSH + sTYPE,Format('%s:%s',[nmspcSH,typData.DeclaredName]));
|
||||||
|
end;
|
||||||
StackTop().SetNameSpace(nmspc);
|
StackTop().SetNameSpace(nmspc);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -916,27 +955,39 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSOAPBaseFormatter.NilCurrentScope();
|
procedure TSOAPBaseFormatter.NilCurrentScope();
|
||||||
|
var
|
||||||
|
nmspcSH : shortstring;
|
||||||
begin
|
begin
|
||||||
CheckScope();
|
CheckScope();
|
||||||
GetCurrentScopeObject().SetAttribute(sXSI_NIL,'true');
|
nmspcSH := FindAttributeByValueInScope(sXSI_NS);
|
||||||
|
if IsStrEmpty(nmspcSH) then begin
|
||||||
|
nmspcSH := 'ns' + IntToStr(NextNameSpaceCounter());
|
||||||
|
AddScopeAttribute('xmlns:'+nmspcSH, sXSI_NS);
|
||||||
|
end else begin
|
||||||
|
nmspcSH := Copy(nmspcSH,Length('xmlns:')+1,MaxInt);
|
||||||
|
end;
|
||||||
|
GetCurrentScopeObject().SetAttribute(nmspcSH + ':' + sNIL,'true');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSOAPBaseFormatter.IsCurrentScopeNil(): Boolean;
|
function TSOAPBaseFormatter.IsCurrentScopeNil(): Boolean;
|
||||||
Var
|
Var
|
||||||
s,nsShortName,nilName : string;
|
s,nsShortName,nilName : shortstring;
|
||||||
begin
|
begin
|
||||||
CheckScope();
|
CheckScope();
|
||||||
nsShortName := FindAttributeByValueInScope(sXSI_NS);
|
nsShortName := FindAttributeByValueInScope(sXSI_NS);
|
||||||
Result := False;
|
Result := False;
|
||||||
if not IsStrEmpty(nsShortName) then begin
|
if IsStrEmpty(nsShortName) then begin
|
||||||
|
nilName := 'nil';
|
||||||
|
end else begin
|
||||||
nsShortName := Copy(nsShortName,1 + Pos(':',nsShortName),MaxInt);
|
nsShortName := Copy(nsShortName,1 + Pos(':',nsShortName),MaxInt);
|
||||||
if not IsStrEmpty(nsShortName) Then
|
if not IsStrEmpty(nsShortName) Then
|
||||||
nsShortName := nsShortName + ':';
|
nsShortName := nsShortName + ':';
|
||||||
nilName := nsShortName + 'nil';
|
nilName := nsShortName + 'nil';
|
||||||
s := Trim(GetCurrentScopeObject().GetAttribute(nilName));
|
end;
|
||||||
if ( Length(s) > 0 ) and ( AnsiSameText(s,'true') or AnsiSameText(s,'"true"') ) then
|
s := Trim(GetCurrentScopeObject().GetAttribute(nilName));
|
||||||
Result := True;
|
if ( Length(s) > 0 ) and ( AnsiSameText(s,'true') or AnsiSameText(s,'"true"') ) then begin
|
||||||
end
|
Result := True;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSOAPBaseFormatter.BeginScope(
|
procedure TSOAPBaseFormatter.BeginScope(
|
||||||
@ -1182,6 +1233,113 @@ begin
|
|||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSOAPBaseFormatter.PutScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
const AData
|
||||||
|
);
|
||||||
|
Var
|
||||||
|
int64SData : Int64;
|
||||||
|
int64UData : QWord;
|
||||||
|
strData : string;
|
||||||
|
objData : TObject;
|
||||||
|
boolData : Boolean;
|
||||||
|
enumData : TEnumIntType;
|
||||||
|
floatDt : Extended;
|
||||||
|
dataBuffer : string;
|
||||||
|
frmt : string;
|
||||||
|
prcsn,i : Integer;
|
||||||
|
begin
|
||||||
|
CheckScope();
|
||||||
|
Case ATypeInfo^.Kind Of
|
||||||
|
tkInt64 :
|
||||||
|
begin
|
||||||
|
int64SData := Int64(AData);
|
||||||
|
dataBuffer := IntToStr(int64SData);
|
||||||
|
end;
|
||||||
|
tkQWord :
|
||||||
|
begin
|
||||||
|
int64UData := QWord(AData);
|
||||||
|
dataBuffer := IntToStr(int64UData);
|
||||||
|
end;
|
||||||
|
tkLString, tkAString :
|
||||||
|
begin
|
||||||
|
strData := string(AData);
|
||||||
|
dataBuffer := strData;
|
||||||
|
end;
|
||||||
|
tkClass :
|
||||||
|
begin
|
||||||
|
raise ESOAPException.Create('Inner Scope value must be a "simple type" value.');
|
||||||
|
end;
|
||||||
|
tkBool :
|
||||||
|
begin
|
||||||
|
boolData := Boolean(AData);
|
||||||
|
dataBuffer := BoolToStr(boolData);
|
||||||
|
end;
|
||||||
|
tkInteger :
|
||||||
|
begin
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType of
|
||||||
|
otSByte : enumData := ShortInt(AData);
|
||||||
|
otUByte : enumData := Byte(AData);
|
||||||
|
otSWord : enumData := SmallInt(AData);
|
||||||
|
otUWord : enumData := Word(AData);
|
||||||
|
otSLong,
|
||||||
|
otULong : enumData := LongInt(AData);
|
||||||
|
end;
|
||||||
|
dataBuffer := IntToStr(enumData);
|
||||||
|
end;
|
||||||
|
tkEnumeration :
|
||||||
|
begin
|
||||||
|
enumData := 0;
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType of
|
||||||
|
otSByte : enumData := ShortInt(AData);
|
||||||
|
otUByte : enumData := Byte(AData);
|
||||||
|
otSWord : enumData := SmallInt(AData);
|
||||||
|
otUWord : enumData := Word(AData);
|
||||||
|
otSLong,
|
||||||
|
otULong : enumData := LongInt(AData);
|
||||||
|
end;
|
||||||
|
dataBuffer := GetTypeRegistry().ItemByTypeInfo[ATypeInfo].GetExternalPropertyName(GetEnumName(ATypeInfo,enumData))
|
||||||
|
end;
|
||||||
|
tkFloat :
|
||||||
|
begin
|
||||||
|
floatDt := 0;
|
||||||
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
|
ftSingle :
|
||||||
|
begin
|
||||||
|
floatDt := Single(AData);
|
||||||
|
prcsn := 7;
|
||||||
|
end;
|
||||||
|
ftDouble :
|
||||||
|
begin
|
||||||
|
floatDt := Double(AData);
|
||||||
|
prcsn := 15;
|
||||||
|
end;
|
||||||
|
ftExtended :
|
||||||
|
begin
|
||||||
|
floatDt := Extended(AData);
|
||||||
|
prcsn := 15;
|
||||||
|
end;
|
||||||
|
ftCurr :
|
||||||
|
begin
|
||||||
|
floatDt := Currency(AData);
|
||||||
|
prcsn := 7;
|
||||||
|
end;
|
||||||
|
ftComp :
|
||||||
|
begin
|
||||||
|
floatDt := Comp(AData);
|
||||||
|
prcsn := 7;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
frmt := '#.' + StringOfChar('#',prcsn) + 'E-0';
|
||||||
|
dataBuffer := FormatFloat(frmt,floatDt);
|
||||||
|
i := Pos(',',dataBuffer);
|
||||||
|
if ( i > 0 ) then
|
||||||
|
dataBuffer[i] := '.';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
StackTop().ScopeObject.AppendChild(FDoc.CreateTextNode(dataBuffer));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSOAPBaseFormatter.Get(
|
procedure TSOAPBaseFormatter.Get(
|
||||||
const ATypeInfo : PTypeInfo;
|
const ATypeInfo : PTypeInfo;
|
||||||
var AName : String;
|
var AName : String;
|
||||||
@ -1251,6 +1409,68 @@ begin
|
|||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSOAPBaseFormatter.GetScopeInnerValue(
|
||||||
|
const ATypeInfo : PTypeInfo;
|
||||||
|
var AData
|
||||||
|
);
|
||||||
|
Var
|
||||||
|
enumData : TEnumIntType;
|
||||||
|
floatDt : Extended;
|
||||||
|
dataBuffer : string;
|
||||||
|
nd : TDOMNode;
|
||||||
|
begin
|
||||||
|
CheckScope();
|
||||||
|
nd := StackTop().ScopeObject;
|
||||||
|
if nd.HasChildNodes() then
|
||||||
|
dataBuffer := nd.FirstChild.NodeValue
|
||||||
|
else
|
||||||
|
dataBuffer := StackTop().ScopeObject.NodeValue;
|
||||||
|
Case ATypeInfo^.Kind Of
|
||||||
|
tkInt64 : Int64(AData) := StrToInt64Def(Trim(dataBuffer),0);
|
||||||
|
tkQWord : QWord(AData) := StrToInt64Def(Trim(dataBuffer),0);
|
||||||
|
tkLString,
|
||||||
|
tkAString : string(AData) := dataBuffer;
|
||||||
|
tkClass :
|
||||||
|
begin
|
||||||
|
raise ESOAPException.Create('Inner Scope value must be a "simple type" value.');
|
||||||
|
end;
|
||||||
|
tkBool :
|
||||||
|
begin
|
||||||
|
dataBuffer := LowerCase(Trim(dataBuffer));
|
||||||
|
if IsStrEmpty(dataBuffer) then
|
||||||
|
Boolean(AData) := False
|
||||||
|
else
|
||||||
|
Boolean(AData) := StrToBool(dataBuffer);
|
||||||
|
end;
|
||||||
|
tkInteger, tkEnumeration :
|
||||||
|
begin
|
||||||
|
if ( ATypeInfo^.Kind = tkInteger ) then
|
||||||
|
enumData := StrToIntDef(Trim(dataBuffer),0)
|
||||||
|
else
|
||||||
|
enumData := GetEnumValue(ATypeInfo,GetTypeRegistry().ItemByTypeInfo[ATypeInfo].GetInternalPropertyName(dataBuffer));
|
||||||
|
case GetTypeData(ATypeInfo)^.OrdType of
|
||||||
|
otSByte : ShortInt(AData) := enumData;
|
||||||
|
otUByte : Byte(AData) := enumData;
|
||||||
|
otSWord : SmallInt(AData) := enumData;
|
||||||
|
otUWord : Word(AData) := enumData;
|
||||||
|
otSLong,
|
||||||
|
otULong : LongInt(AData) := enumData;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
tkFloat :
|
||||||
|
begin
|
||||||
|
floatDt := StrToFloatDef(Trim(dataBuffer),0);
|
||||||
|
case GetTypeData(ATypeInfo)^.FloatType of
|
||||||
|
ftSingle : Single(AData) := floatDt;
|
||||||
|
ftDouble : Double(AData) := floatDt;
|
||||||
|
ftExtended : Extended(AData) := floatDt;
|
||||||
|
ftCurr : Currency(AData) := floatDt;
|
||||||
|
ftComp : Comp(AData) := floatDt;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSOAPBaseFormatter.SaveToStream(AStream: TStream);
|
procedure TSOAPBaseFormatter.SaveToStream(AStream: TStream);
|
||||||
begin
|
begin
|
||||||
WriteXMLFile(FDoc,AStream);
|
WriteXMLFile(FDoc,AStream);
|
||||||
|
Binary file not shown.
@ -670,7 +670,11 @@ begin
|
|||||||
c := GetEnumNameCount(typItm.DataType);
|
c := GetEnumNameCount(typItm.DataType);
|
||||||
for i := 0 to pred(c) do begin
|
for i := 0 to pred(c) do begin
|
||||||
s := Format('%s:%s',[sXSD,sENUMERATION]);
|
s := Format('%s:%s',[sXSD,sENUMERATION]);
|
||||||
CreateElement(s,restrictNode,AWsdlDocument).SetAttribute(sVALUE,GetEnumName(typItm.DataType,i));
|
//CreateElement(s,restrictNode,AWsdlDocument).SetAttribute(sVALUE,GetEnumName(typItm.DataType,i));
|
||||||
|
CreateElement(s,restrictNode,AWsdlDocument).SetAttribute(
|
||||||
|
sVALUE,
|
||||||
|
typItm.GetExternalPropertyName(GetEnumName(typItm.DataType,i))
|
||||||
|
);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="1"/>
|
<ActiveEditorIndexAtStart Value="3"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -26,14 +26,14 @@
|
|||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="40">
|
<Units Count="41">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="test_calc.lpr"/>
|
<Filename Value="test_calc.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="test_calc"/>
|
<UnitName Value="test_calc"/>
|
||||||
<CursorPos X="66" Y="10"/>
|
<CursorPos X="66" Y="10"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="80"/>
|
<UsageCount Value="82"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="main_unit.pas"/>
|
<Filename Value="main_unit.pas"/>
|
||||||
@ -41,10 +41,10 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<ResourceFilename Value="main_unit.lrs"/>
|
<ResourceFilename Value="main_unit.lrs"/>
|
||||||
<UnitName Value="main_unit"/>
|
<UnitName Value="main_unit"/>
|
||||||
<CursorPos X="28" Y="9"/>
|
<CursorPos X="40" Y="42"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="25"/>
|
||||||
<EditorIndex Value="0"/>
|
<EditorIndex Value="0"/>
|
||||||
<UsageCount Value="80"/>
|
<UsageCount Value="82"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
@ -53,16 +53,16 @@
|
|||||||
<UnitName Value="calculator"/>
|
<UnitName Value="calculator"/>
|
||||||
<CursorPos X="30" Y="16"/>
|
<CursorPos X="30" Y="16"/>
|
||||||
<TopLine Value="8"/>
|
<TopLine Value="8"/>
|
||||||
<UsageCount Value="80"/>
|
<UsageCount Value="82"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
<Filename Value="calculator_proxy.pas"/>
|
<Filename Value="calculator_proxy.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="calculator_proxy"/>
|
<UnitName Value="calculator_proxy"/>
|
||||||
<CursorPos X="20" Y="39"/>
|
<CursorPos X="20" Y="39"/>
|
||||||
<TopLine Value="37"/>
|
<TopLine Value="25"/>
|
||||||
<EditorIndex Value="1"/>
|
<EditorIndex Value="4"/>
|
||||||
<UsageCount Value="80"/>
|
<UsageCount Value="82"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
@ -158,9 +158,11 @@
|
|||||||
<Unit17>
|
<Unit17>
|
||||||
<Filename Value="..\..\..\soap_formatter.pas"/>
|
<Filename Value="..\..\..\soap_formatter.pas"/>
|
||||||
<UnitName Value="soap_formatter"/>
|
<UnitName Value="soap_formatter"/>
|
||||||
<CursorPos X="42" Y="171"/>
|
<CursorPos X="24" Y="125"/>
|
||||||
<TopLine Value="157"/>
|
<TopLine Value="172"/>
|
||||||
<UsageCount Value="32"/>
|
<EditorIndex Value="1"/>
|
||||||
|
<UsageCount Value="33"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit17>
|
</Unit17>
|
||||||
<Unit18>
|
<Unit18>
|
||||||
<Filename Value="..\..\..\service_intf.pas"/>
|
<Filename Value="..\..\..\service_intf.pas"/>
|
||||||
@ -179,9 +181,11 @@
|
|||||||
<Unit20>
|
<Unit20>
|
||||||
<Filename Value="..\..\..\base_soap_formatter.pas"/>
|
<Filename Value="..\..\..\base_soap_formatter.pas"/>
|
||||||
<UnitName Value="base_soap_formatter"/>
|
<UnitName Value="base_soap_formatter"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="3" Y="466"/>
|
||||||
<TopLine Value="454"/>
|
<TopLine Value="458"/>
|
||||||
<UsageCount Value="31"/>
|
<EditorIndex Value="2"/>
|
||||||
|
<UsageCount Value="32"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit20>
|
</Unit20>
|
||||||
<Unit21>
|
<Unit21>
|
||||||
<Filename Value="..\..\..\base_service_intf.pas"/>
|
<Filename Value="..\..\..\base_service_intf.pas"/>
|
||||||
@ -311,20 +315,81 @@
|
|||||||
<TopLine Value="115"/>
|
<TopLine Value="115"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit39>
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<UnitName Value="DOM"/>
|
||||||
|
<CursorPos X="32" Y="210"/>
|
||||||
|
<TopLine Value="356"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit40>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="3" HistoryIndex="2">
|
<JumpHistory Count="16" HistoryIndex="15">
|
||||||
<Position1>
|
<Position1>
|
||||||
<Filename Value="main_unit.pas"/>
|
<Filename Value="main_unit.pas"/>
|
||||||
<Caret Line="9" Column="28" TopLine="1"/>
|
<Caret Line="42" Column="40" TopLine="25"/>
|
||||||
</Position1>
|
</Position1>
|
||||||
<Position2>
|
<Position2>
|
||||||
<Filename Value="calculator_proxy.pas"/>
|
<Filename Value="..\..\..\soap_formatter.pas"/>
|
||||||
<Caret Line="1" Column="1" TopLine="1"/>
|
<Caret Line="20" Column="33" TopLine="4"/>
|
||||||
</Position2>
|
</Position2>
|
||||||
<Position3>
|
<Position3>
|
||||||
<Filename Value="calculator_proxy.pas"/>
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
<Caret Line="39" Column="20" TopLine="37"/>
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
</Position3>
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="63" Column="20" TopLine="49"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="78" Column="5" TopLine="64"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="84" Column="51" TopLine="70"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="88" Column="98" TopLine="74"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="106" Column="44" TopLine="92"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="112" Column="28" TopLine="98"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="117" Column="9" TopLine="103"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="179" Column="28" TopLine="151"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="193" Column="9" TopLine="177"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="..\..\..\soap_formatter.pas"/>
|
||||||
|
<Caret Line="21" Column="53" TopLine="4"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="..\..\..\soap_formatter.pas"/>
|
||||||
|
<Caret Line="125" Column="24" TopLine="115"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="1266" Column="20" TopLine="1264"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="..\..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<Caret Line="975" Column="24" TopLine="962"/>
|
||||||
|
</Position16>
|
||||||
</JumpHistory>
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="0"/>
|
<ActiveEditorIndexAtStart Value="2"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -37,7 +37,7 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ebay"/>
|
<UnitName Value="ebay"/>
|
||||||
<CursorPos X="10" Y="525"/>
|
<CursorPos X="10" Y="525"/>
|
||||||
<TopLine Value="519"/>
|
<TopLine Value="5"/>
|
||||||
<EditorIndex Value="2"/>
|
<EditorIndex Value="2"/>
|
||||||
<UsageCount Value="45"/>
|
<UsageCount Value="45"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
@ -200,16 +200,7 @@
|
|||||||
<UsageCount Value="10"/>
|
<UsageCount Value="10"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="2" HistoryIndex="1">
|
<JumpHistory Count="0" HistoryIndex="-1"/>
|
||||||
<Position1>
|
|
||||||
<Filename Value="test_ebay.lpr"/>
|
|
||||||
<Caret Line="55" Column="65" TopLine="46"/>
|
|
||||||
</Position1>
|
|
||||||
<Position2>
|
|
||||||
<Filename Value="test_ebay.lpr"/>
|
|
||||||
<Caret Line="24" Column="29" TopLine="19"/>
|
|
||||||
</Position2>
|
|
||||||
</JumpHistory>
|
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="5"/>
|
<Version Value="5"/>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="2"/>
|
<ActiveEditorIndexAtStart Value="4"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -26,14 +26,14 @@
|
|||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="23">
|
<Units Count="30">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="test_ebay_gui.lpr"/>
|
<Filename Value="test_ebay_gui.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="test_ebay_gui"/>
|
<UnitName Value="test_ebay_gui"/>
|
||||||
<CursorPos X="1" Y="17"/>
|
<CursorPos X="1" Y="17"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="63"/>
|
<UsageCount Value="101"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="umain.pas"/>
|
<Filename Value="umain.pas"/>
|
||||||
@ -41,20 +41,20 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<ResourceFilename Value="umain.lrs"/>
|
<ResourceFilename Value="umain.lrs"/>
|
||||||
<UnitName Value="umain"/>
|
<UnitName Value="umain"/>
|
||||||
<CursorPos X="39" Y="144"/>
|
<CursorPos X="44" Y="9"/>
|
||||||
<TopLine Value="137"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="1"/>
|
<EditorIndex Value="0"/>
|
||||||
<UsageCount Value="63"/>
|
<UsageCount Value="101"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="..\..\synapse_http_protocol.pas"/>
|
<Filename Value="..\..\synapse_http_protocol.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="synapse_http_protocol"/>
|
<UnitName Value="synapse_http_protocol"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="42" Y="22"/>
|
||||||
<TopLine Value="153"/>
|
<TopLine Value="8"/>
|
||||||
<EditorIndex Value="0"/>
|
<EditorIndex Value="1"/>
|
||||||
<UsageCount Value="63"/>
|
<UsageCount Value="101"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
@ -63,7 +63,7 @@
|
|||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="4"/>
|
<EditorIndex Value="4"/>
|
||||||
<UsageCount Value="30"/>
|
<UsageCount Value="50"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
@ -71,63 +71,63 @@
|
|||||||
<UnitName Value="service_intf"/>
|
<UnitName Value="service_intf"/>
|
||||||
<CursorPos X="23" Y="333"/>
|
<CursorPos X="23" Y="333"/>
|
||||||
<TopLine Value="320"/>
|
<TopLine Value="320"/>
|
||||||
<UsageCount Value="31"/>
|
<UsageCount Value="27"/>
|
||||||
</Unit4>
|
</Unit4>
|
||||||
<Unit5>
|
<Unit5>
|
||||||
<Filename Value="..\..\soap_formatter.pas"/>
|
<Filename Value="..\..\soap_formatter.pas"/>
|
||||||
<UnitName Value="soap_formatter"/>
|
<UnitName Value="soap_formatter"/>
|
||||||
<CursorPos X="60" Y="159"/>
|
<CursorPos X="60" Y="159"/>
|
||||||
<TopLine Value="149"/>
|
<TopLine Value="149"/>
|
||||||
<UsageCount Value="24"/>
|
<UsageCount Value="20"/>
|
||||||
</Unit5>
|
</Unit5>
|
||||||
<Unit6>
|
<Unit6>
|
||||||
<Filename Value="..\..\imp_utils.pas"/>
|
<Filename Value="..\..\imp_utils.pas"/>
|
||||||
<UnitName Value="imp_utils"/>
|
<UnitName Value="imp_utils"/>
|
||||||
<CursorPos X="3" Y="119"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="109"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="17"/>
|
<UsageCount Value="13"/>
|
||||||
</Unit6>
|
</Unit6>
|
||||||
<Unit7>
|
<Unit7>
|
||||||
<Filename Value="..\..\base_soap_formatter.pas"/>
|
<Filename Value="..\..\base_soap_formatter.pas"/>
|
||||||
<UnitName Value="base_soap_formatter"/>
|
<UnitName Value="base_soap_formatter"/>
|
||||||
<CursorPos X="33" Y="86"/>
|
<CursorPos X="28" Y="377"/>
|
||||||
<TopLine Value="76"/>
|
<TopLine Value="371"/>
|
||||||
<UsageCount Value="26"/>
|
<EditorIndex Value="2"/>
|
||||||
|
<UsageCount Value="43"/>
|
||||||
<Bookmarks Count="2">
|
<Bookmarks Count="2">
|
||||||
<Item0 X="14" Y="670" ID="1"/>
|
<Item0 X="14" Y="670" ID="1"/>
|
||||||
<Item1 X="1" Y="437" ID="2"/>
|
<Item1 X="1" Y="437" ID="2"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit7>
|
</Unit7>
|
||||||
<Unit8>
|
<Unit8>
|
||||||
<Filename Value="D:\lazarusClean\others_package\synapse\httpsend.pas"/>
|
<Filename Value="D:\lazarusClean\others_package\synapse\httpsend.pas"/>
|
||||||
<UnitName Value="httpsend"/>
|
<UnitName Value="httpsend"/>
|
||||||
<CursorPos X="40" Y="123"/>
|
<CursorPos X="40" Y="123"/>
|
||||||
<TopLine Value="122"/>
|
<TopLine Value="122"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit8>
|
</Unit8>
|
||||||
<Unit9>
|
<Unit9>
|
||||||
<Filename Value="ebay.pas"/>
|
<Filename Value="ebay.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ebay"/>
|
<UnitName Value="ebay"/>
|
||||||
<CursorPos X="42" Y="535"/>
|
<CursorPos X="42" Y="535"/>
|
||||||
<TopLine Value="534"/>
|
<TopLine Value="139"/>
|
||||||
<EditorIndex Value="3"/>
|
<UsageCount Value="85"/>
|
||||||
<UsageCount Value="47"/>
|
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit9>
|
</Unit9>
|
||||||
<Unit10>
|
<Unit10>
|
||||||
<Filename Value="..\..\metadata_service.pas"/>
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
<UnitName Value="metadata_service"/>
|
<UnitName Value="metadata_service"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="43"/>
|
<TopLine Value="43"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit10>
|
</Unit10>
|
||||||
<Unit11>
|
<Unit11>
|
||||||
<Filename Value="..\..\metadata_repository.pas"/>
|
<Filename Value="..\..\metadata_repository.pas"/>
|
||||||
<UnitName Value="metadata_repository"/>
|
<UnitName Value="metadata_repository"/>
|
||||||
<CursorPos X="46" Y="84"/>
|
<CursorPos X="46" Y="84"/>
|
||||||
<TopLine Value="84"/>
|
<TopLine Value="84"/>
|
||||||
<UsageCount Value="17"/>
|
<UsageCount Value="13"/>
|
||||||
<Bookmarks Count="1">
|
<Bookmarks Count="1">
|
||||||
<Item0 X="1" Y="91" ID="3"/>
|
<Item0 X="1" Y="91" ID="3"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
@ -136,83 +136,252 @@
|
|||||||
<Filename Value="ebay_proxy.pas"/>
|
<Filename Value="ebay_proxy.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ebay_proxy"/>
|
<UnitName Value="ebay_proxy"/>
|
||||||
<CursorPos X="26" Y="96"/>
|
<CursorPos X="19" Y="11"/>
|
||||||
<TopLine Value="70"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="2"/>
|
<EditorIndex Value="3"/>
|
||||||
<UsageCount Value="47"/>
|
<UsageCount Value="85"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit12>
|
</Unit12>
|
||||||
<Unit13>
|
<Unit13>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heaph.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heaph.inc"/>
|
||||||
<CursorPos X="10" Y="94"/>
|
<CursorPos X="10" Y="94"/>
|
||||||
<TopLine Value="82"/>
|
<TopLine Value="82"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit13>
|
</Unit13>
|
||||||
<Unit14>
|
<Unit14>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heap.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heap.inc"/>
|
||||||
<CursorPos X="3" Y="342"/>
|
<CursorPos X="3" Y="342"/>
|
||||||
<TopLine Value="346"/>
|
<TopLine Value="346"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit14>
|
</Unit14>
|
||||||
<Unit15>
|
<Unit15>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
|
||||||
<UnitName Value="typinfo"/>
|
<UnitName Value="typinfo"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="94"/>
|
<TopLine Value="94"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="5"/>
|
||||||
</Unit15>
|
</Unit15>
|
||||||
<Unit16>
|
<Unit16>
|
||||||
<Filename Value="ebay.lrs"/>
|
<Filename Value="ebay.lrs"/>
|
||||||
<CursorPos X="20" Y="1"/>
|
<CursorPos X="20" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="5"/>
|
||||||
</Unit16>
|
</Unit16>
|
||||||
<Unit17>
|
<Unit17>
|
||||||
<Filename Value="D:\lazarusClean\lcl\lresources.pp"/>
|
<Filename Value="D:\lazarusClean\lcl\lresources.pp"/>
|
||||||
<UnitName Value="LResources"/>
|
<UnitName Value="LResources"/>
|
||||||
<CursorPos X="3" Y="930"/>
|
<CursorPos X="3" Y="930"/>
|
||||||
<TopLine Value="907"/>
|
<TopLine Value="907"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="5"/>
|
||||||
</Unit17>
|
</Unit17>
|
||||||
<Unit18>
|
<Unit18>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
|
||||||
<CursorPos X="20" Y="169"/>
|
<CursorPos X="20" Y="169"/>
|
||||||
<TopLine Value="157"/>
|
<TopLine Value="157"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit18>
|
</Unit18>
|
||||||
<Unit19>
|
<Unit19>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpas.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpas.inc"/>
|
||||||
<CursorPos X="28" Y="446"/>
|
<CursorPos X="28" Y="446"/>
|
||||||
<TopLine Value="428"/>
|
<TopLine Value="428"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit19>
|
</Unit19>
|
||||||
<Unit20>
|
<Unit20>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\fcl\inc\contnrs.pp"/>
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\inc\contnrs.pp"/>
|
||||||
<UnitName Value="contnrs"/>
|
<UnitName Value="contnrs"/>
|
||||||
<CursorPos X="23" Y="520"/>
|
<CursorPos X="23" Y="520"/>
|
||||||
<TopLine Value="517"/>
|
<TopLine Value="517"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit20>
|
</Unit20>
|
||||||
<Unit21>
|
<Unit21>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
||||||
<CursorPos X="15" Y="204"/>
|
<CursorPos X="15" Y="204"/>
|
||||||
<TopLine Value="192"/>
|
<TopLine Value="192"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit21>
|
</Unit21>
|
||||||
<Unit22>
|
<Unit22>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\lists.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\lists.inc"/>
|
||||||
<CursorPos X="3" Y="417"/>
|
<CursorPos X="3" Y="417"/>
|
||||||
<TopLine Value="412"/>
|
<TopLine Value="412"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="..\..\wsdl_to_pascal\tmp_intf.pas"/>
|
||||||
|
<UnitName Value="tmp_intf"/>
|
||||||
|
<CursorPos X="34" Y="10344"/>
|
||||||
|
<TopLine Value="10333"/>
|
||||||
|
<UsageCount Value="20"/>
|
||||||
|
</Unit23>
|
||||||
|
<Unit24>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<UnitName Value="DOM"/>
|
||||||
|
<CursorPos X="14" Y="222"/>
|
||||||
|
<TopLine Value="210"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit24>
|
||||||
|
<Unit25>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\classes.pp"/>
|
||||||
|
<UnitName Value="Classes"/>
|
||||||
|
<CursorPos X="12" Y="32"/>
|
||||||
|
<TopLine Value="15"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit25>
|
||||||
|
<Unit26>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
||||||
|
<CursorPos X="15" Y="1153"/>
|
||||||
|
<TopLine Value="1136"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit26>
|
||||||
|
<Unit27>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\parser.inc"/>
|
||||||
|
<CursorPos X="34" Y="59"/>
|
||||||
|
<TopLine Value="51"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit27>
|
||||||
|
<Unit28>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
|
||||||
|
<CursorPos X="8" Y="116"/>
|
||||||
|
<TopLine Value="102"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit28>
|
||||||
|
<Unit29>
|
||||||
|
<Filename Value="..\..\binary_streamer.pas"/>
|
||||||
|
<UnitName Value="binary_streamer"/>
|
||||||
|
<CursorPos X="1" Y="1"/>
|
||||||
|
<TopLine Value="55"/>
|
||||||
|
<EditorIndex Value="5"/>
|
||||||
|
<UsageCount Value="18"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit29>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="0" HistoryIndex="-1"/>
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1617" Column="1" TopLine="1595"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1056" Column="41" TopLine="1042"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1609" Column="64" TopLine="1595"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3060" Column="42" TopLine="3036"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1626" Column="48" TopLine="1605"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3068" Column="41" TopLine="3046"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1646" Column="1" TopLine="1629"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1629" Column="57" TopLine="1615"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="300" Column="1" TopLine="285"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1605" Column="1" TopLine="1602"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3012" Column="42" TopLine="2998"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1166" Column="41" TopLine="1152"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1237" Column="38" TopLine="1237"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1166" Column="71" TopLine="1166"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1237" Column="113" TopLine="1237"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1241" Column="12" TopLine="1227"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1165" Column="80" TopLine="1147"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1161" Column="74" TopLine="1151"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1165" Column="14" TopLine="1147"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1225" Column="34" TopLine="1211"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1148" Column="59" TopLine="1125"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="..\..\binary_streamer.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="umain.pas"/>
|
||||||
|
<Caret Line="43" Column="9" TopLine="29"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="..\..\synapse_http_protocol.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="139"/>
|
||||||
|
</Position28>
|
||||||
|
<Position29>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1285" Column="27" TopLine="1294"/>
|
||||||
|
</Position29>
|
||||||
|
<Position30>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3663" Column="24" TopLine="3652"/>
|
||||||
|
</Position30>
|
||||||
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="5"/>
|
<Version Value="5"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<SearchPaths>
|
<SearchPaths>
|
||||||
<OtherUnitFiles Value="D:\lazarus\others_package\synapse\;..\..\"/>
|
<OtherUnitFiles Value="C:\lazarusClean\others_package\synapse\;C:\Programmes\lazarus\wst\wsdl_to_pascal\;..\..\"/>
|
||||||
<UnitOutputDirectory Value="obj"/>
|
<UnitOutputDirectory Value="obj"/>
|
||||||
<SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/>
|
<SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/>
|
||||||
</SearchPaths>
|
</SearchPaths>
|
||||||
|
@ -15,36 +15,36 @@ object Form1: TForm1
|
|||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Left = 16
|
Left = 16
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 53
|
Top = 53
|
||||||
Width = 77
|
Width = 98
|
||||||
Caption = 'eBayAuthToken'
|
Caption = 'eBayAuthToken'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object Label2: TLabel
|
object Label2: TLabel
|
||||||
Left = 16
|
Left = 16
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 79
|
Top = 79
|
||||||
Width = 30
|
Width = 37
|
||||||
Caption = 'AppId'
|
Caption = 'AppId'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object Label3: TLabel
|
object Label3: TLabel
|
||||||
Left = 16
|
Left = 16
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 111
|
Top = 111
|
||||||
Width = 30
|
Width = 38
|
||||||
Caption = 'DevId'
|
Caption = 'DevId'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object Label4: TLabel
|
object Label4: TLabel
|
||||||
Left = 16
|
Left = 16
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 144
|
Top = 144
|
||||||
Width = 45
|
Width = 56
|
||||||
Caption = 'AuthCert'
|
Caption = 'AuthCert'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
@ -115,7 +115,7 @@ object Form1: TForm1
|
|||||||
Top = 184
|
Top = 184
|
||||||
Width = 400
|
Width = 400
|
||||||
Align = alClient
|
Align = alClient
|
||||||
DefaultItemHeight = 15
|
DefaultItemHeight = 19
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
|
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
|
||||||
|
|
||||||
LazarusResources.Add('TForm1','FORMDATA',[
|
LazarusResources.Add('TForm1','FORMDATA',[
|
||||||
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'-'#1#6'Height'#3#132#1#3'Top'#3#159#0#5'W'
|
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'-'#1#6'Height'#3#132#1#3'Top'#3#159#0#5'W'
|
||||||
+'idth'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3#131#1
|
+'idth'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3#131#1
|
||||||
+#13'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form1'#8'OnCreate'#7#10'FormC'
|
+#13'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form1'#8'OnCreate'#7#10'FormC'
|
||||||
+'reate'#0#6'TPanel'#6'Panel1'#6'Height'#3#184#0#5'Width'#3#144#1#5'Align'#7#5
|
+'reate'#0#6'TPanel'#6'Panel1'#6'Height'#3#184#0#5'Width'#3#144#1#5'Align'#7#5
|
||||||
+'alTop'#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#14#3
|
+'alTop'#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#18#3
|
||||||
+'Top'#2'5'#5'Width'#2'M'#7'Caption'#6#13'eBayAuthToken'#5'Color'#7#6'clNone'
|
+'Top'#2'5'#5'Width'#2'b'#7'Caption'#6#13'eBayAuthToken'#5'Color'#7#6'clNone'
|
||||||
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#16#6'Height'#2#14#3'Top'
|
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#16#6'Height'#2#18#3'Top'
|
||||||
+#2'O'#5'Width'#2#30#7'Caption'#6#5'AppId'#5'Color'#7#6'clNone'#11'ParentColo'
|
+#2'O'#5'Width'#2'%'#7'Caption'#6#5'AppId'#5'Color'#7#6'clNone'#11'ParentColo'
|
||||||
+'r'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#16#6'Height'#2#14#3'Top'#2'o'#5'Widt'
|
+'r'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#16#6'Height'#2#18#3'Top'#2'o'#5'Widt'
|
||||||
+'h'#2#30#7'Caption'#6#5'DevId'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6
|
+'h'#2'&'#7'Caption'#6#5'DevId'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6
|
||||||
+'TLabel'#6'Label4'#4'Left'#2#16#6'Height'#2#14#3'Top'#3#144#0#5'Width'#2'-'#7
|
+'TLabel'#6'Label4'#4'Left'#2#16#6'Height'#2#18#3'Top'#3#144#0#5'Width'#2'8'#7
|
||||||
+'Caption'#6#8'AuthCert'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TBevel'
|
+'Caption'#6#8'AuthCert'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TBevel'
|
||||||
+#6'Bevel1'#4'Left'#2#10#6'Height'#3#170#0#3'Top'#2#4#5'Width'#3'|'#1#7'Ancho'
|
+#6'Bevel1'#4'Left'#2#10#6'Height'#3#170#0#3'Top'#2#4#5'Width'#3'|'#1#7'Ancho'
|
||||||
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#0#0#7'TButton'#7'Button1'#4'Left'#3
|
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#0#0#7'TButton'#7'Button1'#4'Left'#3
|
||||||
@ -27,5 +29,5 @@ LazarusResources.Add('TForm1','FORMDATA',[
|
|||||||
+'eft'#2'`'#6'Height'#2#23#3'Top'#3#136#0#5'Width'#3' '#1#7'Anchors'#11#5'akT'
|
+'eft'#2'`'#6'Height'#2#23#3'Top'#3#136#0#5'Width'#3' '#1#7'Anchors'#11#5'akT'
|
||||||
+'op'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#5#0#0#0#9'TTreeView'#6'trvOut'#6'H'
|
+'op'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#5#0#0#0#9'TTreeView'#6'trvOut'#6'H'
|
||||||
+'eight'#3#204#0#3'Top'#3#184#0#5'Width'#3#144#1#5'Align'#7#8'alClient'#17'De'
|
+'eight'#3#204#0#3'Top'#3#184#0#5'Width'#3#144#1#5'Align'#7#8'alClient'#17'De'
|
||||||
+'faultItemHeight'#2#15#8'TabOrder'#2#1#0#0#0
|
+'faultItemHeight'#2#19#8'TabOrder'#2#1#0#0#0
|
||||||
]);
|
]);
|
||||||
|
@ -6,7 +6,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||||
Buttons, StdCtrls, ComCtrls;
|
Buttons, StdCtrls, ComCtrls, eBaySvc_intf;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -40,7 +40,8 @@ var
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses TypInfo, StrUtils,
|
uses TypInfo, StrUtils,
|
||||||
httpsend, ssl_openssl,
|
httpsend,
|
||||||
|
ssl_openssl,
|
||||||
service_intf, soap_formatter, base_service_intf, base_soap_formatter,
|
service_intf, soap_formatter, base_service_intf, base_soap_formatter,
|
||||||
ebay, ebay_proxy,
|
ebay, ebay_proxy,
|
||||||
synapse_http_protocol;
|
synapse_http_protocol;
|
||||||
|
147
wst/trunk/tests/files/CALCULATOR.wsdl
Normal file
147
wst/trunk/tests/files/CALCULATOR.wsdl
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<definitions name="calculator" targetNamespace="urn:CALCULATOR" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:CALCULATOR" xmlns="http://schemas.xmlsoap.org/wsdl/">
|
||||||
|
<types>
|
||||||
|
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:CALCULATOR">
|
||||||
|
<xsd:simpleType name="TCalc_Op">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="coAdd"/>
|
||||||
|
<xsd:enumeration value="coSub"/>
|
||||||
|
<xsd:enumeration value="coMul"/>
|
||||||
|
<xsd:enumeration value="coDiv"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:element name="TBinaryArgsResult">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Arg_A" type="xsd:int" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Arg_B" type="xsd:int" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Arg_R" type="xsd:int" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Arg_OP" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Arg_OpEnum" type="tns:TCalc_Op" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Comment" type="xsd:string" minOccurs="0" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TBinaryArgsResultArray">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="tns:TBinaryArgsResult" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="CalcHeader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Login" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Password" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="WantedPrecision" type="xsd:int" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="mustUnderstand" type="xsd:int" attribute="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="CalcResultHeader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Login" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Password" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="WantedPrecision" type="xsd:int" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="TimeStamp" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="SessionID" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="mustUnderstand" type="xsd:int" attribute="optional"/>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
</types>
|
||||||
|
<message name="AddInt">
|
||||||
|
<part name="A" type="xsd:int"/>
|
||||||
|
<part name="B" type="xsd:int"/>
|
||||||
|
</message>
|
||||||
|
<message name="AddIntResponse">
|
||||||
|
<part name="result" type="tns:TBinaryArgsResult"/>
|
||||||
|
</message>
|
||||||
|
<message name="DivInt">
|
||||||
|
<part name="A" type="xsd:int"/>
|
||||||
|
<part name="B" type="xsd:int"/>
|
||||||
|
</message>
|
||||||
|
<message name="DivIntResponse">
|
||||||
|
<part name="result" type="xsd:int"/>
|
||||||
|
</message>
|
||||||
|
<message name="DoAllOperations">
|
||||||
|
<part name="A" type="xsd:int"/>
|
||||||
|
<part name="B" type="xsd:int"/>
|
||||||
|
</message>
|
||||||
|
<message name="DoAllOperationsResponse">
|
||||||
|
<part name="result" type="tns:TBinaryArgsResultArray"/>
|
||||||
|
</message>
|
||||||
|
<message name="DoOperation">
|
||||||
|
<part name="A" type="xsd:int"/>
|
||||||
|
<part name="B" type="xsd:int"/>
|
||||||
|
<part name="AOperation" type="tns:TCalc_Op"/>
|
||||||
|
</message>
|
||||||
|
<message name="DoOperationResponse">
|
||||||
|
<part name="result" type="tns:TBinaryArgsResult"/>
|
||||||
|
</message>
|
||||||
|
<portType name="ICalculator">
|
||||||
|
<operation name="AddInt">
|
||||||
|
<input message="tns:AddInt"/>
|
||||||
|
<output message="tns:AddIntResponse"/>
|
||||||
|
</operation>
|
||||||
|
<operation name="DivInt">
|
||||||
|
<input message="tns:DivInt"/>
|
||||||
|
<output message="tns:DivIntResponse"/>
|
||||||
|
</operation>
|
||||||
|
<operation name="DoAllOperations">
|
||||||
|
<input message="tns:DoAllOperations"/>
|
||||||
|
<output message="tns:DoAllOperationsResponse"/>
|
||||||
|
</operation>
|
||||||
|
<operation name="DoOperation">
|
||||||
|
<input message="tns:DoOperation"/>
|
||||||
|
<output message="tns:DoOperationResponse"/>
|
||||||
|
</operation>
|
||||||
|
</portType>
|
||||||
|
<binding name="ICalculatorBinding" type="tns:ICalculator">
|
||||||
|
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||||
|
<soap:operation soapAction="urn:CALCULATOR/ICalculatorAddInt"/>
|
||||||
|
<operation name="AddInt">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
<soap:operation soapAction="urn:CALCULATOR/ICalculatorDivInt"/>
|
||||||
|
<operation name="DivInt">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
<soap:operation soapAction="urn:CALCULATOR/ICalculatorDoAllOperations"/>
|
||||||
|
<operation name="DoAllOperations">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
<soap:operation soapAction="urn:CALCULATOR/ICalculatorDoOperation"/>
|
||||||
|
<operation name="DoOperation">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:CALCULATOR" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
</binding>
|
||||||
|
<service name="ICalculator">
|
||||||
|
<port name="ICalculatorPort" binding="tns:ICalculatorBinding">
|
||||||
|
<soap:address location="http://127.0.0.1:8000/services/ICalculator"/>
|
||||||
|
</port>
|
||||||
|
</service>
|
||||||
|
</definitions>
|
214
wst/trunk/tests/files/metadata_service.wsdl
Normal file
214
wst/trunk/tests/files/metadata_service.wsdl
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<definitions name="metadata_service" targetNamespace="urn:wst_base" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:wst_base" xmlns="http://schemas.xmlsoap.org/wsdl/">
|
||||||
|
<types>
|
||||||
|
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:wst_base">
|
||||||
|
<xsd:simpleType name="TOperationParamFlag">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
<xsd:enumeration value="opfNone"/>
|
||||||
|
<xsd:enumeration value="opfIn"/>
|
||||||
|
<xsd:enumeration value="opfVar"/>
|
||||||
|
<xsd:enumeration value="opfOut"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
<xsd:element name="TWSTMtdOperationParam">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="TypeName" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Modifier" type="tns:TOperationParamFlag" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdOperationParamArray">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="tns:TWSTMtdOperationParam" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdServiceOperation">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Params" type="tns:TWSTMtdOperationParamArray" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdServiceOperationArray">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="tns:TWSTMtdServiceOperation" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdService">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Operations" type="tns:TWSTMtdServiceOperationArray" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdServiceArray">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="tns:TWSTMtdService" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TWSTMtdRepository">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="NameSpace" type="xsd:string" minOccurs="1" maxOccurs="1"/>
|
||||||
|
<xsd:element name="Services" type="tns:TWSTMtdServiceArray" minOccurs="1" maxOccurs="1"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfStringRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfBooleanRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:boolean" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt8URemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:unsignedByte" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt8SRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:byte" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt16URemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:unsignedShort" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt16SRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt32URemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:unsignedInt" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt32SRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt64URemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfInt64SRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:long" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfFloatSingleRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:float" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfFloatDoubleRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:double" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfFloatExtendedRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:double" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="TArrayOfFloatCurrencyRemotable">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="item" type="xsd:float" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
</types>
|
||||||
|
<message name="GetRepositoryList"/>
|
||||||
|
<message name="GetRepositoryListResponse">
|
||||||
|
<part name="result" type="tns:TArrayOfStringRemotable"/>
|
||||||
|
</message>
|
||||||
|
<message name="GetRepositoryInfo">
|
||||||
|
<part name="AName" type="xsd:string"/>
|
||||||
|
</message>
|
||||||
|
<message name="GetRepositoryInfoResponse">
|
||||||
|
<part name="result" type="tns:TWSTMtdRepository"/>
|
||||||
|
</message>
|
||||||
|
<portType name="IWSTMetadataService">
|
||||||
|
<operation name="GetRepositoryList">
|
||||||
|
<input message="tns:GetRepositoryList"/>
|
||||||
|
<output message="tns:GetRepositoryListResponse"/>
|
||||||
|
</operation>
|
||||||
|
<operation name="GetRepositoryInfo">
|
||||||
|
<input message="tns:GetRepositoryInfo"/>
|
||||||
|
<output message="tns:GetRepositoryInfoResponse"/>
|
||||||
|
</operation>
|
||||||
|
</portType>
|
||||||
|
<binding name="IWSTMetadataServiceBinding" type="tns:IWSTMetadataService">
|
||||||
|
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||||
|
<soap:operation soapAction="urn:wst_base/IWSTMetadataServiceGetRepositoryList"/>
|
||||||
|
<operation name="GetRepositoryList">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:wst_base" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:wst_base" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
<soap:operation soapAction="urn:wst_base/IWSTMetadataServiceGetRepositoryInfo"/>
|
||||||
|
<operation name="GetRepositoryInfo">
|
||||||
|
<input>
|
||||||
|
<soap:body use="encoded" namespace="urn:wst_base" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</input>
|
||||||
|
<output>
|
||||||
|
<soap:body use="encoded" namespace="urn:wst_base" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
</binding>
|
||||||
|
<service name="IWSTMetadataService">
|
||||||
|
<port name="IWSTMetadataServicePort" binding="tns:IWSTMetadataServiceBinding">
|
||||||
|
<soap:address location="http://127.0.0.1:8000/services/IWSTMetadataService"/>
|
||||||
|
</port>
|
||||||
|
</service>
|
||||||
|
</definitions>
|
@ -16,7 +16,7 @@ Const
|
|||||||
sADDRESS = 'http:Address=http://api.google.com/search/beta2'+
|
sADDRESS = 'http:Address=http://api.google.com/search/beta2'+
|
||||||
';ProxyServer=10.0.0.5;ProxyPort=8080';
|
';ProxyServer=10.0.0.5;ProxyPort=8080';
|
||||||
sTARGET = 'urn:GoogleSearch';
|
sTARGET = 'urn:GoogleSearch';
|
||||||
sKEY = '0w9pU3tQFHJyjRUP/bKgv2qwCoXf5pop';
|
sKEY = '<your key here>';
|
||||||
sSERVICE_PROTOCOL = 'SOAP';
|
sSERVICE_PROTOCOL = 'SOAP';
|
||||||
Var
|
Var
|
||||||
tmpObj : IGoogleSearch;
|
tmpObj : IGoogleSearch;
|
||||||
|
@ -293,8 +293,8 @@ initialization
|
|||||||
Server_service_RegisterBinaryFormat();
|
Server_service_RegisterBinaryFormat();
|
||||||
Server_service_RegisterSoapFormat();
|
Server_service_RegisterSoapFormat();
|
||||||
|
|
||||||
RegisterCalculatorImplementationFactory();
|
|
||||||
Server_service_RegisterCalculatorService();
|
Server_service_RegisterCalculatorService();
|
||||||
|
RegisterCalculatorImplementationFactory();
|
||||||
|
|
||||||
Server_service_RegisterWSTMetadataServiceService();
|
Server_service_RegisterWSTMetadataServiceService();
|
||||||
RegisterWSTMetadataServiceImplementationFactory();
|
RegisterWSTMetadataServiceImplementationFactory();
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="5"/>
|
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -37,20 +36,16 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="wst_http_server"/>
|
<UnitName Value="wst_http_server"/>
|
||||||
<CursorPos X="30" Y="29"/>
|
<CursorPos X="30" Y="29"/>
|
||||||
<TopLine Value="12"/>
|
<TopLine Value="13"/>
|
||||||
<EditorIndex Value="4"/>
|
|
||||||
<UsageCount Value="202"/>
|
<UsageCount Value="202"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="app_object.pas"/>
|
<Filename Value="app_object.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="app_object"/>
|
<UnitName Value="app_object"/>
|
||||||
<CursorPos X="1" Y="258"/>
|
<CursorPos X="46" Y="296"/>
|
||||||
<TopLine Value="237"/>
|
<TopLine Value="63"/>
|
||||||
<EditorIndex Value="5"/>
|
|
||||||
<UsageCount Value="202"/>
|
<UsageCount Value="202"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Core\IdSocketHandle.pas"/>
|
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\fpc\Core\IdSocketHandle.pas"/>
|
||||||
@ -158,13 +153,11 @@
|
|||||||
<UnitName Value="server_service_intf"/>
|
<UnitName Value="server_service_intf"/>
|
||||||
<CursorPos X="56" Y="332"/>
|
<CursorPos X="56" Y="332"/>
|
||||||
<TopLine Value="319"/>
|
<TopLine Value="319"/>
|
||||||
<EditorIndex Value="1"/>
|
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
<Bookmarks Count="2">
|
<Bookmarks Count="2">
|
||||||
<Item0 X="28" Y="60" ID="0"/>
|
<Item0 X="28" Y="60" ID="0"/>
|
||||||
<Item1 X="21" Y="169" ID="2"/>
|
<Item1 X="21" Y="169" ID="2"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit17>
|
</Unit17>
|
||||||
<Unit18>
|
<Unit18>
|
||||||
<Filename Value="..\..\base_service_intf.pas"/>
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
@ -172,12 +165,10 @@
|
|||||||
<UnitName Value="base_service_intf"/>
|
<UnitName Value="base_service_intf"/>
|
||||||
<CursorPos X="75" Y="817"/>
|
<CursorPos X="75" Y="817"/>
|
||||||
<TopLine Value="811"/>
|
<TopLine Value="811"/>
|
||||||
<EditorIndex Value="2"/>
|
|
||||||
<UsageCount Value="201"/>
|
<UsageCount Value="201"/>
|
||||||
<Bookmarks Count="1">
|
<Bookmarks Count="1">
|
||||||
<Item0 X="52" Y="707" ID="1"/>
|
<Item0 X="52" Y="707" ID="1"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit18>
|
</Unit18>
|
||||||
<Unit19>
|
<Unit19>
|
||||||
<Filename Value="..\..\server_service_imputils.pas"/>
|
<Filename Value="..\..\server_service_imputils.pas"/>
|
||||||
@ -244,12 +235,10 @@
|
|||||||
<UnitName Value="metadata_wsdl"/>
|
<UnitName Value="metadata_wsdl"/>
|
||||||
<CursorPos X="39" Y="549"/>
|
<CursorPos X="39" Y="549"/>
|
||||||
<TopLine Value="537"/>
|
<TopLine Value="537"/>
|
||||||
<EditorIndex Value="7"/>
|
|
||||||
<UsageCount Value="201"/>
|
<UsageCount Value="201"/>
|
||||||
<Bookmarks Count="1">
|
<Bookmarks Count="1">
|
||||||
<Item0 X="23" Y="440" ID="3"/>
|
<Item0 X="23" Y="440" ID="3"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit27>
|
</Unit27>
|
||||||
<Unit28>
|
<Unit28>
|
||||||
<Filename Value="..\..\metadata_repository.pas"/>
|
<Filename Value="..\..\metadata_repository.pas"/>
|
||||||
@ -285,9 +274,7 @@
|
|||||||
<UnitName Value="base_soap_formatter"/>
|
<UnitName Value="base_soap_formatter"/>
|
||||||
<CursorPos X="1" Y="249"/>
|
<CursorPos X="1" Y="249"/>
|
||||||
<TopLine Value="235"/>
|
<TopLine Value="235"/>
|
||||||
<EditorIndex Value="0"/>
|
|
||||||
<UsageCount Value="59"/>
|
<UsageCount Value="59"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit32>
|
</Unit32>
|
||||||
<Unit33>
|
<Unit33>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
|
||||||
@ -478,17 +465,15 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="calculator_imp"/>
|
<UnitName Value="calculator_imp"/>
|
||||||
<CursorPos X="65" Y="3"/>
|
<CursorPos X="65" Y="3"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="129"/>
|
||||||
<EditorIndex Value="6"/>
|
|
||||||
<UsageCount Value="123"/>
|
<UsageCount Value="123"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit61>
|
</Unit61>
|
||||||
<Unit62>
|
<Unit62>
|
||||||
<Filename Value="..\calculator\srv\calculator_binder.pas"/>
|
<Filename Value="..\calculator\srv\calculator_binder.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="calculator_binder"/>
|
<UnitName Value="calculator_binder"/>
|
||||||
<CursorPos X="69" Y="51"/>
|
<CursorPos X="13" Y="31"/>
|
||||||
<TopLine Value="39"/>
|
<TopLine Value="17"/>
|
||||||
<UsageCount Value="123"/>
|
<UsageCount Value="123"/>
|
||||||
</Unit62>
|
</Unit62>
|
||||||
<Unit63>
|
<Unit63>
|
||||||
@ -543,9 +528,7 @@
|
|||||||
<UnitName Value="logger_extension"/>
|
<UnitName Value="logger_extension"/>
|
||||||
<CursorPos X="32" Y="11"/>
|
<CursorPos X="32" Y="11"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="3"/>
|
|
||||||
<UsageCount Value="36"/>
|
<UsageCount Value="36"/>
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit70>
|
</Unit70>
|
||||||
<Unit71>
|
<Unit71>
|
||||||
<Filename Value="..\..\soap_formatter.pas"/>
|
<Filename Value="..\..\soap_formatter.pas"/>
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="0"/>
|
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -21,13 +20,10 @@
|
|||||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||||
</local>
|
</local>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
<RequiredPackages Count="2">
|
<RequiredPackages Count="1">
|
||||||
<Item1>
|
<Item1>
|
||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
<Item2>
|
|
||||||
<PackageName Value="indylaz"/>
|
|
||||||
</Item2>
|
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="27">
|
<Units Count="27">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
@ -36,7 +32,7 @@
|
|||||||
<UnitName Value="metadata_browser"/>
|
<UnitName Value="metadata_browser"/>
|
||||||
<CursorPos X="25" Y="1"/>
|
<CursorPos X="25" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="74"/>
|
<UsageCount Value="75"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="umain.pas"/>
|
<Filename Value="umain.pas"/>
|
||||||
@ -44,11 +40,9 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<ResourceFilename Value="umain.lrs"/>
|
<ResourceFilename Value="umain.lrs"/>
|
||||||
<UnitName Value="umain"/>
|
<UnitName Value="umain"/>
|
||||||
<CursorPos X="59" Y="99"/>
|
<CursorPos X="32" Y="97"/>
|
||||||
<TopLine Value="79"/>
|
<TopLine Value="82"/>
|
||||||
<EditorIndex Value="0"/>
|
<UsageCount Value="75"/>
|
||||||
<UsageCount Value="74"/>
|
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="..\..\metadata_service_proxy.pas"/>
|
<Filename Value="..\..\metadata_service_proxy.pas"/>
|
||||||
@ -56,7 +50,7 @@
|
|||||||
<UnitName Value="metadata_service_proxy"/>
|
<UnitName Value="metadata_service_proxy"/>
|
||||||
<CursorPos X="1" Y="43"/>
|
<CursorPos X="1" Y="43"/>
|
||||||
<TopLine Value="29"/>
|
<TopLine Value="29"/>
|
||||||
<UsageCount Value="74"/>
|
<UsageCount Value="75"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
<Filename Value="..\..\base_service_intf.pas"/>
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
@ -113,7 +107,7 @@
|
|||||||
<UnitName Value="metadata_service"/>
|
<UnitName Value="metadata_service"/>
|
||||||
<CursorPos X="35" Y="106"/>
|
<CursorPos X="35" Y="106"/>
|
||||||
<TopLine Value="99"/>
|
<TopLine Value="99"/>
|
||||||
<UsageCount Value="69"/>
|
<UsageCount Value="70"/>
|
||||||
</Unit10>
|
</Unit10>
|
||||||
<Unit11>
|
<Unit11>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\objpash.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\objpash.inc"/>
|
||||||
|
@ -8,7 +8,7 @@ uses
|
|||||||
{$ENDIF}{$ENDIF}
|
{$ENDIF}{$ENDIF}
|
||||||
Interfaces, // this includes the LCL widgetset
|
Interfaces, // this includes the LCL widgetset
|
||||||
Forms
|
Forms
|
||||||
{ add your units here }, umain, metadata_service_proxy, indylaz,
|
{ add your units here }, umain, metadata_service_proxy,
|
||||||
metadata_service;
|
metadata_service;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
@ -7,14 +7,10 @@ object fMain: TfMain
|
|||||||
VertScrollBar.Page = 310
|
VertScrollBar.Page = 310
|
||||||
ActiveControl = edtAddress
|
ActiveControl = edtAddress
|
||||||
Caption = 'WST Metadata Browser'
|
Caption = 'WST Metadata Browser'
|
||||||
ClientHeight = 311
|
|
||||||
ClientWidth = 574
|
|
||||||
object pnlHead: TPanel
|
object pnlHead: TPanel
|
||||||
Height = 82
|
Height = 82
|
||||||
Width = 574
|
Width = 574
|
||||||
Align = alTop
|
Align = alTop
|
||||||
ClientHeight = 82
|
|
||||||
ClientWidth = 574
|
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Left = 14
|
Left = 14
|
||||||
@ -89,21 +85,19 @@ object fMain: TfMain
|
|||||||
Align = alClient
|
Align = alClient
|
||||||
BevelInner = bvRaised
|
BevelInner = bvRaised
|
||||||
BevelOuter = bvLowered
|
BevelOuter = bvLowered
|
||||||
ClientHeight = 229
|
|
||||||
ClientWidth = 574
|
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
object Label2: TLabel
|
object Label2: TLabel
|
||||||
Left = 14
|
Left = 14
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 14
|
Top = 14
|
||||||
Width = 53
|
Width = 67
|
||||||
Caption = 'Repository'
|
Caption = 'Repository'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
end
|
end
|
||||||
object edtRepositoryList: TComboBox
|
object edtRepositoryList: TComboBox
|
||||||
Left = 112
|
Left = 112
|
||||||
Height = 21
|
Height = 24
|
||||||
Top = 7
|
Top = 7
|
||||||
Width = 344
|
Width = 344
|
||||||
Anchors = [akTop, akLeft, akRight]
|
Anchors = [akTop, akLeft, akRight]
|
||||||
@ -145,10 +139,12 @@ object fMain: TfMain
|
|||||||
top = 464
|
top = 464
|
||||||
object actGetRepositoryList: TAction
|
object actGetRepositoryList: TAction
|
||||||
Caption = 'Get Rep. List'
|
Caption = 'Get Rep. List'
|
||||||
|
DisableIfNoHandler = True
|
||||||
OnExecute = actGetRepositoryListExecute
|
OnExecute = actGetRepositoryListExecute
|
||||||
end
|
end
|
||||||
object actGetRepository: TAction
|
object actGetRepository: TAction
|
||||||
Caption = 'Get Repository'
|
Caption = 'Get Repository'
|
||||||
|
DisableIfNoHandler = True
|
||||||
OnExecute = actGetRepositoryExecute
|
OnExecute = actGetRepositoryExecute
|
||||||
OnUpdate = actGetRepositoryUpdate
|
OnUpdate = actGetRepositoryUpdate
|
||||||
end
|
end
|
||||||
|
@ -3,50 +3,49 @@
|
|||||||
LazarusResources.Add('TfMain','FORMDATA',[
|
LazarusResources.Add('TfMain','FORMDATA',[
|
||||||
'TPF0'#6'TfMain'#5'fMain'#4'Left'#3#175#0#6'Height'#3'7'#1#3'Top'#3#233#0#5'W'
|
'TPF0'#6'TfMain'#5'fMain'#4'Left'#3#175#0#6'Height'#3'7'#1#3'Top'#3#233#0#5'W'
|
||||||
+'idth'#3'>'#2#18'HorzScrollBar.Page'#3'='#2#18'VertScrollBar.Page'#3'6'#1#13
|
+'idth'#3'>'#2#18'HorzScrollBar.Page'#3'='#2#18'VertScrollBar.Page'#3'6'#1#13
|
||||||
+'ActiveControl'#7#10'edtAddress'#7'Caption'#6#20'WST Metadata Browser'#12'Cl'
|
+'ActiveControl'#7#10'edtAddress'#7'Caption'#6#20'WST Metadata Browser'#0#6'T'
|
||||||
+'ientHeight'#3'7'#1#11'ClientWidth'#3'>'#2#0#6'TPanel'#7'pnlHead'#6'Height'#2
|
+'Panel'#7'pnlHead'#6'Height'#2'R'#5'Width'#3'>'#2#5'Align'#7#5'alTop'#8'TabO'
|
||||||
+'R'#5'Width'#3'>'#2#5'Align'#7#5'alTop'#12'ClientHeight'#2'R'#11'ClientWidth'
|
+'rder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#14#6'Height'#2#18#3'Top'#2#12#5'W'
|
||||||
+#3'>'#2#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#14#6'Height'#2#18#3
|
+'idth'#2#26#7'Caption'#6#3'URL'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6
|
||||||
+'Top'#2#12#5'Width'#2#26#7'Caption'#6#3'URL'#5'Color'#7#6'clNone'#11'ParentC'
|
+'TLabel'#6'Label3'#4'Left'#2#11#6'Height'#2#18#3'Top'#2'.'#5'Width'#2'-'#7'C'
|
||||||
+'olor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#11#6'Height'#2#18#3'Top'#2'.'#5'W'
|
+'aption'#6#6'Format'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TEdit'#10
|
||||||
+'idth'#2'-'#7'Caption'#6#6'Format'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0
|
+'edtAddress'#4'Left'#2'X'#6'Height'#2#23#3'Top'#2#12#5'Width'#3#224#1#7'Anch'
|
||||||
+#5'TEdit'#10'edtAddress'#4'Left'#2'X'#6'Height'#2#23#3'Top'#2#12#5'Width'#3
|
+'ors'#11#5'akTop'#6'akLeft'#7'akRight'#0#12'Font.CharSet'#7#12'ANSI_CHARSET'
|
||||||
+#224#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#12'Font.CharSet'#7#12'A'
|
+#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#243#9'Font.Name'#6#5'Arial'#10
|
||||||
+'NSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#243#9'Font.Name'
|
+'Font.Pitch'#7#10'fpVariable'#8'TabOrder'#2#0#4'Text'#6'6http://127.0.0.1:80'
|
||||||
+#6#5'Arial'#10'Font.Pitch'#7#10'fpVariable'#8'TabOrder'#2#0#4'Text'#6'6http:'
|
+'00/wst/services/IWSTMetadataService'#0#0#7'TButton'#13'btnGetRepList'#4'Lef'
|
||||||
+'//127.0.0.1:8000/wst/services/IWSTMetadataService'#0#0#7'TButton'#13'btnGet'
|
+'t'#3#221#1#6'Height'#2#25#3'Top'#2'('#5'Width'#2'['#6'Action'#7#20'actGetRe'
|
||||||
+'RepList'#4'Left'#3#221#1#6'Height'#2#25#3'Top'#2'('#5'Width'#2'['#6'Action'
|
+'positoryList'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBor'
|
||||||
+#7#20'actGetRepositoryList'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpa'
|
+'der'#2#4#8'TabOrder'#2#2#0#0#11'TRadioGroup'#9'edtFormat'#4'Left'#2'X'#6'He'
|
||||||
+'cing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#11'TRadioGroup'#9'edtFormat'#4'Le'
|
+'ight'#2'%'#3'Top'#2'#'#5'Width'#3#24#1#8'AutoFill'#9#7'Caption'#6#9' &Forma'
|
||||||
+'ft'#2'X'#6'Height'#2'%'#3'Top'#2'#'#5'Width'#3#24#1#8'AutoFill'#9#7'Caption'
|
+'t '#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2
|
||||||
+#6#9' &Format '#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBotto'
|
+#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'Child'
|
||||||
+'mSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResi'
|
+'Sizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.Shrin'
|
||||||
+'ze'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'Child'
|
+'kHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsSc'
|
||||||
+'Sizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'
|
+'aleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'Ch'
|
||||||
+#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBot'
|
+'ildSizing.ControlsPerLine'#2#2#7'Columns'#2#2#9'ItemIndex'#2#0#13'Items.Str'
|
||||||
+'tom'#27'ChildSizing.ControlsPerLine'#2#2#7'Columns'#2#2#9'ItemIndex'#2#0#13
|
+'ings'#1#6#5'&SOAP'#6#7'&binary'#0#8'TabOrder'#2#1#0#0#0#6'TPanel'#9'pnlClie'
|
||||||
+'Items.Strings'#1#6#5'&SOAP'#6#7'&binary'#0#8'TabOrder'#2#1#0#0#0#6'TPanel'#9
|
+'nt'#6'Height'#3#229#0#3'Top'#2'R'#5'Width'#3'>'#2#5'Align'#7#8'alClient'#10
|
||||||
+'pnlClient'#6'Height'#3#229#0#3'Top'#2'R'#5'Width'#3'>'#2#5'Align'#7#8'alCli'
|
+'BevelInner'#7#8'bvRaised'#10'BevelOuter'#7#9'bvLowered'#8'TabOrder'#2#1#0#6
|
||||||
+'ent'#10'BevelInner'#7#8'bvRaised'#10'BevelOuter'#7#9'bvLowered'#12'ClientHe'
|
+'TLabel'#6'Label2'#4'Left'#2#14#6'Height'#2#18#3'Top'#2#14#5'Width'#2'C'#7'C'
|
||||||
+'ight'#3#229#0#11'ClientWidth'#3'>'#2#8'TabOrder'#2#1#0#6'TLabel'#6'Label2'#4
|
+'aption'#6#10'Repository'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#9'TComb'
|
||||||
+'Left'#2#14#6'Height'#2#14#3'Top'#2#14#5'Width'#2'5'#7'Caption'#6#10'Reposit'
|
+'oBox'#17'edtRepositoryList'#4'Left'#2'p'#6'Height'#2#24#3'Top'#2#7#5'Width'
|
||||||
+'ory'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#9'TComboBox'#17'edtReposito'
|
+#3'X'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#16'AutoCompleteText'#11
|
||||||
+'ryList'#4'Left'#2'p'#6'Height'#2#21#3'Top'#2#7#5'Width'#3'X'#1#7'Anchors'#11
|
+#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#9'MaxLength'#2#0#8'Ta'
|
||||||
+#5'akTop'#6'akLeft'#7'akRight'#0#16'AutoCompleteText'#11#22'cbactEndOfLineCo'
|
+'bOrder'#2#0#4'Text'#6#17'edtRepositoryList'#0#0#9'TTreeView'#11'tvwMetadata'
|
||||||
+'mplete'#20'cbactSearchAscending'#0#9'MaxLength'#2#0#8'TabOrder'#2#0#4'Text'
|
+#4'Left'#2#11#6'Height'#3#176#0#3'Top'#2'&'#5'Width'#3'+'#2#7'Anchors'#11#5
|
||||||
+#6#17'edtRepositoryList'#0#0#9'TTreeView'#11'tvwMetadata'#4'Left'#2#11#6'Hei'
|
+'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#17'DefaultItemHeight'#2#18#12'Fon'
|
||||||
+'ght'#3#176#0#3'Top'#2'&'#5'Width'#3'+'#2#7'Anchors'#11#5'akTop'#6'akLeft'#7
|
+'t.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2
|
||||||
+'akRight'#8'akBottom'#0#17'DefaultItemHeight'#2#18#12'Font.CharSet'#7#12'ANS'
|
+#243#9'Font.Name'#6#11'Courier New'#10'Font.Pitch'#7#7'fpFixed'#8'ReadOnly'#9
|
||||||
+'I_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#243#9'Font.Name'#6
|
+#8'TabOrder'#2#1#7'Options'#11#17'tvoAutoItemHeight'#16'tvoHideSelection'#21
|
||||||
+#11'Courier New'#10'Font.Pitch'#7#7'fpFixed'#8'ReadOnly'#9#8'TabOrder'#2#1#7
|
+'tvoKeepCollapsedNodes'#11'tvoReadOnly'#14'tvoShowButtons'#12'tvoShowLines'
|
||||||
+'Options'#11#17'tvoAutoItemHeight'#16'tvoHideSelection'#21'tvoKeepCollapsedN'
|
+#11'tvoShowRoot'#17'tvoShowSeparators'#11'tvoToolTips'#0#13'TreeLineColor'#7
|
||||||
+'odes'#11'tvoReadOnly'#14'tvoShowButtons'#12'tvoShowLines'#11'tvoShowRoot'#17
|
+#6'clNavy'#0#0#7'TButton'#7'Button1'#4'Left'#3#221#1#6'Height'#2#25#3'Top'#2
|
||||||
+'tvoShowSeparators'#11'tvoToolTips'#0#13'TreeLineColor'#7#6'clNavy'#0#0#7'TB'
|
+#6#5'Width'#2'['#6'Action'#7#16'actGetRepository'#7'Anchors'#11#5'akTop'#7'a'
|
||||||
+'utton'#7'Button1'#4'Left'#3#221#1#6'Height'#2#25#3'Top'#2#6#5'Width'#2'['#6
|
+'kRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#0#11'TActio'
|
||||||
+'Action'#7#16'actGetRepository'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'Borde'
|
+'nList'#2'AL'#4'left'#2'H'#3'top'#3#208#1#0#7'TAction'#20'actGetRepositoryLi'
|
||||||
+'rSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#0#11'TActionList'#2'AL'#4'lef'
|
+'st'#7'Caption'#6#13'Get Rep. List'#18'DisableIfNoHandler'#9#9'OnExecute'#7
|
||||||
+'t'#2'H'#3'top'#3#208#1#0#7'TAction'#20'actGetRepositoryList'#7'Caption'#6#13
|
+#27'actGetRepositoryListExecute'#0#0#7'TAction'#16'actGetRepository'#7'Capti'
|
||||||
+'Get Rep. List'#9'OnExecute'#7#27'actGetRepositoryListExecute'#0#0#7'TAction'
|
+'on'#6#14'Get Repository'#18'DisableIfNoHandler'#9#9'OnExecute'#7#23'actGetR'
|
||||||
+#16'actGetRepository'#7'Caption'#6#14'Get Repository'#9'OnExecute'#7#23'actG'
|
+'epositoryExecute'#8'OnUpdate'#7#22'actGetRepositoryUpdate'#0#0#0#0
|
||||||
+'etRepositoryExecute'#8'OnUpdate'#7#22'actGetRepositoryUpdate'#0#0#0#0
|
|
||||||
]);
|
]);
|
||||||
|
@ -44,7 +44,7 @@ implementation
|
|||||||
uses base_service_intf, service_intf,
|
uses base_service_intf, service_intf,
|
||||||
soap_formatter, binary_formatter,
|
soap_formatter, binary_formatter,
|
||||||
synapse_http_protocol, //indy_http_protocol, ics_http_protocol,
|
synapse_http_protocol, //indy_http_protocol, ics_http_protocol,
|
||||||
//ics_tcp_protocol,
|
ics_tcp_protocol,
|
||||||
library_protocol,
|
library_protocol,
|
||||||
metadata_service_proxy;
|
metadata_service_proxy;
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ begin
|
|||||||
Result := TWSTMetadataService_Proxy.Create(
|
Result := TWSTMetadataService_Proxy.Create(
|
||||||
'WSTMetadataService',
|
'WSTMetadataService',
|
||||||
s,
|
s,
|
||||||
Format('http:Address=%s',[edtAddress.Text])
|
edtAddress.Text//Format('http:Address=%s',[edtAddress.Text])
|
||||||
) as IWSTMetadataService;
|
) as IWSTMetadataService;
|
||||||
//lib:FileName=C:\Programmes\lazarus\wst\tests\library\obj\lib_server.dll;target=IWSTMetadataService
|
//lib:FileName=C:\Programmes\lazarus\wst\tests\library\obj\lib_server.dll;target=IWSTMetadataService
|
||||||
//'http:Address=http://127.0.0.1:8000/services/IWSTMetadataService'
|
//'http:Address=http://127.0.0.1:8000/services/IWSTMetadataService'
|
||||||
@ -163,6 +163,7 @@ initialization
|
|||||||
RegisterStdTypes();
|
RegisterStdTypes();
|
||||||
SYNAPSE_RegisterHTTP_Transport();
|
SYNAPSE_RegisterHTTP_Transport();
|
||||||
LIB_Register_Transport();
|
LIB_Register_Transport();
|
||||||
|
ICS_RegisterTCP_Transport();
|
||||||
//ICS_RegisterHTTP_Transport();
|
//ICS_RegisterHTTP_Transport();
|
||||||
//INDY_RegisterHTTP_Transport();
|
//INDY_RegisterHTTP_Transport();
|
||||||
end.
|
end.
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="1"/>
|
<ActiveEditorIndexAtStart Value="3"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -26,15 +26,15 @@
|
|||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="38">
|
<Units Count="41">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="tcp_gui_server.lpr"/>
|
<Filename Value="tcp_gui_server.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="tcp_gui_server"/>
|
<UnitName Value="tcp_gui_server"/>
|
||||||
<CursorPos X="25" Y="3"/>
|
<CursorPos X="1" Y="16"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="5"/>
|
<EditorIndex Value="9"/>
|
||||||
<UsageCount Value="127"/>
|
<UsageCount Value="131"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
@ -43,20 +43,20 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<ResourceFilename Value="umain.lrs"/>
|
<ResourceFilename Value="umain.lrs"/>
|
||||||
<UnitName Value="umain"/>
|
<UnitName Value="umain"/>
|
||||||
<CursorPos X="41" Y="88"/>
|
<CursorPos X="51" Y="90"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="73"/>
|
||||||
<EditorIndex Value="0"/>
|
<EditorIndex Value="0"/>
|
||||||
<UsageCount Value="127"/>
|
<UsageCount Value="131"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="server_unit.pas"/>
|
<Filename Value="server_unit.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="server_unit"/>
|
<UnitName Value="server_unit"/>
|
||||||
<CursorPos X="3" Y="9"/>
|
<CursorPos X="48" Y="14"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="243"/>
|
||||||
<EditorIndex Value="1"/>
|
<EditorIndex Value="5"/>
|
||||||
<UsageCount Value="127"/>
|
<UsageCount Value="131"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
@ -235,16 +235,18 @@
|
|||||||
<UnitName Value="server_service_intf"/>
|
<UnitName Value="server_service_intf"/>
|
||||||
<CursorPos X="1" Y="202"/>
|
<CursorPos X="1" Y="202"/>
|
||||||
<TopLine Value="195"/>
|
<TopLine Value="195"/>
|
||||||
<EditorIndex Value="2"/>
|
<EditorIndex Value="6"/>
|
||||||
<UsageCount Value="44"/>
|
<UsageCount Value="46"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit28>
|
</Unit28>
|
||||||
<Unit29>
|
<Unit29>
|
||||||
<Filename Value="..\..\base_service_intf.pas"/>
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
<UnitName Value="base_service_intf"/>
|
<UnitName Value="base_service_intf"/>
|
||||||
<CursorPos X="1" Y="22"/>
|
<CursorPos X="46" Y="224"/>
|
||||||
<TopLine Value="17"/>
|
<TopLine Value="235"/>
|
||||||
<UsageCount Value="38"/>
|
<EditorIndex Value="4"/>
|
||||||
|
<UsageCount Value="40"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit29>
|
</Unit29>
|
||||||
<Unit30>
|
<Unit30>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
|
||||||
@ -293,8 +295,8 @@
|
|||||||
<UnitName Value="calculator"/>
|
<UnitName Value="calculator"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<EditorIndex Value="3"/>
|
<EditorIndex Value="7"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="24"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit35>
|
</Unit35>
|
||||||
<Unit36>
|
<Unit36>
|
||||||
@ -303,8 +305,8 @@
|
|||||||
<UnitName Value="calculator_imp"/>
|
<UnitName Value="calculator_imp"/>
|
||||||
<CursorPos X="48" Y="117"/>
|
<CursorPos X="48" Y="117"/>
|
||||||
<TopLine Value="110"/>
|
<TopLine Value="110"/>
|
||||||
<EditorIndex Value="4"/>
|
<EditorIndex Value="8"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="24"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit36>
|
</Unit36>
|
||||||
<Unit37>
|
<Unit37>
|
||||||
@ -313,18 +315,81 @@
|
|||||||
<UnitName Value="calculator_binder"/>
|
<UnitName Value="calculator_binder"/>
|
||||||
<CursorPos X="80" Y="174"/>
|
<CursorPos X="80" Y="174"/>
|
||||||
<TopLine Value="170"/>
|
<TopLine Value="170"/>
|
||||||
<UsageCount Value="20"/>
|
<UsageCount Value="24"/>
|
||||||
</Unit37>
|
</Unit37>
|
||||||
|
<Unit38>
|
||||||
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
|
<UnitName Value="metadata_service"/>
|
||||||
|
<CursorPos X="36" Y="89"/>
|
||||||
|
<TopLine Value="114"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="..\..\metadata_service_imp.pas"/>
|
||||||
|
<UnitName Value="metadata_service_imp"/>
|
||||||
|
<CursorPos X="62" Y="17"/>
|
||||||
|
<TopLine Value="1"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="..\..\metadata_service_binder.pas"/>
|
||||||
|
<UnitName Value="metadata_service_binder"/>
|
||||||
|
<CursorPos X="61" Y="29"/>
|
||||||
|
<TopLine Value="19"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<UsageCount Value="12"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit40>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="2" HistoryIndex="1">
|
<JumpHistory Count="11" HistoryIndex="10">
|
||||||
<Position1>
|
<Position1>
|
||||||
<Filename Value="server_unit.pas"/>
|
<Filename Value="umain.pas"/>
|
||||||
<Caret Line="189" Column="25" TopLine="174"/>
|
<Caret Line="42" Column="60" TopLine="37"/>
|
||||||
</Position1>
|
</Position1>
|
||||||
<Position2>
|
<Position2>
|
||||||
<Filename Value="server_unit.pas"/>
|
<Filename Value="tcp_gui_server.lpr"/>
|
||||||
<Caret Line="9" Column="3" TopLine="1"/>
|
<Caret Line="3" Column="25" TopLine="1"/>
|
||||||
</Position2>
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
|
<Caret Line="252" Column="23" TopLine="227"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
|
<Caret Line="159" Column="23" TopLine="134"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
|
<Caret Line="252" Column="23" TopLine="227"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="umain.pas"/>
|
||||||
|
<Caret Line="43" Column="38" TopLine="43"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="tcp_gui_server.lpr"/>
|
||||||
|
<Caret Line="16" Column="1" TopLine="1"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="..\..\metadata_service_imp.pas"/>
|
||||||
|
<Caret Line="17" Column="62" TopLine="1"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="umain.pas"/>
|
||||||
|
<Caret Line="43" Column="53" TopLine="24"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="umain.pas"/>
|
||||||
|
<Caret Line="31" Column="15" TopLine="24"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="..\..\metadata_service.pas"/>
|
||||||
|
<Caret Line="89" Column="36" TopLine="80"/>
|
||||||
|
</Position11>
|
||||||
</JumpHistory>
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
|
@ -7,15 +7,12 @@ object fMain: TfMain
|
|||||||
VertScrollBar.Page = 299
|
VertScrollBar.Page = 299
|
||||||
ActiveControl = Button1
|
ActiveControl = Button1
|
||||||
Caption = 'Simple TCP App Server'
|
Caption = 'Simple TCP App Server'
|
||||||
ClientHeight = 300
|
|
||||||
ClientWidth = 400
|
|
||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
PixelsPerInch = 96
|
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Left = 16
|
Left = 16
|
||||||
Height = 14
|
Height = 18
|
||||||
Top = 72
|
Top = 72
|
||||||
Width = 18
|
Width = 24
|
||||||
Caption = 'Log'
|
Caption = 'Log'
|
||||||
Color = clNone
|
Color = clNone
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
@ -26,7 +23,6 @@ object fMain: TfMain
|
|||||||
Top = 8
|
Top = 8
|
||||||
Width = 104
|
Width = 104
|
||||||
Action = actStart
|
Action = actStart
|
||||||
BorderSpacing.InnerBorder = 2
|
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
end
|
end
|
||||||
object mmoLog: TMemo
|
object mmoLog: TMemo
|
||||||
@ -45,7 +41,6 @@ object fMain: TfMain
|
|||||||
Top = 40
|
Top = 40
|
||||||
Width = 104
|
Width = 104
|
||||||
Action = actStop
|
Action = actStop
|
||||||
BorderSpacing.InnerBorder = 2
|
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
end
|
end
|
||||||
object edtPort: TEdit
|
object edtPort: TEdit
|
||||||
@ -61,16 +56,19 @@ object fMain: TfMain
|
|||||||
top = 32
|
top = 32
|
||||||
object actStart: TAction
|
object actStart: TAction
|
||||||
Caption = 'Start( Port=)'
|
Caption = 'Start( Port=)'
|
||||||
|
DisableIfNoHandler = True
|
||||||
OnExecute = actStartExecute
|
OnExecute = actStartExecute
|
||||||
OnUpdate = actStartUpdate
|
OnUpdate = actStartUpdate
|
||||||
end
|
end
|
||||||
object actStop: TAction
|
object actStop: TAction
|
||||||
Caption = 'Stop'
|
Caption = 'Stop'
|
||||||
|
DisableIfNoHandler = True
|
||||||
OnExecute = actStopExecute
|
OnExecute = actStopExecute
|
||||||
OnUpdate = actStopUpdate
|
OnUpdate = actStopUpdate
|
||||||
end
|
end
|
||||||
object actClearLog: TAction
|
object actClearLog: TAction
|
||||||
Caption = 'Clear Log'
|
Caption = 'Clear Log'
|
||||||
|
DisableIfNoHandler = True
|
||||||
OnExecute = actClearLogExecute
|
OnExecute = actClearLogExecute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,22 +3,21 @@
|
|||||||
LazarusResources.Add('TfMain','FORMDATA',[
|
LazarusResources.Add('TfMain','FORMDATA',[
|
||||||
'TPF0'#6'TfMain'#5'fMain'#4'Left'#3'"'#1#6'Height'#3','#1#3'Top'#3#180#0#5'Wi'
|
'TPF0'#6'TfMain'#5'fMain'#4'Left'#3'"'#1#6'Height'#3','#1#3'Top'#3#180#0#5'Wi'
|
||||||
+'dth'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3'+'#1#13
|
+'dth'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3'+'#1#13
|
||||||
+'ActiveControl'#7#7'Button1'#7'Caption'#6#21'Simple TCP App Server'#12'Clien'
|
+'ActiveControl'#7#7'Button1'#7'Caption'#6#21'Simple TCP App Server'#8'OnCrea'
|
||||||
+'tHeight'#3','#1#11'ClientWidth'#3#144#1#8'OnCreate'#7#10'FormCreate'#13'Pix'
|
+'te'#7#10'FormCreate'#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#18#3'To'
|
||||||
+'elsPerInch'#2'`'#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#14#3'Top'#2
|
+'p'#2'H'#5'Width'#2#24#7'Caption'#6#3'Log'#5'Color'#7#6'clNone'#11'ParentCol'
|
||||||
+'H'#5'Width'#2#18#7'Caption'#6#3'Log'#5'Color'#7#6'clNone'#11'ParentColor'#8
|
+'or'#8#0#0#7'TButton'#7'Button1'#4'Left'#2#16#6'Height'#2#25#3'Top'#2#8#5'Wi'
|
||||||
+#0#0#7'TButton'#7'Button1'#4'Left'#2#16#6'Height'#2#25#3'Top'#2#8#5'Width'#2
|
+'dth'#2'h'#6'Action'#7#8'actStart'#8'TabOrder'#2#0#0#0#5'TMemo'#6'mmoLog'#4
|
||||||
+'h'#6'Action'#7#8'actStart'#25'BorderSpacing.InnerBorder'#2#2#8'TabOrder'#2#0
|
+'Left'#2#8#6'Height'#3#192#0#3'Top'#2'`'#5'Width'#3#128#1#7'Anchors'#11#5'ak'
|
||||||
+#0#0#5'TMemo'#6'mmoLog'#4'Left'#2#8#6'Height'#3#192#0#3'Top'#2'`'#5'Width'#3
|
+'Top'#6'akLeft'#7'akRight'#8'akBottom'#0#8'ReadOnly'#9#10'ScrollBars'#7#10's'
|
||||||
+#128#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'ReadOnly'
|
+'sAutoBoth'#8'TabOrder'#2#1#0#0#7'TButton'#7'Button2'#4'Left'#2#16#6'Height'
|
||||||
+#9#10'ScrollBars'#7#10'ssAutoBoth'#8'TabOrder'#2#1#0#0#7'TButton'#7'Button2'
|
+#2#25#3'Top'#2'('#5'Width'#2'h'#6'Action'#7#7'actStop'#8'TabOrder'#2#2#0#0#5
|
||||||
+#4'Left'#2#16#6'Height'#2#25#3'Top'#2'('#5'Width'#2'h'#6'Action'#7#7'actStop'
|
+'TEdit'#7'edtPort'#4'Left'#3#128#0#6'Height'#2#23#3'Top'#2#10#5'Width'#2'P'#8
|
||||||
+#25'BorderSpacing.InnerBorder'#2#2#8'TabOrder'#2#2#0#0#5'TEdit'#7'edtPort'#4
|
+'TabOrder'#2#3#4'Text'#6#4'1234'#0#0#11'TActionList'#2'AL'#4'left'#3#152#0#3
|
||||||
+'Left'#3#128#0#6'Height'#2#23#3'Top'#2#10#5'Width'#2'P'#8'TabOrder'#2#3#4'Te'
|
+'top'#2' '#0#7'TAction'#8'actStart'#7'Caption'#6#13'Start( Port=)'#18'Disabl'
|
||||||
+'xt'#6#4'1234'#0#0#11'TActionList'#2'AL'#4'left'#3#152#0#3'top'#2' '#0#7'TAc'
|
+'eIfNoHandler'#9#9'OnExecute'#7#15'actStartExecute'#8'OnUpdate'#7#14'actStar'
|
||||||
+'tion'#8'actStart'#7'Caption'#6#13'Start( Port=)'#9'OnExecute'#7#15'actStart'
|
+'tUpdate'#0#0#7'TAction'#7'actStop'#7'Caption'#6#4'Stop'#18'DisableIfNoHandl'
|
||||||
+'Execute'#8'OnUpdate'#7#14'actStartUpdate'#0#0#7'TAction'#7'actStop'#7'Capti'
|
+'er'#9#9'OnExecute'#7#14'actStopExecute'#8'OnUpdate'#7#13'actStopUpdate'#0#0
|
||||||
+'on'#6#4'Stop'#9'OnExecute'#7#14'actStopExecute'#8'OnUpdate'#7#13'actStopUpd'
|
+#7'TAction'#11'actClearLog'#7'Caption'#6#9'Clear Log'#18'DisableIfNoHandler'
|
||||||
+'ate'#0#0#7'TAction'#11'actClearLog'#7'Caption'#6#9'Clear Log'#9'OnExecute'#7
|
+#9#9'OnExecute'#7#18'actClearLogExecute'#0#0#0#0
|
||||||
+#18'actClearLogExecute'#0#0#0#0
|
|
||||||
]);
|
]);
|
||||||
|
@ -39,7 +39,8 @@ var
|
|||||||
implementation
|
implementation
|
||||||
uses server_unit,
|
uses server_unit,
|
||||||
server_service_soap, server_binary_formatter,
|
server_service_soap, server_binary_formatter,
|
||||||
calculator, calculator_imp, calculator_binder;
|
calculator, calculator_imp, calculator_binder,
|
||||||
|
metadata_service, metadata_service_imp, metadata_service_binder;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
scktServer : TTcpSrvApp;
|
scktServer : TTcpSrvApp;
|
||||||
@ -84,6 +85,9 @@ begin
|
|||||||
RegisterCalculatorImplementationFactory();
|
RegisterCalculatorImplementationFactory();
|
||||||
Server_service_RegisterSoapFormat();
|
Server_service_RegisterSoapFormat();
|
||||||
Server_service_RegisterBinaryFormat();
|
Server_service_RegisterBinaryFormat();
|
||||||
|
|
||||||
|
RegisterWSTMetadataServiceImplementationFactory();
|
||||||
|
Server_service_RegisterWSTMetadataServiceService
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfMain.LogMessage(const AMsg: string);
|
procedure TfMain.LogMessage(const AMsg: string);
|
||||||
@ -95,4 +99,3 @@ initialization
|
|||||||
{$I umain.lrs}
|
{$I umain.lrs}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
109
wst/trunk/tests/test_suite/test_parserdef.pas
Normal file
109
wst/trunk/tests/test_suite/test_parserdef.pas
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
unit test_parserdef;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, parserdefs, fpcunit, testregistry;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TTest_TClassTypeDefinition }
|
||||||
|
|
||||||
|
TTest_TClassTypeDefinition = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure IsDescendantOf();
|
||||||
|
procedure SetParent();
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{ TTest_TClassTypeDefinition }
|
||||||
|
|
||||||
|
procedure TTest_TClassTypeDefinition.IsDescendantOf();
|
||||||
|
var
|
||||||
|
a, b , c, d : TClassTypeDefinition;
|
||||||
|
begin
|
||||||
|
a := nil;
|
||||||
|
b := nil;
|
||||||
|
c := nil;
|
||||||
|
d := nil;
|
||||||
|
try
|
||||||
|
a := TClassTypeDefinition.Create('a');
|
||||||
|
|
||||||
|
b := TClassTypeDefinition.Create('b');
|
||||||
|
b.SetParent(a);
|
||||||
|
|
||||||
|
c := TClassTypeDefinition.Create('c');
|
||||||
|
c.SetParent(b);
|
||||||
|
|
||||||
|
d := TClassTypeDefinition.Create('d');
|
||||||
|
|
||||||
|
AssertTrue('b IsDescendantOf a',b.IsDescendantOf(a));
|
||||||
|
AssertTrue('c IsDescendantOf b',c.IsDescendantOf(b));
|
||||||
|
AssertTrue('c IsDescendantOf a',c.IsDescendantOf(a));
|
||||||
|
|
||||||
|
AssertFalse('b IsDescendantOf c',b.IsDescendantOf(c));
|
||||||
|
AssertFalse('a IsDescendantOf b',a.IsDescendantOf(b));
|
||||||
|
AssertFalse('a IsDescendantOf c',a.IsDescendantOf(c));
|
||||||
|
|
||||||
|
AssertFalse('d IsDescendantOf a',d.IsDescendantOf(a));
|
||||||
|
|
||||||
|
finally
|
||||||
|
FreeAndNil(d);
|
||||||
|
FreeAndNil(c);
|
||||||
|
FreeAndNil(b);
|
||||||
|
FreeAndNil(a);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_TClassTypeDefinition.SetParent();
|
||||||
|
var
|
||||||
|
a, b , c, d : TClassTypeDefinition;
|
||||||
|
excp : Boolean;
|
||||||
|
begin
|
||||||
|
a := nil;
|
||||||
|
b := nil;
|
||||||
|
c := nil;
|
||||||
|
d := nil;
|
||||||
|
try
|
||||||
|
a := TClassTypeDefinition.Create('a');
|
||||||
|
|
||||||
|
b := TClassTypeDefinition.Create('b');
|
||||||
|
b.SetParent(a);
|
||||||
|
|
||||||
|
c := TClassTypeDefinition.Create('c');
|
||||||
|
c.SetParent(b);
|
||||||
|
|
||||||
|
d := TClassTypeDefinition.Create('d');
|
||||||
|
|
||||||
|
excp := False;;
|
||||||
|
try
|
||||||
|
c.SetParent(c);
|
||||||
|
except
|
||||||
|
excp := True;
|
||||||
|
end;
|
||||||
|
if not excp then begin
|
||||||
|
Fail('c.SetParent(c);');
|
||||||
|
end;
|
||||||
|
|
||||||
|
AssertSame('a.Parent = nil',nil,a.Parent);
|
||||||
|
AssertSame('b.Parent = a',a,b.Parent);
|
||||||
|
AssertSame('c.Parent = b',b,c.Parent);
|
||||||
|
AssertSame('d.Parent = nil',nil,d.Parent);
|
||||||
|
|
||||||
|
finally
|
||||||
|
FreeAndNil(d);
|
||||||
|
FreeAndNil(c);
|
||||||
|
FreeAndNil(b);
|
||||||
|
FreeAndNil(a);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterTest(TTest_TClassTypeDefinition);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
<ActiveEditorIndexAtStart Value="9"/>
|
<ActiveEditorIndexAtStart Value="1"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -18,7 +18,7 @@
|
|||||||
<RunParams>
|
<RunParams>
|
||||||
<local>
|
<local>
|
||||||
<FormatVersion Value="1"/>
|
<FormatVersion Value="1"/>
|
||||||
<CommandLineParams Value="-a"/>
|
<CommandLineParams Value="-a >res.xml"/>
|
||||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||||
</local>
|
</local>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
@ -27,23 +27,23 @@
|
|||||||
<PackageName Value="FPCUnitTestRunner"/>
|
<PackageName Value="FPCUnitTestRunner"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="47">
|
<Units Count="40">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="wst_test_suite.lpr"/>
|
<Filename Value="wst_test_suite.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="wst_test_suite"/>
|
<UnitName Value="wst_test_suite"/>
|
||||||
<CursorPos X="69" Y="11"/>
|
<CursorPos X="33" Y="11"/>
|
||||||
<TopLine Value="9"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="149"/>
|
<UsageCount Value="200"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="testformatter_unit.pas"/>
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="testformatter_unit"/>
|
<UnitName Value="testformatter_unit"/>
|
||||||
<CursorPos X="27" Y="905"/>
|
<CursorPos X="42" Y="2999"/>
|
||||||
<TopLine Value="886"/>
|
<TopLine Value="2972"/>
|
||||||
<EditorIndex Value="9"/>
|
<EditorIndex Value="4"/>
|
||||||
<UsageCount Value="149"/>
|
<UsageCount Value="200"/>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
@ -52,49 +52,50 @@
|
|||||||
<UnitName Value="server_service_soap"/>
|
<UnitName Value="server_service_soap"/>
|
||||||
<CursorPos X="20" Y="205"/>
|
<CursorPos X="20" Y="205"/>
|
||||||
<TopLine Value="162"/>
|
<TopLine Value="162"/>
|
||||||
<EditorIndex Value="2"/>
|
<UsageCount Value="200"/>
|
||||||
<UsageCount Value="149"/>
|
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
<Filename Value="..\..\soap_formatter.pas"/>
|
<Filename Value="..\..\soap_formatter.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="soap_formatter"/>
|
<UnitName Value="soap_formatter"/>
|
||||||
<CursorPos X="8" Y="97"/>
|
<CursorPos X="10" Y="118"/>
|
||||||
<TopLine Value="86"/>
|
<TopLine Value="89"/>
|
||||||
<EditorIndex Value="1"/>
|
<UsageCount Value="200"/>
|
||||||
<UsageCount Value="149"/>
|
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
<Filename Value="..\..\base_binary_formatter.pas"/>
|
<Filename Value="..\..\base_binary_formatter.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="base_binary_formatter"/>
|
<UnitName Value="base_binary_formatter"/>
|
||||||
<CursorPos X="39" Y="180"/>
|
<CursorPos X="48" Y="502"/>
|
||||||
<TopLine Value="171"/>
|
<TopLine Value="497"/>
|
||||||
<EditorIndex Value="6"/>
|
<UsageCount Value="200"/>
|
||||||
<UsageCount Value="149"/>
|
<Bookmarks Count="1">
|
||||||
<Loaded Value="True"/>
|
<Item0 X="45" Y="1161" ID="0"/>
|
||||||
|
</Bookmarks>
|
||||||
</Unit4>
|
</Unit4>
|
||||||
<Unit5>
|
<Unit5>
|
||||||
<Filename Value="..\..\base_service_intf.pas"/>
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="base_service_intf"/>
|
<UnitName Value="base_service_intf"/>
|
||||||
<CursorPos X="3" Y="106"/>
|
<CursorPos X="21" Y="263"/>
|
||||||
<TopLine Value="121"/>
|
<TopLine Value="250"/>
|
||||||
<EditorIndex Value="0"/>
|
<EditorIndex Value="0"/>
|
||||||
<UsageCount Value="149"/>
|
<UsageCount Value="200"/>
|
||||||
|
<Bookmarks Count="1">
|
||||||
|
<Item0 X="5" Y="1159" ID="1"/>
|
||||||
|
</Bookmarks>
|
||||||
<Loaded Value="True"/>
|
<Loaded Value="True"/>
|
||||||
</Unit5>
|
</Unit5>
|
||||||
<Unit6>
|
<Unit6>
|
||||||
<Filename Value="..\..\base_soap_formatter.pas"/>
|
<Filename Value="..\..\base_soap_formatter.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="base_soap_formatter"/>
|
<UnitName Value="base_soap_formatter"/>
|
||||||
<CursorPos X="1" Y="1082"/>
|
<CursorPos X="34" Y="900"/>
|
||||||
<TopLine Value="1061"/>
|
<TopLine Value="872"/>
|
||||||
<EditorIndex Value="7"/>
|
<UsageCount Value="200"/>
|
||||||
<UsageCount Value="149"/>
|
<Bookmarks Count="1">
|
||||||
<Loaded Value="True"/>
|
<Item0 X="22" Y="1236" ID="1"/>
|
||||||
|
</Bookmarks>
|
||||||
</Unit6>
|
</Unit6>
|
||||||
<Unit7>
|
<Unit7>
|
||||||
<Filename Value="..\..\binary_formatter.pas"/>
|
<Filename Value="..\..\binary_formatter.pas"/>
|
||||||
@ -102,17 +103,15 @@
|
|||||||
<UnitName Value="binary_formatter"/>
|
<UnitName Value="binary_formatter"/>
|
||||||
<CursorPos X="15" Y="44"/>
|
<CursorPos X="15" Y="44"/>
|
||||||
<TopLine Value="33"/>
|
<TopLine Value="33"/>
|
||||||
<EditorIndex Value="4"/>
|
<UsageCount Value="200"/>
|
||||||
<UsageCount Value="149"/>
|
|
||||||
<Loaded Value="True"/>
|
|
||||||
</Unit7>
|
</Unit7>
|
||||||
<Unit8>
|
<Unit8>
|
||||||
<Filename Value="..\..\binary_streamer.pas"/>
|
<Filename Value="..\..\binary_streamer.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="binary_streamer"/>
|
<UnitName Value="binary_streamer"/>
|
||||||
<CursorPos X="32" Y="38"/>
|
<CursorPos X="18" Y="40"/>
|
||||||
<TopLine Value="22"/>
|
<TopLine Value="40"/>
|
||||||
<UsageCount Value="149"/>
|
<UsageCount Value="200"/>
|
||||||
</Unit8>
|
</Unit8>
|
||||||
<Unit9>
|
<Unit9>
|
||||||
<Filename Value="..\..\server_binary_formatter.pas"/>
|
<Filename Value="..\..\server_binary_formatter.pas"/>
|
||||||
@ -120,281 +119,351 @@
|
|||||||
<UnitName Value="server_binary_formatter"/>
|
<UnitName Value="server_binary_formatter"/>
|
||||||
<CursorPos X="5" Y="136"/>
|
<CursorPos X="5" Y="136"/>
|
||||||
<TopLine Value="92"/>
|
<TopLine Value="92"/>
|
||||||
<UsageCount Value="149"/>
|
<UsageCount Value="200"/>
|
||||||
</Unit9>
|
</Unit9>
|
||||||
<Unit10>
|
<Unit10>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\fcl\fpcunit\fpcunit.pp"/>
|
|
||||||
<UnitName Value="fpcunit"/>
|
|
||||||
<CursorPos X="39" Y="66"/>
|
|
||||||
<TopLine Value="66"/>
|
|
||||||
<UsageCount Value="6"/>
|
|
||||||
</Unit10>
|
|
||||||
<Unit11>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\fcl\fpcunit\testregistry.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\fcl\fpcunit\testregistry.pp"/>
|
||||||
<UnitName Value="testregistry"/>
|
<UnitName Value="testregistry"/>
|
||||||
<CursorPos X="11" Y="29"/>
|
<CursorPos X="11" Y="29"/>
|
||||||
<TopLine Value="35"/>
|
<TopLine Value="35"/>
|
||||||
<UsageCount Value="9"/>
|
|
||||||
</Unit11>
|
|
||||||
<Unit12>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
|
|
||||||
<UnitName Value="typinfo"/>
|
|
||||||
<CursorPos X="11" Y="216"/>
|
|
||||||
<TopLine Value="230"/>
|
|
||||||
<UsageCount Value="3"/>
|
|
||||||
</Unit12>
|
|
||||||
<Unit13>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
|
|
||||||
<CursorPos X="10" Y="137"/>
|
|
||||||
<TopLine Value="127"/>
|
|
||||||
<UsageCount Value="1"/>
|
<UsageCount Value="1"/>
|
||||||
</Unit13>
|
</Unit10>
|
||||||
<Unit14>
|
<Unit11>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
|
|
||||||
<CursorPos X="23" Y="1007"/>
|
|
||||||
<TopLine Value="1005"/>
|
|
||||||
<UsageCount Value="1"/>
|
|
||||||
</Unit14>
|
|
||||||
<Unit15>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\systemh.inc"/>
|
|
||||||
<CursorPos X="65" Y="452"/>
|
|
||||||
<TopLine Value="441"/>
|
|
||||||
<UsageCount Value="6"/>
|
|
||||||
</Unit15>
|
|
||||||
<Unit16>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\system.pp"/>
|
|
||||||
<UnitName Value="System"/>
|
|
||||||
<CursorPos X="20" Y="1012"/>
|
|
||||||
<TopLine Value="1011"/>
|
|
||||||
<UsageCount Value="6"/>
|
|
||||||
</Unit16>
|
|
||||||
<Unit17>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\fcl\inc\contnrs.pp"/>
|
|
||||||
<UnitName Value="contnrs"/>
|
|
||||||
<CursorPos X="3" Y="625"/>
|
|
||||||
<TopLine Value="623"/>
|
|
||||||
<UsageCount Value="1"/>
|
|
||||||
</Unit17>
|
|
||||||
<Unit18>
|
|
||||||
<Filename Value="..\..\metadata_repository.pas"/>
|
<Filename Value="..\..\metadata_repository.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="metadata_repository"/>
|
<UnitName Value="metadata_repository"/>
|
||||||
<CursorPos X="3" Y="79"/>
|
<CursorPos X="3" Y="79"/>
|
||||||
<TopLine Value="70"/>
|
<TopLine Value="70"/>
|
||||||
<UsageCount Value="124"/>
|
<UsageCount Value="200"/>
|
||||||
</Unit18>
|
</Unit11>
|
||||||
<Unit19>
|
<Unit12>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\typinfo.pp"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\typinfo.pp"/>
|
||||||
<UnitName Value="typinfo"/>
|
<UnitName Value="typinfo"/>
|
||||||
<CursorPos X="15" Y="579"/>
|
<CursorPos X="15" Y="579"/>
|
||||||
<TopLine Value="565"/>
|
<TopLine Value="565"/>
|
||||||
<UsageCount Value="5"/>
|
<UsageCount Value="7"/>
|
||||||
</Unit19>
|
</Unit12>
|
||||||
<Unit20>
|
<Unit13>
|
||||||
<Filename Value="testmetadata_unit.pas"/>
|
<Filename Value="testmetadata_unit.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="testmetadata_unit"/>
|
<UnitName Value="testmetadata_unit"/>
|
||||||
<CursorPos X="83" Y="119"/>
|
<CursorPos X="83" Y="119"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="46"/>
|
||||||
<EditorIndex Value="8"/>
|
<UsageCount Value="199"/>
|
||||||
<UsageCount Value="117"/>
|
</Unit13>
|
||||||
<Loaded Value="True"/>
|
<Unit14>
|
||||||
</Unit20>
|
|
||||||
<Unit21>
|
|
||||||
<Filename Value="..\..\ws_helper\metadata_generator.pas"/>
|
<Filename Value="..\..\ws_helper\metadata_generator.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="metadata_generator"/>
|
<UnitName Value="metadata_generator"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="31"/>
|
<TopLine Value="31"/>
|
||||||
<UsageCount Value="117"/>
|
<UsageCount Value="199"/>
|
||||||
</Unit21>
|
</Unit14>
|
||||||
<Unit22>
|
<Unit15>
|
||||||
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="parserdefs"/>
|
<UnitName Value="parserdefs"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="117"/>
|
<EditorIndex Value="2"/>
|
||||||
</Unit22>
|
<UsageCount Value="199"/>
|
||||||
<Unit23>
|
<Bookmarks Count="2">
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\fcl\fpcunit\fpcunit.pp"/>
|
<Item0 X="45" Y="1146" ID="0"/>
|
||||||
<UnitName Value="fpcunit"/>
|
<Item1 X="18" Y="1133" ID="2"/>
|
||||||
<CursorPos X="21" Y="81"/>
|
</Bookmarks>
|
||||||
<TopLine Value="71"/>
|
<Loaded Value="True"/>
|
||||||
<UsageCount Value="2"/>
|
</Unit15>
|
||||||
</Unit23>
|
<Unit16>
|
||||||
<Unit24>
|
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\fcl\fpcunit\testregistry.pp"/>
|
|
||||||
<UnitName Value="testregistry"/>
|
|
||||||
<CursorPos X="11" Y="29"/>
|
|
||||||
<TopLine Value="1"/>
|
|
||||||
<UsageCount Value="3"/>
|
|
||||||
</Unit24>
|
|
||||||
<Unit25>
|
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\heaph.inc"/>
|
|
||||||
<CursorPos X="10" Y="87"/>
|
|
||||||
<TopLine Value="61"/>
|
|
||||||
<UsageCount Value="2"/>
|
|
||||||
</Unit25>
|
|
||||||
<Unit26>
|
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\heap.inc"/>
|
|
||||||
<CursorPos X="3" Y="235"/>
|
|
||||||
<TopLine Value="223"/>
|
|
||||||
<UsageCount Value="2"/>
|
|
||||||
</Unit26>
|
|
||||||
<Unit27>
|
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
|
||||||
<CursorPos X="3" Y="1248"/>
|
|
||||||
<TopLine Value="1238"/>
|
|
||||||
<UsageCount Value="2"/>
|
|
||||||
</Unit27>
|
|
||||||
<Unit28>
|
|
||||||
<Filename Value="..\..\metadata_wsdl.pas"/>
|
<Filename Value="..\..\metadata_wsdl.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="metadata_wsdl"/>
|
<UnitName Value="metadata_wsdl"/>
|
||||||
<CursorPos X="38" Y="148"/>
|
<CursorPos X="25" Y="759"/>
|
||||||
<TopLine Value="142"/>
|
<TopLine Value="751"/>
|
||||||
<UsageCount Value="109"/>
|
<EditorIndex Value="1"/>
|
||||||
</Unit28>
|
<UsageCount Value="191"/>
|
||||||
<Unit29>
|
<Loaded Value="True"/>
|
||||||
|
</Unit16>
|
||||||
|
<Unit17>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\fcl\xml\dom.pp"/>
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\xml\dom.pp"/>
|
||||||
<UnitName Value="DOM"/>
|
<UnitName Value="DOM"/>
|
||||||
<CursorPos X="15" Y="429"/>
|
<CursorPos X="15" Y="429"/>
|
||||||
<TopLine Value="413"/>
|
<TopLine Value="413"/>
|
||||||
<UsageCount Value="4"/>
|
|
||||||
</Unit29>
|
|
||||||
<Unit30>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\classes.pp"/>
|
|
||||||
<UnitName Value="Classes"/>
|
|
||||||
<CursorPos X="14" Y="32"/>
|
|
||||||
<TopLine Value="13"/>
|
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit30>
|
</Unit17>
|
||||||
<Unit31>
|
<Unit18>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
|
||||||
<CursorPos X="14" Y="149"/>
|
|
||||||
<TopLine Value="138"/>
|
|
||||||
<UsageCount Value="6"/>
|
|
||||||
</Unit31>
|
|
||||||
<Unit32>
|
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\lists.inc"/>
|
|
||||||
<CursorPos X="3" Y="29"/>
|
|
||||||
<TopLine Value="27"/>
|
|
||||||
<UsageCount Value="6"/>
|
|
||||||
</Unit32>
|
|
||||||
<Unit33>
|
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
|
||||||
<CursorPos X="13" Y="235"/>
|
<CursorPos X="13" Y="235"/>
|
||||||
<TopLine Value="215"/>
|
<TopLine Value="215"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit33>
|
</Unit18>
|
||||||
<Unit34>
|
<Unit19>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutils.inc"/>
|
|
||||||
<CursorPos X="9" Y="110"/>
|
|
||||||
<TopLine Value="106"/>
|
|
||||||
<UsageCount Value="7"/>
|
|
||||||
</Unit34>
|
|
||||||
<Unit35>
|
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\heaptrc.pp"/>
|
|
||||||
<UnitName Value="heaptrc"/>
|
|
||||||
<CursorPos X="40" Y="1168"/>
|
|
||||||
<TopLine Value="1190"/>
|
|
||||||
<UsageCount Value="7"/>
|
|
||||||
</Unit35>
|
|
||||||
<Unit36>
|
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
<UnitName Value="DOM"/>
|
<UnitName Value="DOM"/>
|
||||||
<CursorPos X="3" Y="187"/>
|
<CursorPos X="3" Y="187"/>
|
||||||
<TopLine Value="175"/>
|
<TopLine Value="175"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="1"/>
|
||||||
</Unit36>
|
</Unit19>
|
||||||
<Unit37>
|
<Unit20>
|
||||||
<Filename Value="..\..\server_service_intf.pas"/>
|
<Filename Value="..\..\server_service_intf.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="server_service_intf"/>
|
<UnitName Value="server_service_intf"/>
|
||||||
<CursorPos X="35" Y="379"/>
|
<CursorPos X="35" Y="379"/>
|
||||||
<TopLine Value="376"/>
|
<TopLine Value="397"/>
|
||||||
<EditorIndex Value="3"/>
|
<UsageCount Value="125"/>
|
||||||
<UsageCount Value="43"/>
|
</Unit20>
|
||||||
<Loaded Value="True"/>
|
<Unit21>
|
||||||
</Unit37>
|
|
||||||
<Unit38>
|
|
||||||
<Filename Value="..\..\service_intf.pas"/>
|
<Filename Value="..\..\service_intf.pas"/>
|
||||||
<UnitName Value="service_intf"/>
|
<UnitName Value="service_intf"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="23"/>
|
<TopLine Value="23"/>
|
||||||
<EditorIndex Value="5"/>
|
<UsageCount Value="11"/>
|
||||||
<UsageCount Value="19"/>
|
</Unit21>
|
||||||
<Loaded Value="True"/>
|
<Unit22>
|
||||||
</Unit38>
|
|
||||||
<Unit39>
|
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
||||||
<CursorPos X="3" Y="316"/>
|
<CursorPos X="3" Y="316"/>
|
||||||
<TopLine Value="304"/>
|
<TopLine Value="304"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit39>
|
</Unit22>
|
||||||
<Unit40>
|
<Unit23>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
|
||||||
<CursorPos X="3" Y="407"/>
|
<CursorPos X="3" Y="407"/>
|
||||||
<TopLine Value="404"/>
|
<TopLine Value="404"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit40>
|
</Unit23>
|
||||||
<Unit41>
|
<Unit24>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
|
||||||
<UnitName Value="contnrs"/>
|
<UnitName Value="contnrs"/>
|
||||||
<CursorPos X="3" Y="474"/>
|
<CursorPos X="3" Y="474"/>
|
||||||
<TopLine Value="471"/>
|
<TopLine Value="471"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit41>
|
</Unit24>
|
||||||
<Unit42>
|
<Unit25>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
|
||||||
<CursorPos X="27" Y="121"/>
|
<CursorPos X="27" Y="121"/>
|
||||||
<TopLine Value="104"/>
|
<TopLine Value="104"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit42>
|
</Unit25>
|
||||||
<Unit43>
|
<Unit26>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
|
||||||
<CursorPos X="9" Y="166"/>
|
<CursorPos X="9" Y="166"/>
|
||||||
<TopLine Value="142"/>
|
<TopLine Value="142"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit43>
|
</Unit26>
|
||||||
<Unit44>
|
<Unit27>
|
||||||
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
|
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
|
||||||
<ComponentName Value="GUITestRunner"/>
|
<ComponentName Value="GUITestRunner"/>
|
||||||
<HasResources Value="True"/>
|
<HasResources Value="True"/>
|
||||||
<UnitName Value="GuiTestRunner"/>
|
<UnitName Value="GuiTestRunner"/>
|
||||||
<CursorPos X="34" Y="32"/>
|
<CursorPos X="34" Y="32"/>
|
||||||
<TopLine Value="25"/>
|
<TopLine Value="25"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="0"/>
|
||||||
</Unit44>
|
</Unit27>
|
||||||
<Unit45>
|
<Unit28>
|
||||||
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
|
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
|
||||||
<UnitName Value="fpcunit"/>
|
<UnitName Value="fpcunit"/>
|
||||||
<CursorPos X="26" Y="231"/>
|
<CursorPos X="26" Y="231"/>
|
||||||
<TopLine Value="193"/>
|
<TopLine Value="193"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="1"/>
|
||||||
</Unit45>
|
</Unit28>
|
||||||
<Unit46>
|
<Unit29>
|
||||||
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
|
||||||
<UnitName Value="fpcunit"/>
|
<UnitName Value="fpcunit"/>
|
||||||
<CursorPos X="21" Y="94"/>
|
<CursorPos X="21" Y="94"/>
|
||||||
<TopLine Value="80"/>
|
<TopLine Value="83"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="8"/>
|
||||||
</Unit46>
|
</Unit29>
|
||||||
|
<Unit30>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\DUnitCompatibleInterface.inc"/>
|
||||||
|
<CursorPos X="1" Y="1"/>
|
||||||
|
<TopLine Value="4"/>
|
||||||
|
<UsageCount Value="2"/>
|
||||||
|
</Unit30>
|
||||||
|
<Unit31>
|
||||||
|
<Filename Value="..\..\imp_utils.pas"/>
|
||||||
|
<UnitName Value="imp_utils"/>
|
||||||
|
<CursorPos X="15" Y="36"/>
|
||||||
|
<TopLine Value="22"/>
|
||||||
|
<UsageCount Value="2"/>
|
||||||
|
</Unit31>
|
||||||
|
<Unit32>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<UnitName Value="DOM"/>
|
||||||
|
<CursorPos X="3" Y="1412"/>
|
||||||
|
<TopLine Value="1407"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit32>
|
||||||
|
<Unit33>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\typinfo.pp"/>
|
||||||
|
<UnitName Value="typinfo"/>
|
||||||
|
<CursorPos X="33" Y="192"/>
|
||||||
|
<TopLine Value="186"/>
|
||||||
|
<UsageCount Value="5"/>
|
||||||
|
</Unit33>
|
||||||
|
<Unit34>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
|
||||||
|
<UnitName Value="XMLRead"/>
|
||||||
|
<CursorPos X="43" Y="13"/>
|
||||||
|
<TopLine Value="1"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit34>
|
||||||
|
<Unit35>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\datih.inc"/>
|
||||||
|
<CursorPos X="10" Y="109"/>
|
||||||
|
<TopLine Value="107"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit35>
|
||||||
|
<Unit36>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\dati.inc"/>
|
||||||
|
<CursorPos X="46" Y="130"/>
|
||||||
|
<TopLine Value="122"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit36>
|
||||||
|
<Unit37>
|
||||||
|
<Filename Value="test_parserdef.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="test_parserdef"/>
|
||||||
|
<CursorPos X="93" Y="76"/>
|
||||||
|
<TopLine Value="11"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<UsageCount Value="45"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit37>
|
||||||
|
<Unit38>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testutils.pp"/>
|
||||||
|
<UnitName Value="testutils"/>
|
||||||
|
<CursorPos X="34" Y="25"/>
|
||||||
|
<TopLine Value="1"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testregistry.pp"/>
|
||||||
|
<UnitName Value="testregistry"/>
|
||||||
|
<CursorPos X="18" Y="17"/>
|
||||||
|
<TopLine Value="16"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit39>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="3" HistoryIndex="2">
|
<JumpHistory Count="30" HistoryIndex="29">
|
||||||
<Position1>
|
<Position1>
|
||||||
<Filename Value="testformatter_unit.pas"/>
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
<Caret Line="875" Column="3" TopLine="866"/>
|
<Caret Line="1128" Column="39" TopLine="1122"/>
|
||||||
</Position1>
|
</Position1>
|
||||||
<Position2>
|
<Position2>
|
||||||
<Filename Value="testformatter_unit.pas"/>
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
<Caret Line="2126" Column="1" TopLine="143"/>
|
<Caret Line="956" Column="19" TopLine="935"/>
|
||||||
</Position2>
|
</Position2>
|
||||||
<Position3>
|
<Position3>
|
||||||
<Filename Value="testformatter_unit.pas"/>
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
<Caret Line="877" Column="26" TopLine="863"/>
|
<Caret Line="977" Column="50" TopLine="956"/>
|
||||||
</Position3>
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="978" Column="33" TopLine="957"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="1118" Column="28" TopLine="1112"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="956" Column="48" TopLine="935"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="977" Column="28" TopLine="956"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="1142" Column="1" TopLine="1129"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="986" Column="21" TopLine="951"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="963" Column="27" TopLine="941"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="974" Column="1" TopLine="957"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="976" Column="17" TopLine="962"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="978" Column="50" TopLine="964"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="980" Column="33" TopLine="965"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="1050" Column="19" TopLine="1039"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="214" Column="45" TopLine="210"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="2881" Column="31" TopLine="2866"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="213" Column="35" TopLine="200"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1139" Column="42" TopLine="1126"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="467" Column="3" TopLine="465"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3667" Column="88" TopLine="3647"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
|
||||||
|
<Caret Line="1132" Column="44" TopLine="1113"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1167" Column="124" TopLine="1145"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="3927" Column="13" TopLine="3912"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="..\..\base_service_intf.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position28>
|
||||||
|
<Position29>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="416" Column="3" TopLine="414"/>
|
||||||
|
</Position29>
|
||||||
|
<Position30>
|
||||||
|
<Filename Value="testformatter_unit.pas"/>
|
||||||
|
<Caret Line="2965" Column="35" TopLine="2960"/>
|
||||||
|
</Position30>
|
||||||
</JumpHistory>
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
@ -423,7 +492,7 @@
|
|||||||
</Other>
|
</Other>
|
||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Debugging>
|
<Debugging>
|
||||||
<BreakPoints Count="19">
|
<BreakPoints Count="14">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
|
<Source Value="..\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
|
||||||
<Line Value="15"/>
|
<Line Value="15"/>
|
||||||
@ -477,29 +546,9 @@
|
|||||||
<Line Value="568"/>
|
<Line Value="568"/>
|
||||||
</Item13>
|
</Item13>
|
||||||
<Item14>
|
<Item14>
|
||||||
<Source Value="testformatter_unit.pas"/>
|
|
||||||
<Line Value="366"/>
|
|
||||||
</Item14>
|
|
||||||
<Item15>
|
|
||||||
<Source Value="testformatter_unit.pas"/>
|
|
||||||
<Line Value="337"/>
|
|
||||||
</Item15>
|
|
||||||
<Item16>
|
|
||||||
<Source Value="testformatter_unit.pas"/>
|
|
||||||
<Line Value="194"/>
|
|
||||||
</Item16>
|
|
||||||
<Item17>
|
|
||||||
<Source Value="testformatter_unit.pas"/>
|
|
||||||
<Line Value="349"/>
|
|
||||||
</Item17>
|
|
||||||
<Item18>
|
|
||||||
<Source Value="testformatter_unit.pas"/>
|
|
||||||
<Line Value="363"/>
|
|
||||||
</Item18>
|
|
||||||
<Item19>
|
|
||||||
<Source Value="testformatter_unit.pas"/>
|
<Source Value="testformatter_unit.pas"/>
|
||||||
<Line Value="909"/>
|
<Line Value="909"/>
|
||||||
</Item19>
|
</Item14>
|
||||||
</BreakPoints>
|
</BreakPoints>
|
||||||
<Watches Count="2">
|
<Watches Count="2">
|
||||||
<Item1>
|
<Item1>
|
||||||
|
@ -8,7 +8,8 @@ uses
|
|||||||
server_service_soap, soap_formatter, base_binary_formatter,
|
server_service_soap, soap_formatter, base_binary_formatter,
|
||||||
base_service_intf, base_soap_formatter, binary_formatter, binary_streamer,
|
base_service_intf, base_soap_formatter, binary_formatter, binary_streamer,
|
||||||
server_binary_formatter, metadata_repository,
|
server_binary_formatter, metadata_repository,
|
||||||
metadata_generator, parserdefs, server_service_intf, metadata_wsdl;
|
metadata_generator, parserdefs, server_service_intf, metadata_wsdl,
|
||||||
|
test_parserdef;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
ShortOpts = 'alh';
|
ShortOpts = 'alh';
|
||||||
|
@ -28,7 +28,10 @@ uses
|
|||||||
|
|
||||||
Type
|
Type
|
||||||
|
|
||||||
TComandLineOption = ( cloProxy, cloImp, cloBinder, cloOutPutDir );
|
TComandLineOption = (
|
||||||
|
cloInterface, cloProxy, cloImp, cloBinder,
|
||||||
|
cloOutPutDirRelative, cloOutPutDirAbsolute
|
||||||
|
);
|
||||||
TComandLineOptions = set of TComandLineOption;
|
TComandLineOptions = set of TComandLineOption;
|
||||||
|
|
||||||
function ParseCmdLineOptions(out AAppOptions : TComandLineOptions):Integer;
|
function ParseCmdLineOptions(out AAppOptions : TComandLineOptions):Integer;
|
||||||
@ -53,15 +56,21 @@ begin
|
|||||||
AAppOptions := [];
|
AAppOptions := [];
|
||||||
c := #0;
|
c := #0;
|
||||||
Repeat
|
Repeat
|
||||||
c := GetOpt('pibo:');
|
c := GetOpt('upibo:a:');
|
||||||
case c of
|
case c of
|
||||||
|
'u' : Include(AAppOptions,cloInterface);
|
||||||
'p' : Include(AAppOptions,cloProxy);
|
'p' : Include(AAppOptions,cloProxy);
|
||||||
'i' : Include(AAppOptions,cloImp);
|
'i' : Include(AAppOptions,cloImp);
|
||||||
'b' : Include(AAppOptions,cloBinder);
|
'b' : Include(AAppOptions,cloBinder);
|
||||||
'o' :
|
'o' :
|
||||||
Begin
|
Begin
|
||||||
Include(AAppOptions,cloOutPutDir);
|
Include(AAppOptions,cloOutPutDirRelative);
|
||||||
OptionsArgsMAP[cloOutPutDir] := OptArg;
|
OptionsArgsMAP[cloOutPutDirRelative] := OptArg;
|
||||||
|
End;
|
||||||
|
'a' :
|
||||||
|
Begin
|
||||||
|
Include(AAppOptions,cloOutPutDirAbsolute);
|
||||||
|
OptionsArgsMAP[cloOutPutDirAbsolute] := OptArg;
|
||||||
End;
|
End;
|
||||||
end;
|
end;
|
||||||
Until ( c = EndOfOptions );
|
Until ( c = EndOfOptions );
|
||||||
|
@ -139,9 +139,39 @@ type
|
|||||||
procedure Execute();override;
|
procedure Execute();override;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
{ TInftGenerator }
|
||||||
|
|
||||||
|
TInftGenerator = class(TBaseGenerator)
|
||||||
|
private
|
||||||
|
FDecStream : ISourceStream;
|
||||||
|
FImpStream : ISourceStream;
|
||||||
|
FImpTempStream : ISourceStream;
|
||||||
|
private
|
||||||
|
function GenerateIntfName(AIntf : TInterfaceDefinition):string;
|
||||||
|
|
||||||
|
procedure GenerateUnitHeader();
|
||||||
|
procedure GenerateUnitImplementationHeader();
|
||||||
|
procedure GenerateUnitImplementationFooter();
|
||||||
|
|
||||||
|
procedure GenerateIntf(AIntf : TInterfaceDefinition);
|
||||||
|
procedure GenerateTypeAlias(ASymbol : TTypeAliasDefinition);
|
||||||
|
procedure GenerateClass(ASymbol : TClassTypeDefinition);
|
||||||
|
procedure GenerateEnum(ASymbol : TEnumTypeDefinition);
|
||||||
|
procedure GenerateArray(ASymbol : TArrayDefinition);
|
||||||
|
|
||||||
|
function GetDestUnitName():string;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
ASymTable : TSymbolTable;
|
||||||
|
ASrcMngr : ISourceManager
|
||||||
|
);
|
||||||
|
procedure Execute();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses parserutils;
|
uses parserutils, Contnrs;
|
||||||
|
|
||||||
Const sPROXY_BASE_CLASS = 'TBaseProxy';
|
Const sPROXY_BASE_CLASS = 'TBaseProxy';
|
||||||
sBINDER_BASE_CLASS = 'TBaseServiceBinder';
|
sBINDER_BASE_CLASS = 'TBaseServiceBinder';
|
||||||
@ -149,6 +179,7 @@ Const sPROXY_BASE_CLASS = 'TBaseProxy';
|
|||||||
sSERIALIZER_CLASS = 'IFormatterClient';
|
sSERIALIZER_CLASS = 'IFormatterClient';
|
||||||
RETURN_PARAM_NAME = 'return';
|
RETURN_PARAM_NAME = 'return';
|
||||||
RETURN_VAL_NAME = 'returnVal';
|
RETURN_VAL_NAME = 'returnVal';
|
||||||
|
sNAME_SPACE = 'sNAME_SPACE';
|
||||||
|
|
||||||
sPRM_NAME = 'strPrmName';
|
sPRM_NAME = 'strPrmName';
|
||||||
sLOC_SERIALIZER = 'locSerializer';
|
sLOC_SERIALIZER = 'locSerializer';
|
||||||
@ -377,7 +408,7 @@ Var
|
|||||||
Indent();WriteLn('%s := GetSerializer();',[sLOC_SERIALIZER]);
|
Indent();WriteLn('%s := GetSerializer();',[sLOC_SERIALIZER]);
|
||||||
Indent();WriteLn('Try');IncIndent();
|
Indent();WriteLn('Try');IncIndent();
|
||||||
|
|
||||||
Indent();WriteLn('%s.BeginCall(''%s'', GetTarget(),(Self as ICallContext));',[sLOC_SERIALIZER,AMthd.Name]);
|
Indent();WriteLn('%s.BeginCall(''%s'', GetTarget(),(Self as ICallContext));',[sLOC_SERIALIZER,AMthd.ExternalName]);
|
||||||
IncIndent();
|
IncIndent();
|
||||||
prmCnt := AMthd.ParameterCount;
|
prmCnt := AMthd.ParameterCount;
|
||||||
If ( AMthd.MethodType = mtFunction ) Then
|
If ( AMthd.MethodType = mtFunction ) Then
|
||||||
@ -385,7 +416,7 @@ Var
|
|||||||
For k := 0 To Pred(prmCnt) Do Begin
|
For k := 0 To Pred(prmCnt) Do Begin
|
||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
If ( prm.Modifier <> pmOut ) Then Begin
|
If ( prm.Modifier <> pmOut ) Then Begin
|
||||||
Indent();WriteLn('%s.Put(''%s'', TypeInfo(%s), %s);',[sLOC_SERIALIZER,prm.Name,prm.DataType.Name,prm.Name]);
|
Indent();WriteLn('%s.Put(%s, TypeInfo(%s), %s);',[sLOC_SERIALIZER,QuotedStr(prm.ExternalName),prm.DataType.Name,prm.Name]);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
DecIndent();
|
DecIndent();
|
||||||
@ -402,8 +433,10 @@ Var
|
|||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
//Indent();WriteLn('%s := TypeInfo(%s);',[sRES_TYPE_INFO,prm.DataType.Name]);
|
//Indent();WriteLn('%s := TypeInfo(%s);',[sRES_TYPE_INFO,prm.DataType.Name]);
|
||||||
if prm.DataType.NeedFinalization() then begin
|
if prm.DataType.NeedFinalization() then begin
|
||||||
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
|
if prm.DataType.InheritsFrom(TClassTypeDefinition) or
|
||||||
Indent();WriteLn('Pointer(Result) := Nil;');
|
prm.DataType.InheritsFrom(TArrayDefinition)
|
||||||
|
then begin
|
||||||
|
Indent();WriteLn('TObject(Result) := Nil;');
|
||||||
end else begin
|
end else begin
|
||||||
Indent();WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkInterface] ) Then',[prm.DataType.Name]);
|
Indent();WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkInterface] ) Then',[prm.DataType.Name]);
|
||||||
IncIndent();
|
IncIndent();
|
||||||
@ -411,20 +444,24 @@ Var
|
|||||||
DecIndent();
|
DecIndent();
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
Indent();WriteLn('%s := %s;',[sPRM_NAME,QuotedStr(RETURN_PARAM_NAME)]);
|
Indent();WriteLn('%s := %s;',[sPRM_NAME,QuotedStr(prm.ExternalName)]);//Indent();WriteLn('%s := %s;',[sPRM_NAME,QuotedStr(RETURN_PARAM_NAME)]);
|
||||||
Indent();WriteLn('%s.Get(TypeInfo(%s), %s, %s);',[sLOC_SERIALIZER,prm.DataType.Name,sPRM_NAME,prm.Name]);
|
Indent();WriteLn('%s.Get(TypeInfo(%s), %s, %s);',[sLOC_SERIALIZER,prm.DataType.Name,sPRM_NAME,'Result']);
|
||||||
End;
|
End;
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
for k := 0 to Pred(prmCnt) do begin
|
for k := 0 to Pred(prmCnt) do begin
|
||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
if ( prm.Modifier = pmOut ) then begin
|
if ( prm.Modifier = pmOut ) then begin
|
||||||
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
|
if prm.DataType.NeedFinalization() then begin
|
||||||
Indent();WriteLn('Pointer(%s) := Nil;',[prm.Name]);
|
if prm.DataType.InheritsFrom(TClassTypeDefinition) or
|
||||||
end else begin
|
prm.DataType.InheritsFrom(TArrayDefinition)
|
||||||
Indent();WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkInterface] ) Then',[prm.DataType.Name]);
|
then begin
|
||||||
IncIndent();
|
Indent();WriteLn('TObject(%s) := Nil;',[prm.Name]);
|
||||||
Indent();WriteLn('Pointer(%s) := Nil;',[prm.Name]);
|
end else begin
|
||||||
DecIndent();
|
Indent();WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkInterface] ) Then',[prm.DataType.Name]);
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('Pointer(%s) := Nil;',[prm.Name]);
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -433,7 +470,7 @@ Var
|
|||||||
For k := 0 To Pred(prmCnt) Do Begin
|
For k := 0 To Pred(prmCnt) Do Begin
|
||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
If ( prm.Modifier In [pmVar, pmOut] ) Then Begin
|
If ( prm.Modifier In [pmVar, pmOut] ) Then Begin
|
||||||
Indent();WriteLn('%s := %s;',[sPRM_NAME,QuotedStr(prm.Name)]);
|
Indent();WriteLn('%s := %s;',[sPRM_NAME,QuotedStr(prm.ExternalName)]);
|
||||||
Indent();WriteLn('%s.Get(TypeInfo(%s), %s, %s);',[sLOC_SERIALIZER,prm.DataType.Name,sPRM_NAME,prm.Name]);
|
Indent();WriteLn('%s.Get(TypeInfo(%s), %s, %s);',[sLOC_SERIALIZER,prm.DataType.Name,sPRM_NAME,prm.Name]);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -766,7 +803,7 @@ Var
|
|||||||
NewLine();
|
NewLine();
|
||||||
For k := 0 To Pred(prmCnt) Do Begin
|
For k := 0 To Pred(prmCnt) Do Begin
|
||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
Write('%s := %s;',[sPRM_NAME,QuotedStr(prm.Name)]);
|
Write('%s := %s;',[sPRM_NAME,QuotedStr(prm.ExternalName)]);
|
||||||
WriteLn('AFormatter.Get(TypeInfo(%s),%s,%s);',[prm.DataType.Name,sPRM_NAME,prm.Name]);
|
WriteLn('AFormatter.Get(TypeInfo(%s),%s,%s);',[prm.DataType.Name,sPRM_NAME,prm.Name]);
|
||||||
If prm.DataType.NeedFinalization() Then Begin
|
If prm.DataType.NeedFinalization() Then Begin
|
||||||
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
|
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
|
||||||
@ -824,20 +861,20 @@ Var
|
|||||||
WriteLn('AFormatter.Clear();');
|
WriteLn('AFormatter.Clear();');
|
||||||
|
|
||||||
WriteLn('AFormatter.BeginCallResponse(procName,trgName);');
|
WriteLn('AFormatter.BeginCallResponse(procName,trgName);');
|
||||||
//BeginAutoIndent();
|
|
||||||
IncIndent();
|
IncIndent();
|
||||||
If ( AMthd.MethodType = mtFunction ) Then
|
if ( AMthd.MethodType = mtFunction ) then begin
|
||||||
WriteLn('AFormatter.Put(%s,TypeInfo(%s),%s);',[QuotedStr(RETURN_PARAM_NAME),AMthd.Parameter[prmCnt].DataType.Name,RETURN_VAL_NAME]);
|
//WriteLn('AFormatter.Put(%s,TypeInfo(%s),%s);',[QuotedStr(RETURN_PARAM_NAME),AMthd.Parameter[prmCnt].DataType.Name,RETURN_VAL_NAME]);
|
||||||
|
WriteLn('AFormatter.Put(%s,TypeInfo(%s),%s);',[QuotedStr(prm.ExternalName),AMthd.Parameter[prmCnt].DataType.Name,RETURN_VAL_NAME]);
|
||||||
|
end;
|
||||||
For k := 0 To Pred(prmCnt) Do Begin
|
For k := 0 To Pred(prmCnt) Do Begin
|
||||||
prm := AMthd.Parameter[k];
|
prm := AMthd.Parameter[k];
|
||||||
If ( prm.Modifier In [pmOut,pmVar] ) Then
|
If ( prm.Modifier In [pmOut,pmVar] ) Then
|
||||||
WriteLn('AFormatter.Put(%s,TypeInfo(%s),%s);',[QuotedStr(prm.Name),prm.DataType.Name,prm.Name]);
|
WriteLn('AFormatter.Put(%s,TypeInfo(%s),%s);',[QuotedStr(prm.ExternalName),prm.DataType.Name,prm.Name]);
|
||||||
End;
|
End;
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('AFormatter.EndCallResponse();');
|
WriteLn('AFormatter.EndCallResponse();');
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('callCtx := Nil;');
|
WriteLn('callCtx := Nil;');
|
||||||
//EndAutoIndent();
|
|
||||||
|
|
||||||
DecIndent();EndAutoIndent();
|
DecIndent();EndAutoIndent();
|
||||||
WriteLn('End;');
|
WriteLn('End;');
|
||||||
@ -1206,4 +1243,637 @@ begin
|
|||||||
FImpStream := Nil;
|
FImpStream := Nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TInftGenerator }
|
||||||
|
|
||||||
|
function TInftGenerator.GenerateIntfName(AIntf: TInterfaceDefinition): string;
|
||||||
|
begin
|
||||||
|
Result := ExtractserviceName(AIntf);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateUnitHeader();
|
||||||
|
begin
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
WriteLn('{');
|
||||||
|
WriteLn('This unit has been produced by ws_helper.');
|
||||||
|
WriteLn(' Input unit name : "%s".',[SymbolTable.Name]);
|
||||||
|
WriteLn(' This unit name : "%s".',[GetDestUnitName()]);
|
||||||
|
WriteLn(' Date : "%s".',[DateTimeToStr(Now())]);
|
||||||
|
WriteLn('}');
|
||||||
|
|
||||||
|
WriteLn('unit %s;',[GetDestUnitName()]);
|
||||||
|
WriteLn('{$mode objfpc}{$H+}');
|
||||||
|
WriteLn('interface');
|
||||||
|
WriteLn('');
|
||||||
|
WriteLn('uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;');
|
||||||
|
WriteLn('');
|
||||||
|
WriteLn('const');
|
||||||
|
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('sNAME_SPACE = %s;',[QuotedStr(FSymbolTable.ExternalName)]);
|
||||||
|
DecIndent();
|
||||||
|
|
||||||
|
WriteLn('');
|
||||||
|
WriteLn('type');
|
||||||
|
WriteLn('');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateUnitImplementationHeader();
|
||||||
|
begin
|
||||||
|
SetCurrentStream(FImpStream);
|
||||||
|
WriteLn('');
|
||||||
|
WriteLn('Implementation');
|
||||||
|
FImpTempStream.WriteLn('initialization');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateUnitImplementationFooter();
|
||||||
|
begin
|
||||||
|
SetCurrentStream(FImpStream);
|
||||||
|
NewLine();
|
||||||
|
NewLine();
|
||||||
|
FImpTempStream.NewLine();
|
||||||
|
FImpTempStream.WriteLn('End.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateIntf(AIntf: TInterfaceDefinition);
|
||||||
|
|
||||||
|
procedure WriteDec();
|
||||||
|
begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('%s = interface',[GenerateIntfName(AIntf)]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure WriteMethod(AMthd : TMethodDefinition);
|
||||||
|
Var
|
||||||
|
prmCnt,k : Integer;
|
||||||
|
prm : TParameterDefinition;
|
||||||
|
Begin
|
||||||
|
Indent();
|
||||||
|
prmCnt := AMthd.ParameterCount;
|
||||||
|
If ( AMthd.MethodType = mtProcedure ) Then
|
||||||
|
Write('procedure ')
|
||||||
|
Else Begin
|
||||||
|
Write('function ');
|
||||||
|
Dec(prmCnt);
|
||||||
|
End;
|
||||||
|
Write('%s(',[AMthd.Name]);
|
||||||
|
|
||||||
|
If ( prmCnt > 0 ) Then Begin
|
||||||
|
IncIndent();
|
||||||
|
For k := 0 To Pred(prmCnt) Do Begin
|
||||||
|
prm := AMthd.Parameter[k];
|
||||||
|
If (k > 0 ) Then
|
||||||
|
Write('; ');
|
||||||
|
NewLine();
|
||||||
|
Indent();
|
||||||
|
Write('%s %s : %s',[ParameterModifierMAP[prm.Modifier],prm.Name,prm.DataType.Name]);
|
||||||
|
End;
|
||||||
|
DecIndent();
|
||||||
|
NewLine();
|
||||||
|
Indent();
|
||||||
|
End;
|
||||||
|
|
||||||
|
Write(')');
|
||||||
|
If ( AMthd.MethodType = mtFunction ) Then Begin
|
||||||
|
Write(':%s',[AMthd.Parameter[prmCnt].DataType.Name]);
|
||||||
|
End;
|
||||||
|
WriteLn(';');
|
||||||
|
End;
|
||||||
|
|
||||||
|
procedure WriteMethods();
|
||||||
|
Var
|
||||||
|
k : Integer;
|
||||||
|
begin
|
||||||
|
If ( AIntf.MethodCount = 0 ) Then
|
||||||
|
Exit;
|
||||||
|
IncIndent();
|
||||||
|
For k := 0 To Pred(AIntf.MethodCount) Do
|
||||||
|
WriteMethod(AIntf.Method[k]);
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
NewLine();
|
||||||
|
IncIndent();
|
||||||
|
WriteDec();
|
||||||
|
WriteMethods();
|
||||||
|
Indent(); WriteLn('end;');
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateTypeAlias(ASymbol: TTypeAliasDefinition);
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
NewLine();
|
||||||
|
IncIndent();
|
||||||
|
Indent();
|
||||||
|
WriteLn('%s = type %s;',[ASymbol.Name,ASymbol.BaseType.Name]);
|
||||||
|
DecIndent();
|
||||||
|
except
|
||||||
|
on e : Exception do
|
||||||
|
System.WriteLn('TInftGenerator.GenerateTypeAlias()=', ASymbol.Name, ' ;; ', e.Message);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateClass(ASymbol: TClassTypeDefinition);
|
||||||
|
var
|
||||||
|
locClassPropNbr, locStoredPropsNbr : Integer;
|
||||||
|
loc_BaseComplexSimpleContentRemotable : TClassTypeDefinition;
|
||||||
|
|
||||||
|
procedure Prepare();
|
||||||
|
var
|
||||||
|
k : Integer;
|
||||||
|
p : TPropertyDefinition;
|
||||||
|
begin
|
||||||
|
locClassPropNbr := 0;
|
||||||
|
locStoredPropsNbr := 0;
|
||||||
|
for k := 0 to Pred(ASymbol.PropertyCount) do begin
|
||||||
|
p := ASymbol.Properties[k];
|
||||||
|
if ( p.StorageOption = soOptional ) then
|
||||||
|
Inc(locStoredPropsNbr);
|
||||||
|
if p.DataType.InheritsFrom(TClassTypeDefinition) then
|
||||||
|
Inc(locClassPropNbr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure WriteDec();
|
||||||
|
var
|
||||||
|
s : string;
|
||||||
|
begin
|
||||||
|
if Assigned(ASymbol.Parent) then begin
|
||||||
|
{if ASymbol.Parent.InheritsFrom(TNativeSimpleTypeDefinition) and
|
||||||
|
Assigned(TNativeSimpleTypeDefinition(ASymbol.Parent).BoxedType)
|
||||||
|
then begin
|
||||||
|
s := Format('%s',[TNativeSimpleTypeDefinition(ASymbol.Parent).BoxedType.Name]);
|
||||||
|
end else begin
|
||||||
|
s := Format('%s',[ASymbol.Parent.Name]);
|
||||||
|
end;}
|
||||||
|
s := Format('%s',[ASymbol.Parent.Name]);
|
||||||
|
end else begin
|
||||||
|
s := 'XX';//'TBaseComplexRemotable';
|
||||||
|
end;
|
||||||
|
Indent();
|
||||||
|
WriteLn('%s = class(%s)',[ASymbol.Name,s]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure WritePropertyField(AProp : TPropertyDefinition);
|
||||||
|
begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('F%s : %s;',[AProp.Name,AProp.DataType.Name]);
|
||||||
|
End;
|
||||||
|
|
||||||
|
procedure WriteProperty(AProp : TPropertyDefinition);
|
||||||
|
var
|
||||||
|
propName, locStore : string;
|
||||||
|
begin
|
||||||
|
propName := AProp.Name;
|
||||||
|
case AProp.StorageOption of
|
||||||
|
soAlways : locStore := '';
|
||||||
|
soNever : locStore := ' stored False';
|
||||||
|
soOptional : locStore := Format(' stored Has%s',[AProp.Name]);
|
||||||
|
end;
|
||||||
|
Indent();
|
||||||
|
WriteLn('property %s : %s read F%s write F%s%s;',[propName,AProp.DataType.Name,propName,propName,locStore]);
|
||||||
|
if not AnsiSameText(AProp.Name,AProp.ExternalName) then begin
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('GetTypeRegistry().ItemByTypeInfo[TypeInfo(%s)].RegisterExternalPropertyName(%s,%s);',[ASymbol.Name,QuotedStr(AProp.Name),QuotedStr(AProp.ExternalName)]);
|
||||||
|
end;
|
||||||
|
if AProp.IsAttribute and ( not ASymbol.IsDescendantOf(loc_BaseComplexSimpleContentRemotable) ) then begin
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('%s.RegisterAttributeProperty(%s);',[ASymbol.Name,QuotedStr(AProp.Name)]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure WriteProperties();
|
||||||
|
Var
|
||||||
|
k : Integer;
|
||||||
|
p : TPropertyDefinition;
|
||||||
|
begin
|
||||||
|
If ( ASymbol.PropertyCount > 0 ) Then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('private');
|
||||||
|
IncIndent();
|
||||||
|
for k := 0 to Pred(ASymbol.PropertyCount) do begin
|
||||||
|
p := ASymbol.Properties[k];
|
||||||
|
WritePropertyField(p);
|
||||||
|
end;
|
||||||
|
DecIndent();
|
||||||
|
//
|
||||||
|
if ( locStoredPropsNbr > 0 ) then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('private');
|
||||||
|
IncIndent();
|
||||||
|
for k := 0 to Pred(ASymbol.PropertyCount) do begin
|
||||||
|
p := ASymbol.Properties[k];
|
||||||
|
if ( p.StorageOption = soOptional ) then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('function Has%s() : Boolean;',[p.Name]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
if ( locClassPropNbr > 0 ) then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('public');
|
||||||
|
IncIndent();
|
||||||
|
Indent();
|
||||||
|
WriteLn('destructor Destroy();override;');
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
Indent();
|
||||||
|
WriteLn('published');
|
||||||
|
IncIndent();
|
||||||
|
For k := 0 To Pred(ASymbol.PropertyCount) Do
|
||||||
|
WriteProperty(ASymbol.Properties[k]);
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure WriteImp();
|
||||||
|
var
|
||||||
|
k : Integer;
|
||||||
|
p : TPropertyDefinition;
|
||||||
|
begin
|
||||||
|
if ( locClassPropNbr > 0 ) or ( locStoredPropsNbr > 0 ) then begin
|
||||||
|
NewLine();
|
||||||
|
WriteLn('{ %s }',[ASymbol.Name]);
|
||||||
|
|
||||||
|
if ( locClassPropNbr > 0 ) then begin
|
||||||
|
NewLine();
|
||||||
|
WriteLn('destructor %s.Destroy();',[ASymbol.Name]);
|
||||||
|
WriteLn('begin');
|
||||||
|
IncIndent();
|
||||||
|
for k := 0 to Pred(ASymbol.PropertyCount) do begin
|
||||||
|
p := ASymbol.Properties[k];
|
||||||
|
if p.DataType.InheritsFrom(TClassTypeDefinition) then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('if Assigned(F%s) then',[p.Name]);
|
||||||
|
IncIndent();
|
||||||
|
Indent();
|
||||||
|
WriteLn('FreeAndNil(F%s);',[p.Name]) ;
|
||||||
|
DecIndent();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Indent();
|
||||||
|
WriteLn('inherited Destroy();');
|
||||||
|
DecIndent();
|
||||||
|
WriteLn('end;');
|
||||||
|
end;
|
||||||
|
|
||||||
|
if ( locStoredPropsNbr > 0 ) then begin
|
||||||
|
for k := 0 to Pred(ASymbol.PropertyCount) do begin
|
||||||
|
p := ASymbol.Properties[k];
|
||||||
|
if ( p.StorageOption = soOptional ) then begin
|
||||||
|
NewLine();
|
||||||
|
WriteLn('function %s.Has%s() : Boolean;',[ASymbol.Name,p.Name]);
|
||||||
|
WriteLn('begin');
|
||||||
|
IncIndent();
|
||||||
|
Indent();
|
||||||
|
WriteLn('Result := True;');
|
||||||
|
DecIndent();
|
||||||
|
WriteLn('end;');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Prepare();
|
||||||
|
try
|
||||||
|
loc_BaseComplexSimpleContentRemotable := FSymbolTable.ByName('TBaseComplexSimpleContentRemotable') as TClassTypeDefinition;
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
NewLine();
|
||||||
|
IncIndent();
|
||||||
|
WriteDec();
|
||||||
|
WriteProperties();
|
||||||
|
Indent(); WriteLn('end;');
|
||||||
|
DecIndent();
|
||||||
|
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('GetTypeRegistry().Register(%s,TypeInfo(%s),%s);',[sNAME_SPACE,ASymbol.Name,QuotedStr(ASymbol.ExternalName)]);
|
||||||
|
|
||||||
|
SetCurrentStream(FImpStream);
|
||||||
|
WriteImp();
|
||||||
|
except
|
||||||
|
on e : Exception do
|
||||||
|
System.WriteLn('TInftGenerator.GenerateClass()=', ASymbol.Name, ' ;; ', e.Message);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateEnum(ASymbol: TEnumTypeDefinition);
|
||||||
|
var
|
||||||
|
itm : TEnumItemDefinition;
|
||||||
|
i : Integer;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
NewLine();
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('%s = ( ',[ASymbol.Name]);
|
||||||
|
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('GetTypeRegistry().Register(%s,TypeInfo(%s),%s);',[sNAME_SPACE,ASymbol.Name,QuotedStr(ASymbol.ExternalName)]);
|
||||||
|
|
||||||
|
IncIndent();
|
||||||
|
for i := 0 to Pred(ASymbol.ItemCount) do begin
|
||||||
|
itm := ASymbol.Item[i];
|
||||||
|
Indent();
|
||||||
|
if ( i > 0 ) then
|
||||||
|
WriteLn(',%s',[itm.Name])
|
||||||
|
else
|
||||||
|
WriteLn('%s',[itm.Name]);
|
||||||
|
if not AnsiSameText(itm.Name,itm.ExternalName) then begin
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('GetTypeRegistry().ItemByTypeInfo[TypeInfo(%s)].RegisterExternalPropertyName(%s,%s);',[ASymbol.Name,QuotedStr(itm.Name),QuotedStr(itm.ExternalName)]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
DecIndent();
|
||||||
|
Indent(); WriteLn(');');
|
||||||
|
DecIndent();
|
||||||
|
except
|
||||||
|
on e : Exception do
|
||||||
|
System.WriteLn('TInftGenerator.GenerateClass()=', ASymbol.Name, ' ;; ', e.Message);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.GenerateArray(ASymbol: TArrayDefinition);
|
||||||
|
|
||||||
|
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.ItemType.Name]);
|
||||||
|
WriteLn('public');
|
||||||
|
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||||
|
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ItemType.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.ItemType.Name]);
|
||||||
|
WriteLn('begin');
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('Result := Inherited GetItem(AIndex) As %s;',[ASymbol.ItemType.Name]);
|
||||||
|
DecIndent();
|
||||||
|
WriteLn('end;');
|
||||||
|
|
||||||
|
NewLine();
|
||||||
|
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||||
|
WriteLn('begin');
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('Result:= %s;',[ASymbol.ItemType.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.ItemType.Name]);
|
||||||
|
WriteLn('private');
|
||||||
|
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ItemType.Name]);
|
||||||
|
Indent();WriteLn('procedure SetItem(AIndex: Integer; const AValue: %s);',[ASymbol.ItemType.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('property Item[AIndex:Integer] : %s read GetItem write SetItem; default;',[ASymbol.ItemType.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.ItemType.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.ItemType.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(ASymbol.ItemName),ASymbol.ItemType.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(ASymbol.ItemName)]);
|
||||||
|
Indent();WriteLn('AStore.Get(TypeInfo(%s),sName,FData[AIndex]);',[ASymbol.ItemType.Name]);
|
||||||
|
DecIndent();
|
||||||
|
WriteLn('end;');
|
||||||
|
|
||||||
|
NewLine();
|
||||||
|
WriteLn('class function %s.GetItemTypeInfo(): PTypeInfo;',[ASymbol.Name]);
|
||||||
|
WriteLn('begin');
|
||||||
|
IncIndent();
|
||||||
|
Indent();WriteLn('Result := TypeInfo(%s);',[ASymbol.ItemType.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;');
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
classItemArray : Boolean;
|
||||||
|
begin
|
||||||
|
classItemArray := ( ASymbol.ItemType is TClassTypeDefinition ) or
|
||||||
|
( ASymbol.ItemType is TArrayDefinition ) ;
|
||||||
|
|
||||||
|
if classItemArray then begin
|
||||||
|
WriteObjectArray();
|
||||||
|
end else begin
|
||||||
|
WriteSimpleTypeArray();
|
||||||
|
end;
|
||||||
|
|
||||||
|
FImpTempStream.Indent();
|
||||||
|
FImpTempStream.WriteLn('GetTypeRegistry().Register(%s,TypeInfo(%s),%s);',[sNAME_SPACE,ASymbol.Name,QuotedStr(ASymbol.ExternalName)]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TInftGenerator.GetDestUnitName(): string;
|
||||||
|
begin
|
||||||
|
Result := Format('%s_intf',[SymbolTable.Name]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TInftGenerator.Create(
|
||||||
|
ASymTable : TSymbolTable;
|
||||||
|
ASrcMngr : ISourceManager
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
inherited Create(ASymTable,ASrcMngr);
|
||||||
|
FDecStream := SrcMngr.CreateItem(GetDestUnitName() + '.dec');
|
||||||
|
FImpStream := SrcMngr.CreateItem(GetDestUnitName() + '.imp');
|
||||||
|
FImpTempStream := SrcMngr.CreateItem(GetDestUnitName() + '.tmp_imp');
|
||||||
|
FImpTempStream.IncIndent();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TInftGenerator.Execute();
|
||||||
|
var
|
||||||
|
i,c, j, k : Integer;
|
||||||
|
clssTyp : TClassTypeDefinition;
|
||||||
|
gnrClssLst : TObjectList;
|
||||||
|
objLst : TObjectList;
|
||||||
|
begin
|
||||||
|
objLst := nil;
|
||||||
|
gnrClssLst := TObjectList.Create(False);
|
||||||
|
try
|
||||||
|
GenerateUnitHeader();
|
||||||
|
GenerateUnitImplementationHeader();
|
||||||
|
c := Pred(SymbolTable.Count);
|
||||||
|
|
||||||
|
SetCurrentStream(FDecStream);
|
||||||
|
IncIndent();
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i] is TForwardTypeDefinition then begin
|
||||||
|
WriteLn('// %s = unable to resolve this symbol.',[SymbolTable.Item[i].Name]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
DecIndent();
|
||||||
|
|
||||||
|
IncIndent();
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if ( SymbolTable.Item[i] is TClassTypeDefinition ) or
|
||||||
|
( SymbolTable.Item[i] is TArrayDefinition )
|
||||||
|
then begin
|
||||||
|
Indent();
|
||||||
|
WriteLn('%s = class;',[SymbolTable.Item[i].Name]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
DecIndent();
|
||||||
|
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i] is TEnumTypeDefinition then begin
|
||||||
|
GenerateEnum(SymbolTable.Item[i] as TEnumTypeDefinition);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i] is TTypeAliasDefinition then begin
|
||||||
|
GenerateTypeAlias(SymbolTable.Item[i] as TTypeAliasDefinition);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
objLst := TObjectList.Create();
|
||||||
|
objLst.OwnsObjects := False;
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i].InheritsFrom(TClassTypeDefinition) then begin
|
||||||
|
clssTyp := SymbolTable.Item[i] as TClassTypeDefinition;
|
||||||
|
if ( gnrClssLst.IndexOf(clssTyp) = -1 ) then begin
|
||||||
|
while ( objLst.Count > 0 ) do begin
|
||||||
|
objLst.Clear();
|
||||||
|
end;
|
||||||
|
while Assigned(clssTyp) do begin
|
||||||
|
objLst.Add(clssTyp);
|
||||||
|
if Assigned(clssTyp.Parent) and clssTyp.Parent.InheritsFrom(TClassTypeDefinition) then begin
|
||||||
|
clssTyp := clssTyp.Parent as TClassTypeDefinition;
|
||||||
|
end else begin
|
||||||
|
clssTyp := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
k := Pred(objLst.Count);
|
||||||
|
for j := 0 to k do begin
|
||||||
|
clssTyp := objLst[k-j] as TClassTypeDefinition;
|
||||||
|
if ( gnrClssLst.IndexOf(clssTyp) = -1 ) then begin
|
||||||
|
if ( FSymbolTable.IndexOf(clssTyp) <> -1 ) then begin
|
||||||
|
GenerateClass(clssTyp);
|
||||||
|
gnrClssLst.Add(clssTyp);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i] is TArrayDefinition then begin
|
||||||
|
GenerateArray(SymbolTable.Item[i] as TArrayDefinition);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
for i := 0 to c do begin
|
||||||
|
if SymbolTable.Item[i] is TInterfaceDefinition then begin
|
||||||
|
GenerateIntf(SymbolTable.Item[i] as TInterfaceDefinition);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
GenerateUnitImplementationFooter();
|
||||||
|
FSrcMngr.Merge(GetDestUnitName() + '.pas',[FDecStream,FImpStream,FImpTempStream]);
|
||||||
|
FDecStream := nil;
|
||||||
|
FImpStream := nil;
|
||||||
|
FImpTempStream := nil;
|
||||||
|
finally
|
||||||
|
FreeAndNil(objLst);
|
||||||
|
FreeAndNil(gnrClssLst);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
File diff suppressed because it is too large
Load Diff
1
wst/trunk/ws_helper/test_CALCULATOR.bat
Normal file
1
wst/trunk/ws_helper/test_CALCULATOR.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
C:\Programmes\lazarus\wst\ws_helper\ws_helper -u -i -p -b -a"C:\Programmes\lazarus\wst\tests\files" "C:\Programmes\lazarus\wst\tests\files\CALCULATOR.wsdl" >test_res_CALCULATOR.txt
|
1
wst/trunk/ws_helper/test_ebay.bat
Normal file
1
wst/trunk/ws_helper/test_ebay.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
C:\Programmes\lazarus\wst\ws_helper\ws_helper -u -i -p -b -a"C:\Programmes\lazarus\wst\tests\files" "C:\Programmes\lazarus\utils\eBayLast\eBayWSDL.WSDL" >test_res_eBayWSDL.txt
|
1
wst/trunk/ws_helper/test_googleSearch.bat
Normal file
1
wst/trunk/ws_helper/test_googleSearch.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
C:\Programmes\lazarus\wst\ws_helper\ws_helper -u -i -p -b -a"C:\Programmes\lazarus\wst\tests\files" "C:\Programmes\lazarus\utils\googleapi\GoogleSearch.wsdl" >test_res_GoogleSearch.txt
|
1
wst/trunk/ws_helper/test_metadata.bat
Normal file
1
wst/trunk/ws_helper/test_metadata.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
C:\Programmes\lazarus\wst\ws_helper\ws_helper -u -i -p -b -a"C:\Programmes\lazarus\wst\tests\files" "C:\Programmes\lazarus\wst\tests\files\metadata_service.wsdl" >test_res_metadata_service.txt
|
@ -12,6 +12,7 @@
|
|||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<IconPath Value="./"/>
|
<IconPath Value="./"/>
|
||||||
<TargetFileExt Value=""/>
|
<TargetFileExt Value=""/>
|
||||||
|
<ActiveEditorIndexAtStart Value="0"/>
|
||||||
</General>
|
</General>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
@ -23,7 +24,7 @@
|
|||||||
<RunParams>
|
<RunParams>
|
||||||
<local>
|
<local>
|
||||||
<FormatVersion Value="1"/>
|
<FormatVersion Value="1"/>
|
||||||
<CommandLineParams Value="-b -i -o..\server E:\Inoussa\Sources\lazarus\projet_ki2\src\shared\gestion_intf.pas"/>
|
<CommandLineParams Value="-u -i -p -b -a"C:\Programmes\lazarus\wst\tests\files" "C:\Programmes\lazarus\utils\googleapi\GoogleSearch.wsdl""/>
|
||||||
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||||
</local>
|
</local>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
@ -32,57 +33,67 @@
|
|||||||
<PackageName Value="FCL"/>
|
<PackageName Value="FCL"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="35">
|
<Units Count="48">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="ws_helper.pas"/>
|
<Filename Value="ws_helper.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ws_helper"/>
|
<UnitName Value="ws_helper"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="26" Y="29"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="15"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit0>
|
</Unit0>
|
||||||
<Unit1>
|
<Unit1>
|
||||||
<Filename Value="ws_parser.pas"/>
|
<Filename Value="ws_parser.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ws_parser"/>
|
<UnitName Value="ws_parser"/>
|
||||||
<CursorPos X="21" Y="192"/>
|
<CursorPos X="53" Y="420"/>
|
||||||
<TopLine Value="234"/>
|
<TopLine Value="400"/>
|
||||||
|
<EditorIndex Value="7"/>
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit1>
|
</Unit1>
|
||||||
<Unit2>
|
<Unit2>
|
||||||
<Filename Value="generator.pas"/>
|
<Filename Value="generator.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="generator"/>
|
<UnitName Value="generator"/>
|
||||||
<CursorPos X="39" Y="16"/>
|
<CursorPos X="112" Y="448"/>
|
||||||
<TopLine Value="148"/>
|
<TopLine Value="417"/>
|
||||||
|
<EditorIndex Value="0"/>
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
<Bookmarks Count="3">
|
<Bookmarks Count="3">
|
||||||
<Item0 X="43" Y="692" ID="0"/>
|
<Item0 X="43" Y="723" ID="0"/>
|
||||||
<Item1 X="69" Y="829" ID="1"/>
|
<Item1 X="69" Y="860" ID="1"/>
|
||||||
<Item2 X="17" Y="194" ID="2"/>
|
<Item2 X="17" Y="219" ID="2"/>
|
||||||
</Bookmarks>
|
</Bookmarks>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit2>
|
</Unit2>
|
||||||
<Unit3>
|
<Unit3>
|
||||||
<Filename Value="parserdefs.pas"/>
|
<Filename Value="parserdefs.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="parserdefs"/>
|
<UnitName Value="parserdefs"/>
|
||||||
<CursorPos X="14" Y="119"/>
|
<CursorPos X="3" Y="41"/>
|
||||||
<TopLine Value="29"/>
|
<TopLine Value="30"/>
|
||||||
|
<EditorIndex Value="5"/>
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit3>
|
</Unit3>
|
||||||
<Unit4>
|
<Unit4>
|
||||||
<Filename Value="parserutils.pas"/>
|
<Filename Value="parserutils.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="parserutils"/>
|
<UnitName Value="parserutils"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="39"/>
|
||||||
<TopLine Value="23"/>
|
<TopLine Value="1"/>
|
||||||
|
<EditorIndex Value="6"/>
|
||||||
<UsageCount Value="200"/>
|
<UsageCount Value="200"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
</Unit4>
|
</Unit4>
|
||||||
<Unit5>
|
<Unit5>
|
||||||
<Filename Value="ws_helper.lpi"/>
|
<Filename Value="ws_helper.lpi"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="2"/>
|
<UsageCount Value="8"/>
|
||||||
<SyntaxHighlighter Value="None"/>
|
<SyntaxHighlighter Value="None"/>
|
||||||
</Unit5>
|
</Unit5>
|
||||||
<Unit6>
|
<Unit6>
|
||||||
@ -90,84 +101,84 @@
|
|||||||
<UnitName Value="Classes"/>
|
<UnitName Value="Classes"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="2"/>
|
<UsageCount Value="8"/>
|
||||||
</Unit6>
|
</Unit6>
|
||||||
<Unit7>
|
<Unit7>
|
||||||
<Filename Value="usr\share\fpcsrc\rtl\objpas\strutils.pp"/>
|
<Filename Value="usr\share\fpcsrc\rtl\objpas\strutils.pp"/>
|
||||||
<UnitName Value="strutils"/>
|
<UnitName Value="strutils"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="2"/>
|
<UsageCount Value="8"/>
|
||||||
</Unit7>
|
</Unit7>
|
||||||
<Unit8>
|
<Unit8>
|
||||||
<Filename Value="usr\share\fpcsrc\rtl\unix\sysutils.pp"/>
|
<Filename Value="usr\share\fpcsrc\rtl\unix\sysutils.pp"/>
|
||||||
<UnitName Value="sysutils"/>
|
<UnitName Value="sysutils"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="2"/>
|
<UsageCount Value="8"/>
|
||||||
</Unit8>
|
</Unit8>
|
||||||
<Unit9>
|
<Unit9>
|
||||||
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/>
|
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/>
|
||||||
<UnitName Value="IdDsnCoreResourceStrings"/>
|
<UnitName Value="IdDsnCoreResourceStrings"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="3"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit9>
|
</Unit9>
|
||||||
<Unit10>
|
<Unit10>
|
||||||
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnPropEdBinding.pas"/>
|
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnPropEdBinding.pas"/>
|
||||||
<UnitName Value="IdDsnPropEdBinding"/>
|
<UnitName Value="IdDsnPropEdBinding"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="3"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit10>
|
</Unit10>
|
||||||
<Unit11>
|
<Unit11>
|
||||||
<Filename Value="D:\Lazarus\ide\lazarus.pp"/>
|
<Filename Value="D:\Lazarus\ide\lazarus.pp"/>
|
||||||
<UnitName Value="Lazarus"/>
|
<UnitName Value="Lazarus"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="3"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit11>
|
</Unit11>
|
||||||
<Unit12>
|
<Unit12>
|
||||||
<Filename Value="source_utils.pas"/>
|
<Filename Value="source_utils.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="source_utils"/>
|
<UnitName Value="source_utils"/>
|
||||||
<CursorPos X="1" Y="231"/>
|
<CursorPos X="3" Y="34"/>
|
||||||
<TopLine Value="220"/>
|
<TopLine Value="45"/>
|
||||||
<UsageCount Value="179"/>
|
<UsageCount Value="201"/>
|
||||||
</Unit12>
|
</Unit12>
|
||||||
<Unit13>
|
<Unit13>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
||||||
<UnitName Value="getopts"/>
|
<UnitName Value="getopts"/>
|
||||||
<CursorPos X="16" Y="45"/>
|
<CursorPos X="16" Y="45"/>
|
||||||
<TopLine Value="33"/>
|
<TopLine Value="33"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit13>
|
</Unit13>
|
||||||
<Unit14>
|
<Unit14>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\strutils.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\strutils.pp"/>
|
||||||
<UnitName Value="strutils"/>
|
<UnitName Value="strutils"/>
|
||||||
<CursorPos X="23" Y="246"/>
|
<CursorPos X="23" Y="246"/>
|
||||||
<TopLine Value="246"/>
|
<TopLine Value="246"/>
|
||||||
<UsageCount Value="7"/>
|
<UsageCount Value="3"/>
|
||||||
</Unit14>
|
</Unit14>
|
||||||
<Unit15>
|
<Unit15>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
|
||||||
<CursorPos X="10" Y="74"/>
|
<CursorPos X="10" Y="74"/>
|
||||||
<TopLine Value="70"/>
|
<TopLine Value="70"/>
|
||||||
<UsageCount Value="7"/>
|
<UsageCount Value="3"/>
|
||||||
</Unit15>
|
</Unit15>
|
||||||
<Unit16>
|
<Unit16>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
|
||||||
<CursorPos X="3" Y="185"/>
|
<CursorPos X="3" Y="185"/>
|
||||||
<TopLine Value="180"/>
|
<TopLine Value="180"/>
|
||||||
<UsageCount Value="7"/>
|
<UsageCount Value="3"/>
|
||||||
</Unit16>
|
</Unit16>
|
||||||
<Unit17>
|
<Unit17>
|
||||||
<Filename Value="command_line_parser.pas"/>
|
<Filename Value="command_line_parser.pas"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="command_line_parser"/>
|
<UnitName Value="command_line_parser"/>
|
||||||
<CursorPos X="1" Y="53"/>
|
<CursorPos X="34" Y="69"/>
|
||||||
<TopLine Value="42"/>
|
<TopLine Value="19"/>
|
||||||
<UsageCount Value="159"/>
|
<UsageCount Value="200"/>
|
||||||
</Unit17>
|
</Unit17>
|
||||||
<Unit18>
|
<Unit18>
|
||||||
<Filename Value="metadata_generator.pas"/>
|
<Filename Value="metadata_generator.pas"/>
|
||||||
@ -175,7 +186,7 @@
|
|||||||
<UnitName Value="metadata_generator"/>
|
<UnitName Value="metadata_generator"/>
|
||||||
<CursorPos X="1" Y="19"/>
|
<CursorPos X="1" Y="19"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="110"/>
|
<UsageCount Value="170"/>
|
||||||
</Unit18>
|
</Unit18>
|
||||||
<Unit19>
|
<Unit19>
|
||||||
<Filename Value="..\binary_streamer.pas"/>
|
<Filename Value="..\binary_streamer.pas"/>
|
||||||
@ -183,70 +194,70 @@
|
|||||||
<UnitName Value="binary_streamer"/>
|
<UnitName Value="binary_streamer"/>
|
||||||
<CursorPos X="6" Y="13"/>
|
<CursorPos X="6" Y="13"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="110"/>
|
<UsageCount Value="170"/>
|
||||||
</Unit19>
|
</Unit19>
|
||||||
<Unit20>
|
<Unit20>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\finah.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\finah.inc"/>
|
||||||
<CursorPos X="11" Y="27"/>
|
<CursorPos X="11" Y="27"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit20>
|
</Unit20>
|
||||||
<Unit21>
|
<Unit21>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\fina.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\fina.inc"/>
|
||||||
<CursorPos X="3" Y="26"/>
|
<CursorPos X="3" Y="26"/>
|
||||||
<TopLine Value="23"/>
|
<TopLine Value="23"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit21>
|
</Unit21>
|
||||||
<Unit22>
|
<Unit22>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
||||||
<CursorPos X="17" Y="662"/>
|
<CursorPos X="17" Y="662"/>
|
||||||
<TopLine Value="652"/>
|
<TopLine Value="652"/>
|
||||||
<UsageCount Value="3"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
<Unit23>
|
<Unit23>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\filutilh.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\filutilh.inc"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="54"/>
|
<TopLine Value="54"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit23>
|
</Unit23>
|
||||||
<Unit24>
|
<Unit24>
|
||||||
<Filename Value="D:\Lazarus\lcl\lresources.pp"/>
|
<Filename Value="D:\Lazarus\lcl\lresources.pp"/>
|
||||||
<UnitName Value="LResources"/>
|
<UnitName Value="LResources"/>
|
||||||
<CursorPos X="15" Y="590"/>
|
<CursorPos X="15" Y="590"/>
|
||||||
<TopLine Value="586"/>
|
<TopLine Value="586"/>
|
||||||
<UsageCount Value="9"/>
|
<UsageCount Value="5"/>
|
||||||
</Unit24>
|
</Unit24>
|
||||||
<Unit25>
|
<Unit25>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\win\sysutils.pp"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\win\sysutils.pp"/>
|
||||||
<UnitName Value="sysutils"/>
|
<UnitName Value="sysutils"/>
|
||||||
<CursorPos X="12" Y="33"/>
|
<CursorPos X="12" Y="33"/>
|
||||||
<TopLine Value="11"/>
|
<TopLine Value="11"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit25>
|
</Unit25>
|
||||||
<Unit26>
|
<Unit26>
|
||||||
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\sysutilh.inc"/>
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\sysutilh.inc"/>
|
||||||
<CursorPos X="11" Y="221"/>
|
<CursorPos X="11" Y="221"/>
|
||||||
<TopLine Value="194"/>
|
<TopLine Value="194"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit26>
|
</Unit26>
|
||||||
<Unit27>
|
<Unit27>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\classes.pp"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\classes.pp"/>
|
||||||
<UnitName Value="Classes"/>
|
<UnitName Value="Classes"/>
|
||||||
<CursorPos X="1" Y="47"/>
|
<CursorPos X="1" Y="47"/>
|
||||||
<TopLine Value="25"/>
|
<TopLine Value="25"/>
|
||||||
<UsageCount Value="6"/>
|
<UsageCount Value="2"/>
|
||||||
</Unit27>
|
</Unit27>
|
||||||
<Unit28>
|
<Unit28>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
||||||
<CursorPos X="30" Y="1183"/>
|
<CursorPos X="30" Y="1183"/>
|
||||||
<TopLine Value="1171"/>
|
<TopLine Value="1171"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit28>
|
</Unit28>
|
||||||
<Unit29>
|
<Unit29>
|
||||||
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\parser.inc"/>
|
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\parser.inc"/>
|
||||||
<CursorPos X="3" Y="303"/>
|
<CursorPos X="3" Y="303"/>
|
||||||
<TopLine Value="299"/>
|
<TopLine Value="299"/>
|
||||||
<UsageCount Value="8"/>
|
<UsageCount Value="4"/>
|
||||||
</Unit29>
|
</Unit29>
|
||||||
<Unit30>
|
<Unit30>
|
||||||
<Filename Value="wst_resources_utils.pas"/>
|
<Filename Value="wst_resources_utils.pas"/>
|
||||||
@ -254,36 +265,240 @@
|
|||||||
<UnitName Value="wst_resources_utils"/>
|
<UnitName Value="wst_resources_utils"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="25"/>
|
<UsageCount Value="85"/>
|
||||||
</Unit30>
|
</Unit30>
|
||||||
<Unit31>
|
<Unit31>
|
||||||
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\classes.pp"/>
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\classes.pp"/>
|
||||||
<UnitName Value="Classes"/>
|
<UnitName Value="Classes"/>
|
||||||
<CursorPos X="8" Y="27"/>
|
<CursorPos X="1" Y="47"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="20"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="9"/>
|
||||||
</Unit31>
|
</Unit31>
|
||||||
<Unit32>
|
<Unit32>
|
||||||
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\sysutils.pp"/>
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\sysutils.pp"/>
|
||||||
<UnitName Value="sysutils"/>
|
<UnitName Value="sysutils"/>
|
||||||
<CursorPos X="15" Y="33"/>
|
<CursorPos X="15" Y="33"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit32>
|
</Unit32>
|
||||||
<Unit33>
|
<Unit33>
|
||||||
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
|
||||||
<CursorPos X="15" Y="19"/>
|
<CursorPos X="15" Y="19"/>
|
||||||
<TopLine Value="7"/>
|
<TopLine Value="7"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit33>
|
</Unit33>
|
||||||
<Unit34>
|
<Unit34>
|
||||||
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\osutilsh.inc"/>
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\osutilsh.inc"/>
|
||||||
<CursorPos X="1" Y="1"/>
|
<CursorPos X="1" Y="1"/>
|
||||||
<TopLine Value="1"/>
|
<TopLine Value="1"/>
|
||||||
<UsageCount Value="10"/>
|
<UsageCount Value="6"/>
|
||||||
</Unit34>
|
</Unit34>
|
||||||
|
<Unit35>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\finah.inc"/>
|
||||||
|
<CursorPos X="10" Y="30"/>
|
||||||
|
<TopLine Value="16"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit35>
|
||||||
|
<Unit36>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\fina.inc"/>
|
||||||
|
<CursorPos X="15" Y="102"/>
|
||||||
|
<TopLine Value="78"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit36>
|
||||||
|
<Unit37>
|
||||||
|
<Filename Value="..\wsdl_to_pascal\wsdl2pas_imp.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="wsdl2pas_imp"/>
|
||||||
|
<CursorPos X="29" Y="1641"/>
|
||||||
|
<TopLine Value="1633"/>
|
||||||
|
<UsageCount Value="77"/>
|
||||||
|
</Unit37>
|
||||||
|
<Unit38>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\fexpand.inc"/>
|
||||||
|
<CursorPos X="1" Y="1"/>
|
||||||
|
<TopLine Value="124"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="..\wst_rtti_filter\rtti_filters.pas"/>
|
||||||
|
<UnitName Value="rtti_filters"/>
|
||||||
|
<CursorPos X="1" Y="571"/>
|
||||||
|
<TopLine Value="557"/>
|
||||||
|
<UsageCount Value="11"/>
|
||||||
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
|
||||||
|
<UnitName Value="dom_cursors"/>
|
||||||
|
<CursorPos X="1" Y="194"/>
|
||||||
|
<TopLine Value="180"/>
|
||||||
|
<EditorIndex Value="4"/>
|
||||||
|
<UsageCount Value="23"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit40>
|
||||||
|
<Unit41>
|
||||||
|
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
|
||||||
|
<UnitName Value="cursor_intf"/>
|
||||||
|
<CursorPos X="1" Y="113"/>
|
||||||
|
<TopLine Value="99"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<UsageCount Value="23"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit41>
|
||||||
|
<Unit42>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
|
||||||
|
<CursorPos X="41" Y="69"/>
|
||||||
|
<TopLine Value="67"/>
|
||||||
|
<UsageCount Value="7"/>
|
||||||
|
</Unit42>
|
||||||
|
<Unit43>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<UnitName Value="DOM"/>
|
||||||
|
<CursorPos X="14" Y="292"/>
|
||||||
|
<TopLine Value="271"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit43>
|
||||||
|
<Unit44>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
|
||||||
|
<CursorPos X="26" Y="139"/>
|
||||||
|
<TopLine Value="125"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit44>
|
||||||
|
<Unit45>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
|
||||||
|
<CursorPos X="11" Y="360"/>
|
||||||
|
<TopLine Value="354"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit45>
|
||||||
|
<Unit46>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
||||||
|
<CursorPos X="14" Y="219"/>
|
||||||
|
<TopLine Value="183"/>
|
||||||
|
<UsageCount Value="10"/>
|
||||||
|
</Unit46>
|
||||||
|
<Unit47>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<UnitName Value="wsdl2pas_imp"/>
|
||||||
|
<CursorPos X="43" Y="883"/>
|
||||||
|
<TopLine Value="862"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<UsageCount Value="14"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit47>
|
||||||
</Units>
|
</Units>
|
||||||
<JumpHistory Count="0" HistoryIndex="-1"/>
|
<JumpHistory Count="28" HistoryIndex="27">
|
||||||
|
<Position1>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="802" Column="48" TopLine="780"/>
|
||||||
|
</Position1>
|
||||||
|
<Position2>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position2>
|
||||||
|
<Position3>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="1321" Column="37" TopLine="1300"/>
|
||||||
|
</Position3>
|
||||||
|
<Position4>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="1460" Column="57" TopLine="1438"/>
|
||||||
|
</Position4>
|
||||||
|
<Position5>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="849" Column="32" TopLine="861"/>
|
||||||
|
</Position5>
|
||||||
|
<Position6>
|
||||||
|
<Filename Value="wsdl2pas_imp.pas"/>
|
||||||
|
<Caret Line="802" Column="112" TopLine="788"/>
|
||||||
|
</Position6>
|
||||||
|
<Position7>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="458" Column="20" TopLine="420"/>
|
||||||
|
</Position7>
|
||||||
|
<Position8>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1" Column="1" TopLine="1"/>
|
||||||
|
</Position8>
|
||||||
|
<Position9>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="193" Column="9" TopLine="172"/>
|
||||||
|
</Position9>
|
||||||
|
<Position10>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="194" Column="39" TopLine="173"/>
|
||||||
|
</Position10>
|
||||||
|
<Position11>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="274" Column="9" TopLine="253"/>
|
||||||
|
</Position11>
|
||||||
|
<Position12>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="439" Column="47" TopLine="418"/>
|
||||||
|
</Position12>
|
||||||
|
<Position13>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="443" Column="49" TopLine="422"/>
|
||||||
|
</Position13>
|
||||||
|
<Position14>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="497" Column="34" TopLine="476"/>
|
||||||
|
</Position14>
|
||||||
|
<Position15>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="541" Column="9" TopLine="520"/>
|
||||||
|
</Position15>
|
||||||
|
<Position16>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="546" Column="9" TopLine="525"/>
|
||||||
|
</Position16>
|
||||||
|
<Position17>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="586" Column="9" TopLine="565"/>
|
||||||
|
</Position17>
|
||||||
|
<Position18>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="587" Column="19" TopLine="566"/>
|
||||||
|
</Position18>
|
||||||
|
<Position19>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="588" Column="18" TopLine="567"/>
|
||||||
|
</Position19>
|
||||||
|
<Position20>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="604" Column="9" TopLine="583"/>
|
||||||
|
</Position20>
|
||||||
|
<Position21>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="605" Column="47" TopLine="584"/>
|
||||||
|
</Position21>
|
||||||
|
<Position22>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="927" Column="26" TopLine="906"/>
|
||||||
|
</Position22>
|
||||||
|
<Position23>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="966" Column="9" TopLine="945"/>
|
||||||
|
</Position23>
|
||||||
|
<Position24>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1001" Column="9" TopLine="980"/>
|
||||||
|
</Position24>
|
||||||
|
<Position25>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1002" Column="44" TopLine="981"/>
|
||||||
|
</Position25>
|
||||||
|
<Position26>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1215" Column="9" TopLine="1194"/>
|
||||||
|
</Position26>
|
||||||
|
<Position27>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1250" Column="9" TopLine="1229"/>
|
||||||
|
</Position27>
|
||||||
|
<Position28>
|
||||||
|
<Filename Value="generator.pas"/>
|
||||||
|
<Caret Line="1535" Column="30" TopLine="1514"/>
|
||||||
|
</Position28>
|
||||||
|
</JumpHistory>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="5"/>
|
<Version Value="5"/>
|
||||||
@ -292,7 +507,7 @@
|
|||||||
<Filename Value="ws_helper.exe"/>
|
<Filename Value="ws_helper.exe"/>
|
||||||
</Target>
|
</Target>
|
||||||
<SearchPaths>
|
<SearchPaths>
|
||||||
<OtherUnitFiles Value="..\"/>
|
<OtherUnitFiles Value="..\;C:\Programmes\lazarus\wst\wst_rtti_filter\"/>
|
||||||
<UnitOutputDirectory Value="obj"/>
|
<UnitOutputDirectory Value="obj"/>
|
||||||
</SearchPaths>
|
</SearchPaths>
|
||||||
<Parsing>
|
<Parsing>
|
||||||
@ -306,6 +521,14 @@
|
|||||||
<OptimizationLevel Value="2"/>
|
<OptimizationLevel Value="2"/>
|
||||||
</Optimizations>
|
</Optimizations>
|
||||||
</CodeGeneration>
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="True"/>
|
||||||
|
<UseLineInfoUnit Value="False"/>
|
||||||
|
<StripSymbols Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
</Linking>
|
||||||
<Other>
|
<Other>
|
||||||
<CustomOptions Value="-Xi
|
<CustomOptions Value="-Xi
|
||||||
"/>
|
"/>
|
||||||
@ -313,40 +536,32 @@
|
|||||||
</Other>
|
</Other>
|
||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Debugging>
|
<Debugging>
|
||||||
<BreakPoints Count="8">
|
<BreakPoints Count="4">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Source Value="generator.pas"/>
|
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
||||||
<Line Value="225"/>
|
<Line Value="230"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
<Item2>
|
<Item2>
|
||||||
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
||||||
<Line Value="230"/>
|
<Line Value="193"/>
|
||||||
</Item2>
|
</Item2>
|
||||||
<Item3>
|
<Item3>
|
||||||
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
||||||
<Line Value="193"/>
|
<Line Value="198"/>
|
||||||
</Item3>
|
</Item3>
|
||||||
<Item4>
|
<Item4>
|
||||||
<Source Value="D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
|
|
||||||
<Line Value="198"/>
|
|
||||||
</Item4>
|
|
||||||
<Item5>
|
|
||||||
<Source Value="ws_helper.pas"/>
|
<Source Value="ws_helper.pas"/>
|
||||||
<Line Value="85"/>
|
<Line Value="85"/>
|
||||||
</Item5>
|
</Item4>
|
||||||
<Item6>
|
|
||||||
<Source Value="ws_helper.pas"/>
|
|
||||||
<Line Value="93"/>
|
|
||||||
</Item6>
|
|
||||||
<Item7>
|
|
||||||
<Source Value="ws_helper.pas"/>
|
|
||||||
<Line Value="95"/>
|
|
||||||
</Item7>
|
|
||||||
<Item8>
|
|
||||||
<Source Value="generator.pas"/>
|
|
||||||
<Line Value="870"/>
|
|
||||||
</Item8>
|
|
||||||
</BreakPoints>
|
</BreakPoints>
|
||||||
|
<Watches Count="2">
|
||||||
|
<Item1>
|
||||||
|
<Expression Value="locStrFilter"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Expression Value="i"/>
|
||||||
|
</Item2>
|
||||||
|
</Watches>
|
||||||
<Exceptions Count="2">
|
<Exceptions Count="2">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Name Value="ECodetoolError"/>
|
<Name Value="ECodetoolError"/>
|
||||||
|
@ -25,24 +25,32 @@ program ws_helper;
|
|||||||
uses
|
uses
|
||||||
Classes, SysUtils, wst_resources_utils,
|
Classes, SysUtils, wst_resources_utils,
|
||||||
parserdefs, ws_parser, generator, parserutils, source_utils,
|
parserdefs, ws_parser, generator, parserutils, source_utils,
|
||||||
command_line_parser, metadata_generator, binary_streamer;
|
command_line_parser, metadata_generator, binary_streamer,
|
||||||
|
DOM, xmlread, wsdl2pas_imp;
|
||||||
|
|
||||||
resourcestring
|
resourcestring
|
||||||
sUSAGE = 'ws_helper [-p] [-b] [-i] [-oPATH] inputFilename' + sNEW_LINE +
|
sUSAGE = 'ws_helper [-u] [-p] [-b] [-i] [-oPATH] inputFilename' + sNEW_LINE +
|
||||||
|
' -u Generate the pascal translation of the WSDL input file ' + sNEW_LINE +
|
||||||
' -p Generate service proxy' + sNEW_LINE +
|
' -p Generate service proxy' + sNEW_LINE +
|
||||||
' -b Generate service binder' + sNEW_LINE +
|
' -b Generate service binder' + sNEW_LINE +
|
||||||
' -i Generate service minimal implementation' + sNEW_LINE +
|
' -i Generate service minimal implementation' + sNEW_LINE +
|
||||||
' -o PATH Output directory' + sNEW_LINE;
|
' -o PATH Relative output directory' + sNEW_LINE +
|
||||||
|
' -a PATH Absolute output directory' + sNEW_LINE;
|
||||||
sCOPYRIGHT = 'ws_helper, Web Service Toolkit 0.3 Copyright (c) 2006 by Inoussa OUEDRAOGO';
|
sCOPYRIGHT = 'ws_helper, Web Service Toolkit 0.3 Copyright (c) 2006 by Inoussa OUEDRAOGO';
|
||||||
|
|
||||||
const
|
const
|
||||||
sWST_META = 'wst_meta';
|
sWST_META = 'wst_meta';
|
||||||
|
|
||||||
|
type
|
||||||
|
TSourceFileType = ( sftPascal, sftWSDL );
|
||||||
|
|
||||||
Var
|
Var
|
||||||
inFileName,outPath,errStr : string;
|
inFileName,outPath,errStr : string;
|
||||||
srcMngr : ISourceManager;
|
srcMngr : ISourceManager;
|
||||||
AppOptions : TComandLineOptions;
|
AppOptions : TComandLineOptions;
|
||||||
NextParam : Integer;
|
NextParam : Integer;
|
||||||
|
sourceType : TSourceFileType;
|
||||||
|
symtable : TSymbolTable;
|
||||||
|
|
||||||
function ProcessCmdLine():boolean;
|
function ProcessCmdLine():boolean;
|
||||||
begin
|
begin
|
||||||
@ -50,22 +58,83 @@ Var
|
|||||||
If ( NextParam <= Paramcount ) Then
|
If ( NextParam <= Paramcount ) Then
|
||||||
inFileName := ParamStr(NextParam);
|
inFileName := ParamStr(NextParam);
|
||||||
Result := FileExists(ExpandFileName(inFileName));
|
Result := FileExists(ExpandFileName(inFileName));
|
||||||
|
if AnsiSameText(ExtractFileExt(inFileName),'.PAS') or
|
||||||
|
AnsiSameText(ExtractFileExt(inFileName),'.PP')
|
||||||
|
then begin
|
||||||
|
sourceType := sftPascal;
|
||||||
|
end else if AnsiSameText(ExtractFileExt(inFileName),'.WSDL') then begin
|
||||||
|
sourceType := sftWSDL;
|
||||||
|
end;
|
||||||
If Result Then Begin
|
If Result Then Begin
|
||||||
If ( AppOptions = [] ) Then
|
If ( AppOptions = [] ) Then
|
||||||
Include(AppOptions,cloProxy);
|
Include(AppOptions,cloProxy);
|
||||||
End Else
|
End Else
|
||||||
errStr := Format('File not Found : "%s"',[inFileName]);
|
errStr := Format('File not Found : "%s"',[inFileName]);
|
||||||
outPath := ExtractFilePath(inFileName);
|
if ( cloOutPutDirAbsolute in AppOptions ) then begin
|
||||||
If ( cloOutPutDir in AppOptions ) Then Begin
|
outPath := Trim(GetOptionArg(cloOutPutDirAbsolute));
|
||||||
outPath := outPath + Trim(GetOptionArg(cloOutPutDir));
|
end else begin
|
||||||
outPath := IncludeTrailingPathDelimiter(outPath);
|
outPath := ExtractFilePath(inFileName);
|
||||||
End;
|
if ( cloOutPutDirRelative in AppOptions ) then begin
|
||||||
|
outPath := outPath + Trim(GetOptionArg(cloOutPutDirRelative));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
outPath := IncludeTrailingPathDelimiter(outPath);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GenerateSymbolTable() : Boolean ;
|
||||||
|
|
||||||
|
procedure ParsePascalFile();
|
||||||
|
var
|
||||||
|
s : TFileStream;
|
||||||
|
p : TPascalParser;
|
||||||
|
begin
|
||||||
|
s := nil;
|
||||||
|
p := nil;
|
||||||
|
try
|
||||||
|
s := TFileStream.Create(inFileName,fmOpenRead);
|
||||||
|
p := TPascalParser.Create(s,symtable);
|
||||||
|
if not p.Parse() then
|
||||||
|
p.Error('"%s" at line %d',[p.ErrorMessage,p.SourceLine]);
|
||||||
|
finally
|
||||||
|
FreeAndNil(p);
|
||||||
|
FreeAndNil(s);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ParseWsdlFile();
|
||||||
|
var
|
||||||
|
locDoc : TXMLDocument;
|
||||||
|
prsr : TWsdlParser;
|
||||||
|
begin
|
||||||
|
prsr := nil;
|
||||||
|
ReadXMLFile(locDoc,inFileName);
|
||||||
|
try
|
||||||
|
prsr := TWsdlParser.Create(locDoc,symtable);
|
||||||
|
prsr.Parse();
|
||||||
|
finally
|
||||||
|
FreeAndNil(prsr);
|
||||||
|
FreeAndNil(locDoc);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
WriteLn('Parsing the file : ', inFileName);
|
||||||
|
case sourceType of
|
||||||
|
sftPascal : ParsePascalFile();
|
||||||
|
sftWSDL : ParseWsdlFile();
|
||||||
|
end;
|
||||||
|
Result := True;
|
||||||
|
except
|
||||||
|
on e : Exception do begin
|
||||||
|
Result := False;
|
||||||
|
errStr := e.Message;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function ProcessFile():Boolean;
|
function ProcessFile():Boolean;
|
||||||
Var
|
Var
|
||||||
p : TPascalParser;
|
|
||||||
s : TFileStream;
|
|
||||||
mtdaFS: TMemoryStream;
|
mtdaFS: TMemoryStream;
|
||||||
g : TBaseGenerator;
|
g : TBaseGenerator;
|
||||||
mg : TMetadataGenerator;
|
mg : TMetadataGenerator;
|
||||||
@ -76,86 +145,98 @@ Var
|
|||||||
mtdaFS := nil;
|
mtdaFS := nil;
|
||||||
mg := nil;
|
mg := nil;
|
||||||
g := Nil;
|
g := Nil;
|
||||||
s := Nil;
|
try
|
||||||
p := Nil;
|
try
|
||||||
Try
|
if ( cloInterface in AppOptions ) then begin
|
||||||
Try
|
WriteLn('Interface file generation...');
|
||||||
s := TFileStream.Create(inFileName,fmOpenRead);
|
g := TInftGenerator.Create(symtable,srcMngr);
|
||||||
p := TPascalParser.Create(s);
|
g.Execute();
|
||||||
If Not p.Parse() Then
|
FreeAndNil(g);
|
||||||
p.Error(p.ErrorMessage);
|
end;
|
||||||
|
|
||||||
If ( cloProxy in AppOptions ) Then Begin
|
If ( cloProxy in AppOptions ) Then Begin
|
||||||
g := TProxyGenerator.Create(p.SymbolTable,srcMngr);
|
WriteLn('Proxy file generation...');
|
||||||
|
g := TProxyGenerator.Create(symtable,srcMngr);
|
||||||
g.Execute();
|
g.Execute();
|
||||||
FreeAndNil(g);
|
FreeAndNil(g);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If ( cloBinder in AppOptions ) Then Begin
|
If ( cloBinder in AppOptions ) Then Begin
|
||||||
g := TBinderGenerator.Create(p.SymbolTable,srcMngr);
|
WriteLn('Binder file generation...');
|
||||||
|
g := TBinderGenerator.Create(symtable,srcMngr);
|
||||||
g.Execute();
|
g.Execute();
|
||||||
FreeAndNil(g);
|
FreeAndNil(g);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If ( cloImp in AppOptions ) Then Begin
|
If ( cloImp in AppOptions ) Then Begin
|
||||||
g := TImplementationGenerator.Create(p.SymbolTable,srcMngr);
|
WriteLn('Implementation file generation...');
|
||||||
|
g := TImplementationGenerator.Create(symtable,srcMngr);
|
||||||
g.Execute();
|
g.Execute();
|
||||||
FreeAndNil(g);
|
FreeAndNil(g);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
if ( [cloBinder,cloProxy]*AppOptions <> [] ) then begin
|
if ( [cloBinder,cloProxy]*AppOptions <> [] ) then begin
|
||||||
|
WriteLn('Metadata file generation...');
|
||||||
mtdaFS := TMemoryStream.Create();
|
mtdaFS := TMemoryStream.Create();
|
||||||
mg := TMetadataGenerator.Create(p.SymbolTable,CreateBinaryWriter(mtdaFS));
|
mg := TMetadataGenerator.Create(symtable,CreateBinaryWriter(mtdaFS));
|
||||||
mg.Execute();
|
mg.Execute();
|
||||||
mtdaFS.SaveToFile(ChangeFileExt(inFileName,'.' + sWST_META));
|
mtdaFS.SaveToFile(ChangeFileExt(inFileName,'.' + sWST_META));
|
||||||
rsrcStrm := TMemoryStream.Create();
|
rsrcStrm := TMemoryStream.Create();
|
||||||
mtdaFS.Position := 0;
|
mtdaFS.Position := 0;
|
||||||
//BinaryToLazarusResourceCode(mtdaFS,rsrcStrm,UpperCase(p.SymbolTable.Name),sWST_META);
|
BinToWstRessource(UpperCase(symtable.Name),mtdaFS,rsrcStrm);
|
||||||
BinToWstRessource(UpperCase(p.SymbolTable.Name),mtdaFS,rsrcStrm);
|
|
||||||
rsrcStrm.SaveToFile(outPath + ChangeFileExt(ExtractFileName(inFileName),'.' + sWST_EXTENSION));
|
rsrcStrm.SaveToFile(outPath + ChangeFileExt(ExtractFileName(inFileName),'.' + sWST_EXTENSION));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Result := True;
|
Result := True;
|
||||||
Except
|
except
|
||||||
On E : Exception Do Begin
|
on E : Exception do begin
|
||||||
Result := False;
|
Result := False;
|
||||||
errStr := Format('"%s" at line %d',[E.Message,p.SourceLine]) ;
|
errStr := E.Message;
|
||||||
End;
|
end;
|
||||||
End;
|
end;
|
||||||
Finally
|
finally
|
||||||
rsrcStrm.Free();
|
rsrcStrm.Free();
|
||||||
mg.Free();;
|
mg.Free();;
|
||||||
mtdaFS.Free();;
|
mtdaFS.Free();;
|
||||||
g.Free();
|
g.Free();
|
||||||
p.Free();
|
end;
|
||||||
s.Free();
|
|
||||||
End;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Try
|
symtable := nil;
|
||||||
Writeln(sCOPYRIGHT);
|
try
|
||||||
If ( ParamCount = 0 ) Then Begin
|
try
|
||||||
WriteLn(sUSAGE);
|
Writeln(sCOPYRIGHT);
|
||||||
Exit;
|
If ( ParamCount = 0 ) Then Begin
|
||||||
End;
|
WriteLn(sUSAGE);
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
if not ProcessCmdLine() then begin
|
||||||
|
WriteLn(errStr);
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
symtable := TSymbolTable.Create(ChangeFileExt(ExtractFileName(inFileName),''));
|
||||||
|
srcMngr := CreateSourceManager();
|
||||||
|
|
||||||
srcMngr := CreateSourceManager();
|
if not GenerateSymbolTable() then begin
|
||||||
If Not ProcessCmdLine() Then Begin
|
WriteLn(errStr);
|
||||||
WriteLn(errStr);
|
Exit;
|
||||||
Exit;
|
end;
|
||||||
End;
|
|
||||||
|
If Not ProcessFile() Then Begin
|
||||||
|
WriteLn(errStr);
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
If Not ProcessFile() Then Begin
|
srcMngr.SaveToFile(outPath);
|
||||||
WriteLn(errStr);
|
WriteLn(Format('File "%s" parsed succesfully.',[inFileName]));
|
||||||
Exit;
|
except
|
||||||
End;
|
on e:exception Do
|
||||||
|
Writeln('Exception : ' + e.Message)
|
||||||
srcMngr.SaveToFile(outPath);
|
end;
|
||||||
WriteLn(Format('File "%s" parsed succesfully.',[inFileName]));
|
finally
|
||||||
except
|
FreeAndNil(symtable);
|
||||||
on e:exception Do
|
|
||||||
Writeln('Exception : ' + e.Message)
|
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
@ -60,7 +60,7 @@ Type
|
|||||||
procedure ParseEnumType(Const AName : String);
|
procedure ParseEnumType(Const AName : String);
|
||||||
procedure ParseClassType(Const AName : String);
|
procedure ParseClassType(Const AName : String);
|
||||||
public
|
public
|
||||||
constructor Create(AStream : TStream);
|
constructor Create(AStream : TStream; ASymbolTable : TSymbolTable);
|
||||||
destructor Destroy();override;
|
destructor Destroy();override;
|
||||||
procedure Error(Const AMsg : String);overload;
|
procedure Error(Const AMsg : String);overload;
|
||||||
procedure Error(Const AMsg : String; Const AArgs : Array of const);overload;
|
procedure Error(Const AMsg : String; Const AArgs : Array of const);overload;
|
||||||
@ -417,7 +417,7 @@ begin
|
|||||||
tmpStr := Tokenizer.TokenString;
|
tmpStr := Tokenizer.TokenString;
|
||||||
If ( FSymbolTable.IndexOf(tmpStr) > -1 ) Then
|
If ( FSymbolTable.IndexOf(tmpStr) > -1 ) Then
|
||||||
Error('Duplicated symbol : "%s"',[tmpStr]);
|
Error('Duplicated symbol : "%s"',[tmpStr]);
|
||||||
sblItem := TEnumItemDefinition.Create(tmpStr,tmpInt);
|
sblItem := TEnumItemDefinition.Create(tmpStr,sbl,tmpInt);
|
||||||
FSymbolTable.Add(sblItem);
|
FSymbolTable.Add(sblItem);
|
||||||
sbl.AddItem(sblItem);
|
sbl.AddItem(sblItem);
|
||||||
NextToken();
|
NextToken();
|
||||||
@ -451,19 +451,19 @@ begin
|
|||||||
NextToken();
|
NextToken();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TPascalParser.Create(AStream : TStream);
|
constructor TPascalParser.Create(AStream : TStream; ASymbolTable : TSymbolTable);
|
||||||
begin
|
begin
|
||||||
Assert(Assigned(AStream));
|
Assert(Assigned(AStream));
|
||||||
|
Assert(Assigned(ASymbolTable));
|
||||||
FStream := AStream;
|
FStream := AStream;
|
||||||
FTokenizer := TParser.Create(FStream);
|
FTokenizer := TParser.Create(FStream);
|
||||||
FSymbolTable := TSymbolTable.Create('tmp_name');
|
FSymbolTable := ASymbolTable;
|
||||||
FCurrentSymbol := Nil;
|
FCurrentSymbol := Nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TPascalParser.Destroy();
|
destructor TPascalParser.Destroy();
|
||||||
begin
|
begin
|
||||||
FTokenizer.Free();
|
FTokenizer.Free();
|
||||||
FreeAndNil(FSymbolTable);
|
|
||||||
inherited Destroy();
|
inherited Destroy();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
1924
wst/trunk/ws_helper/wsdl2pas_imp.pas
Normal file
1924
wst/trunk/ws_helper/wsdl2pas_imp.pas
Normal file
File diff suppressed because it is too large
Load Diff
153
wst/trunk/wst_rtti_filter/cursor_intf.pas
Normal file
153
wst/trunk/wst_rtti_filter/cursor_intf.pas
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
unit cursor_intf;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
ECursorException = class(Exception)
|
||||||
|
end;
|
||||||
|
|
||||||
|
ICursor = interface
|
||||||
|
['{2B7756B1-E239-4B6F-A7A3-4B57B98FAD4F}']
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;
|
||||||
|
function Clone():ICursor;
|
||||||
|
end;
|
||||||
|
|
||||||
|
IObjectFilter = interface
|
||||||
|
['{3DFB1A26-ED2D-428A-9F62-2091A076D97B}']
|
||||||
|
function Evaluate(const AObject : TObject) : Boolean;
|
||||||
|
end;
|
||||||
|
|
||||||
|
IObjectCursor = interface(ICursor)
|
||||||
|
['{13E9C22D-0508-4D7A-A969-96E2291B4FE8}']
|
||||||
|
function GetCurrent() : TObject;
|
||||||
|
end;
|
||||||
|
|
||||||
|
IFilterableObjectCursor = interface(IObjectCursor)
|
||||||
|
['{F11B588A-E8CF-45D3-98D2-B49755FFC22D}']
|
||||||
|
function GetFilter() : IObjectFilter;
|
||||||
|
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CreateCursorOn(
|
||||||
|
AInputCursor : IObjectCursor;
|
||||||
|
AFilter : IObjectFilter
|
||||||
|
) : IFilterableObjectCursor ;
|
||||||
|
|
||||||
|
|
||||||
|
(*
|
||||||
|
['{4E3C49EE-5EA6-47CD-8862-3AA4F96BD86E}']
|
||||||
|
['{65D250B6-90AC-40DC-A6EE-4750188D1D94}']
|
||||||
|
['{8B4AE228-C231-45E5-B8A4-2864481B9263}']
|
||||||
|
['{658709D2-2D25-44DB-83CF-DC430D55A21F}']
|
||||||
|
['{B2CFB744-43CF-4787-8256-A0F34E26A729}']
|
||||||
|
['{D3A4A37A-B63A-42AD-8E44-4AD4C28E3C34}']
|
||||||
|
['{DB7A8303-0621-41A0-A948-A7BD71CA99F8}']
|
||||||
|
['{3BB114EB-73CF-4555-ABC7-ABA4A643DBDA}']
|
||||||
|
['{C64B6235-54BE-4DA9-A5E8-D67B579FA14F}']
|
||||||
|
|
||||||
|
*)
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TSimpleObjectFilterableCursor }
|
||||||
|
|
||||||
|
TSimpleObjectFilterableCursor = class(
|
||||||
|
TInterfacedObject,
|
||||||
|
ICursor,IObjectCursor,IFilterableObjectCursor
|
||||||
|
)
|
||||||
|
private
|
||||||
|
FBaseCursor : IObjectCursor;
|
||||||
|
FFilter : IObjectFilter;
|
||||||
|
protected
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;
|
||||||
|
function Clone():ICursor;
|
||||||
|
function GetCurrent() : TObject;
|
||||||
|
function GetFilter() : IObjectFilter;
|
||||||
|
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
AInputCursor : IObjectCursor;
|
||||||
|
AFilter : IObjectFilter
|
||||||
|
);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CreateCursorOn(
|
||||||
|
AInputCursor : IObjectCursor;
|
||||||
|
AFilter : IObjectFilter
|
||||||
|
) : IFilterableObjectCursor ;
|
||||||
|
begin
|
||||||
|
Result := TSimpleObjectFilterableCursor.Create(AInputCursor,AFilter);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TSimpleObjectFilterableCursor }
|
||||||
|
|
||||||
|
procedure TSimpleObjectFilterableCursor.Reset();
|
||||||
|
begin
|
||||||
|
FBaseCursor.Reset();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSimpleObjectFilterableCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
if ( FFilter = nil ) then begin
|
||||||
|
Result := FBaseCursor.MoveNext();
|
||||||
|
end else begin
|
||||||
|
while FBaseCursor.MoveNext() do begin
|
||||||
|
if FFilter.Evaluate(FBaseCursor.GetCurrent()) then begin
|
||||||
|
Result := True;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSimpleObjectFilterableCursor.Clone(): ICursor;
|
||||||
|
var
|
||||||
|
baseClone : ICursor;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
baseClone := FBaseCursor.Clone();
|
||||||
|
if ( baseClone <> nil ) then
|
||||||
|
Result := TSimpleObjectFilterableCursor.Create(baseClone as IObjectCursor,FFilter);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSimpleObjectFilterableCursor.GetCurrent(): TObject;
|
||||||
|
begin
|
||||||
|
Result := FBaseCursor.GetCurrent();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSimpleObjectFilterableCursor.GetFilter(): IObjectFilter;
|
||||||
|
begin
|
||||||
|
Result := FFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSimpleObjectFilterableCursor.SetFilter(const AFilter: IObjectFilter): IObjectFilter;
|
||||||
|
begin
|
||||||
|
FFilter := AFilter;
|
||||||
|
Result := FFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSimpleObjectFilterableCursor.Create(
|
||||||
|
AInputCursor : IObjectCursor;
|
||||||
|
AFilter : IObjectFilter
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(AInputCursor));
|
||||||
|
inherited Create();
|
||||||
|
FBaseCursor := AInputCursor;
|
||||||
|
FFilter := AFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
257
wst/trunk/wst_rtti_filter/dom_cursors.pas
Normal file
257
wst/trunk/wst_rtti_filter/dom_cursors.pas
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
unit dom_cursors;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
//{$define FPC_211}
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils,
|
||||||
|
cursor_intf, DOM;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TFreeAction = ( faNone, faFreeOnDestroy );
|
||||||
|
|
||||||
|
{ TDOMNodeListCursor }
|
||||||
|
|
||||||
|
TDOMNodeListCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
||||||
|
private
|
||||||
|
FList : TDOMNodeList;
|
||||||
|
FCurrent : TDOMNode;
|
||||||
|
FFreeListOnDestroy : TFreeAction;
|
||||||
|
FHasItem : Boolean;
|
||||||
|
protected
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;
|
||||||
|
function Clone():ICursor;
|
||||||
|
function GetCurrent() : TObject;virtual;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
ADataList : TDOMNodeList;
|
||||||
|
const AFreeListOnDestroy : TFreeAction
|
||||||
|
);
|
||||||
|
destructor Destroy();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNamedNodeMapCursor }
|
||||||
|
|
||||||
|
TDOMNamedNodeMapCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
||||||
|
private
|
||||||
|
FList : TDOMNamedNodeMap;
|
||||||
|
FCurrent : Integer;
|
||||||
|
FFreeListOnDestroy : TFreeAction;
|
||||||
|
protected
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;
|
||||||
|
function Clone():ICursor;
|
||||||
|
function GetCurrent() : TObject;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
ADataList : TDOMNamedNodeMap;
|
||||||
|
const AFreeListOnDestroy : TFreeAction
|
||||||
|
);
|
||||||
|
destructor Destroy();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNodeRttiExposer }
|
||||||
|
|
||||||
|
TDOMNodeRttiExposer = class(TPersistent)
|
||||||
|
private
|
||||||
|
FInnerObject: TDOMNode;
|
||||||
|
function GetNodeName: DOMString;
|
||||||
|
function GetNodeValue: DOMString;
|
||||||
|
procedure SetInnerObject(const AValue: TDOMNode);
|
||||||
|
public
|
||||||
|
constructor Create(AInnerObject : TDOMNode);
|
||||||
|
property InnerObject : TDOMNode read FInnerObject write SetInnerObject;
|
||||||
|
published
|
||||||
|
property NodeName: DOMString read GetNodeName;
|
||||||
|
property NodeValue: DOMString read GetNodeValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNodeRttiExposerCursor }
|
||||||
|
|
||||||
|
TDOMNodeRttiExposerCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
||||||
|
private
|
||||||
|
FCurrentExposer : TDOMNodeRttiExposer;
|
||||||
|
FBaseCursor : IObjectCursor;
|
||||||
|
protected
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;
|
||||||
|
function Clone():ICursor;
|
||||||
|
function GetCurrent() : TObject;virtual;
|
||||||
|
public
|
||||||
|
constructor Create(ADataList : IObjectCursor);
|
||||||
|
destructor Destroy();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{ TDOMNodeListCursor }
|
||||||
|
|
||||||
|
procedure TDOMNodeListCursor.Reset();
|
||||||
|
begin
|
||||||
|
FCurrent := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeListCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
if ( FCurrent = nil ) then begin
|
||||||
|
if FHasItem then
|
||||||
|
FCurrent := FList.Item[0];
|
||||||
|
end else begin
|
||||||
|
FCurrent := FCurrent.NextSibling;
|
||||||
|
end;
|
||||||
|
Result := ( FCurrent <> nil ) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeListCursor.Clone(): ICursor;
|
||||||
|
begin
|
||||||
|
Result := TDOMNodeListCursor.Create(FList,faNone);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeListCursor.GetCurrent(): TObject;
|
||||||
|
begin
|
||||||
|
Result := FCurrent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TDOMNodeListCursor.Create(
|
||||||
|
ADataList : TDOMNodeList;
|
||||||
|
const AFreeListOnDestroy : TFreeAction
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ADataList));
|
||||||
|
FFreeListOnDestroy := AFreeListOnDestroy;
|
||||||
|
FList := ADataList;
|
||||||
|
FHasItem := ( FList.Count > 0 );
|
||||||
|
Reset();
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TDOMNodeListCursor.Destroy();
|
||||||
|
begin
|
||||||
|
FCurrent := nil;
|
||||||
|
if ( FFreeListOnDestroy = faFreeOnDestroy ) then
|
||||||
|
FreeAndNil(FList)
|
||||||
|
else
|
||||||
|
FList := nil;
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNodeRttiExposer }
|
||||||
|
|
||||||
|
function TDOMNodeRttiExposer.GetNodeName: DOMString;
|
||||||
|
begin
|
||||||
|
Result := InnerObject.NodeName;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeRttiExposer.GetNodeValue: DOMString;
|
||||||
|
begin
|
||||||
|
Result := InnerObject.NodeValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TDOMNodeRttiExposer.SetInnerObject(const AValue: TDOMNode);
|
||||||
|
begin
|
||||||
|
if ( FInnerObject = AValue ) then
|
||||||
|
exit;
|
||||||
|
FInnerObject := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TDOMNodeRttiExposer.Create(AInnerObject: TDOMNode);
|
||||||
|
begin
|
||||||
|
Inherited Create();
|
||||||
|
SetInnerObject(AInnerObject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNodeRttiExposerCursor }
|
||||||
|
|
||||||
|
procedure TDOMNodeRttiExposerCursor.Reset();
|
||||||
|
begin
|
||||||
|
FBaseCursor.Reset();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeRttiExposerCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
Result := FBaseCursor.MoveNext();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeRttiExposerCursor.Clone(): ICursor;
|
||||||
|
var
|
||||||
|
baseClone : ICursor;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
baseClone := FBaseCursor.Clone();
|
||||||
|
if ( baseClone <> nil ) then
|
||||||
|
Result := TDOMNodeRttiExposerCursor.Create(baseClone as IObjectCursor) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNodeRttiExposerCursor.GetCurrent(): TObject;
|
||||||
|
begin
|
||||||
|
FCurrentExposer.InnerObject := FBaseCursor.GetCurrent() as TDOMNode;
|
||||||
|
if ( FCurrentExposer.InnerObject = nil ) then
|
||||||
|
Result := nil
|
||||||
|
else
|
||||||
|
Result := FCurrentExposer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TDOMNodeRttiExposerCursor.Create(ADataList : IObjectCursor);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ADataList));
|
||||||
|
inherited Create();
|
||||||
|
FBaseCursor := ADataList;
|
||||||
|
FCurrentExposer := TDOMNodeRttiExposer.Create(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TDOMNodeRttiExposerCursor.Destroy();
|
||||||
|
begin
|
||||||
|
FreeAndNil(FCurrentExposer);;
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TDOMNamedNodeMapCursor }
|
||||||
|
|
||||||
|
procedure TDOMNamedNodeMapCursor.Reset();
|
||||||
|
begin
|
||||||
|
FCurrent := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNamedNodeMapCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
Inc(FCurrent);
|
||||||
|
Result := ( FCurrent < FList.{$IFNDEF FPC_211}Count{$ELSE}Length{$ENDIF} );
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNamedNodeMapCursor.Clone(): ICursor;
|
||||||
|
begin
|
||||||
|
Result := TDOMNamedNodeMapCursor.Create(FList,faNone);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDOMNamedNodeMapCursor.GetCurrent(): TObject;
|
||||||
|
begin
|
||||||
|
if ( FCurrent > -1 ) and ( FCurrent < FList.{$IFNDEF FPC_211}Count{$ELSE}Length{$ENDIF} ) then
|
||||||
|
Result := FList.Item[FCurrent]
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TDOMNamedNodeMapCursor.Create(
|
||||||
|
ADataList : TDOMNamedNodeMap;
|
||||||
|
const AFreeListOnDestroy : TFreeAction
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ADataList));
|
||||||
|
FFreeListOnDestroy := AFreeListOnDestroy;
|
||||||
|
FList := ADataList;
|
||||||
|
Reset();
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TDOMNamedNodeMapCursor.Destroy();
|
||||||
|
begin
|
||||||
|
if ( FFreeListOnDestroy = faFreeOnDestroy ) then
|
||||||
|
FreeAndNil(FList)
|
||||||
|
else
|
||||||
|
FList := nil;
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
655
wst/trunk/wst_rtti_filter/rtti_filters.pas
Normal file
655
wst/trunk/wst_rtti_filter/rtti_filters.pas
Normal file
@ -0,0 +1,655 @@
|
|||||||
|
unit rtti_filters;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Contnrs, TypInfo,
|
||||||
|
cursor_intf;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
ERttiFilterException = class(Exception)
|
||||||
|
end;
|
||||||
|
|
||||||
|
TFilterConnector = ( fcNone, fcAnd, fcOr );
|
||||||
|
|
||||||
|
TNumericFilterOperator = ( nfoEqual, nfoGreater, nfoLesser, nfoNotEqual );
|
||||||
|
TStringFilterOperator = ( sfoEqualCaseSensitive, sfoEqualCaseInsensitive, sfoNotEqual );
|
||||||
|
|
||||||
|
TRttiFilterCreatorTarget = TPersistent;
|
||||||
|
TRttiFilterCreatorTargetClass = class of TRttiFilterCreatorTarget;
|
||||||
|
|
||||||
|
TRttiExpNodeItem = class;
|
||||||
|
TRttiExpNode = class;
|
||||||
|
|
||||||
|
TClearAction = ( clrNone, clrFreeObjects );
|
||||||
|
|
||||||
|
{ TRttiFilterCreator }
|
||||||
|
TRttiFilterCreator = class
|
||||||
|
private
|
||||||
|
FRoot : TRttiExpNode;
|
||||||
|
FCurrent : TRttiExpNode;
|
||||||
|
FTargetClass: TRttiFilterCreatorTargetClass;
|
||||||
|
FCurrentStack : TObjectStack;
|
||||||
|
private
|
||||||
|
procedure AddNode(
|
||||||
|
const ANode : TRttiExpNodeItem;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
);
|
||||||
|
procedure PushCurrent(ACurrent : TRttiExpNode);
|
||||||
|
function PopCurrent() : TRttiExpNode;
|
||||||
|
public
|
||||||
|
constructor Create(const ATargetClass : TRttiFilterCreatorTargetClass);
|
||||||
|
destructor Destroy();override;
|
||||||
|
procedure Clear(const AFreeObjects : TClearAction);
|
||||||
|
function AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TNumericFilterOperator;
|
||||||
|
const AValue : Integer;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
) : TRttiFilterCreator;overload;
|
||||||
|
function AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TStringFilterOperator;
|
||||||
|
const AValue : AnsiString;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
) : TRttiFilterCreator;overload;
|
||||||
|
function AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TStringFilterOperator;
|
||||||
|
const AValue : WideString;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
) : TRttiFilterCreator;overload;
|
||||||
|
|
||||||
|
function BeginGroup(const AConnector : TFilterConnector):TRttiFilterCreator;
|
||||||
|
function EndGroup():TRttiFilterCreator;
|
||||||
|
property TargetClass : TRttiFilterCreatorTargetClass read FTargetClass;
|
||||||
|
property Root : TRttiExpNode read FRoot;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
TRttiExpNodeItem = class
|
||||||
|
public
|
||||||
|
function Evaluate(AInstance : TRttiFilterCreatorTarget):Boolean;virtual;abstract;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiObjectFilter }
|
||||||
|
|
||||||
|
TRttiObjectFilter = class(TInterfacedObject,IObjectFilter)
|
||||||
|
private
|
||||||
|
FFilterRoot : TRttiExpNodeItem;
|
||||||
|
FOnDestroyFilterAction : TClearAction;
|
||||||
|
protected
|
||||||
|
function Evaluate(const AObject : TObject) : Boolean;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
AFilterRoot : TRttiExpNodeItem;
|
||||||
|
const AOnDestroyFilterAction : TClearAction
|
||||||
|
);
|
||||||
|
destructor Destroy();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpNode }
|
||||||
|
|
||||||
|
TRttiExpNode = class(TRttiExpNodeItem)
|
||||||
|
private
|
||||||
|
FConnector: TFilterConnector;
|
||||||
|
FLeft: TRttiExpNodeItem;
|
||||||
|
FRight: TRttiExpNodeItem;
|
||||||
|
private
|
||||||
|
procedure SetConnector(const AValue: TFilterConnector);
|
||||||
|
procedure SetLeft(const AValue: TRttiExpNodeItem);
|
||||||
|
procedure SetRight(const AValue: TRttiExpNodeItem);
|
||||||
|
public
|
||||||
|
destructor Destroy();override;
|
||||||
|
function Evaluate(AInstance : TRttiFilterCreatorTarget):Boolean;override;
|
||||||
|
property Connector : TFilterConnector read FConnector write SetConnector;
|
||||||
|
property Left : TRttiExpNodeItem read FLeft write SetLeft;
|
||||||
|
property Right : TRttiExpNodeItem read FRight write SetRight;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpConcreteNodeItem }
|
||||||
|
|
||||||
|
TRttiExpConcreteNodeItem = class(TRttiExpNodeItem)
|
||||||
|
private
|
||||||
|
FPropInfo: PPropInfo;
|
||||||
|
public
|
||||||
|
constructor Create(const APropInfo : PPropInfo);
|
||||||
|
property PropInfo : PPropInfo read FPropInfo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpNumericNodeItem }
|
||||||
|
|
||||||
|
TRttiExpNumericNodeItem = class(TRttiExpConcreteNodeItem)
|
||||||
|
private
|
||||||
|
FOperation: TNumericFilterOperator;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TNumericFilterOperator
|
||||||
|
);
|
||||||
|
property Operation : TNumericFilterOperator read FOperation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpIntegerNodeItem }
|
||||||
|
|
||||||
|
TRttiExpIntegerNodeItem = class(TRttiExpNumericNodeItem)
|
||||||
|
private
|
||||||
|
FComparedValue: Integer;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TNumericFilterOperator;
|
||||||
|
const AComparedValue : Integer
|
||||||
|
);
|
||||||
|
function Evaluate(AInstance : TRttiFilterCreatorTarget):Boolean;override;
|
||||||
|
property ComparedValue : Integer read FComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpStringNodeItem }
|
||||||
|
|
||||||
|
TRttiExpStringNodeItem = class(TRttiExpConcreteNodeItem)
|
||||||
|
private
|
||||||
|
FOperation: TStringFilterOperator;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TStringFilterOperator
|
||||||
|
);
|
||||||
|
property Operation : TStringFilterOperator read FOperation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpAnsiStringNodeItem }
|
||||||
|
|
||||||
|
TRttiExpAnsiStringNodeItem = class(TRttiExpStringNodeItem)
|
||||||
|
private
|
||||||
|
FComparedValue: AnsiString;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TStringFilterOperator;
|
||||||
|
const AComparedValue : AnsiString
|
||||||
|
);
|
||||||
|
function Evaluate(AInstance : TRttiFilterCreatorTarget):Boolean;override;
|
||||||
|
property ComparedValue : AnsiString read FComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpWideStringNodeItem }
|
||||||
|
|
||||||
|
TRttiExpWideStringNodeItem = class(TRttiExpStringNodeItem)
|
||||||
|
private
|
||||||
|
FComparedValue: WideString;
|
||||||
|
public
|
||||||
|
constructor Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TStringFilterOperator;
|
||||||
|
const AComparedValue : WideString
|
||||||
|
);
|
||||||
|
function Evaluate(AInstance : TRttiFilterCreatorTarget):Boolean;override;
|
||||||
|
property ComparedValue : WideString read FComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ParseFilter(const AFilterText: string; AFltrCrtr : TRttiFilterCreator);overload;
|
||||||
|
function ParseFilter(
|
||||||
|
const AFilterText : string;
|
||||||
|
ATargetClass : TRttiFilterCreatorTargetClass
|
||||||
|
) : IObjectFilter;overload;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
function ParseFilter(
|
||||||
|
const AFilterText : string;
|
||||||
|
ATargetClass : TRttiFilterCreatorTargetClass
|
||||||
|
) : IObjectFilter;
|
||||||
|
var
|
||||||
|
fltr : TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
fltr := TRttiFilterCreator.Create(ATargetClass);
|
||||||
|
try
|
||||||
|
try
|
||||||
|
ParseFilter(AFilterText,fltr);
|
||||||
|
Result := TRttiObjectFilter.Create(fltr.Root,clrFreeObjects);
|
||||||
|
fltr.Clear(clrNone);
|
||||||
|
except
|
||||||
|
fltr.Clear(clrFreeObjects);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FreeAndNil(fltr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ParseFilter(const AFilterText: string; AFltrCrtr : TRttiFilterCreator);
|
||||||
|
const
|
||||||
|
tkn_LeftParenthesis = '('; tkn_RigthParenthesis = ')';
|
||||||
|
tkn_Equal = '='; tkn_NotEqual = '<>';
|
||||||
|
tkn_Sup = '>'; tkn_Inf = '<';
|
||||||
|
tkn_And = 'and'; tkn_Or = 'or';
|
||||||
|
var
|
||||||
|
strm : TStringStream;
|
||||||
|
prsr : TParser;
|
||||||
|
|
||||||
|
procedure MoveNext();
|
||||||
|
begin
|
||||||
|
prsr.NextToken();
|
||||||
|
if ( prsr.Token = toEOF ) then
|
||||||
|
raise ERttiFilterException.Create('Unexpected end of filter.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
propName : string;
|
||||||
|
propInfo : PPropInfo;
|
||||||
|
lastCntr : TFilterConnector;
|
||||||
|
|
||||||
|
procedure Handle_String();
|
||||||
|
var
|
||||||
|
s : string;
|
||||||
|
ws : WideString;
|
||||||
|
fltrOp : TStringFilterOperator;
|
||||||
|
begin
|
||||||
|
MoveNext();
|
||||||
|
s := prsr.TokenString();
|
||||||
|
if ( s = tkn_Equal ) then
|
||||||
|
fltrOp := sfoEqualCaseInsensitive
|
||||||
|
else if ( s = tkn_NotEqual ) then
|
||||||
|
fltrOp := sfoNotEqual
|
||||||
|
else
|
||||||
|
raise ERttiFilterException.CreateFmt('Unexpected symbol : "%s".',[s]);
|
||||||
|
MoveNext();
|
||||||
|
prsr.CheckToken(toString);
|
||||||
|
if ( propInfo^.PropType^.Kind = tkWString ) then begin
|
||||||
|
ws := prsr.TokenString();
|
||||||
|
AFltrCrtr.AddCondition(propName,fltrOp,ws,lastCntr);
|
||||||
|
end else begin
|
||||||
|
s := prsr.TokenString();
|
||||||
|
AFltrCrtr.AddCondition(propName,fltrOp,s,lastCntr);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Handle_Integer();
|
||||||
|
var
|
||||||
|
s : string;
|
||||||
|
fltrOp : TNumericFilterOperator;
|
||||||
|
begin
|
||||||
|
MoveNext();
|
||||||
|
s := prsr.TokenString();
|
||||||
|
if ( s = tkn_Equal ) then
|
||||||
|
fltrOp := nfoEqual
|
||||||
|
else if ( s = tkn_NotEqual ) then
|
||||||
|
fltrOp := nfoNotEqual
|
||||||
|
else if ( s = tkn_Inf ) then
|
||||||
|
fltrOp := nfoLesser
|
||||||
|
else if ( s = tkn_Sup ) then
|
||||||
|
fltrOp := nfoGreater
|
||||||
|
else
|
||||||
|
raise ERttiFilterException.CreateFmt('Unexpected symbol : "%s".',[s]);
|
||||||
|
MoveNext();
|
||||||
|
prsr.CheckToken(toInteger);
|
||||||
|
AFltrCrtr.AddCondition(propName,fltrOp,prsr.TokenInt(),lastCntr);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
s : string;
|
||||||
|
begin
|
||||||
|
lastCntr := fcAnd;
|
||||||
|
AFltrCrtr.Clear(clrFreeObjects);
|
||||||
|
strm := TStringStream.Create(Trim(AFilterText));
|
||||||
|
try
|
||||||
|
prsr := TParser.Create(strm);
|
||||||
|
while ( prsr.Token <> toEOF ) do begin
|
||||||
|
s := prsr.TokenString();
|
||||||
|
if SameText(s,tkn_LeftParenthesis) then
|
||||||
|
AFltrCrtr.BeginGroup(lastCntr)
|
||||||
|
else if SameText(s,tkn_RigthParenthesis) then
|
||||||
|
AFltrCrtr.EndGroup()
|
||||||
|
else if SameText(s,tkn_And) then
|
||||||
|
lastCntr := fcAnd
|
||||||
|
else if SameText(s,tkn_Or) then
|
||||||
|
lastCntr := fcOr
|
||||||
|
else begin
|
||||||
|
prsr.CheckToken(toSymbol);
|
||||||
|
propName := prsr.TokenString();
|
||||||
|
propInfo := GetPropInfo(AFltrCrtr.TargetClass,propName);
|
||||||
|
if ( propInfo = nil ) then
|
||||||
|
raise ERttiFilterException.CreateFmt('Invalid property : "%s"',[propName]);
|
||||||
|
if ( propInfo^.PropType^.Kind in [tkSString,tkLString,tkAString,tkWString] ) then
|
||||||
|
Handle_String()
|
||||||
|
else if ( propInfo^.PropType^.Kind in [tkInteger,tkInt64,tkQWord] ) then
|
||||||
|
Handle_Integer()
|
||||||
|
else
|
||||||
|
raise ERttiFilterException.CreateFmt('Type not handled : "%s"',[GetEnumName(TypeInfo(TTypeKind),Ord(propInfo^.PropType^.Kind))]);
|
||||||
|
end;
|
||||||
|
prsr.NextToken();
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FreeAndNil(strm);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ClearObject(ARoot : TRttiExpNodeItem);
|
||||||
|
begin
|
||||||
|
if Assigned(ARoot) then begin
|
||||||
|
if ARoot.InheritsFrom(TRttiExpNode) then begin
|
||||||
|
with TRttiExpNode(ARoot) do begin
|
||||||
|
ClearObject(Right);
|
||||||
|
Right := nil;
|
||||||
|
ClearObject(Left);
|
||||||
|
Left := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
ARoot.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpNode }
|
||||||
|
|
||||||
|
procedure TRttiExpNode.SetRight(const AValue: TRttiExpNodeItem);
|
||||||
|
begin
|
||||||
|
if ( Connector = fcNone ) and ( AValue <> nil ) then
|
||||||
|
raise ERttiFilterException.Create('"Connector" must be set before "Right".');
|
||||||
|
//FreeAndNil(FRight);
|
||||||
|
FRight := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode.SetConnector(const AValue: TFilterConnector);
|
||||||
|
begin
|
||||||
|
if ( AValue = fcNone ) and ( FRight <> nil ) then
|
||||||
|
raise ERttiFilterException.Create('"Right" must be set to "nil" before "Connector" can be set to "none".');
|
||||||
|
FConnector := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode.SetLeft(const AValue: TRttiExpNodeItem);
|
||||||
|
begin
|
||||||
|
if ( FRight <> nil ) and ( AValue = nil ) then
|
||||||
|
raise ERttiFilterException.Create('"Right" must be set to "nil" before "Left" can be set to "none".');
|
||||||
|
//FreeAndNil(FLeft);
|
||||||
|
FLeft := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRttiExpNode.Destroy();
|
||||||
|
begin
|
||||||
|
FreeAndNil(FLeft);
|
||||||
|
FreeAndNil(FRight);
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiExpNode.Evaluate(AInstance: TRttiFilterCreatorTarget): Boolean;
|
||||||
|
begin
|
||||||
|
if Assigned(Left) then begin
|
||||||
|
Result := Left.Evaluate(AInstance);
|
||||||
|
if not Assigned(Right) then
|
||||||
|
Exit;
|
||||||
|
if Result and ( Connector = fcOr ) then
|
||||||
|
Exit;
|
||||||
|
if ( not Result ) and ( Connector = fcAnd ) then
|
||||||
|
Exit;
|
||||||
|
Result := Right.Evaluate(AInstance);
|
||||||
|
end else begin
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpConcreteNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpConcreteNodeItem.Create(const APropInfo : PPropInfo);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
FPropInfo := APropInfo;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpIntegerNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpIntegerNodeItem.Create(
|
||||||
|
const APropInfo : PPropInfo;
|
||||||
|
const AOperation : TNumericFilterOperator;
|
||||||
|
const AComparedValue : Integer
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
if not ( APropInfo^.PropType^.Kind in [tkInteger,tkInt64,tkQWord] ) then
|
||||||
|
raise ERttiFilterException.CreateFmt('Invalid property data type. "%s" excpeted.',['Integer']);
|
||||||
|
inherited Create(APropInfo,AOperation);
|
||||||
|
FComparedValue := AComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiExpIntegerNodeItem.Evaluate(AInstance: TRttiFilterCreatorTarget): Boolean;
|
||||||
|
begin
|
||||||
|
case Operation of
|
||||||
|
nfoEqual : Result := ( GetOrdProp(AInstance,PropInfo) = ComparedValue );
|
||||||
|
nfoGreater : Result := ( GetOrdProp(AInstance,PropInfo) > ComparedValue );
|
||||||
|
nfoLesser : Result := ( GetOrdProp(AInstance,PropInfo) < ComparedValue );
|
||||||
|
nfoNotEqual : Result := ( GetOrdProp(AInstance,PropInfo) <> ComparedValue );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiFilterCreator }
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator.AddNode(
|
||||||
|
const ANode : TRttiExpNodeItem;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
);
|
||||||
|
var
|
||||||
|
tmpNode : TRttiExpNode;
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ANode));
|
||||||
|
if not Assigned(FRoot) then begin
|
||||||
|
FRoot := TRttiExpNode.Create();
|
||||||
|
FCurrent := FRoot;
|
||||||
|
end;
|
||||||
|
if not Assigned(FCurrent.Left) then begin
|
||||||
|
FCurrent.Left := ANode;
|
||||||
|
FCurrent.Connector := AConnector;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
if ( AConnector <= fcNone ) then
|
||||||
|
raise ERttiFilterException.Create('Invalid connector value.');
|
||||||
|
if not Assigned(FCurrent.Right) then begin
|
||||||
|
FCurrent.Right := ANode;
|
||||||
|
FCurrent.Connector := AConnector;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
tmpNode := TRttiExpNode.Create();
|
||||||
|
tmpNode.Left := FCurrent.Right;
|
||||||
|
FCurrent.Right := tmpNode;
|
||||||
|
FCurrent := tmpNode;
|
||||||
|
FCurrent.Connector := AConnector;
|
||||||
|
FCurrent.Right := ANode;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator.PushCurrent(ACurrent: TRttiExpNode);
|
||||||
|
begin
|
||||||
|
FCurrentStack.Push(FCurrent);
|
||||||
|
FCurrent := ACurrent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.PopCurrent(): TRttiExpNode;
|
||||||
|
begin
|
||||||
|
if not FCurrentStack.AtLeast(1) then
|
||||||
|
raise ERttiFilterException.Create('"BeginGroup" must be called before "EndGroup".');
|
||||||
|
Result := FCurrentStack.Pop() as TRttiExpNode;
|
||||||
|
FCurrent := Result;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TRttiFilterCreator.Create(const ATargetClass: TRttiFilterCreatorTargetClass);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ATargetClass));
|
||||||
|
FTargetClass := ATargetClass;
|
||||||
|
FCurrentStack := TObjectStack.Create();
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRttiFilterCreator.Destroy();
|
||||||
|
begin
|
||||||
|
FreeAndNil(FCurrentStack);
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator.Clear(const AFreeObjects: TClearAction);
|
||||||
|
var
|
||||||
|
i : Integer;
|
||||||
|
begin
|
||||||
|
if ( AFreeObjects = clrFreeObjects ) then
|
||||||
|
ClearObject(FRoot);
|
||||||
|
for i := 0 to Pred(FCurrentStack.Count) do
|
||||||
|
FCurrentStack.Pop();
|
||||||
|
FRoot := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TNumericFilterOperator;
|
||||||
|
const AValue : Integer;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
) : TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
AddNode(
|
||||||
|
TRttiExpIntegerNodeItem.Create(GetPropInfo(TargetClass,APropertyName),AOperator,AValue),
|
||||||
|
AConnector
|
||||||
|
);
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TStringFilterOperator;
|
||||||
|
const AValue : AnsiString;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
): TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
AddNode(
|
||||||
|
TRttiExpAnsiStringNodeItem.Create(GetPropInfo(TargetClass,APropertyName),AOperator,AValue),
|
||||||
|
AConnector
|
||||||
|
);
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.AddCondition(
|
||||||
|
const APropertyName : string;
|
||||||
|
const AOperator : TStringFilterOperator;
|
||||||
|
const AValue : WideString;
|
||||||
|
const AConnector : TFilterConnector
|
||||||
|
): TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
AddNode(
|
||||||
|
TRttiExpWideStringNodeItem.Create(GetPropInfo(TargetClass,APropertyName),AOperator,AValue),
|
||||||
|
AConnector
|
||||||
|
);
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.BeginGroup(const AConnector: TFilterConnector):TRttiFilterCreator;
|
||||||
|
var
|
||||||
|
gn : TRttiExpNode;
|
||||||
|
begin
|
||||||
|
if not Assigned(FCurrent) then
|
||||||
|
AddNode(TRttiExpNode.Create(),fcNone);
|
||||||
|
gn := TRttiExpNode.Create();
|
||||||
|
AddNode(gn,AConnector);
|
||||||
|
PushCurrent(gn);
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiFilterCreator.EndGroup(): TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
PopCurrent();
|
||||||
|
Result := Self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiObjectFilter }
|
||||||
|
|
||||||
|
function TRttiObjectFilter.Evaluate(const AObject: TObject): Boolean;
|
||||||
|
begin
|
||||||
|
Result := FFilterRoot.Evaluate(TRttiFilterCreatorTarget(AObject));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TRttiObjectFilter.Create(
|
||||||
|
AFilterRoot : TRttiExpNodeItem;
|
||||||
|
const AOnDestroyFilterAction : TClearAction
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(AFilterRoot));
|
||||||
|
FFilterRoot := AFilterRoot;
|
||||||
|
FOnDestroyFilterAction := AOnDestroyFilterAction;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRttiObjectFilter.Destroy();
|
||||||
|
begin
|
||||||
|
if ( FOnDestroyFilterAction = clrFreeObjects ) then
|
||||||
|
ClearObject(FFilterRoot);
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpNumericNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpNumericNodeItem.Create(
|
||||||
|
const APropInfo: PPropInfo;
|
||||||
|
const AOperation: TNumericFilterOperator
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
inherited Create(APropInfo);
|
||||||
|
FOperation := AOperation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpStringNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpStringNodeItem.Create(
|
||||||
|
const APropInfo: PPropInfo;
|
||||||
|
const AOperation: TStringFilterOperator
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
inherited Create(APropInfo);
|
||||||
|
FOperation := AOperation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpAnsiStringNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpAnsiStringNodeItem.Create(
|
||||||
|
const APropInfo: PPropInfo;
|
||||||
|
const AOperation: TStringFilterOperator;
|
||||||
|
const AComparedValue: AnsiString
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
if not ( APropInfo^.PropType^.Kind in [tkSString,tkLString,tkAString] ) then
|
||||||
|
raise ERttiFilterException.CreateFmt('Invalid property data type. "%s" excpeted.',['AnsiString']);
|
||||||
|
inherited Create(APropInfo,AOperation);
|
||||||
|
FComparedValue := AComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiExpAnsiStringNodeItem.Evaluate(AInstance: TRttiFilterCreatorTarget): Boolean;
|
||||||
|
begin
|
||||||
|
case Operation of
|
||||||
|
sfoEqualCaseSensitive : Result := ( GetStrProp(AInstance,PropInfo) = ComparedValue );
|
||||||
|
sfoEqualCaseInsensitive : Result := AnsiSameText(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||||
|
sfoNotEqual : Result := ( GetStrProp(AInstance,PropInfo) <> ComparedValue);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpWideStringNodeItem }
|
||||||
|
|
||||||
|
constructor TRttiExpWideStringNodeItem.Create(
|
||||||
|
const APropInfo: PPropInfo;
|
||||||
|
const AOperation: TStringFilterOperator;
|
||||||
|
const AComparedValue: WideString
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(APropInfo));
|
||||||
|
if not ( APropInfo^.PropType^.Kind in [tkWString] ) then
|
||||||
|
raise ERttiFilterException.CreateFmt('Invalid property data type. "%s" excpeted.',['WideString']);
|
||||||
|
inherited Create(APropInfo,AOperation);
|
||||||
|
FComparedValue := AComparedValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRttiExpWideStringNodeItem.Evaluate(AInstance: TRttiFilterCreatorTarget): Boolean;
|
||||||
|
begin
|
||||||
|
case Operation of
|
||||||
|
sfoEqualCaseSensitive : Result := ( GetStrProp(AInstance,PropInfo) = ComparedValue );
|
||||||
|
sfoEqualCaseInsensitive : Result := WideSameText(GetStrProp(AInstance,PropInfo),ComparedValue);
|
||||||
|
sfoNotEqual : Result := ( GetStrProp(AInstance,PropInfo) <> ComparedValue );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
266
wst/trunk/wst_rtti_filter/rtti_filters_tests.lpi
Normal file
266
wst/trunk/wst_rtti_filter/rtti_filters_tests.lpi
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Version Value="5"/>
|
||||||
|
<General>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<IconPath Value="./"/>
|
||||||
|
<TargetFileExt Value=".exe"/>
|
||||||
|
<ActiveEditorIndexAtStart Value="0"/>
|
||||||
|
</General>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IgnoreBinaries Value="False"/>
|
||||||
|
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||||
|
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
<CommandLineParams Value="-a"/>
|
||||||
|
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="FCL"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="22">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="rtti_filters_tests.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="rtti_filters_tests"/>
|
||||||
|
<CursorPos X="9" Y="15"/>
|
||||||
|
<TopLine Value="49"/>
|
||||||
|
<UsageCount Value="67"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="tests.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="tests"/>
|
||||||
|
<CursorPos X="41" Y="861"/>
|
||||||
|
<TopLine Value="873"/>
|
||||||
|
<EditorIndex Value="0"/>
|
||||||
|
<UsageCount Value="67"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="rtti_filters.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="rtti_filters"/>
|
||||||
|
<CursorPos X="1" Y="1"/>
|
||||||
|
<TopLine Value="1"/>
|
||||||
|
<EditorIndex Value="1"/>
|
||||||
|
<UsageCount Value="67"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="cursor_intf.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="cursor_intf"/>
|
||||||
|
<CursorPos X="31" Y="19"/>
|
||||||
|
<TopLine Value="1"/>
|
||||||
|
<EditorIndex Value="2"/>
|
||||||
|
<UsageCount Value="67"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\typinfo.pp"/>
|
||||||
|
<UnitName Value="typinfo"/>
|
||||||
|
<CursorPos X="67" Y="40"/>
|
||||||
|
<TopLine Value="27"/>
|
||||||
|
<UsageCount Value="9"/>
|
||||||
|
</Unit4>
|
||||||
|
<Unit5>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
|
||||||
|
<CursorPos X="23" Y="138"/>
|
||||||
|
<TopLine Value="128"/>
|
||||||
|
<UsageCount Value="6"/>
|
||||||
|
</Unit5>
|
||||||
|
<Unit6>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\fpcunit\DUnitCompatibleInterface.inc"/>
|
||||||
|
<CursorPos X="13" Y="134"/>
|
||||||
|
<TopLine Value="119"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit6>
|
||||||
|
<Unit7>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\fpcunit\testregistry.pp"/>
|
||||||
|
<UnitName Value="testregistry"/>
|
||||||
|
<CursorPos X="11" Y="29"/>
|
||||||
|
<TopLine Value="19"/>
|
||||||
|
<UsageCount Value="5"/>
|
||||||
|
</Unit7>
|
||||||
|
<Unit8>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\fpcunit\fpcunit.pp"/>
|
||||||
|
<UnitName Value="fpcunit"/>
|
||||||
|
<CursorPos X="3" Y="542"/>
|
||||||
|
<TopLine Value="540"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit8>
|
||||||
|
<Unit9>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\fcl\inc\contnrs.pp"/>
|
||||||
|
<UnitName Value="contnrs"/>
|
||||||
|
<CursorPos X="26" Y="72"/>
|
||||||
|
<TopLine Value="66"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit9>
|
||||||
|
<Unit10>
|
||||||
|
<Filename Value="std_cursors.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="std_cursors"/>
|
||||||
|
<CursorPos X="54" Y="68"/>
|
||||||
|
<TopLine Value="50"/>
|
||||||
|
<EditorIndex Value="3"/>
|
||||||
|
<UsageCount Value="48"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit10>
|
||||||
|
<Unit11>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
|
||||||
|
<CursorPos X="3" Y="186"/>
|
||||||
|
<TopLine Value="204"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit11>
|
||||||
|
<Unit12>
|
||||||
|
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\lists.inc"/>
|
||||||
|
<CursorPos X="3" Y="355"/>
|
||||||
|
<TopLine Value="353"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit12>
|
||||||
|
<Unit13>
|
||||||
|
<Filename Value="test_std_cursors.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="test_std_cursors"/>
|
||||||
|
<CursorPos X="48" Y="202"/>
|
||||||
|
<TopLine Value="190"/>
|
||||||
|
<EditorIndex Value="5"/>
|
||||||
|
<UsageCount Value="48"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit13>
|
||||||
|
<Unit14>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\typinfo.pp"/>
|
||||||
|
<UnitName Value="typinfo"/>
|
||||||
|
<CursorPos X="26" Y="68"/>
|
||||||
|
<TopLine Value="54"/>
|
||||||
|
<UsageCount Value="15"/>
|
||||||
|
</Unit14>
|
||||||
|
<Unit15>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
|
||||||
|
<CursorPos X="10" Y="80"/>
|
||||||
|
<TopLine Value="67"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit15>
|
||||||
|
<Unit16>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstr.inc"/>
|
||||||
|
<CursorPos X="53" Y="453"/>
|
||||||
|
<TopLine Value="451"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit16>
|
||||||
|
<Unit17>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\wstringh.inc"/>
|
||||||
|
<CursorPos X="5" Y="67"/>
|
||||||
|
<TopLine Value="53"/>
|
||||||
|
<UsageCount Value="8"/>
|
||||||
|
</Unit17>
|
||||||
|
<Unit18>
|
||||||
|
<Filename Value="dom_cursors.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="dom_cursors"/>
|
||||||
|
<CursorPos X="46" Y="168"/>
|
||||||
|
<TopLine Value="120"/>
|
||||||
|
<EditorIndex Value="4"/>
|
||||||
|
<UsageCount Value="39"/>
|
||||||
|
<Loaded Value="True"/>
|
||||||
|
</Unit18>
|
||||||
|
<Unit19>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
|
||||||
|
<UnitName Value="DOM"/>
|
||||||
|
<CursorPos X="15" Y="426"/>
|
||||||
|
<TopLine Value="412"/>
|
||||||
|
<UsageCount Value="13"/>
|
||||||
|
</Unit19>
|
||||||
|
<Unit20>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
|
||||||
|
<CursorPos X="14" Y="1168"/>
|
||||||
|
<TopLine Value="1154"/>
|
||||||
|
<UsageCount Value="13"/>
|
||||||
|
</Unit20>
|
||||||
|
<Unit21>
|
||||||
|
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\parser.inc"/>
|
||||||
|
<CursorPos X="3" Y="303"/>
|
||||||
|
<TopLine Value="297"/>
|
||||||
|
<UsageCount Value="13"/>
|
||||||
|
</Unit21>
|
||||||
|
</Units>
|
||||||
|
<JumpHistory Count="0" HistoryIndex="-1"/>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="5"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="rtti_filters_tests.exe"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<UnitOutputDirectory Value="obj"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<IncludeAssertionCode Value="True"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Generate Value="Faster"/>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Other>
|
||||||
|
<CustomOptions Value="-Xi
|
||||||
|
"/>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<BreakPoints Count="9">
|
||||||
|
<Item1>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
|
||||||
|
<Line Value="15"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
|
||||||
|
<Line Value="16"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\tests\soap\test_soap.pas"/>
|
||||||
|
<Line Value="18"/>
|
||||||
|
</Item3>
|
||||||
|
<Item4>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\tests\soap\googleintfimpunit.pas"/>
|
||||||
|
<Line Value="63"/>
|
||||||
|
</Item4>
|
||||||
|
<Item5>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\v0.2\indy_http_protocol.pas"/>
|
||||||
|
<Line Value="69"/>
|
||||||
|
</Item5>
|
||||||
|
<Item6>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\v0.2\service_intf.pas"/>
|
||||||
|
<Line Value="567"/>
|
||||||
|
</Item6>
|
||||||
|
<Item7>
|
||||||
|
<Source Value="..\v0.3\tests\google_api\home\inoussa\Projets\Laz\v0.2\imp_utils.pas"/>
|
||||||
|
<Line Value="83"/>
|
||||||
|
</Item7>
|
||||||
|
<Item8>
|
||||||
|
<Source Value="tests.pas"/>
|
||||||
|
<Line Value="830"/>
|
||||||
|
</Item8>
|
||||||
|
<Item9>
|
||||||
|
<Source Value="tests.pas"/>
|
||||||
|
<Line Value="919"/>
|
||||||
|
</Item9>
|
||||||
|
</BreakPoints>
|
||||||
|
<Watches Count="1">
|
||||||
|
<Item1>
|
||||||
|
<Expression Value="ASource.Memory^"/>
|
||||||
|
</Item1>
|
||||||
|
</Watches>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
159
wst/trunk/wst_rtti_filter/rtti_filters_tests.lpr
Normal file
159
wst/trunk/wst_rtti_filter/rtti_filters_tests.lpr
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
program rtti_filters_tests;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
//{$DEFINE VER2_0}
|
||||||
|
uses
|
||||||
|
custapp, Classes, SysUtils, fpcunit, testreport, testregistry, tests,
|
||||||
|
cursor_intf, rtti_filters, std_cursors, test_std_cursors, dom_cursors;
|
||||||
|
|
||||||
|
const
|
||||||
|
ShortOpts = 'alh';
|
||||||
|
Longopts: array[1..5] of string = ('all', 'list', 'format:', 'suite:', 'help');
|
||||||
|
Version = 'Version 0.1';
|
||||||
|
|
||||||
|
type
|
||||||
|
TFormat = (fPlain, fLatex, fXML);
|
||||||
|
|
||||||
|
TTestRunner = class(TCustomApplication)
|
||||||
|
private
|
||||||
|
protected
|
||||||
|
procedure DoRun; override;
|
||||||
|
procedure doTestRun(aTest: TTest); virtual;
|
||||||
|
public
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
FormatParam: TFormat;
|
||||||
|
|
||||||
|
procedure TTestRunner.doTestRun(aTest: TTest);
|
||||||
|
var
|
||||||
|
testResult: TTestResult;
|
||||||
|
|
||||||
|
procedure doXMLTestRun(aText: TTest);
|
||||||
|
var
|
||||||
|
XMLResultsWriter: TXMLResultsWriter;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
XMLResultsWriter := TXMLResultsWriter.Create;
|
||||||
|
testResult.AddListener(XMLResultsWriter);
|
||||||
|
XMLResultsWriter.WriteHeader;
|
||||||
|
aTest.Run(testResult);
|
||||||
|
XMLResultsWriter.WriteResult(testResult);
|
||||||
|
finally
|
||||||
|
XMLResultsWriter.Free;
|
||||||
|
testResult.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$IFNDEF VER2_0}
|
||||||
|
procedure doPlainTestRun(aText: TTest);
|
||||||
|
var
|
||||||
|
PlainResultsWriter: TPlainResultsWriter;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
PlainResultsWriter := TPlainResultsWriter.Create;
|
||||||
|
testResult.AddListener(PlainResultsWriter);
|
||||||
|
PlainResultsWriter.WriteHeader;
|
||||||
|
aTest.Run(testResult);
|
||||||
|
PlainResultsWriter.WriteResult(testResult);
|
||||||
|
finally
|
||||||
|
PlainResultsWriter.Free;
|
||||||
|
testResult.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
begin
|
||||||
|
testResult := TTestResult.Create;
|
||||||
|
|
||||||
|
case FormatParam of
|
||||||
|
fLatex: doXMLTestRun(aTest); //no latex implemented yet
|
||||||
|
{$IFNDEF VER2_0}
|
||||||
|
fPlain: doPlainTestRun(aTest);
|
||||||
|
{$ENDIF}
|
||||||
|
else
|
||||||
|
doXMLTestRun(aTest);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestRunner.DoRun;
|
||||||
|
var
|
||||||
|
I: integer;
|
||||||
|
S: string;
|
||||||
|
begin
|
||||||
|
S := CheckOptions(ShortOpts, LongOpts);
|
||||||
|
if (S <> '') then
|
||||||
|
Writeln(S);
|
||||||
|
|
||||||
|
if HasOption('h', 'help') or (ParamCount = 0) then
|
||||||
|
begin
|
||||||
|
writeln(Title);
|
||||||
|
writeln(Version);
|
||||||
|
writeln;
|
||||||
|
writeln('Usage: ');
|
||||||
|
writeln(' --format=latex output as latex source (only list implemented)');
|
||||||
|
{$IFNDEF VER2_0}
|
||||||
|
writeln(' --format=plain output as plain ASCII source');
|
||||||
|
{$ENDIF}
|
||||||
|
writeln(' --format=xml output as XML source (default)');
|
||||||
|
writeln;
|
||||||
|
writeln(' -l or --list show a list of registered tests');
|
||||||
|
writeln(' -a or --all run all tests');
|
||||||
|
writeln(' --suite=MyTestSuiteName run single test suite class');
|
||||||
|
writeln;
|
||||||
|
writeln('The results can be redirected to an xml file,');
|
||||||
|
writeln('for example: ./testrunner --all > results.xml');
|
||||||
|
end;
|
||||||
|
|
||||||
|
//get the format parameter
|
||||||
|
FormatParam := fXML;
|
||||||
|
if HasOption('format') then
|
||||||
|
begin
|
||||||
|
if GetOptionValue('format') = 'latex' then
|
||||||
|
FormatParam := fLatex;
|
||||||
|
{$IFNDEF VER2_0}
|
||||||
|
if GetOptionValue('format') = 'plain' then
|
||||||
|
FormatParam := fPlain;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
//get a list of all registed tests
|
||||||
|
if HasOption('l', 'list') then
|
||||||
|
case FormatParam of
|
||||||
|
fLatex: Write(GetSuiteAsLatex(GetTestRegistry));
|
||||||
|
{$IFNDEF VER2_0}
|
||||||
|
fPlain: Write(GetSuiteAsPlain(GetTestRegistry));
|
||||||
|
{$ENDIF}
|
||||||
|
else
|
||||||
|
Write(GetSuiteAsXML(GetTestRegistry));
|
||||||
|
end;
|
||||||
|
|
||||||
|
//run the tests
|
||||||
|
if HasOption('a', 'all') then
|
||||||
|
doTestRun(GetTestRegistry)
|
||||||
|
else
|
||||||
|
if HasOption('suite') then
|
||||||
|
begin
|
||||||
|
S := '';
|
||||||
|
S := GetOptionValue('suite');
|
||||||
|
if S = '' then
|
||||||
|
for I := 0 to GetTestRegistry.Tests.Count - 1 do
|
||||||
|
writeln(GetTestRegistry[i].TestName)
|
||||||
|
else
|
||||||
|
for I := 0 to GetTestRegistry.Tests.Count - 1 do
|
||||||
|
if GetTestRegistry[i].TestName = S then
|
||||||
|
doTestRun(GetTestRegistry[i]);
|
||||||
|
end;
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
App: TTestRunner;
|
||||||
|
|
||||||
|
begin
|
||||||
|
App := TTestRunner.Create(nil);
|
||||||
|
App.Initialize;
|
||||||
|
App.Title := 'FPCUnit Console Test Case runner.';
|
||||||
|
App.Run;
|
||||||
|
App.Free;
|
||||||
|
end.
|
11
wst/trunk/wst_rtti_filter/rtti_filters_tests.pas
Normal file
11
wst/trunk/wst_rtti_filter/rtti_filters_tests.pas
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
program rtti_filters_tests;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils,
|
||||||
|
cursor_intf, rtti_filters;
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
||||||
|
|
112
wst/trunk/wst_rtti_filter/std_cursors.pas
Normal file
112
wst/trunk/wst_rtti_filter/std_cursors.pas
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
unit std_cursors;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Contnrs,
|
||||||
|
cursor_intf;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TObjectListCursor }
|
||||||
|
|
||||||
|
TObjectListCursor = class(TInterfacedObject,ICursor,IObjectCursor)
|
||||||
|
private
|
||||||
|
FList : TObjectList;
|
||||||
|
FCurrentIndex : Integer;
|
||||||
|
protected
|
||||||
|
procedure Reset();
|
||||||
|
function MoveNext() : Boolean;virtual;
|
||||||
|
function Clone():ICursor;
|
||||||
|
function GetCurrent() : TObject;
|
||||||
|
public
|
||||||
|
constructor Create(ADataList : TObjectList);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListFilterableCursor }
|
||||||
|
|
||||||
|
TObjectListFilterableCursor = class(TObjectListCursor,IFilterableObjectCursor)
|
||||||
|
private
|
||||||
|
FFilter : IObjectFilter;
|
||||||
|
protected
|
||||||
|
function MoveNext() : Boolean;override;
|
||||||
|
function GetFilter() : IObjectFilter;
|
||||||
|
function SetFilter(const AFilter : IObjectFilter) : IObjectFilter;
|
||||||
|
public
|
||||||
|
destructor Destroy();override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{ TObjectListCursor }
|
||||||
|
|
||||||
|
procedure TObjectListCursor.Reset();
|
||||||
|
begin
|
||||||
|
FCurrentIndex := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectListCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
Inc(FCurrentIndex);
|
||||||
|
Result := ( FCurrentIndex < FList.Count );
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectListCursor.Clone(): ICursor;
|
||||||
|
begin
|
||||||
|
Result := TObjectListCursor.Create(FList);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectListCursor.GetCurrent(): TObject;
|
||||||
|
begin
|
||||||
|
if ( FCurrentIndex < 0 ) or ( FCurrentIndex >= FList.Count ) then
|
||||||
|
raise ECursorException.Create('Invalid cursor state.');
|
||||||
|
Result := FList[FCurrentIndex];
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TObjectListCursor.Create(ADataList: TObjectList);
|
||||||
|
begin
|
||||||
|
Assert(Assigned(ADataList));
|
||||||
|
FList := ADataList;
|
||||||
|
Reset();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListFilterableCursor }
|
||||||
|
|
||||||
|
function TObjectListFilterableCursor.MoveNext(): Boolean;
|
||||||
|
begin
|
||||||
|
if ( FFilter = nil ) then begin
|
||||||
|
Result := inherited MoveNext();
|
||||||
|
end else begin
|
||||||
|
while ( inherited MoveNext() ) do begin
|
||||||
|
if FFilter.Evaluate(GetCurrent()) then begin
|
||||||
|
Result := True;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectListFilterableCursor.GetFilter(): IObjectFilter;
|
||||||
|
begin
|
||||||
|
Result := FFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TObjectListFilterableCursor.SetFilter(
|
||||||
|
const AFilter: IObjectFilter
|
||||||
|
): IObjectFilter;
|
||||||
|
begin
|
||||||
|
FFilter := AFilter;
|
||||||
|
Result := FFilter;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TObjectListFilterableCursor.Destroy();
|
||||||
|
begin
|
||||||
|
FFilter := nil;
|
||||||
|
inherited Destroy();
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
232
wst/trunk/wst_rtti_filter/test_std_cursors.pas
Normal file
232
wst/trunk/wst_rtti_filter/test_std_cursors.pas
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
unit test_std_cursors;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Contnrs,
|
||||||
|
fpcunit, testutils, testregistry,
|
||||||
|
cursor_intf, std_cursors, rtti_filters;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TClass_A }
|
||||||
|
|
||||||
|
TClass_A = class(TPersistent)
|
||||||
|
private
|
||||||
|
FIntProp: Integer;
|
||||||
|
public
|
||||||
|
constructor Create(AIntProp : Integer);
|
||||||
|
published
|
||||||
|
property IntProp : Integer read FIntProp;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TClass_B }
|
||||||
|
|
||||||
|
TClass_B = class(TClass_A)
|
||||||
|
private
|
||||||
|
FIntProp_A: Integer;
|
||||||
|
FIntProp_B: Integer;
|
||||||
|
public
|
||||||
|
constructor Create(AIntProp,AIntProp_A,AIntProp_B : Integer);
|
||||||
|
published
|
||||||
|
property IntProp_A : Integer read FIntProp_A;
|
||||||
|
property IntProp_B : Integer read FIntProp_B;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListCursor_Test }
|
||||||
|
|
||||||
|
TObjectListCursor_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure All();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListFilterableCursor_Test }
|
||||||
|
|
||||||
|
TObjectListFilterableCursor_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure All();
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{ TClass_A }
|
||||||
|
|
||||||
|
constructor TClass_A.Create(AIntProp: Integer);
|
||||||
|
begin
|
||||||
|
FIntProp := AIntProp;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListCursor_Test }
|
||||||
|
|
||||||
|
procedure TObjectListCursor_Test.All();
|
||||||
|
const O_COUNT = 100;
|
||||||
|
var
|
||||||
|
x : IObjectCursor;
|
||||||
|
ls : TObjectList;
|
||||||
|
c, i : Integer;
|
||||||
|
begin
|
||||||
|
ls := TObjectList.Create(True);
|
||||||
|
try
|
||||||
|
x := TObjectListCursor.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(TClass_A.Create(0));
|
||||||
|
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
|
||||||
|
ls.Add(TClass_A.Create(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;
|
||||||
|
|
||||||
|
|
||||||
|
{ TClass_B }
|
||||||
|
|
||||||
|
constructor TClass_B.Create(AIntProp, AIntProp_A, AIntProp_B: Integer);
|
||||||
|
begin
|
||||||
|
inherited Create(AIntProp);
|
||||||
|
FIntProp_A := AIntProp_A;
|
||||||
|
FIntProp_B := AIntProp_B;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TObjectListFilterableCursor_Test }
|
||||||
|
|
||||||
|
procedure TObjectListFilterableCursor_Test.All();
|
||||||
|
const O_COUNT = 100;
|
||||||
|
var
|
||||||
|
x : IFilterableObjectCursor;
|
||||||
|
ls : TObjectList;
|
||||||
|
c, i : Integer;
|
||||||
|
f : IObjectFilter;
|
||||||
|
fcr : TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
fcr := nil;
|
||||||
|
ls := TObjectList.Create(True);
|
||||||
|
try
|
||||||
|
x := TObjectListFilterableCursor.Create(ls);
|
||||||
|
CheckNull(x.GetFilter());
|
||||||
|
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(TClass_A.Create(0));
|
||||||
|
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
|
||||||
|
ls.Add(TClass_A.Create(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;
|
||||||
|
|
||||||
|
ls.Clear();
|
||||||
|
for i := 0 to Pred(O_COUNT) do
|
||||||
|
ls.Add(TClass_B.Create(i,( i mod 10 ), ( i mod ( ( i + 1 ) * 2 ) ) ));
|
||||||
|
|
||||||
|
fcr := TRttiFilterCreator.Create(TClass_B);
|
||||||
|
fcr.AddCondition('IntProp',nfoEqual,-1,fcOr);//
|
||||||
|
f := TRttiObjectFilter.Create(fcr.Root,clrFreeObjects) as IObjectFilter;
|
||||||
|
x.SetFilter(f);
|
||||||
|
Check(x.GetFilter()=f);
|
||||||
|
x.SetFilter(nil);
|
||||||
|
CheckNull(x.GetFilter());
|
||||||
|
x.SetFilter(f);
|
||||||
|
Check(x.GetFilter()=f);
|
||||||
|
x.Reset();
|
||||||
|
CheckEquals(False,x.MoveNext());
|
||||||
|
|
||||||
|
fcr.AddCondition('IntProp',nfoGreater,-1,fcOr);
|
||||||
|
x.Reset();
|
||||||
|
CheckEquals(True,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();
|
||||||
|
fcr.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Initialization
|
||||||
|
RegisterTests([TObjectListCursor_Test,TObjectListFilterableCursor_Test]);
|
||||||
|
|
||||||
|
end.
|
900
wst/trunk/wst_rtti_filter/tests.pas
Normal file
900
wst/trunk/wst_rtti_filter/tests.pas
Normal file
@ -0,0 +1,900 @@
|
|||||||
|
unit tests;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
//{$DEFINE DBG_DISPLAY}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, fpcunit, testutils, testregistry, TypInfo,
|
||||||
|
|
||||||
|
rtti_filters;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TClass_A }
|
||||||
|
|
||||||
|
TClass_A = class(TPersistent)
|
||||||
|
private
|
||||||
|
FIntProp: Integer;
|
||||||
|
FStrProp: string;
|
||||||
|
FWideStrProp: widestring;
|
||||||
|
published
|
||||||
|
property IntProp : Integer read FIntProp write FIntProp;
|
||||||
|
property StrProp : string read FStrProp write FStrProp;
|
||||||
|
property WideStrProp : widestring read FWideStrProp write FWideStrProp;
|
||||||
|
end;
|
||||||
|
TClass_AClass = class of TClass_A;
|
||||||
|
|
||||||
|
{ TRttiExpIntegerNodeItem_Test }
|
||||||
|
|
||||||
|
TRttiExpIntegerNodeItem_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure Create_Test();
|
||||||
|
procedure Evaluate_Equal();
|
||||||
|
procedure Evaluate_Lesser();
|
||||||
|
procedure Evaluate_Greater();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpAnsiStringNodeItem_Test }
|
||||||
|
|
||||||
|
TRttiExpAnsiStringNodeItem_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure Create_Test();
|
||||||
|
procedure Evaluate_EqualCaseSensitive();
|
||||||
|
procedure Evaluate_EqualCaseInsensitive();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpwWideStringNodeItem_Test }
|
||||||
|
|
||||||
|
TRttiExpwWideStringNodeItem_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure Create_Test();
|
||||||
|
procedure Evaluate_EqualCaseSensitive();
|
||||||
|
procedure Evaluate_EqualCaseInsensitive();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpNode_Test }
|
||||||
|
|
||||||
|
TRttiExpNode_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure Left_True();
|
||||||
|
procedure LeftTrue_Or_RightFalse();
|
||||||
|
procedure LeftTrue_Or_RightTrue();
|
||||||
|
procedure LeftTrue_And_RightFalse();
|
||||||
|
procedure LeftTrue_And_RightTrue();
|
||||||
|
|
||||||
|
procedure Left_False();
|
||||||
|
procedure LeftFalse_Or_RightFalse();
|
||||||
|
procedure LeftFalse_Or_RightTrue();
|
||||||
|
procedure LeftFalse_And_RightFalse();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiFilterCreator_Test }
|
||||||
|
|
||||||
|
TRttiFilterCreator_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure Creation();
|
||||||
|
procedure AddContion();
|
||||||
|
procedure BeginEnd_Group();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiParser_Test }
|
||||||
|
|
||||||
|
TRttiParser_Test = class(TTestCase)
|
||||||
|
published
|
||||||
|
procedure SimpleOperators();
|
||||||
|
procedure BeginEnd_Group();
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure TRttiExpIntegerNodeItem_Test.Create_Test();
|
||||||
|
var
|
||||||
|
x : TRttiExpIntegerNodeItem;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
try
|
||||||
|
try
|
||||||
|
x := TRttiExpIntegerNodeItem.Create(GetPropInfo(TClass_A,'StrProp'),nfoEqual,10);
|
||||||
|
Check(False);
|
||||||
|
except
|
||||||
|
on e : EAssertionFailedError do
|
||||||
|
raise;
|
||||||
|
on e : ERttiFilterException do begin
|
||||||
|
// nothing!
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpIntegerNodeItem_Test.Evaluate_Equal();
|
||||||
|
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'),nfoEqual,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.IntProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True, 'True' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpIntegerNodeItem_Test.Evaluate_Lesser();
|
||||||
|
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'),nfoLesser,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
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
|
||||||
|
x : TRttiExpIntegerNodeItem;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False, 'False' );
|
||||||
|
|
||||||
|
t.IntProp := VAL_1 + 1;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TRttiExpNode_Test }
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.Left_True();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoEqual,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False, 'False' );
|
||||||
|
|
||||||
|
t.IntProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftTrue_Or_RightFalse();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
x.Connector := fcOr;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftTrue_Or_RightTrue();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
x.Connector := fcOr;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftTrue_And_RightFalse();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
x.Connector := fcAnd;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftTrue_And_RightTrue();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
x.Connector := fcAnd;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.Left_False();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False, 'False' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftFalse_Or_RightFalse();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoEqual,VAL_1);
|
||||||
|
x.Connector := fcOr;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftFalse_Or_RightTrue();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoEqual,VAL_1);
|
||||||
|
x.Connector := fcOr;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoEqual,0);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpNode_Test.LeftFalse_And_RightFalse();
|
||||||
|
const VAL_1 : Integer = 1210;
|
||||||
|
var
|
||||||
|
x : TRttiExpNode;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpNode.Create();
|
||||||
|
CheckNull(x.Left);
|
||||||
|
CheckNull(x.Right);
|
||||||
|
Check(x.Connector = fcNone);
|
||||||
|
|
||||||
|
x.Left := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoLesser,-VAL_1);
|
||||||
|
x.Connector := fcAnd;
|
||||||
|
x.Right := TRttiExpIntegerNodeItem.Create(GetPropInfo(t,'IntProp'),nfoGreater,VAL_1);
|
||||||
|
|
||||||
|
t.IntProp := 0;
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiFilterCreator_Test }
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator_Test.Creation();
|
||||||
|
var
|
||||||
|
x : TRttiFilterCreator;
|
||||||
|
begin
|
||||||
|
x := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
try
|
||||||
|
CheckNull(x.Root,'Root <> nil');
|
||||||
|
Check(( x.TargetClass = TClass_A ), 'TargetClass');
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Display(const AMsg : string);
|
||||||
|
begin
|
||||||
|
{$IFDEF DBG_DISPLAY}
|
||||||
|
Write(AMsg);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
type TPrintProc = procedure(const AMsg : string);
|
||||||
|
procedure PrintTree(
|
||||||
|
ATree : TRttiExpNodeItem;
|
||||||
|
APrintProc : TPrintProc;
|
||||||
|
const AIndent : Integer
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
if Assigned(ATree) then begin
|
||||||
|
if ATree.InheritsFrom(TRttiExpNode) then begin
|
||||||
|
APrintProc(StringOfChar('-',AIndent));
|
||||||
|
APrintProc(GetEnumName(TypeInfo(TFilterConnector),Ord(TRttiExpNode(ATree).Connector)) + #10#13);
|
||||||
|
PrintTree(TRttiExpNode(ATree).Left,APrintProc,AIndent+2);
|
||||||
|
PrintTree(TRttiExpNode(ATree).Right,APrintProc,AIndent+2);
|
||||||
|
end else if ATree.InheritsFrom(TRttiExpConcreteNodeItem) then begin
|
||||||
|
APrintProc(StringOfChar('-',AIndent));
|
||||||
|
if ATree.InheritsFrom(TRttiExpNumericNodeItem) then begin
|
||||||
|
APrintProc(TRttiExpConcreteNodeItem(ATree).PropInfo^.Name + ' ' + GetEnumName(TypeInfo(TNumericFilterOperator),Ord(TRttiExpNumericNodeItem(ATree).Operation)) );
|
||||||
|
end else if ATree.InheritsFrom(TRttiExpStringNodeItem) then begin
|
||||||
|
APrintProc(TRttiExpConcreteNodeItem(ATree).PropInfo^.Name + ' ' + GetEnumName(TypeInfo(TStringFilterOperator),Ord(TRttiExpStringNodeItem(ATree).Operation)) )
|
||||||
|
end;
|
||||||
|
if ATree.InheritsFrom(TRttiExpIntegerNodeItem) then
|
||||||
|
APrintProc(' ' + IntToStr(TRttiExpIntegerNodeItem(ATree).ComparedValue))
|
||||||
|
else if ATree.InheritsFrom(TRttiExpAnsiStringNodeItem) then
|
||||||
|
APrintProc(' ' + QuotedStr(TRttiExpAnsiStringNodeItem(ATree).ComparedValue));
|
||||||
|
APrintProc(#10#13);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CompareTree(ATreeA,ATreeB : TRttiExpNodeItem);
|
||||||
|
begin
|
||||||
|
if ( ( ATreeA = nil ) and ( ATreeB <> nil ) ) or
|
||||||
|
( ( ATreeB = nil ) and ( ATreeA <> nil ) )
|
||||||
|
then begin
|
||||||
|
raise Exception.Create('not equal');
|
||||||
|
end;
|
||||||
|
if ( ATreeA <> nil ) then begin
|
||||||
|
if ATreeA.ClassType <> ATreeB.ClassType then
|
||||||
|
raise Exception.Create('Class not equal');
|
||||||
|
if ATreeA.InheritsFrom(TRttiExpNode) then begin
|
||||||
|
if TRttiExpNode(ATreeA).Connector <>
|
||||||
|
TRttiExpNode(ATreeB).Connector
|
||||||
|
then
|
||||||
|
raise Exception.Create('TRttiExpNode not equal');
|
||||||
|
CompareTree(TRttiExpNode(ATreeA).Left,TRttiExpNode(ATreeB).Left);
|
||||||
|
CompareTree(TRttiExpNode(ATreeA).Right,TRttiExpNode(ATreeB).Right);
|
||||||
|
end else if ATreeA.InheritsFrom(TRttiExpConcreteNodeItem) then begin
|
||||||
|
if ATreeA.InheritsFrom(TRttiExpIntegerNodeItem) then begin
|
||||||
|
if TRttiExpIntegerNodeItem(ATreeA).Operation <>
|
||||||
|
TRttiExpIntegerNodeItem(ATreeB).Operation
|
||||||
|
then
|
||||||
|
raise Exception.Create('Operation not equal');
|
||||||
|
|
||||||
|
if TRttiExpIntegerNodeItem(ATreeA).ComparedValue <>
|
||||||
|
TRttiExpIntegerNodeItem(ATreeB).ComparedValue
|
||||||
|
then
|
||||||
|
raise Exception.Create('Value not equal');
|
||||||
|
end else if ATreeA.InheritsFrom(TRttiExpStringNodeItem) then begin
|
||||||
|
if TRttiExpStringNodeItem(ATreeA).Operation <>
|
||||||
|
TRttiExpStringNodeItem(ATreeB).Operation
|
||||||
|
then
|
||||||
|
raise Exception.Create('Operation not equal');
|
||||||
|
|
||||||
|
if ATreeA.InheritsFrom(TRttiExpAnsiStringNodeItem) then begin
|
||||||
|
if TRttiExpAnsiStringNodeItem(ATreeA).ComparedValue <>
|
||||||
|
TRttiExpAnsiStringNodeItem(ATreeB).ComparedValue
|
||||||
|
then
|
||||||
|
raise Exception.Create('Value not equal');
|
||||||
|
end else if ATreeA.InheritsFrom(TRttiExpWideStringNodeItem) then begin
|
||||||
|
if TRttiExpWideStringNodeItem(ATreeA).ComparedValue <>
|
||||||
|
TRttiExpWideStringNodeItem(ATreeB).ComparedValue
|
||||||
|
then
|
||||||
|
raise Exception.Create('Value not equal');
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator_Test.AddContion();
|
||||||
|
const VAL_1 : Integer = 1210; VAL_2 : Integer = 1076; VAL_3 : Integer = 176;
|
||||||
|
VAL_4 : Integer = -176;
|
||||||
|
var
|
||||||
|
x : TRttiFilterCreator;
|
||||||
|
xin : TRttiExpIntegerNodeItem;
|
||||||
|
xn : TRttiExpNode;
|
||||||
|
begin
|
||||||
|
x := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
try
|
||||||
|
x.AddCondition('IntProp',nfoGreater,VAL_1,fcOr);
|
||||||
|
CheckNotNull(x.Root,'Root');
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
CheckNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcOr ), 'Root.Connector');
|
||||||
|
|
||||||
|
x.AddCondition('IntProp',nfoLesser,VAL_2,fcAnd);
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
CheckNotNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcAnd ), 'Root.Connector');
|
||||||
|
CheckIs(x.Root.Right,TRttiExpIntegerNodeItem,'Root.Right');
|
||||||
|
xin := x.Root.Right as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_2,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoLesser ), 'Operation');
|
||||||
|
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_3,fcOr);
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
CheckNotNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcAnd ), 'Root.Connector');
|
||||||
|
CheckIs(x.Root.Right,TRttiExpNode,'Root.Right');
|
||||||
|
xn := x.Root.Right as TRttiExpNode;
|
||||||
|
CheckNotNull(xn.Left,'Root.Right.Left');
|
||||||
|
CheckIs(xn.Left,TRttiExpIntegerNodeItem);
|
||||||
|
xin := xn.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_2,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoLesser ), 'Operation');
|
||||||
|
|
||||||
|
CheckIs(xn.Right,TRttiExpIntegerNodeItem,'xn.Right');
|
||||||
|
xin := xn.Right as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_3,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoEqual ), 'Operation');
|
||||||
|
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_4,fcAnd);
|
||||||
|
PrintTree(x.Root,@Display,2);
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiFilterCreator_Test.BeginEnd_Group();
|
||||||
|
const VAL_1 : Integer = 1210; VAL_2 : Integer = 1076; VAL_3 : Integer = 176;
|
||||||
|
VAL_4 : Integer = -176;
|
||||||
|
var
|
||||||
|
x : TRttiFilterCreator;
|
||||||
|
xin : TRttiExpIntegerNodeItem;
|
||||||
|
xn : TRttiExpNode;
|
||||||
|
begin
|
||||||
|
x := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
try
|
||||||
|
x.AddCondition('IntProp',nfoGreater,VAL_1,fcOr);
|
||||||
|
CheckNotNull(x.Root,'Root');
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
CheckNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcOr ), 'Root.Connector');
|
||||||
|
|
||||||
|
x.BeginGroup(fcOr);
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
|
||||||
|
CheckNotNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcOr ), 'Root.Connector');
|
||||||
|
CheckIs(x.Root.Right,TRttiExpNode,'Root.Right');
|
||||||
|
xn := x.Root.Right as TRttiExpNode;
|
||||||
|
CheckNull(xn.Left);
|
||||||
|
CheckNull(xn.Right);
|
||||||
|
|
||||||
|
x.AddCondition('IntProp',nfoLesser,VAL_2,fcAnd);
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
|
||||||
|
CheckNotNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcOr ), 'Root.Connector');
|
||||||
|
CheckIs(x.Root.Right,TRttiExpNode,'Root.Right');
|
||||||
|
xn := x.Root.Right as TRttiExpNode;
|
||||||
|
CheckNotNull(xn.Left,'xn.Left');
|
||||||
|
CheckNull(xn.Right,'xn.Right');
|
||||||
|
Check( ( xn.Connector = fcAnd ), 'xn.Connector');
|
||||||
|
CheckIs(xn.Left,TRttiExpIntegerNodeItem,'xn.Left');
|
||||||
|
xin := xn.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_2,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoLesser ), 'Operation');
|
||||||
|
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_3,fcAnd);
|
||||||
|
CheckNotNull(x.Root.Left,'Root.Left');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpIntegerNodeItem,'Root.Left');
|
||||||
|
xin := x.Root.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_1,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoGreater ), 'Operation');
|
||||||
|
|
||||||
|
CheckNotNull(x.Root.Right,'Root.Right');
|
||||||
|
Check( ( x.Root.Connector = fcOr ), 'Root.Connector');
|
||||||
|
CheckIs(x.Root.Right,TRttiExpNode,'Root.Right');
|
||||||
|
xn := x.Root.Right as TRttiExpNode;
|
||||||
|
CheckNotNull(xn.Left,'xn.Left');
|
||||||
|
CheckNotNull(xn.Right,'xn.Right');
|
||||||
|
Check( ( xn.Connector = fcAnd ), 'xn.Connector');
|
||||||
|
CheckIs(xn.Left,TRttiExpIntegerNodeItem,'xn.Left');
|
||||||
|
xin := xn.Left as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_2,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoLesser ), 'Operation');
|
||||||
|
|
||||||
|
CheckIs(xn.Right,TRttiExpIntegerNodeItem,'xn.Right');
|
||||||
|
xin := xn.Right as TRttiExpIntegerNodeItem;
|
||||||
|
CheckEquals(VAL_3,xin.ComparedValue);
|
||||||
|
Check( ( xin.Operation = nfoEqual ), 'Operation');
|
||||||
|
|
||||||
|
x.EndGroup();
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_4,fcOr);
|
||||||
|
PrintTree(x.Root,@Display,2);
|
||||||
|
|
||||||
|
Display(#10#13);
|
||||||
|
Display(#10#13);
|
||||||
|
x.Clear(clrFreeObjects);
|
||||||
|
x.BeginGroup(fcAnd);
|
||||||
|
x.AddCondition('IntProp',nfoLesser,VAL_1,fcAnd);
|
||||||
|
x.BeginGroup(fcOr);
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_2,fcAnd);
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_3,fcAnd);
|
||||||
|
x.EndGroup();
|
||||||
|
x.AddCondition('IntProp',nfoEqual,VAL_2,fcOr);
|
||||||
|
x.EndGroup();
|
||||||
|
x.AddCondition('IntProp',nfoGreater,VAL_4,fcAnd);
|
||||||
|
PrintTree(x.Root,@Display,2);
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TRttiExpAnsiStringNodeItem_Test }
|
||||||
|
|
||||||
|
procedure TRttiExpAnsiStringNodeItem_Test.Create_Test();
|
||||||
|
var
|
||||||
|
x : TRttiExpAnsiStringNodeItem;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
try
|
||||||
|
try
|
||||||
|
x := TRttiExpAnsiStringNodeItem.Create(GetPropInfo(TClass_A,'IntProp'),sfoEqualCaseInsensitive,'Azerty');
|
||||||
|
Check(False);
|
||||||
|
except
|
||||||
|
on e : EAssertionFailedError do
|
||||||
|
raise;
|
||||||
|
on e : ERttiFilterException do begin
|
||||||
|
// nothing!
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpAnsiStringNodeItem_Test.Evaluate_EqualCaseSensitive();
|
||||||
|
const VAL_1 = 'AzertY';
|
||||||
|
var
|
||||||
|
x : TRttiExpAnsiStringNodeItem;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpAnsiStringNodeItem.Create(GetPropInfo(t,'StrProp'),sfoEqualCaseSensitive,VAL_1);
|
||||||
|
|
||||||
|
t.StrProp := 'aaadddd';
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.StrProp := UpperCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.StrProp := LowerCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.StrProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True, 'True' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpAnsiStringNodeItem_Test.Evaluate_EqualCaseInsensitive();
|
||||||
|
const VAL_1 = 'AzertY';
|
||||||
|
var
|
||||||
|
x : TRttiExpAnsiStringNodeItem;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpAnsiStringNodeItem.Create(GetPropInfo(t,'StrProp'),sfoEqualCaseInsensitive,VAL_1);
|
||||||
|
|
||||||
|
t.StrProp := 'aaadddd';
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.StrProp := UpperCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
|
||||||
|
t.StrProp := LowerCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
|
||||||
|
t.StrProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True, 'True' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TRttiExpwWideStringNodeItem_Test }
|
||||||
|
|
||||||
|
procedure TRttiExpwWideStringNodeItem_Test.Create_Test();
|
||||||
|
var
|
||||||
|
x : TRttiExpWideStringNodeItem;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
try
|
||||||
|
try
|
||||||
|
x := TRttiExpWideStringNodeItem.Create(GetPropInfo(TClass_A,'IntProp'),sfoEqualCaseInsensitive,'Azerty');
|
||||||
|
Check(False);
|
||||||
|
except
|
||||||
|
on e : EAssertionFailedError do
|
||||||
|
raise;
|
||||||
|
on e : ERttiFilterException do begin
|
||||||
|
// nothing!
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpwWideStringNodeItem_Test.Evaluate_EqualCaseSensitive();
|
||||||
|
const VAL_1 = 'AzertY';
|
||||||
|
var
|
||||||
|
x : TRttiExpWideStringNodeItem;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpWideStringNodeItem.Create(GetPropInfo(t,'WideStrProp'),sfoEqualCaseSensitive,VAL_1);
|
||||||
|
|
||||||
|
t.WideStrProp := 'aaadddd';
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.WideStrProp := UpperCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.WideStrProp := LowerCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.WideStrProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True, 'True' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiExpwWideStringNodeItem_Test.Evaluate_EqualCaseInsensitive();
|
||||||
|
const VAL_1 = 'AzertY';
|
||||||
|
var
|
||||||
|
x : TRttiExpWideStringNodeItem;
|
||||||
|
t : TClass_A;
|
||||||
|
begin
|
||||||
|
x := nil;
|
||||||
|
t := TClass_A.Create();
|
||||||
|
try
|
||||||
|
x := TRttiExpWideStringNodeItem.Create(GetPropInfo(t,'WideStrProp'),sfoEqualCaseInsensitive,VAL_1);
|
||||||
|
|
||||||
|
t.WideStrProp := 'aaadddd';
|
||||||
|
Check( x.Evaluate(t) = False ,'False');
|
||||||
|
|
||||||
|
t.WideStrProp := UpperCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
|
||||||
|
t.WideStrProp := LowerCase(VAL_1);
|
||||||
|
Check( x.Evaluate(t) = True ,'True');
|
||||||
|
|
||||||
|
t.WideStrProp := VAL_1;
|
||||||
|
Check( x.Evaluate(t) = True, 'True' );
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
t.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TRttiParser_Test }
|
||||||
|
|
||||||
|
procedure TRttiParser_Test.SimpleOperators();
|
||||||
|
const VAL_1 = 'inoussa';
|
||||||
|
var
|
||||||
|
x : TRttiFilterCreator;
|
||||||
|
sN : TRttiExpAnsiStringNodeItem;
|
||||||
|
begin
|
||||||
|
x := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
try
|
||||||
|
ParseFilter(Format('StrProp = %s',[QuotedStr(VAL_1)]),x);
|
||||||
|
CheckNotNull(x.Root,'Root <> nil');
|
||||||
|
CheckIs(x.Root.Left,TRttiExpAnsiStringNodeItem);
|
||||||
|
sN := x.Root.Left as TRttiExpAnsiStringNodeItem;
|
||||||
|
CheckEquals('StrProp',sN.PropInfo^.Name);
|
||||||
|
CheckEquals(VAL_1,sN.ComparedValue);
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRttiParser_Test.BeginEnd_Group();
|
||||||
|
const VAL_1 : Integer = 1210; VAL_2 : Integer = 1076; VAL_3 : Integer = 176;
|
||||||
|
VAL_4 : Integer = -176;
|
||||||
|
VAL_S = 'inoussa';
|
||||||
|
var
|
||||||
|
x, y : TRttiFilterCreator;
|
||||||
|
xin : TRttiExpIntegerNodeItem;
|
||||||
|
xn : TRttiExpNode;
|
||||||
|
sfltr : string;
|
||||||
|
begin
|
||||||
|
y := nil;
|
||||||
|
x := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
try
|
||||||
|
sfltr := Format('IntProp > %d or ( IntProp < %d and StrProp = %s ) or IntProp = %d',[VAL_1,VAL_2,QuotedStr(VAL_S),VAL_4]);
|
||||||
|
ParseFilter(sfltr,x);
|
||||||
|
PrintTree(x.Root,@Display,2);
|
||||||
|
y := TRttiFilterCreator.Create(TClass_A);
|
||||||
|
y.AddCondition('IntProp',nfoGreater,VAL_1,fcOr);
|
||||||
|
y.BeginGroup(fcOr);
|
||||||
|
y.AddCondition('IntProp',nfoLesser,VAL_2,fcAnd);
|
||||||
|
y.AddCondition('StrProp',sfoEqualCaseInsensitive,VAL_S,fcAnd);
|
||||||
|
y.EndGroup();
|
||||||
|
y.AddCondition('IntProp',nfoEqual,VAL_4,fcOr);
|
||||||
|
|
||||||
|
CompareTree(x.Root,y.Root);
|
||||||
|
finally
|
||||||
|
x.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Initialization
|
||||||
|
RegisterTests(
|
||||||
|
[ TRttiExpIntegerNodeItem_Test,
|
||||||
|
TRttiExpAnsiStringNodeItem_Test,
|
||||||
|
TRttiExpwWideStringNodeItem_Test,
|
||||||
|
TRttiExpNode_Test,TRttiFilterCreator_Test,
|
||||||
|
|
||||||
|
TRttiParser_Test
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
end.
|
Reference in New Issue
Block a user