2
0

fpxmlrep.pp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  1. {
  2. This file is part of the Free Pascal Utilities
  3. Copyright (c) 1999-2000 by the Free Pascal development team
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. **********************************************************************}
  10. unit fpxmlrep;
  11. {$mode objfpc}{$H+}
  12. interface
  13. uses
  14. Classes, SysUtils, dom, fprepos, fpmktype;
  15. Type
  16. { TFPXMLRepositoryHandler }
  17. TFPXMLRepositoryHandler = Class(TObject)
  18. private
  19. FIgnoreUnknownNodes: Boolean;
  20. Protected
  21. Function AddTextNode(Const NodeName,NodeContent : String; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement;
  22. Function GetNextElement(Start : TDomNode) : TDomElement;
  23. Function FindNextElement(Start : TDomNode; NodeName : String) : TDomElement;
  24. Function NodeText(E : TDomElement) : String;
  25. procedure CheckNodeType(E : TDomElement; NodeName : String);
  26. // The DO versions do not check the node type. They do the actual work
  27. // for the public XMLtoXYZ versions..
  28. Function DoXMLToCPUs(N : TDomElement) : TCPUs; virtual;
  29. Function DoXMLToOSes(N : TDomElement) : TOSes; virtual;
  30. Procedure DoXMLToVersion(E : TDomElement; V : TFPVersion); virtual;
  31. Procedure DoXMLToDependency(E : TDomElement; D : TFPDependency); virtual;
  32. Procedure DoXMLToDependencies(E : TDomElement; DS : TFPDependencies); virtual;
  33. Procedure DoXMLToPackage(E : TDomElement; P : TFPPackage); virtual;
  34. Procedure DoXMLToPackages(E : TDomElement; PS: TFPPackages); virtual;
  35. Procedure DoXMLToRepository(E : TDomElement; R: TFPRepository); virtual;
  36. Public
  37. // Saving
  38. Function VersionToXML(V : TFPVersion; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  39. Function DependencyToXML(D : TFPDependency; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  40. Function DependenciesToXML(DS : TFPDependencies; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  41. Function PackageToXML(P : TFPPackage; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  42. Function PackagesToXML(PS: TFPPackages; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  43. Function RepositoryToXML(R : TFPRepository; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement; virtual;
  44. Procedure SaveToXml(D : TFPDependency; Stream : TStream);
  45. Procedure SaveToXml(DS : TFPDependencies; Stream : TStream);
  46. Procedure SaveToXml(P : TFPPackage; Stream : TStream);
  47. Procedure SaveToXml(PS : TFPPackages; Stream : TStream);
  48. Procedure SaveToXml(R : TFPRepository; Stream : TStream);
  49. Procedure SaveToXml(D : TFPDependency; FileName : String);
  50. Procedure SaveToXml(DS : TFPDependencies; FileName : String);
  51. Procedure SaveToXml(P : TFPPackage; FileName : String);
  52. Procedure SaveToXml(PS : TFPPackages; FileName : String);
  53. Procedure SaveToXml(R : TFPRepository; FileName : String);
  54. // Loading
  55. Procedure XMLToVersion(E : TDomElement; V : TFPVersion);
  56. Procedure XMLToDependency(E : TDomElement; D : TFPDependency);
  57. Procedure XMLToDependencies(E : TDomElement; DS : TFPDependencies);
  58. Procedure XMLToPackage(E : TDomElement; P : TFPPackage);
  59. Procedure XMLToPackages(E : TDomElement; PS: TFPPackages);
  60. Procedure XMLToRepository(E : TDomElement; R: TFPRepository);
  61. Procedure LoadFromXml(D : TFPDependency; Stream : TStream);
  62. Procedure LoadFromXml(DS : TFPDependencies; Stream : TStream);
  63. Procedure LoadFromXml(P : TFPPackage; Stream : TStream);
  64. Procedure LoadFromXml(PS : TFPPackages; Stream : TStream);
  65. Procedure LoadFromXml(R : TFPRepository; Stream : TStream);
  66. Procedure LoadFromXml(D : TFPDependency; FileName : String);
  67. Procedure LoadFromXml(DS : TFPDependencies; FileName : String);
  68. Procedure LoadFromXml(P : TFPPackage; FileName : String);
  69. Procedure LoadFromXml(PS : TFPPackages; FileName : String);
  70. Procedure LoadFromXml(R : TFPRepository; FileName : String);
  71. property IgnoreUnknownNodes : Boolean Read FIgnoreUnknownNodes Write FIgnoreUnknownNodes;
  72. end;
  73. EXMLPackage = Class(EPackage);
  74. implementation
  75. uses xmlwrite,xmlread,typinfo;
  76. Const
  77. SNodeRepository = 'repository';
  78. SNodePackages = 'packages';
  79. SNodePackage = 'package';
  80. SNodeAuthor = 'author';
  81. SNodeLicense = 'license';
  82. SNodeURL = 'url';
  83. SNodeEmail = 'email';
  84. SNodeVersion = 'version';
  85. SNodeDescription = 'description';
  86. SNodeDependencies = 'dependencies';
  87. SNodeDependency = 'dependency';
  88. SNodeOSes = 'oses';
  89. SNodeCPUS = 'cpus';
  90. SNodeOS = 'os';
  91. SNodeCPU = 'cpu';
  92. SAttrName = 'name';
  93. SAttrPackageName = 'packagename';
  94. SAttrMinVersion = 'minversion';
  95. SAttrRelease = 'release';
  96. SAttrMajor = 'major';
  97. SAttrMinor = 'minor';
  98. SAttrSuffix = 'suffix';
  99. ResourceString
  100. SErrInvalidXMLDocument = 'Wrong root tag in XML document. Expected "%s", got "%s".';
  101. SErrUnknownPackageNode = 'Unknown XML tag ("%s") encountered while reading package "%s".';
  102. SErrInvalidDependencyXML = 'Invalid XMl encountered when reading dependency.';
  103. { TFPXMLRepositoryHandler }
  104. function TFPXMLRepositoryHandler.VersionToXML(V : TFPVersion;
  105. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  106. begin
  107. Result:=XML.CreateElement(SNodeVersion);
  108. try
  109. If Not Assigned(Parent) then
  110. Parent:=XML;
  111. Parent.AppendChild(Result);
  112. Result[SAttrRelease]:=IntToStr(V.Release);
  113. Result[SAttrMajor]:=IntToStr(V.Major);
  114. Result[SAttrMinor]:=IntToStr(V.Minor);
  115. Result[SAttrSuffix]:=V.Suffix;
  116. except
  117. Parent.RemoveChild(Result);
  118. Result.Free;
  119. Raise;
  120. end;
  121. end;
  122. function TFPXMLRepositoryHandler.DependencyToXML(D: TFPDependency;
  123. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  124. Var
  125. E : TDOMElement;
  126. begin
  127. Result:=XML.CreateElement(SNodeDependency);
  128. Try
  129. If Not Assigned(Parent) then
  130. Parent:=XML;
  131. Parent.AppendChild(Result);
  132. E:=XML.CreateElement(SNodePackage);
  133. E[SAttrPackageName]:=D.PackageName;
  134. If Not D.MinVersion.Empty then
  135. E[SAttrMinVersion]:=D.MinVersion.AsString;
  136. Result.AppendChild(E);
  137. Except
  138. Parent.RemoveChild(Result);
  139. Result.Free;
  140. Raise;
  141. end;
  142. end;
  143. function TFPXMLRepositoryHandler.DependenciesToXML(DS: TFPDependencies;
  144. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  145. Var
  146. I : Integer;
  147. begin
  148. If (DS.Count>0) then
  149. begin
  150. Result:=XML.CreateElement(SNodeDependencies);
  151. Try
  152. If Not Assigned(Parent) then
  153. Parent:=XML;
  154. Parent.AppendChild(Result);
  155. For I:=0 to DS.Count-1 do
  156. DependencyToXML(DS[i],XML,Result);
  157. except
  158. Parent.RemoveChild(Result);
  159. Result.Free;
  160. Raise;
  161. end;
  162. end;
  163. end;
  164. function TFPXMLRepositoryHandler.AddTextNode(Const NodeName,NodeContent : String; XML : TXMLDocument; Parent : TDomNode_WithChildren) : TDomElement;
  165. begin
  166. Result:=XML.CreateElement(NodeName);
  167. Try
  168. Result.AppendChild(XML.CreateTextNode(NodeContent));
  169. If Assigned(Parent) then
  170. Parent.AppendChild(Result);
  171. Except
  172. Parent.RemoveChild(Result);
  173. Result.Free;
  174. Raise;
  175. end;
  176. end;
  177. function TFPXMLRepositoryHandler.GetNextElement(Start: TDomNode): TDomElement;
  178. begin
  179. Result:=Nil;
  180. While (Start<>Nil) and (Start.NodeType<>ELEMENT_NODE) do
  181. Start:=Start.NextSibling;
  182. If (Start<>Nil) then
  183. Result:=Start as TDomElement;
  184. end;
  185. function TFPXMLRepositoryHandler.FindNextElement(Start: TDomNode; NodeName: String): TDomElement;
  186. begin
  187. Result:=GetNextElement(Start);
  188. While (Result<>Nil) and (Result.NodeName<>NodeName) do
  189. Result:=GetNextElement(Result);
  190. end;
  191. procedure TFPXMLRepositoryHandler.CheckNodeType(E : TDomElement; NodeName : String);
  192. begin
  193. If (E.NodeName<>NodeName) then
  194. Raise EXMLPackage.CreateFmt(SErrInvalidXMLDocument,[NodeName,E.NodeName]);
  195. end;
  196. Function TFPXMLRepositoryHandler.NodeText(E : TDomElement) : String;
  197. Var
  198. N : TDomNode;
  199. begin
  200. N:=E.FirstChild;
  201. While (N<>Nil) and (N.NodeType<>TEXT_NODE) do
  202. N:=N.NextSibling;
  203. If (N<>Nil) then
  204. Result:=N.NodeValue;
  205. end;
  206. function TFPXMLRepositoryHandler.PackageToXML(P: TFPPackage;
  207. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  208. Var
  209. E,ES : TDomElement;
  210. O : TOS;
  211. C : TCPU;
  212. begin
  213. Result:=XML.CreateElement(SNodePackage);
  214. Try
  215. If Not Assigned(Parent) then
  216. Parent:=XMl;
  217. Parent.AppendChild(Result);
  218. Result[SAttrName]:=P.Name;
  219. // Version
  220. VersionToXML(P.Version,XML,Result);
  221. AddTextNode(SNodeAuthor,P.Author,XML,Result);
  222. AddTextNode(SNodeURL,P.URL,XML,Result);
  223. AddTextNode(SNodeEmail,P.Email,XML,Result);
  224. AddTextNode(SNodeDescription,P.Description,XML,Result);
  225. AddTextNode(SNodeLicense,P.License,XML,Result);
  226. // OSes
  227. E:=XML.CreateElement(SNodeOSes);
  228. Result.AppendChild(E);
  229. For O:=Low(TOS) to High(TOS) do
  230. If (O in P.OSes) then
  231. begin
  232. ES:=XML.CreateElement(SNodeOS);
  233. ES[SAttrName]:=GetEnumName(TypeInfo(TOS),Ord(O));
  234. E.AppendChild(ES);
  235. end;
  236. // CPUs
  237. E:=XML.CreateElement(SNodeCPUs);
  238. Result.AppendChild(E);
  239. For C:=Low(TCPU) to High(TCPU) do
  240. If (C in P.CPUS) then
  241. begin
  242. ES:=XML.CreateElement(SNodeCPU);
  243. ES[SAttrName]:=GetEnumName(TypeInfo(TCPU),Ord(C));
  244. E.AppendChild(ES);
  245. end;
  246. If P.HasDependencies then
  247. DependenciesToXML(P.Dependencies,XML,Result);
  248. Except
  249. Parent.RemoveChild(Result);
  250. Result.Free;
  251. Raise;
  252. end;
  253. end;
  254. function TFPXMLRepositoryHandler.PackagesToXML(PS: TFPPackages;
  255. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  256. Var
  257. I : Integer;
  258. begin
  259. Result:=XML.CreateElement(SNodePackages);
  260. Try
  261. If Not Assigned(Parent) then
  262. Parent:=XML;
  263. Parent.AppendChild(Result);
  264. For I:=0 to PS.Count-1 do
  265. PackageToXML(PS[i],XML,Result);
  266. except
  267. Parent.RemoveChild(Result);
  268. Result.Free;
  269. Raise;
  270. end;
  271. end;
  272. function TFPXMLRepositoryHandler.RepositoryToXML(R: TFPRepository;
  273. XML: TXMLDocument; Parent : TDomNode_WithChildren): TDomElement;
  274. Var
  275. I : Integer;
  276. P : TDomElement;
  277. begin
  278. Result:=XML.CreateElement(sNodeRepository);
  279. Try
  280. If Not Assigned(Parent) then
  281. Parent:=XML;
  282. Parent.AppendChild(Result);
  283. If (R.PackageCount>0) then
  284. begin
  285. P:=XML.CreateElement(SNodePackages);
  286. Try
  287. Result.AppendChild(P);
  288. For I:=0 to R.PackageCount-1 do
  289. PackageToXML(R.Packages[i],XML,P);
  290. except
  291. Result.RemoveChild(P);
  292. P.Free;
  293. Raise;
  294. end;
  295. end;
  296. except
  297. Parent.RemoveChild(Result);
  298. Result.Free;
  299. Raise;
  300. end;
  301. end;
  302. procedure TFPXMLRepositoryHandler.SaveToXml(D: TFPDependency; Stream: TStream);
  303. Var
  304. X : TXMLDocument;
  305. begin
  306. X:=TXMLDocument.Create;
  307. Try
  308. DependencyToXML(D,X,Nil);
  309. WriteXMLFile(X,Stream);
  310. Finally
  311. D.Free;
  312. end;
  313. end;
  314. procedure TFPXMLRepositoryHandler.SaveToXml(DS: TFPDependencies; Stream: TStream);
  315. Var
  316. D : TXMLDocument;
  317. begin
  318. D:=TXMLDocument.Create;
  319. Try
  320. DependenciesToXML(DS,D,Nil);
  321. WriteXMLFile(D,Stream);
  322. Finally
  323. D.Free;
  324. end;
  325. end;
  326. procedure TFPXMLRepositoryHandler.SaveToXml(P: TFPPackage; Stream: TStream);
  327. Var
  328. D : TXMLDocument;
  329. begin
  330. D:=TXMLDocument.Create;
  331. Try
  332. PackageToXML(P,D,Nil);
  333. WriteXMLFile(D,Stream);
  334. Finally
  335. D.Free;
  336. end;
  337. end;
  338. procedure TFPXMLRepositoryHandler.SaveToXml(PS: TFPPackages; Stream: TStream);
  339. Var
  340. D : TXMLDocument;
  341. begin
  342. D:=TXMLDocument.Create;
  343. Try
  344. PackagesToXML(PS,D,Nil);
  345. WriteXMLFile(D,Stream);
  346. Finally
  347. D.Free;
  348. end;
  349. end;
  350. procedure TFPXMLRepositoryHandler.SaveToXml(R: TFPRepository; Stream: TStream);
  351. Var
  352. D : TXMLDocument;
  353. begin
  354. D:=TXMLDocument.Create;
  355. Try
  356. RepositoryToXML(R,D,Nil);
  357. WriteXMLFile(D,Stream);
  358. Finally
  359. D.Free;
  360. end;
  361. end;
  362. procedure TFPXMLRepositoryHandler.SaveToXml(D: TFPDependency; FileName: String);
  363. Var
  364. F : TFileStream;
  365. begin
  366. F:=TFileStream.Create(FileName,fmCreate);
  367. try
  368. SaveToXML(D,F);
  369. finally
  370. F.Free;
  371. end;
  372. end;
  373. procedure TFPXMLRepositoryHandler.SaveToXml(DS: TFPDependencies; FileName: String);
  374. Var
  375. F : TFileStream;
  376. begin
  377. F:=TFileStream.Create(FileName,fmCreate);
  378. try
  379. SaveToXML(DS,F);
  380. finally
  381. F.Free;
  382. end;
  383. end;
  384. procedure TFPXMLRepositoryHandler.SaveToXml(P: TFPPackage; FileName: String);
  385. Var
  386. F : TFileStream;
  387. begin
  388. F:=TFileStream.Create(FileName,fmCreate);
  389. try
  390. SaveToXML(P,F);
  391. finally
  392. F.Free;
  393. end;
  394. end;
  395. procedure TFPXMLRepositoryHandler.SaveToXml(PS: TFPPackages; FileName: String);
  396. Var
  397. F : TFileStream;
  398. begin
  399. F:=TFileStream.Create(FileName,fmCreate);
  400. try
  401. SaveToXML(PS,F);
  402. finally
  403. F.Free;
  404. end;
  405. end;
  406. procedure TFPXMLRepositoryHandler.SaveToXml(R: TFPRepository; FileName: String);
  407. Var
  408. F : TFileStream;
  409. begin
  410. F:=TFileStream.Create(FileName,fmCreate);
  411. try
  412. SaveToXML(R,F);
  413. finally
  414. F.Free;
  415. end;
  416. end;
  417. procedure TFPXMLRepositoryHandler.XMLToVersion(E: TDomElement; V: TFPVersion);
  418. begin
  419. CheckNodeType(E,SNodeVersion);
  420. DoXMLToVersion(E,V);
  421. end;
  422. procedure TFPXMLRepositoryHandler.DoXMLToVersion(E: TDomElement; V: TFPVersion);
  423. begin
  424. V.Release:=Abs(StrToIntDef(E[SAttrRelease],0));
  425. V.Major:=Abs(StrToIntDef(E[SAttrMajor],0));
  426. V.Minor:=Abs(StrToIntDef(E[SAttrMinor],0));
  427. V.Suffix:=E[SAttrSuffix];
  428. end;
  429. procedure TFPXMLRepositoryHandler.XMLToDependency(E: TDomElement; D: TFPDependency);
  430. begin
  431. CheckNodeType(E,SNodeDependency);
  432. DoXMLToDependency(E,D);
  433. end;
  434. procedure TFPXMLRepositoryHandler.DoXMLToDependency(E: TDomElement; D: TFPDependency);
  435. begin
  436. E:=FindNextElement(E.FirstChild,SNodePackage);
  437. If (E=Nil) then
  438. Raise EXMLpackage.Create(SErrInvalidDependencyXML);
  439. D.PackageName:=E[SAttrPackageName];
  440. D.MinVersion.AsString:=E[SAttrMinVersion];
  441. end;
  442. procedure TFPXMLRepositoryHandler.XMLToDependencies(E: TDomElement; DS: TFPDependencies);
  443. begin
  444. CheckNodeType(E,SNodeDependencies);
  445. DoXMLToDependencies(E,DS)
  446. end;
  447. procedure TFPXMLRepositoryHandler.DoXMLToDependencies(E: TDomElement;
  448. DS: TFPDependencies);
  449. Var
  450. DN : TDomElement;
  451. D : TFPDependency;
  452. begin
  453. DN:=FindNextElement(E.FirstChild,SNodeDependency);
  454. While (DN<>Nil) do
  455. begin
  456. D:=DS.AddDependency('','');
  457. Try
  458. DoXMLToDependency(DN,D);
  459. except
  460. D.Free;
  461. Raise;
  462. end;
  463. DN:=FindNextElement(DN.NextSibling,SNodeDependency);
  464. end;
  465. end;
  466. procedure TFPXMLRepositoryHandler.XMLToPackage(E: TDomElement; P: TFPPackage);
  467. begin
  468. CheckNodeType(E,sNodePackage);
  469. DoXMLToPackage(E,P);
  470. end;
  471. Function TFPXMLRepositoryHandler.DoXMLToOSes(N : TDomElement) : TOSes;
  472. Var
  473. E : TDomElement;
  474. J : Integer;
  475. begin
  476. Result:=[];
  477. E:=FindNextElement(N.FirstChild,SNodeOS);
  478. While (E<>Nil) do
  479. begin
  480. J:=GetEnumValue(TypeInfo(TOS),E[SAttrName]);
  481. If (J<>-1) then
  482. Include(Result,TOS(J));
  483. E:=FindNextElement(E.NextSibling,SNodeOS);
  484. end;
  485. end;
  486. Function TFPXMLRepositoryHandler.DoXMLToCPUs(N : TDomElement) : TCPUS;
  487. Var
  488. E : TDomElement;
  489. J : Integer;
  490. begin
  491. Result:=[];
  492. E:=FindNextElement(N.FirstChild,SNodeCPU);
  493. While (E<>Nil) do
  494. begin
  495. J:=GetEnumValue(TypeInfo(TCPU),E[SAttrName]);
  496. If (J<>-1) then
  497. Include(Result,TCPU(J));
  498. E:=FindNextElement(E.NextSibling,SNodeCPU);
  499. end;
  500. end;
  501. procedure TFPXMLRepositoryHandler.DoXMLToPackage(E: TDomElement; P: TFPPackage);
  502. Var
  503. N : TDomElement;
  504. begin
  505. P.Name:=E[sAttrName];
  506. N:=GetNextElement(E.FirstChild);
  507. While (N<>Nil) do
  508. begin
  509. if (N.NodeName=sNodeAuthor) then
  510. P.Author:=NodeText(N)
  511. else if (N.NodeName=sNodeURl) then
  512. P.URL:=NodeText(N)
  513. else if (N.NodeName=sNodeEmail) then
  514. P.Email:=NodeText(N)
  515. else if (N.NodeName=sNodeDescription) then
  516. P.Description:=NodeText(N)
  517. else if (N.NodeName=sNodeLicense) then
  518. P.License:=NodeText(N)
  519. else if (N.NodeName=sNodeVersion) then
  520. DoXMlToVersion(N,P.Version)
  521. else if (N.NodeName=sNodeOSes) then
  522. P.OSes:=DoXMLToOSes(N)
  523. else if (N.NodeName=sNodeCPUS) then
  524. P.CPUs:=DoXMLToCPUs(N)
  525. else if (N.NodeName=sNodeDependencies) then
  526. DoXMlToDependencies(N,P.Dependencies)
  527. else if Not IgnoreUnknownNodes then
  528. Raise EXMLPackage.CreateFmt(SErrUnknownPackageNode,[N.NodeName,P.Name]);
  529. N:=GetNextElement(N.NextSibling);
  530. end;
  531. end;
  532. procedure TFPXMLRepositoryHandler.XMLToPackages(E: TDomElement; PS: TFPPackages);
  533. begin
  534. CheckNodeType(E,SNodePackages);
  535. DoXMLToPackages(E,PS);
  536. end;
  537. procedure TFPXMLRepositoryHandler.DoXMLToPackages(E: TDomElement; PS: TFPPackages);
  538. Var
  539. PSN,PN : TDomElement;
  540. P : TFPPackage;
  541. begin
  542. PN:=FindNextElement(PSN.FirstChild,SNodePackage);
  543. While (PN<>Nil) do
  544. begin
  545. P:=PS.AddPackage('');
  546. try
  547. DoXMLToPackage(PN,P);
  548. except
  549. P.Free;
  550. end;
  551. PN:=FindNextElement(PN.NextSibling,SNodePackage);
  552. end;
  553. end;
  554. procedure TFPXMLRepositoryHandler.XMLToRepository(E: TDomElement; R: TFPRepository);
  555. begin
  556. CheckNodeType(E,SNodeRepository);
  557. DoXMLToRepository(E,R);
  558. end;
  559. procedure TFPXMLRepositoryHandler.DoXMLToRepository(E: TDomElement; R: TFPRepository);
  560. Var
  561. PSN,PN : TDomElement;
  562. P : TFPPackage;
  563. begin
  564. PSN:=FindNextElement(E.FirstChild,SNodePackages);
  565. If (PSN<>Nil) then
  566. begin
  567. PN:=FindNextElement(PSN.FirstChild,SNodePackage);
  568. While (PN<>Nil) do
  569. begin
  570. P:=R.AddPackage('');
  571. try
  572. DoXMLToPackage(PN,P);
  573. except
  574. P.Free;
  575. end;
  576. PN:=FindNextElement(PN.NextSibling,SNodePackage);
  577. end;
  578. end;
  579. end;
  580. procedure TFPXMLRepositoryHandler.LoadFromXml(D: TFPDependency; Stream: TStream);
  581. Var
  582. XML : TXMLDocument;
  583. begin
  584. XML:=TXMLDocument.Create;
  585. try
  586. Xmlread.ReadXMLFile(XML,Stream);
  587. XmlToDependency(XML.DocumentElement,D);
  588. finally
  589. XML.Free;
  590. end;
  591. end;
  592. procedure TFPXMLRepositoryHandler.LoadFromXml(DS: TFPDependencies;
  593. Stream: TStream);
  594. Var
  595. XML : TXMLDocument;
  596. begin
  597. XML:=TXMLDocument.Create;
  598. try
  599. xmlread.ReadXMLFile(XML,Stream);
  600. XmlToDependencies(XML.DocumentElement,DS);
  601. finally
  602. XML.Free;
  603. end;
  604. end;
  605. procedure TFPXMLRepositoryHandler.LoadFromXml(P: TFPPackage; Stream: TStream);
  606. Var
  607. XML : TXMLDocument;
  608. begin
  609. XML:=TXMLDocument.Create;
  610. try
  611. xmlread.ReadXMLFile(XML,Stream);
  612. XmlToPackage(XML.DocumentElement,P);
  613. finally
  614. XML.Free;
  615. end;
  616. end;
  617. procedure TFPXMLRepositoryHandler.LoadFromXml(PS: TFPPackages; Stream: TStream);
  618. Var
  619. XML : TXMLDocument;
  620. begin
  621. XML:=TXMLDocument.Create;
  622. try
  623. xmlread.ReadXMLFile(XML,Stream);
  624. XmlToPackages(XML.DocumentElement,PS);
  625. finally
  626. XML.Free;
  627. end;
  628. end;
  629. procedure TFPXMLRepositoryHandler.LoadFromXml(R: TFPRepository; Stream: TStream);
  630. Var
  631. XML : TXMLDocument;
  632. begin
  633. XML:=TXMLDocument.Create;
  634. try
  635. xmlread.ReadXMLFile(XML,Stream);
  636. XmlToRepository(XML.DocumentElement,R);
  637. finally
  638. XML.Free;
  639. end;
  640. end;
  641. procedure TFPXMLRepositoryHandler.LoadFromXml(D: TFPDependency; FileName: String);
  642. Var
  643. F : TFileStream;
  644. begin
  645. F:=TFileStream.Create(FileName,fmOpenRead);
  646. try
  647. LoadFromXMl(D,F);
  648. finally
  649. F.Free;
  650. end;
  651. end;
  652. procedure TFPXMLRepositoryHandler.LoadFromXml(DS: TFPDependencies; FileName: String);
  653. Var
  654. F : TFileStream;
  655. begin
  656. F:=TFileStream.Create(FileName,fmOpenRead);
  657. try
  658. LoadFromXMl(DS,F);
  659. finally
  660. F.Free;
  661. end;
  662. end;
  663. procedure TFPXMLRepositoryHandler.LoadFromXml(P: TFPPackage; FileName: String);
  664. Var
  665. F : TFileStream;
  666. begin
  667. F:=TFileStream.Create(FileName,fmOpenRead);
  668. try
  669. LoadFromXMl(P,F);
  670. finally
  671. F.Free;
  672. end;
  673. end;
  674. procedure TFPXMLRepositoryHandler.LoadFromXml(PS: TFPPackages; FileName: String);
  675. Var
  676. F : TFileStream;
  677. begin
  678. F:=TFileStream.Create(FileName,fmOpenRead);
  679. try
  680. LoadFromXMl(PS,F);
  681. finally
  682. F.Free;
  683. end;
  684. end;
  685. procedure TFPXMLRepositoryHandler.LoadFromXml(R: TFPRepository; FileName: String);
  686. Var
  687. F : TFileStream;
  688. begin
  689. F:=TFileStream.Create(FileName,fmOpenRead);
  690. try
  691. LoadFromXMl(R,F);
  692. finally
  693. F.Free;
  694. end;
  695. end;
  696. end.