From: <na...@us...> - 2009-08-14 19:28:51
|
Revision: 826 http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=826&view=rev Author: nandod Date: 2009-08-14 19:28:40 +0000 (Fri, 14 Aug 2009) Log Message: ----------- * XML I/O formatting and indentation rewritted. The former implementation broke a few tests. * Changed a few calls to WriteStr to WriteUTF8Str in order to avoid warnings and better support unicode identifiers; added TInstantWriter.WriteUTF8Str for D<2009. Modified Paths: -------------- trunk/Source/Core/InstantClasses.pas trunk/Source/Core/InstantConsts.pas trunk/Source/Core/InstantMetadata.pas trunk/Source/Core/InstantPersistence.pas trunk/Tests/TestIO.mdx trunk/Tests/TestIO.mdxt trunk/Tests/TestIO_D2009.mdx trunk/Tests/TestIO_D2009.mdxt trunk/Tests/TestInstantClasses.pas trunk/Tests/TestMinimalModel.pas Modified: trunk/Source/Core/InstantClasses.pas =================================================================== --- trunk/Source/Core/InstantClasses.pas 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Source/Core/InstantClasses.pas 2009-08-14 19:28:40 UTC (rev 826) @@ -200,6 +200,7 @@ procedure WriteProperties(AObject: TPersistent); {$IFNDEF UNICODE} procedure WriteString(const Value: string); + procedure WriteUTF8Str(const Value: string); inline; {$ENDIF} procedure WriteValue(Value: TValueType); property Stream: TStream read FStream; @@ -262,27 +263,29 @@ end; {$ENDIF} + TInstantXMLToken = (xtNone, xtStartTag, xtEndTag, xtAnyTag, xtData); + TInstantXMLProducer = class(TObject) private FStream: TStream; FTagStack: TStringList; FWriter: TAbstractWriter; - FCurrentIndentationSize: Integer; + FIndentationSize: Integer; + FLastToken: TInstantXMLToken; function GetCurrentTag: string; function GetEof: Boolean; function GetPosition: Integer; function GetTagStack: TStringList; function GetWriter: TAbstractWriter; procedure SetPosition(Value: Integer); + protected + function IsPrettyXMLEnabled: Boolean; procedure WriteString(const S: string); - protected property TagStack: TStringList read GetTagStack; property Writer: TAbstractWriter read GetWriter; - public - procedure Indent; - procedure Unindent; procedure WriteIndentation; procedure WriteLineBreak; + public constructor Create(Stream: TStream); destructor Destroy; override; procedure WriteEscapedData(const Data: string); @@ -295,8 +298,6 @@ property Stream: TStream read FStream; end; - TInstantXMLToken = (xtTag, xtData); - TInstantXMLProcessor = class(TObject) private FReader: TAbstractReader; @@ -310,6 +311,7 @@ protected procedure CheckToken(AToken: TInstantXMLToken); function PeekChar: Char; + function PeekCharSkippingBlanks: Char; function ReadChar: Char; procedure SkipBlanks; property Reader: TAbstractReader read GetReader; @@ -1073,7 +1075,7 @@ procedure TInstantWriter.WriteObject(AObject: TPersistent); begin - WriteStr(AObject.ClassName); + WriteUTF8Str(AObject.ClassName); if AObject is TInstantStreamable then TInstantStreamable(AObject).WriteObject(Self) else if AObject is TInstantCollection then @@ -1093,6 +1095,11 @@ WriteListEnd; end; +procedure TInstantWriter.WriteValue(Value: TValueType); +begin + inherited WriteValue(Value); +end; + {$IFNDEF UNICODE} procedure TInstantWriter.WriteString(const Value: string); var @@ -1110,12 +1117,22 @@ end; Write(Pointer(Value)^, L); end; -{$ENDIF} -procedure TInstantWriter.WriteValue(Value: TValueType); +procedure TInstantWriter.WriteUTF8Str(const Value: string); +var + U: UTF8String; + L: Integer; begin - inherited; + // Note: in versions of Delphi that don't have AnsiToUtf8, just use: + // WriteStr(Value); + // as the body for this function. + U := AnsiToUtf8(Value); + L := Length(U); + if L > 255 then L := 255; + Write(L, SizeOf(Byte)); + Write(U[1], L); end; +{$ENDIF} { TInstantStream } @@ -1348,26 +1365,17 @@ { TInstantXMLProducer } -procedure TInstantXMLProducer.Indent; +function TInstantXMLProducer.IsPrettyXMLEnabled: Boolean; begin - Inc(FCurrentIndentationSize, InstantXMLIndentationSize); + Result := FIndentationSize > 0; end; -procedure TInstantXMLProducer.Unindent; -begin - Dec(FCurrentIndentationSize, InstantXMLIndentationSize); - if InstantXMLIndentationSize >= 0 then - begin - WriteLineBreak; - WriteIndentation; - end; -end; - - constructor TInstantXMLProducer.Create(Stream: TStream); begin inherited Create; FStream := Stream; + FLastToken := xtNone; + FIndentationSize := InstantXMLIndentationSize; end; destructor TInstantXMLProducer.Destroy; @@ -1415,15 +1423,39 @@ procedure TInstantXMLProducer.WriteData(const Data: string); begin WriteString(Data); + FLastToken := xtData; end; +procedure TInstantXMLProducer.WriteStartTag(const Tag: string); +begin + if IsPrettyXMLEnabled then + begin + if FLastToken = xtStartTag then + WriteLineBreak; + WriteIndentation; + end; + WriteString(InstantBuildStartTag(Tag)); + TagStack.Add(Tag); + FLastToken := xtStartTag; +end; + procedure TInstantXMLProducer.WriteEndTag; var - Index: Integer; + LTagName: string; begin - Index := TagStack.Count - 1; - WriteString(InstantBuildEndTag(TagStack[Index])); - TagStack.Delete(Index); + LTagName := TagStack[TagStack.Count - 1]; + TagStack.Delete(TagStack.Count - 1); + if IsPrettyXMLEnabled then + begin + if FLastToken = xtStartTag then + WriteLineBreak; + if FLastToken in [xtStartTag, xtEndTag] then + WriteIndentation; + end; + WriteString(InstantBuildEndTag(LTagName)); + if IsPrettyXMLEnabled then + WriteLineBreak; + FLastToken := xtEndTag; end; procedure TInstantXMLProducer.WriteEscapedData(const Data: string); @@ -1453,28 +1485,13 @@ end; Esc := Format(EscStr, [Esc]); WriteString(Esc); - end else//MC if C in [#32..#126] then + end + else WriteString(C); -(* MC - else begin - Esc := Format(EscStr, [Format('#%d', [Ord(C)])]); - WriteString(Esc); - end; -*) end; + FLastToken := xtData; end; -procedure TInstantXMLProducer.WriteStartTag(const Tag: string); -begin - if InstantXMLIndentationSize >= 0 then - begin - WriteLineBreak; - WriteIndentation; - end; - WriteString(InstantBuildStartTag(Tag)); - TagStack.Add(Tag); -end; - procedure TInstantXMLProducer.WriteLineBreak; begin WriteString(sLineBreak); @@ -1482,8 +1499,7 @@ procedure TInstantXMLProducer.WriteIndentation; begin - if FCurrentIndentationSize > 0 then - WriteString(DupeString(' ' , FCurrentIndentationSize)); + WriteString(DupeString(' ' , TagStack.Count * FIndentationSize)); end; procedure TInstantXMLProducer.WriteString(const S: string); @@ -1534,8 +1550,8 @@ function TInstantXMLProcessor.GetToken: TInstantXMLToken; begin - if PeekChar = InstantTagStart then - Result := xtTag + if PeekCharSkippingBlanks = InstantTagStart then + Result := xtAnyTag else Result := xtData; end; @@ -1552,6 +1568,19 @@ end; end; +function TInstantXMLProcessor.PeekCharSkippingBlanks: Char; +var + Pos: Integer; +begin + Pos := Position; + try + SkipBlanks; + Result := ReadChar; + finally + Position := Pos; + end; +end; + function TInstantXMLProcessor.PeekTag: string; var Pos: Integer; @@ -1645,7 +1674,7 @@ Pos := Position; try SkipBlanks; - CheckToken(xtTag); + CheckToken(xtAnyTag); except Position := Pos; raise; @@ -1687,7 +1716,7 @@ EndTag := InstantBuildEndTag(TagName); Level := 1; repeat - if Token = xtTag then + if Token = xtAnyTag then begin TagName := ReadTag; if SameText(TagName, StartTag) then @@ -1789,7 +1818,6 @@ Result := Reader.Stream; end; - function TInstantBinaryToTextConverter.GetOutput: TStream; begin Result := Producer.Stream; @@ -1800,7 +1828,6 @@ PushObjectClass(FindClass(Reader.ReadStr)); try Producer.WriteStartTag(ObjectClassName); - Producer.Indent; if ObjectClass.InheritsFrom(TInstantStreamable) then TInstantStreamableClass(ObjectClass).ConvertToText(Self) else if ObjectClass.InheritsFrom(TInstantCollection) then @@ -1808,7 +1835,6 @@ else if ObjectClass.InheritsFrom(TInstantCollectionItem) then TInstantCollectionItemClass(ObjectClass).ConvertToText(Self); Reader.ReadListEnd; - Producer.Unindent; Producer.WriteEndTag; finally PopObjectClass; @@ -1878,7 +1904,6 @@ end; begin - Producer.Indent; while not Reader.EndOfList do begin Producer.WriteStartTag(Reader.ReadStr); @@ -1886,7 +1911,6 @@ Producer.WriteEndTag; end; Reader.ReadListEnd; - Producer.Unindent; end; { TInstantToTextToBinaryConverter } @@ -1934,7 +1958,7 @@ begin PropName := Processor.ReadTagName; ValueStr := Processor.ReadData; - Writer.WriteStr(PropName); + Writer.WriteUTF8Str(PropName); case GetTypeInfo(PropInfo)^.Kind of //PropInfo^.PropType^^.Kind of tkInteger: Writer.WriteInteger(StrToInt(ValueStr)); @@ -1966,7 +1990,7 @@ try InstantStrToList(ValueStr, S, [',']); for I := 0 to Pred(S.Count) do - Writer.WriteStr(S[I]); + Writer.WriteUTF8Str(S[I]); finally S.Free; end; @@ -2012,7 +2036,7 @@ begin PushObjectClass(FindClass(Processor.ReadTagName)); try - Writer.WriteStr(ObjectClassName); + Writer.WriteUTF8Str(ObjectClassName); if ObjectClass.InheritsFrom(TInstantStreamable) then TInstantStreamableClass(ObjectClass).ConvertToBinary(Self) else if ObjectClass.InheritsFrom(TInstantCollection) then Modified: trunk/Source/Core/InstantConsts.pas =================================================================== --- trunk/Source/Core/InstantConsts.pas 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Source/Core/InstantConsts.pas 2009-08-14 19:28:40 UTC (rev 826) @@ -79,7 +79,7 @@ {$ENDIF} var - InstantXMLIndentationSize: Integer = 2; + InstantXMLIndentationSize: Byte = 2; resourcestring SAccessError = 'Cannot access attribute %s(''%s'') as type: %s'; Modified: trunk/Source/Core/InstantMetadata.pas =================================================================== --- trunk/Source/Core/InstantMetadata.pas 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Source/Core/InstantMetadata.pas 2009-08-14 19:28:40 UTC (rev 826) @@ -623,8 +623,8 @@ with Converter do begin ConvertProperties(InstantBuildStartTag(InstantAttributeMetadatasTagName)); - Processor.ReadTag; - if (Processor.Token = xtTag) and not SameText(Processor.PeekTag, + Assert(Processor.ReadTagName = InstantAttributeMetadatasTagName); + if (Processor.Token = xtAnyTag) and not SameText(Processor.PeekTag, InstantBuildEndTag(InstantAttributeMetadatasTagName)) then Convert; Processor.ReadTag; @@ -1942,28 +1942,5 @@ inherited Items[Index] := Value; end; - - - - - - - - - - - - - - - - - - - - - - - - end. + Modified: trunk/Source/Core/InstantPersistence.pas =================================================================== --- trunk/Source/Core/InstantPersistence.pas 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Source/Core/InstantPersistence.pas 2009-08-14 19:28:40 UTC (rev 826) @@ -2265,8 +2265,8 @@ begin with Writer do begin - WriteStr(ObjectClassName); - WriteStr(ObjectId); + WriteUTF8Str(ObjectClassName); + WriteUTF8Str(ObjectId); WriteListEnd; WriteListEnd; end; @@ -2277,8 +2277,8 @@ inherited; Writer.WriteStr(''); Writer.WriteStr(''); - Writer.WriteStr(ObjectClassName); - Writer.WriteStr(ObjectId); + Writer.WriteUTF8Str(ObjectClassName); + Writer.WriteUTF8Str(ObjectId); end; { TInstantAttribute } @@ -2550,7 +2550,7 @@ procedure TInstantAttribute.WriteName(Writer: TInstantWriter); begin - Writer.WriteStr(Name); + Writer.WriteUTF8Str(Name); end; { TInstantSimple } @@ -5522,7 +5522,7 @@ with Converter do begin AttributeName := Processor.ReadTagName; - Writer.WriteStr(AttributeName); + Writer.WriteUTF8Str(AttributeName); case AttributeMetadata.AttributeType of atInteger: Writer.WriteInteger(StrToInt(Processor.ReadData)); @@ -5599,11 +5599,11 @@ if Processor.PeekTagName = InstantIdFieldName then begin Processor.ReadTag; - if (Processor.Token = xtTag) and SameText(Processor.ReadTagName, + if (Processor.Token = xtAnyTag) and SameText(Processor.ReadTagName, InstantBuildEndTag(InstantIdFieldName)) then Writer.WriteStr('') else begin - Writer.WriteStr(Processor.ReadData); + Writer.WriteUTF8Str(Processor.ReadData); Processor.ReadTag; end; end else @@ -5642,9 +5642,7 @@ vaIdent: begin Reader.ReadIdent; - Producer.Indent; Convert; - Producer.Unindent; end; vaFalse: begin @@ -5669,11 +5667,9 @@ vaCollection: begin Reader.ReadValue; - Producer.Indent; - while not Reader.EndOfList do - Convert; - Producer.Unindent; - Reader.ReadListEnd; + while not Reader.EndOfList do + Convert; + Reader.ReadListEnd; end; else raise EInstantStreamError.CreateFmt(SInvalidValueType, @@ -6831,7 +6827,7 @@ procedure TInstantObject.WriteObject(Writer: TInstantWriter); begin - Writer.WriteStr(Id); + Writer.WriteUTF8Str(Id); WriteAttributes(Writer); end; Modified: trunk/Tests/TestIO.mdx =================================================================== --- trunk/Tests/TestIO.mdx 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Tests/TestIO.mdx 2009-08-14 19:28:40 UTC (rev 826) @@ -1 +1,461 @@ -<TInstantClassMetadatas><TInstantClassMetadata><Name>TAddress</Name><Persistence>peEmbedded</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>City</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Country</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCountry</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>State</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>4</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Street</Name><AttributeType>atMemo</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Zip</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>10</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TCountry</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TPhone</Name><Persistence>peEmbedded</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Number</Name><AttributeType>atString</AttributeType><EditMask>(000) 000-0000;0;_</EditMask><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TEmail</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Address</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>100</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TCategory</Name><Persistence>peStored</Persistence><StorageName>Categories</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TContact</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Address</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Category</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCategory</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>City</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>50</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Phones</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPhone</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Projects</Name><AttributeType>atReferences</AttributeType><ExternalStorageName>Contact_Projects</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>ExternalAddress</Name><AttributeType>atPart</AttributeType><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>ExternalPhones</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Contact_ExternalPhones</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalPhone</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TContactFilter</Name><ParentName>TContact</ParentName><Persistence>peEmbedded</Persistence><AttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TPerson</Name><ParentName>TContact</ParentName><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>BirthDate</Name><AttributeType>atDateTime</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Emails</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TEmail</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Employer</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCompany</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Picture</Name><AttributeType>atBlob</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Salary</Name><AttributeType>atCurrency</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ValidCharsString>,.0..9\x82\xAC\xE2</ValidCharsString></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Employed</Name><AttributeType>atBoolean</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>AL_hours</Name><AttributeType>atFloat</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>EmploymentDate</Name><AttributeType>atDate</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>BirthTime</Name><AttributeType>atTime</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TCompany</Name><ParentName>TContact</ParentName><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Employees</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPerson</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>NoOfBranches</Name><AttributeType>atInteger</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Subsidiaries</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCompany</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProject</Name><Persistence>peStored</Persistence><StorageName>Projects</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>SubProjects</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Project_SubProjects</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Addresses</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Project_Addresses</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Manager</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TContact</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Participants</Name><AttributeType>atReferences</AttributeType><ExternalStorageName>Project_Participants</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TContact</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Items</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectItems</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TExternalAddress</Name><Persistence>peStored</Persistence><StorageName>ExternalAddresses</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Category</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCategory</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Site_Contact</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPerson</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TExternalPhone</Name><Persistence>peStored</Persistence><StorageName>ExternalPhones</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Number</Name><AttributeType>atString</AttributeType><EditMask>(000) 000-0000;0;_</EditMask><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectBox</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Project</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>RelatedProjectBoxes</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectBox</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectItem</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Description</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>50</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Country</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCountry</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectItems</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Items</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectItem</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata></TInstantClassMetadatas> \ No newline at end of file +<TInstantClassMetadatas> + <TInstantClassMetadata> + <Name>TAddress</Name> + <Persistence>peEmbedded</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>City</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>TRUE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Country</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCountry</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>State</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>4</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Street</Name> + <AttributeType>atMemo</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Zip</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>10</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TCountry</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TPhone</Name> + <Persistence>peEmbedded</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>20</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Number</Name> + <AttributeType>atString</AttributeType> + <EditMask>(000) 000-0000;0;_</EditMask> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>20</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TEmail</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Address</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>100</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TCategory</Name> + <Persistence>peStored</Persistence> + <StorageName>Categories</StorageName> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TContact</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Address</Name> + <AttributeType>atPart</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TAddress</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Category</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCategory</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>City</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>TRUE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>TRUE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>50</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Phones</Name> + <AttributeType>atParts</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TPhone</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Projects</Name> + <AttributeType>atReferences</AttributeType> + <ExternalStorageName>Contact_Projects</ExternalStorageName> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProject</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>ExternalAddress</Name> + <AttributeType>atPart</AttributeType> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TExternalAddress</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>ExternalPhones</Name> + <AttributeType>atParts</AttributeType> + <ExternalStorageName>Contact_ExternalPhones</ExternalStorageName> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TExternalPhone</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TContactFilter</Name> + <ParentName>TContact</ParentName> + <Persistence>peEmbedded</Persistence> + <AttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TPerson</Name> + <ParentName>TContact</ParentName> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>BirthDate</Name> + <AttributeType>atDateTime</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Emails</Name> + <AttributeType>atParts</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TEmail</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Employer</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCompany</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Picture</Name> + <AttributeType>atBlob</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Salary</Name> + <AttributeType>atCurrency</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ValidCharsString>,.0..9\x82\xAC\xE2</ValidCharsString> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Employed</Name> + <AttributeType>atBoolean</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>AL_hours</Name> + <AttributeType>atFloat</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>EmploymentDate</Name> + <AttributeType>atDate</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>BirthTime</Name> + <AttributeType>atTime</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TCompany</Name> + <ParentName>TContact</ParentName> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Employees</Name> + <AttributeType>atReferences</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TPerson</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>NoOfBranches</Name> + <AttributeType>atInteger</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Subsidiaries</Name> + <AttributeType>atReferences</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCompany</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TProject</Name> + <Persistence>peStored</Persistence> + <StorageName>Projects</StorageName> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>SubProjects</Name> + <AttributeType>atParts</AttributeType> + <ExternalStorageName>Project_SubProjects</ExternalStorageName> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProject</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Addresses</Name> + <AttributeType>atParts</AttributeType> + <ExternalStorageName>Project_Addresses</ExternalStorageName> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TExternalAddress</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Manager</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TContact</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Participants</Name> + <AttributeType>atReferences</AttributeType> + <ExternalStorageName>Project_Participants</ExternalStorageName> + <StorageKind>skExternal</StorageKind> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TContact</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Items</Name> + <AttributeType>atPart</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProjectItems</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TExternalAddress</Name> + <Persistence>peStored</Persistence> + <StorageName>ExternalAddresses</StorageName> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Category</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCategory</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Site_Contact</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TPerson</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TExternalPhone</Name> + <Persistence>peStored</Persistence> + <StorageName>ExternalPhones</StorageName> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>20</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Number</Name> + <AttributeType>atString</AttributeType> + <EditMask>(000) 000-0000;0;_</EditMask> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>20</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TProjectBox</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Project</Name> + <AttributeType>atPart</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProject</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>RelatedProjectBoxes</Name> + <AttributeType>atReferences</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProjectBox</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TProjectItem</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Description</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>50</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Country</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCountry</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TProjectItems</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Items</Name> + <AttributeType>atParts</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TProjectItem</ObjectClassName> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> +</TInstantClassMetadatas> Modified: trunk/Tests/TestIO.mdxt =================================================================== --- trunk/Tests/TestIO.mdxt 2009-08-14 09:20:30 UTC (rev 825) +++ trunk/Tests/TestIO.mdxt 2009-08-14 19:28:40 UTC (rev 826) @@ -1 +1,445 @@ -<TInstantClassMetadatas><TInstantClassMetadata><Name>TAddress</Name><Persistence>peEmbedded</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>City</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Country</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCountry</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>State</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>4</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Street</Name><AttributeType>atMemo</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Zip</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>10</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TCountry</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TPhone</Name><Persistence>peEmbedded</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Number</Name><AttributeType>atString</AttributeType><EditMask>(000) 000-0000;0;_</EditMask><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TEmail</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Address</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>100</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TContact</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Address</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Category</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCategory</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>City</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>TRUE</IsIndexed><IsRequired>FALSE</IsRequired><Size>50</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Phones</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPhone</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Projects</Name><AttributeType>atReferences</AttributeType><ExternalStorageName>Contact_Projects</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>ExternalAddress</Name><AttributeType>atPart</AttributeType><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>ExternalPhones</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Contact_ExternalPhones</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalPhone</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TContactFilter</Name><ParentName>TContact</ParentName><Persistence>peEmbedded</Persistence><AttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TPerson</Name><ParentName>TContact</ParentName><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>BirthDate</Name><AttributeType>atDateTime</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Emails</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TEmail</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Employer</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCompany</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Picture</Name><AttributeType>atBlob</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Salary</Name><AttributeType>atCurrency</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ValidCharsString>,.0..9\x82\xAC\xE2</ValidCharsString></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Employed</Name><AttributeType>atBoolean</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>AL_hours</Name><AttributeType>atFloat</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>EmploymentDate</Name><AttributeType>atDate</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>BirthTime</Name><AttributeType>atTime</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TCompany</Name><ParentName>TContact</ParentName><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Employees</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPerson</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>NoOfBranches</Name><AttributeType>atInteger</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Subsidiaries</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCompany</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProject</Name><Persistence>peStored</Persistence><StorageName>Projects</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>SubProjects</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Project_SubProjects</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Addresses</Name><AttributeType>atParts</AttributeType><ExternalStorageName>Project_Addresses</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TExternalAddress</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Manager</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TContact</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Participants</Name><AttributeType>atReferences</AttributeType><ExternalStorageName>Project_Participants</ExternalStorageName><StorageKind>skExternal</StorageKind><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TContact</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Items</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectItems</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TExternalAddress</Name><Persistence>peStored</Persistence><StorageName>ExternalAddresses</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>30</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Category</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCategory</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Site_Contact</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TPerson</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TExternalPhone</Name><Persistence>peStored</Persistence><StorageName>ExternalPhones</StorageName><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Name</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Number</Name><AttributeType>atString</AttributeType><EditMask>(000) 000-0000;0;_</EditMask><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>20</Size></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectBox</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Project</Name><AttributeType>atPart</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProject</ObjectClassName></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>RelatedProjectBoxes</Name><AttributeType>atReferences</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectBox</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectItem</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Description</Name><AttributeType>atString</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><Size>50</Size></TInstantAttributeMetadata><TInstantAttributeMetadata><Name>Country</Name><AttributeType>atReference</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TCountry</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata><TInstantClassMetadata><Name>TProjectItems</Name><Persistence>peStored</Persistence><AttributeMetadatas><TInstantAttributeMetadatas><TInstantAttributeMetadata><Name>Items</Name><AttributeType>atParts</AttributeType><IsIndexed>FALSE</IsIndexed><IsRequired>FALSE</IsRequired><ObjectClassName>TProjectItem</ObjectClassName></TInstantAttributeMetadata></TInstantAttributeMetadatas></AttributeMetadatas></TInstantClassMetadata></TInstantClassMetadatas> \ No newline at end of file +<TInstantClassMetadatas> + <TInstantClassMetadata> + <Name>TAddress</Name> + <Persistence>peEmbedded</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>City</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>TRUE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Country</Name> + <AttributeType>atReference</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <ObjectClassName>TCountry</ObjectClassName> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>State</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>4</Size> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Street</Name> + <AttributeType>atMemo</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + </TInstantAttributeMetadata> + <TInstantAttributeMetadata> + <Name>Zip</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>10</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TCountry</Name> + <Persistence>peStored</Persistence> + <AttributeMetadatas> + <TInstantAttributeMetadatas> + <TInstantAttributeMetadata> + <Name>Name</Name> + <AttributeType>atString</AttributeType> + <IsIndexed>FALSE</IsIndexed> + <IsRequired>FALSE</IsRequired> + <Size>30</Size> + </TInstantAttributeMetadata> + </TInstantAttributeMetadatas> + </AttributeMetadatas> + </TInstantClassMetadata> + <TInstantClassMetadata> + <Name>TPhone</Name> + <Persistence>peEmbedded</Persistence> + <AttributeMetadatas> + <TInstantAttributeMeta... [truncated message content] |