123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946 |
- {
- This file is part of the Free Pascal Utilities
- Copyright (c) 1999-2000 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit fpxmlrep;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, dom, fprepos;
- Type
- { TFPXMLHandler }
- TFPXMLHandler = Class(TObject)
- private
- FIgnoreUnknownNodes: Boolean;
- Protected
- Function AddTextNode(Const NodeName,NodeContent : String; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement;
- Function GetNextElement(Start : TDomNode) : TDomElement;
- Function FindNextElement(Start : TDomNode; NodeName : String) : TDomElement;
- Function NodeText(E : TDomElement) : String;
- procedure CheckNodeType(E : TDomElement; NodeName : String);
- public
- property IgnoreUnknownNodes : Boolean Read FIgnoreUnknownNodes Write FIgnoreUnknownNodes;
- end;
- { TFPXMLRepositoryHandler }
- TFPXMLRepositoryHandler = Class(TFPXMLHandler)
- private
- // The DO versions do not check the node type. They do the actual work
- // for the public XMLtoXYZ versions..
- Function DoXMLToCPUs(N : TDomElement) : TCPUs; virtual;
- Function DoXMLToOSes(N : TDomElement) : TOSes; virtual;
- Procedure DoXMLToVersion(E : TDomElement; V : TFPVersion); virtual;
- Procedure DoXMLToDependency(E : TDomElement; D : TFPDependency); virtual;
- Procedure DoXMLToDependencies(E : TDomElement; DS : TFPDependencies); virtual;
- Procedure DoXMLToPackage(E : TDomElement; P : TFPPackage); virtual;
- Procedure DoXMLToPackages(E : TDomElement; PS: TFPPackages); virtual;
- Procedure DoXMLToRepository(E : TDomElement; R: TFPRepository); virtual;
- Public
- // Saving
- Function VersionToXML(V : TFPVersion; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- function OSesToXML(OSes:TOSes; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement; virtual;
- function CPUsToXML(CPUs:TCPUs; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement; virtual;
- Function DependencyToXML(D : TFPDependency; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- Function DependenciesToXML(DS : TFPDependencies; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- Function PackageToXML(P : TFPPackage; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- Function PackagesToXML(PS: TFPPackages; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- Function RepositoryToXML(R : TFPRepository; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
- Procedure SaveToXml(D : TFPDependency; Stream : TStream);
- Procedure SaveToXml(DS : TFPDependencies; Stream : TStream);
- Procedure SaveToXml(P : TFPPackage; Stream : TStream);
- Procedure SaveToXml(PS : TFPPackages; Stream : TStream);
- Procedure SaveToXml(R : TFPRepository; Stream : TStream);
- Procedure SaveToXml(D : TFPDependency; const FileName: String);
- Procedure SaveToXml(DS : TFPDependencies; const FileName: String);
- Procedure SaveToXml(P : TFPPackage; const FileName: String);
- Procedure SaveToXml(PS : TFPPackages; const FileName: String);
- Procedure SaveToXml(R : TFPRepository; const FileName: String);
- // Loading
- Procedure XMLToVersion(E : TDomElement; V : TFPVersion);
- Procedure XMLToDependency(E : TDomElement; D : TFPDependency);
- Procedure XMLToDependencies(E : TDomElement; DS : TFPDependencies);
- Procedure XMLToPackage(E : TDomElement; P : TFPPackage);
- Procedure XMLToPackages(E : TDomElement; PS: TFPPackages);
- Procedure XMLToRepository(E : TDomElement; R: TFPRepository);
- Procedure LoadFromXml(D : TFPDependency; Stream : TStream);
- Procedure LoadFromXml(DS : TFPDependencies; Stream : TStream);
- Procedure LoadFromXml(P : TFPPackage; Stream : TStream);
- Procedure LoadFromXml(PS : TFPPackages; Stream : TStream);
- Procedure LoadFromXml(R : TFPRepository; Stream : TStream);
- Procedure LoadFromXml(D : TFPDependency; const FileName: String);
- Procedure LoadFromXml(DS : TFPDependencies; const FileName: String);
- Procedure LoadFromXml(P : TFPPackage; const FileName: String);
- Procedure LoadFromXml(PS : TFPPackages; const FileName: String);
- Procedure LoadFromXml(R : TFPRepository; const FileName: String);
- end;
- { TFPXMLMirrorHandler }
- TFPXMLMirrorHandler = Class(TFPXMLHandler)
- private
- procedure DoXMLToMirror(E: TDomElement; P: TFPMirror);
- procedure DoXMLToMirrors(E: TDomElement; PS: TFPMirrors);
- Public
- // Loading
- Procedure XMLToMirrors(E : TDomElement; PS: TFPMirrors);
- Procedure LoadFromXml(PS : TFPMirrors; Stream : TStream);
- Procedure LoadFromXml(PS : TFPMirrors; const FileName : String);
- end;
- EXMLPackage = Class(EPackage);
- implementation
- uses xmlwrite,xmlread,typinfo;
- Const
- SNodeRepository = 'repository';
- SNodePackages = 'packages';
- SNodePackage = 'package';
- SNodeAuthor = 'author';
- SNodeLicense = 'license';
- SNodeExternalURL = 'externalurl';
- SNodeFileName = 'filename';
- SNodeEmail = 'email';
- SNodeVersion = 'version';
- SNodeDescription = 'description';
- SNodeDependencies = 'dependencies';
- SNodeDependency = 'dependency';
- SNodeOSes = 'oses';
- SNodeCPUS = 'cpus';
- SNodeOS = 'os';
- SNodeCPU = 'cpu';
- // Mirrors
- SNodeURL = 'url';
- SNodeContact = 'contact';
- SNodeWeight = 'weight';
- SNodeMirror = 'mirror';
- SNodeMirrors = 'mirrors';
- SAttrName = 'name';
- SAttrPackageName = 'packagename';
- SAttrMinVersion = 'minversion';
- SAttrMajor = 'major';
- SAttrMinor = 'minor';
- SAttrMicro = 'micro';
- SAttrBuild = 'build';
- ResourceString
- SErrInvalidXMLDocument = 'Wrong root tag in XML document. Expected "%s", got "%s".';
- SErrUnknownNode = 'Unknown XML tag ("%s") encountered while reading %s "%s".';
- {****************************************************************************
- TFPXMLHandler
- ****************************************************************************}
- function TFPXMLHandler.AddTextNode(Const NodeName,NodeContent : String; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement;
- begin
- Result:=XML.CreateElement(NodeName);
- Try
- Result.AppendChild(XML.CreateTextNode(NodeContent));
- If Assigned(Parent) then
- Parent.AppendChild(Result);
- Except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- function TFPXMLHandler.GetNextElement(Start: TDomNode): TDomElement;
- begin
- Result:=Nil;
- While (Start<>Nil) and (Start.NodeType<>ELEMENT_NODE) do
- Start:=Start.NextSibling;
- If (Start<>Nil) then
- Result:=Start as TDomElement;
- end;
- function TFPXMLHandler.FindNextElement(Start: TDomNode; NodeName: String): TDomElement;
- begin
- Result:=GetNextElement(Start);
- While (Result<>Nil) and (Result.NodeName<>NodeName) do
- Result:=GetNextElement(Result.NextSibling);
- end;
- procedure TFPXMLHandler.CheckNodeType(E : TDomElement; NodeName : String);
- begin
- If (E.NodeName<>NodeName) then
- Raise EXMLPackage.CreateFmt(SErrInvalidXMLDocument,[NodeName,E.NodeName]);
- end;
- Function TFPXMLHandler.NodeText(E : TDomElement) : String;
- Var
- N : TDomNode;
- begin
- N:=E.FirstChild;
- While (N<>Nil) and (N.NodeType<>TEXT_NODE) do
- N:=N.NextSibling;
- If (N<>Nil) then
- Result:=N.NodeValue;
- end;
- {****************************************************************************
- TFPXMLRepositoryHandler
- ****************************************************************************}
- function TFPXMLRepositoryHandler.VersionToXML(V : TFPVersion; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- begin
- Result:=XML.CreateElement(SNodeVersion);
- try
- If Not Assigned(Parent) then
- Parent:=XML;
- Parent.AppendChild(Result);
- Result[SAttrMajor]:=IntToStr(V.Major);
- Result[SAttrMinor]:=IntToStr(V.Minor);
- Result[SAttrMicro]:=IntToStr(V.Micro);
- Result[SAttrBuild]:=IntToStr(V.Build);
- except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- function TFPXMLRepositoryHandler.DependencyToXML(D: TFPDependency; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- E : TDOMElement;
- begin
- Result:=XML.CreateElement(SNodeDependency);
- Try
- If Not Assigned(Parent) then
- Parent:=XML;
- Parent.AppendChild(Result);
- E:=XML.CreateElement(SNodePackage);
- E[SAttrPackageName]:=D.PackageName;
- Result.AppendChild(E);
- if not D.MinVersion.Empty then
- VersionToXML(D.MinVersion,XML,Result);
- if D.OSes<>AllOSes then
- OSesToXML(D.OSes,XML,Result);
- if D.CPUs<>AllCPUs then
- CPUsToXML(D.CPUs,XML,Result);
- Except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- function TFPXMLRepositoryHandler.DependenciesToXML(DS: TFPDependencies; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- I : Integer;
- begin
- If (DS.Count>0) then
- begin
- Result:=XML.CreateElement(SNodeDependencies);
- Try
- If Not Assigned(Parent) then
- Parent:=XML;
- Parent.AppendChild(Result);
- For I:=0 to DS.Count-1 do
- DependencyToXML(DS[i],XML,Result);
- except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- end;
- function TFPXMLRepositoryHandler.OSesToXML(OSes:TOSes; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- ES : TDomElement;
- O : TOS;
- begin
- Result:=XML.CreateElement(SNodeOSes);
- Parent.AppendChild(Result);
- For O:=Low(TOS) to High(TOS) do
- If (O in OSes) then
- begin
- ES:=XML.CreateElement(SNodeOS);
- ES[SAttrName]:=GetEnumName(TypeInfo(TOS),Ord(O));
- Result.AppendChild(ES);
- end;
- end;
- function TFPXMLRepositoryHandler.CPUsToXML(CPUs:TCPUs; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- ES : TDomElement;
- C : TCPU;
- begin
- Result:=XML.CreateElement(SNodeCPUs);
- Parent.AppendChild(Result);
- For C:=Low(TCPU) to High(TCPU) do
- If (C in CPUs) then
- begin
- ES:=XML.CreateElement(SNodeCPU);
- ES[SAttrName]:=GetEnumName(TypeInfo(TCPU),Ord(C));
- Result.AppendChild(ES);
- end;
- end;
- function TFPXMLRepositoryHandler.PackageToXML(P: TFPPackage; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- begin
- Result:=XML.CreateElement(SNodePackage);
- Try
- If Not Assigned(Parent) then
- Parent:=XMl;
- Parent.AppendChild(Result);
- Result[SAttrName]:=P.Name;
- // Version
- VersionToXML(P.Version,XML,Result);
- AddTextNode(SNodeAuthor,P.Author,XML,Result);
- AddTextNode(SNodeExternalURL,P.ExternalURL,XML,Result);
- AddTextNode(SNodeFileName,P.FileName,XML,Result);
- AddTextNode(SNodeEmail,P.Email,XML,Result);
- AddTextNode(SNodeDescription,P.Description,XML,Result);
- AddTextNode(SNodeLicense,P.License,XML,Result);
- if P.OSes<>AllOSes then
- OSesToXML(P.OSes,XML,Result);
- if P.CPUs<>AllCPUs then
- CPUsToXML(P.CPUs,XML,Result);
- If P.Dependencies.Count>0 then
- DependenciesToXML(P.Dependencies,XML,Result);
- Except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- function TFPXMLRepositoryHandler.PackagesToXML(PS: TFPPackages; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- I : Integer;
- begin
- Result:=XML.CreateElement(SNodePackages);
- Try
- If Not Assigned(Parent) then
- Parent:=XML;
- Parent.AppendChild(Result);
- For I:=0 to PS.Count-1 do
- PackageToXML(PS[i],XML,Result);
- except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- function TFPXMLRepositoryHandler.RepositoryToXML(R: TFPRepository; XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
- Var
- I : Integer;
- P : TDomElement;
- begin
- Result:=XML.CreateElement(sNodeRepository);
- Try
- If Not Assigned(Parent) then
- Parent:=XML;
- Parent.AppendChild(Result);
- If (R.PackageCount>0) then
- begin
- P:=XML.CreateElement(SNodePackages);
- Try
- Result.AppendChild(P);
- For I:=0 to R.PackageCount-1 do
- PackageToXML(R.Packages[i],XML,P);
- except
- Result.RemoveChild(P);
- P.Free;
- Raise;
- end;
- end;
- except
- Parent.RemoveChild(Result);
- Result.Free;
- Raise;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(D: TFPDependency; Stream: TStream);
- Var
- X : TXMLDocument;
- begin
- X:=TXMLDocument.Create;
- Try
- DependencyToXML(D,X,Nil);
- WriteXMLFile(X,Stream);
- Finally
- D.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(DS: TFPDependencies; Stream: TStream);
- Var
- D : TXMLDocument;
- begin
- D:=TXMLDocument.Create;
- Try
- DependenciesToXML(DS,D,Nil);
- WriteXMLFile(D,Stream);
- Finally
- D.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(P: TFPPackage; Stream: TStream);
- Var
- D : TXMLDocument;
- begin
- D:=TXMLDocument.Create;
- Try
- PackageToXML(P,D,Nil);
- WriteXMLFile(D,Stream);
- Finally
- D.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(PS: TFPPackages; Stream: TStream);
- Var
- D : TXMLDocument;
- begin
- D:=TXMLDocument.Create;
- Try
- PackagesToXML(PS,D,Nil);
- WriteXMLFile(D,Stream);
- Finally
- D.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(R: TFPRepository; Stream: TStream);
- Var
- D : TXMLDocument;
- begin
- D:=TXMLDocument.Create;
- Try
- RepositoryToXML(R,D,Nil);
- WriteXMLFile(D,Stream);
- Finally
- D.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(D: TFPDependency; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmCreate);
- try
- SaveToXML(D,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(DS: TFPDependencies; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmCreate);
- try
- SaveToXML(DS,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(P: TFPPackage; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmCreate);
- try
- SaveToXML(P,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(PS: TFPPackages; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmCreate);
- try
- SaveToXML(PS,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.SaveToXml(R: TFPRepository; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmCreate);
- try
- SaveToXML(R,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.XMLToVersion(E: TDomElement; V: TFPVersion);
- begin
- CheckNodeType(E,SNodeVersion);
- DoXMLToVersion(E,V);
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToVersion(E: TDomElement; V: TFPVersion);
- begin
- V.Major:=Abs(StrToIntDef(E[SAttrMajor],0));
- V.Minor:=Abs(StrToIntDef(E[SAttrMinor],0));
- V.Micro:=Abs(StrToIntDef(E[SAttrMicro],0));
- V.Build:=Abs(StrToIntDef(E[SAttrBuild],0));
- end;
- procedure TFPXMLRepositoryHandler.XMLToDependency(E: TDomElement; D: TFPDependency);
- begin
- CheckNodeType(E,SNodeDependency);
- DoXMLToDependency(E,D);
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToDependency(E: TDomElement; D: TFPDependency);
- var
- N : TDomElement;
- begin
- N:=GetNextElement(E.FirstChild);
- While (N<>Nil) do
- begin
- if (N.NodeName=sNodePackage) then
- D.PackageName:=N[SAttrPackageName]
- else if (N.NodeName=sNodeVersion) then
- DoXMlToVersion(N,D.MinVersion)
- else if (N.NodeName=sNodeOSes) then
- D.OSes:=DoXMLToOSes(N)
- else if (N.NodeName=sNodeCPUS) then
- D.CPUs:=DoXMLToCPUs(N)
- else if Not IgnoreUnknownNodes then
- Raise EXMLPackage.CreateFmt(SErrUnknownNode,[N.NodeName,sNodeDependency,'']);
- N:=GetNextElement(N.NextSibling);
- end;
- end;
- procedure TFPXMLRepositoryHandler.XMLToDependencies(E: TDomElement; DS: TFPDependencies);
- begin
- CheckNodeType(E,SNodeDependencies);
- DoXMLToDependencies(E,DS)
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToDependencies(E: TDomElement; DS: TFPDependencies);
- Var
- DN : TDomElement;
- D : TFPDependency;
- begin
- DN:=FindNextElement(E.FirstChild,SNodeDependency);
- While (DN<>Nil) do
- begin
- D:=DS.AddDependency('','');
- Try
- DoXMLToDependency(DN,D);
- except
- D.Free;
- Raise;
- end;
- DN:=FindNextElement(DN.NextSibling,SNodeDependency);
- end;
- end;
- procedure TFPXMLRepositoryHandler.XMLToPackage(E: TDomElement; P: TFPPackage);
- begin
- CheckNodeType(E,sNodePackage);
- DoXMLToPackage(E,P);
- end;
- Function TFPXMLRepositoryHandler.DoXMLToOSes(N : TDomElement) : TOSes;
- Var
- E : TDomElement;
- J : Integer;
- begin
- Result:=[];
- E:=FindNextElement(N.FirstChild,SNodeOS);
- While (E<>Nil) do
- begin
- J:=GetEnumValue(TypeInfo(TOS),E[SAttrName]);
- If (J<>-1) then
- Include(Result,TOS(J));
- E:=FindNextElement(E.NextSibling,SNodeOS);
- end;
- end;
- Function TFPXMLRepositoryHandler.DoXMLToCPUs(N : TDomElement) : TCPUS;
- Var
- E : TDomElement;
- J : Integer;
- begin
- Result:=[];
- E:=FindNextElement(N.FirstChild,SNodeCPU);
- While (E<>Nil) do
- begin
- J:=GetEnumValue(TypeInfo(TCPU),E[SAttrName]);
- If (J<>-1) then
- Include(Result,TCPU(J));
- E:=FindNextElement(E.NextSibling,SNodeCPU);
- end;
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToPackage(E: TDomElement; P: TFPPackage);
- Var
- N : TDomElement;
- begin
- P.Name:=E[sAttrName];
- N:=GetNextElement(E.FirstChild);
- While (N<>Nil) do
- begin
- if (N.NodeName=sNodeAuthor) then
- P.Author:=NodeText(N)
- else if (N.NodeName=sNodeExternalURL) then
- P.ExternalURL:=NodeText(N)
- else if (N.NodeName=sNodeFileName) then
- P.FileName:=NodeText(N)
- else if (N.NodeName=sNodeEmail) then
- P.Email:=NodeText(N)
- else if (N.NodeName=sNodeDescription) then
- P.Description:=NodeText(N)
- else if (N.NodeName=sNodeLicense) then
- P.License:=NodeText(N)
- else if (N.NodeName=sNodeVersion) then
- DoXMlToVersion(N,P.Version)
- else if (N.NodeName=sNodeOSes) then
- P.OSes:=DoXMLToOSes(N)
- else if (N.NodeName=sNodeCPUS) then
- P.CPUs:=DoXMLToCPUs(N)
- else if (N.NodeName=sNodeDependencies) then
- DoXMlToDependencies(N,P.Dependencies)
- else if Not IgnoreUnknownNodes then
- Raise EXMLPackage.CreateFmt(SErrUnknownNode,[N.NodeName,sNodePackage,P.Name]);
- N:=GetNextElement(N.NextSibling);
- end;
- end;
- procedure TFPXMLRepositoryHandler.XMLToPackages(E: TDomElement; PS: TFPPackages);
- begin
- CheckNodeType(E,SNodePackages);
- DoXMLToPackages(E,PS);
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToPackages(E: TDomElement; PS: TFPPackages);
- Var
- PN : TDomElement;
- P : TFPPackage;
- begin
- PN:=FindNextElement(E.FirstChild,SNodePackage);
- While (PN<>Nil) do
- begin
- P:=PS.AddPackage('');
- try
- DoXMLToPackage(PN,P);
- except
- P.Free;
- Raise;
- end;
- PN:=FindNextElement(PN.NextSibling,SNodePackage);
- end;
- end;
- procedure TFPXMLRepositoryHandler.XMLToRepository(E: TDomElement; R: TFPRepository);
- begin
- CheckNodeType(E,SNodeRepository);
- DoXMLToRepository(E,R);
- end;
- procedure TFPXMLRepositoryHandler.DoXMLToRepository(E: TDomElement; R: TFPRepository);
- Var
- PSN,PN : TDomElement;
- P : TFPPackage;
- begin
- PSN:=FindNextElement(E.FirstChild,SNodePackages);
- If (PSN<>Nil) then
- begin
- PN:=FindNextElement(PSN.FirstChild,SNodePackage);
- While (PN<>Nil) do
- begin
- P:=R.AddPackage('');
- try
- DoXMLToPackage(PN,P);
- except
- P.Free;
- Raise;
- end;
- PN:=FindNextElement(PN.NextSibling,SNodePackage);
- end;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(D: TFPDependency; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- Xmlread.ReadXMLFile(XML,Stream);
- XmlToDependency(XML.DocumentElement,D);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(DS: TFPDependencies; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- xmlread.ReadXMLFile(XML,Stream);
- XmlToDependencies(XML.DocumentElement,DS);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(P: TFPPackage; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- xmlread.ReadXMLFile(XML,Stream);
- XmlToPackage(XML.DocumentElement,P);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(PS: TFPPackages; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- xmlread.ReadXMLFile(XML,Stream);
- XmlToPackages(XML.DocumentElement,PS);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(R: TFPRepository; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- xmlread.ReadXMLFile(XML,Stream);
- XmlToRepository(XML.DocumentElement,R);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(D: TFPDependency; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(D,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(DS: TFPDependencies; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(DS,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(P: TFPPackage; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(P,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(PS: TFPPackages; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(PS,F);
- finally
- F.Free;
- end;
- end;
- procedure TFPXMLRepositoryHandler.LoadFromXml(R: TFPRepository; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(R,F);
- finally
- F.Free;
- end;
- end;
- {****************************************************************************
- TFPXMLMirrorHandler
- ****************************************************************************}
- procedure TFPXMLMirrorHandler.DoXMLToMirror(E: TDomElement; P: TFPMirror);
- Var
- N : TDomElement;
- begin
- P.Name:=E[sAttrName];
- N:=GetNextElement(E.FirstChild);
- While (N<>Nil) do
- begin
- if (N.NodeName=sNodeURL) then
- P.URL:=NodeText(N)
- else if (N.NodeName=sNodeContact) then
- P.Contact:=NodeText(N)
- else if (N.NodeName=sNodeWeight) then
- P.Weight:=StrToInt(NodeText(N))
- else if Not IgnoreUnknownNodes then
- Raise EXMLPackage.CreateFmt(SErrUnknownNode,[N.NodeName,sNodeMirror,P.Name]);
- N:=GetNextElement(N.NextSibling);
- end;
- end;
- procedure TFPXMLMirrorHandler.DoXMLToMirrors(E: TDomElement; PS: TFPMirrors);
- Var
- PN : TDomElement;
- P : TFPMirror;
- begin
- PN:=FindNextElement(E.FirstChild,SNodeMirror);
- While (PN<>Nil) do
- begin
- P:=PS.AddMirror('');
- try
- DoXMLToMirror(PN,P);
- except
- P.Free;
- Raise;
- end;
- PN:=FindNextElement(PN.NextSibling,SNodeMirror);
- end;
- end;
- procedure TFPXMLMirrorHandler.XMLToMirrors(E: TDomElement; PS: TFPMirrors);
- begin
- CheckNodeType(E,SNodeMirrors);
- DoXMLToMirrors(E,PS);
- end;
- procedure TFPXMLMirrorHandler.LoadFromXml(PS: TFPMirrors; Stream: TStream);
- Var
- XML : TXMLDocument;
- begin
- XML:=TXMLDocument.Create;
- try
- xmlread.ReadXMLFile(XML,Stream);
- XmlToMirrors(XML.DocumentElement,PS);
- finally
- XML.Free;
- end;
- end;
- procedure TFPXMLMirrorHandler.LoadFromXml(PS: TFPMirrors; const FileName: String);
- Var
- F : TFileStream;
- begin
- F:=TFileStream.Create(FileName,fmOpenRead);
- try
- LoadFromXMl(PS,F);
- finally
- F.Free;
- end;
- end;
- end.
|