]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Common/XmlParser.py
add missing <BR>
[mirror_edk2.git] / BaseTools / Source / Python / Common / XmlParser.py
CommitLineData
30fdf114
LG
1## @file\r
2# This file is used to parse a xml file of .PKG file\r
3#\r
40d841f6
LG
4# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
5# This program and the accompanying materials\r
30fdf114
LG
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
14##\r
15# Import Modules\r
16#\r
17from xml.dom import minidom\r
18from XmlRoutines import *\r
19from CommonDataClass.DistributionPackageClass import *\r
20from CommonDataClass.PackageClass import *\r
21from CommonDataClass.ModuleClass import *\r
22from Common.String import GetStringOfList\r
23\r
24#\r
25# Get Help Text\r
26#\r
27def GetHelpTextList(HelpText):\r
28 HelpTextList = []\r
29 for HT in HelpText:\r
30 HelpTextObj = HelpTextClass()\r
31 HelpTextObj.Lang = HT.Lang\r
32 HelpTextObj.String = HT.HelpText\r
33 HelpTextList.append(HelpTextObj)\r
34 return HelpTextList\r
35\r
36# HeaderXml\r
37class HeaderXml(object):\r
38 def __init__(self):\r
39 self.Name = ''\r
40 self.BaseName = ''\r
41 self.GUID = ''\r
42 self.Version = ''\r
43 self.Copyright = ''\r
44 self.License = ''\r
45 self.Abstract = ''\r
46 self.Description = ''\r
47\r
48 def FromXml(self, Item, Key):\r
49 self.Name = XmlElement(Item, '%s/Name' % Key)\r
50 self.BaseName = XmlAttribute(XmlNode(Item, '%s/Name' % Key), 'BaseName')\r
51 self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
52 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
53 self.Copyright = XmlElement(Item, '%s/Copyright' % Key)\r
54 self.License = XmlElement(Item, '%s/License' % Key)\r
55 self.Abstract = XmlElement(Item, '%s/Abstract' % Key)\r
56 self.Description = XmlElement(Item, '%s/Description' % Key)\r
57 \r
58 ModuleHeader = ModuleHeaderClass()\r
59 ModuleHeader.Name = self.Name\r
60 ModuleHeader.BaseName = self.BaseName\r
61 ModuleHeader.Guid = self.GUID\r
62 ModuleHeader.Version = self.Version\r
63 ModuleHeader.Copyright = self.Copyright\r
64 ModuleHeader.License = self.License\r
65 ModuleHeader.Abstract = self.Abstract\r
66 ModuleHeader.Description = self.Description\r
67 \r
68 return ModuleHeader\r
69 \r
70 def ToXml(self, Header, Key):\r
71 Element1 = CreateXmlElement('Name', Header.Name, [], [['BaseName', Header.BaseName]])\r
72 Element2 = CreateXmlElement('GUID', Header.Guid, [], [['Version', Header.Version]])\r
73 AttributeList = []\r
74 NodeList = [Element1,\r
75 Element2,\r
76 ['Abstract', Header.Abstract],\r
77 ['Copyright', Header.Copyright],\r
78 ['License', Header.License],\r
79 ['Description', Header.Description],\r
80 ]\r
81 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
82\r
83 return Root\r
84\r
85 def __str__(self):\r
86 return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s License = %s Abstract = %s Description = %s" \\r
87 % (self.Name, self.BaseName, self.GUID, self.Version, self.Copyright, self.License, self.Abstract, self.Description)\r
88\r
89# DistributionPackageHeaderXml\r
90class DistributionPackageHeaderXml(object):\r
91 def __init__(self):\r
92 self.Header = HeaderXml()\r
93 self.ReadOnly = False\r
94 self.RePackage = True\r
95 self.Vendor = ''\r
96 self.Date = ''\r
97 self.Signature = ''\r
98 self.XmlSpecification = ''\r
99 \r
100 def FromXml(self, Item, Key):\r
101 self.ReadOnly = XmlAttribute(XmlNode(Item, '%s' % Key), 'ReadOnly')\r
102 self.RePackage = XmlAttribute(XmlNode(Item, '%s' % Key), 'RePackage')\r
103 self.Vendor = XmlElement(Item, '%s/Vendor' % Key)\r
104 self.Date = XmlElement(Item, '%s/Date' % Key)\r
105 self.Signature = XmlElement(Item, '%s/Signature' % Key)\r
106 self.XmlSpecification = XmlElement(Item, '%s/XmlSpecification' % Key)\r
107 self.Header.FromXml(Item, Key)\r
108 \r
109 DistributionPackageHeader = DistributionPackageHeaderClass()\r
110 DistributionPackageHeader.ReadOnly = self.ReadOnly\r
111 DistributionPackageHeader.RePackage = self.RePackage\r
112 DistributionPackageHeader.Name = self.Header.Name\r
113 DistributionPackageHeader.BaseName = self.Header.BaseName\r
114 DistributionPackageHeader.Guid = self.Header.GUID\r
115 DistributionPackageHeader.Version = self.Header.Version\r
116 DistributionPackageHeader.Vendor = self.Vendor\r
117 DistributionPackageHeader.Date = self.Date\r
118 DistributionPackageHeader.Copyright = self.Header.Copyright\r
119 DistributionPackageHeader.License = self.Header.License\r
120 DistributionPackageHeader.Abstract = self.Header.Abstract\r
121 DistributionPackageHeader.Description = self.Header.Description\r
122 DistributionPackageHeader.Signature = self.Signature\r
123 DistributionPackageHeader.XmlSpecification = self.XmlSpecification\r
124 \r
125 return DistributionPackageHeader\r
126 \r
127 def ToXml(self, DistributionPackageHeader, Key):\r
128 Element1 = CreateXmlElement('Name', DistributionPackageHeader.Name, [], [['BaseName', DistributionPackageHeader.BaseName]])\r
129 Element2 = CreateXmlElement('GUID', DistributionPackageHeader.Guid, [], [['Version', DistributionPackageHeader.Version]])\r
130 AttributeList = [['ReadOnly', str(DistributionPackageHeader.ReadOnly)], ['RePackage', str(DistributionPackageHeader.RePackage)]]\r
131 NodeList = [Element1,\r
132 Element2,\r
133 ['Vendor', DistributionPackageHeader.Vendor],\r
134 ['Date', DistributionPackageHeader.Date],\r
135 ['Copyright', DistributionPackageHeader.Copyright],\r
136 ['License', DistributionPackageHeader.License],\r
137 ['Abstract', DistributionPackageHeader.Abstract],\r
138 ['Description', DistributionPackageHeader.Description],\r
139 ['Signature', DistributionPackageHeader.Signature],\r
140 ['XmlSpecification', DistributionPackageHeader.XmlSpecification],\r
141 ]\r
142 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
143\r
144 return Root\r
145 \r
146 def __str__(self):\r
147 return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s Signature = %s XmlSpecification = %s %s" \\r
148 % (self.ReadOnly, self.RePackage, self.Vendor, self.Date, self.Signature, self.XmlSpecification, self.Header)\r
149\r
150# PackageHeaderXml\r
151class PackageHeaderXml(object):\r
152 def __init__(self):\r
153 self.Header = HeaderXml()\r
154 self.PackagePath = ''\r
155 \r
156 def FromXml(self, Item, Key):\r
157 self.PackagePath = XmlElement(Item, '%s/PackagePath' % Key)\r
158 self.Header.FromXml(Item, Key)\r
159 \r
160 PackageHeader = PackageHeaderClass()\r
161 PackageHeader.Name = self.Header.Name\r
162 PackageHeader.BaseName = self.Header.BaseName\r
163 PackageHeader.Guid = self.Header.GUID\r
164 PackageHeader.Version = self.Header.Version\r
165 PackageHeader.Copyright = self.Header.Copyright\r
166 PackageHeader.License = self.Header.License\r
167 PackageHeader.Abstract = self.Header.Abstract\r
168 PackageHeader.Description = self.Header.Description\r
169 PackageHeader.CombinePath = self.PackagePath\r
170\r
171 return PackageHeader\r
172 \r
173 def ToXml(self, PackageHeader, Key):\r
174 Element1 = CreateXmlElement('Name', PackageHeader.Name, [], [['BaseName', PackageHeader.BaseName]])\r
175 Element2 = CreateXmlElement('GUID', PackageHeader.Guid, [], [['Version', PackageHeader.Version]])\r
176 AttributeList = []\r
177 NodeList = [Element1,\r
178 Element2,\r
179 ['Copyright', PackageHeader.Copyright],\r
180 ['License', PackageHeader.License],\r
181 ['Abstract', PackageHeader.Abstract],\r
182 ['Description', PackageHeader.Description],\r
183 ['PackagePath', PackageHeader.CombinePath],\r
184 ]\r
185 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
186 \r
187 return Root\r
188 \r
189 def __str__(self):\r
190 return "PackagePath = %s %s" \\r
191 % (self.PackagePath, self.Header)\r
192\r
193# ClonedFromXml\r
194class ClonedFromXml(object):\r
195 def __init__(self):\r
196 self.GUID = ''\r
197 self.Version = ''\r
198 \r
199 def FromXml(self, Item, Key):\r
200 self.GUID = XmlElement(Item, '%s/GUID' % Key)\r
201 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
202 \r
203 if self.GUID == '' and self.Version == '':\r
204 return None\r
205 \r
206 ClonedFrom = ClonedRecordClass()\r
207 ClonedFrom.PackageGuid = self.GUID\r
208 ClonedFrom.PackageVersion = self.Version\r
209 \r
210 return ClonedFrom\r
211 \r
212 def ToXml(self, ClonedFrom, Key):\r
213 Root = minidom.Document()\r
214 Element1 = CreateXmlElement('GUID', ClonedFrom.PackageGuid, [], [['Version', ClonedFrom.PackageVersion]])\r
215 AttributeList = []\r
216 NodeList = [Element1]\r
217 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
218 \r
219 return Root\r
220 \r
221 def __str__(self):\r
222 return "GUID = %s Version = %s" % (self.GUID, self.Version)\r
223\r
224# CommonDefinesXml\r
225class CommonDefinesXml(object):\r
226 def __init__(self):\r
227 self.Usage = ''\r
228 self.SupArchList = ''\r
229 self.SupModList = ''\r
230 self.FeatureFlag = ''\r
231 \r
232 def FromXml(self, Item, Key):\r
233 self.Usage = XmlAttribute(Item, 'Usage')\r
234 self.SupArchList = XmlAttribute(Item, 'SupArchList')\r
235 self.SupModList = XmlAttribute(Item, 'SupModList')\r
236 self.FeatureFlag = XmlAttribute(Item, 'FeatureFlag')\r
237 \r
238 def ToXml(self):\r
239 pass\r
240 \r
241 def __str__(self):\r
242 return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" % (self.Usage, self.SupArchList, self.SupModList, self.FeatureFlag)\r
243\r
244# HelpTextXml\r
245class HelpTextXml(object):\r
246 def __init__(self):\r
247 self.HelpText = ''\r
248 self.Lang = ''\r
249 \r
250 def FromXml(self, Item, Key):\r
251 self.HelpText = XmlElement(Item, 'HelpText')\r
252 self.Lang = XmlAttribute(Item, 'Lang')\r
253 \r
254 def ToXml(self, HelpText, Key = 'HelpText'):\r
255 return CreateXmlElement('%s' % Key, HelpText.String, [], [['Lang', HelpText.Lang]])\r
256\r
257 def __str__(self):\r
258 return "HelpText = %s Lang = %s" % (self.HelpText, self.Lang)\r
259\r
260# LibraryClassXml\r
261class LibraryClassXml(object):\r
262 def __init__(self):\r
263 self.Keyword = ''\r
264 self.HeaderFile = ''\r
265 self.RecommendedInstanceGuid = ''\r
266 self.RecommendedInstanceVersion = ''\r
267 self.CommonDefines = CommonDefinesXml()\r
268 self.HelpText = []\r
269 \r
270 def FromXml(self, Item, Key):\r
271 self.Keyword = XmlAttribute(XmlNode(Item, '%s' % Key), 'Keyword')\r
272 if self.Keyword == '':\r
273 self.Keyword = XmlElement(Item, '%s/Keyword' % Key)\r
274 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
275 self.RecommendedInstanceGuid = XmlElement(Item, '%s/RecommendedInstance/GUID' % Key)\r
276 self.RecommendedInstanceVersion = XmlAttribute(XmlNode(Item, '%s/RecommendedInstance/GUID' % Key), 'Version')\r
277 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
278 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
279 HelpTextObj = HelpTextXml()\r
280 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
281 self.HelpText.append(HelpTextObj)\r
282 \r
283 LibraryClass = LibraryClassClass()\r
284 LibraryClass.LibraryClass = self.Keyword\r
285 LibraryClass.IncludeHeader = self.HeaderFile\r
286 LibraryClass.SupArchList = self.CommonDefines.SupArchList\r
287 LibraryClass.SupModuleList = self.CommonDefines.SupModList\r
288 LibraryClass.RecommendedInstanceGuid = self.RecommendedInstanceGuid\r
289 LibraryClass.RecommendedInstanceVersion = self.RecommendedInstanceVersion\r
290 LibraryClass.HelpTextList = GetHelpTextList(self.HelpText)\r
291 \r
292 return LibraryClass\r
293 \r
294 def ToXml(self, LibraryClass, Key):\r
295 Element1 = CreateXmlElement('GUID', LibraryClass.RecommendedInstanceGuid, [], [['Version', LibraryClass.RecommendedInstanceVersion]])\r
296 Element2 = CreateXmlElement('RecommendedInstance', '', [Element1], [])\r
297 AttributeList = [['Keyword', LibraryClass.LibraryClass], \r
298 ['SupArchList', GetStringOfList(LibraryClass.SupArchList)],\r
299 ['SupModList', GetStringOfList(LibraryClass.SupModuleList)]\r
300 ]\r
301 NodeList = [['HeaderFile', LibraryClass.IncludeHeader],\r
302 Element2\r
303 ]\r
304 for Item in LibraryClass.HelpTextList:\r
305 Tmp = HelpTextXml()\r
306 NodeList.append(Tmp.ToXml(Item))\r
307 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
308\r
309 return Root\r
310\r
311 def __str__(self):\r
312 Str = "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" \\r
313 % (self.Keyword, self.HeaderFile, self.RecommendedInstanceGuid, self.RecommendedInstanceVersion, \\r
314 self.CommonDefines)\r
315 for Item in self.HelpText:\r
316 Str = Str + "\n\t" + str(Item)\r
317 return Str\r
318\r
319# IndustryStandardHeaderXml\r
320class IndustryStandardHeaderXml(object):\r
321 def __init__(self):\r
322 self.HeaderFile = ''\r
323 self.HelpText = []\r
324 \r
325 def FromXml(self, Item, Key):\r
326 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
327 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
328 HelpTextObj = HelpTextXml()\r
329 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
330 self.HelpText.append(HelpTextObj)\r
331 \r
332 Include = IncludeClass()\r
333 Include.FilePath = self.HeaderFile\r
334 Include.HelpTextList = GetHelpTextList(self.HelpText)\r
335 \r
336 return Include\r
337\r
338 def ToXml(self, IndustryStandardHeader, Key):\r
339 AttributeList = []\r
340 NodeList = [['HeaderFile', IndustryStandardHeader.FilePath]]\r
341 for Item in IndustryStandardHeader.HelpTextList:\r
342 Tmp = HelpTextXml()\r
343 NodeList.append(Tmp.ToXml(Item))\r
344 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
345\r
346 return Root\r
347\r
348 def __str__(self):\r
349 Str = "HeaderFile = %s" % (self.HeaderFile)\r
350 for Item in self.HelpText:\r
351 Str = Str + "\n\t" + str(Item)\r
352 return Str\r
353\r
354# PackageIncludeHeaderXml\r
355class PackageIncludeHeaderXml(object):\r
356 def __init__(self):\r
357 self.HeaderFile = ''\r
358 self.CommonDefines = CommonDefinesXml()\r
359 self.HelpText = []\r
360 \r
361 def FromXml(self, Item, Key):\r
362 self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r
363 self.CommonDefines.FromXml(XmlNode(Item, '%s/HeaderFile' % Key), Key)\r
364 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
365 HelpTextObj = HelpTextXml()\r
366 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
367 self.HelpText.append(HelpTextObj)\r
368\r
369 Include = IncludeClass()\r
370 Include.FilePath = self.HeaderFile\r
371 Include.SupArchList = self.CommonDefines.SupArchList\r
372 Include.SupModuleList = self.CommonDefines.SupModList\r
373 Include.HelpTextList = GetHelpTextList(self.HelpText)\r
374 \r
375 return Include\r
376\r
377 def ToXml(self, PackageIncludeHeader, Key):\r
378 AttributeList = [['SupArchList', PackageIncludeHeader.SupArchList],\r
379 ['SupModList', PackageIncludeHeader.SupModuleList]\r
380 ]\r
381 NodeList = [['HeaderFile', PackageIncludeHeader.FilePath]]\r
382 for Item in PackageIncludeHeader.HelpTextList:\r
383 Tmp = HelpTextXml()\r
384 NodeList.append(Tmp.ToXml(Item))\r
385 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
386 \r
387 return Root\r
388\r
389 def __str__(self):\r
390 Str = "HeaderFile = %s\n\t%s" % (self.HeaderFile, self.CommonDefines)\r
391 for Item in self.HelpText:\r
392 Str = Str + "\n\t" + str(Item)\r
393 return Str\r
394\r
395#GUID/Protocol/Ppi\r
396class GuidProtocolPpiXml(object):\r
397 def __init__(self):\r
398 self.UiName = ''\r
399 self.GuidTypes = ''\r
400 self.Notify = ''\r
401 self.CName = ''\r
402 self.GuidValue = ''\r
403 self.CommonDefines = CommonDefinesXml()\r
404 self.HelpText = []\r
405 \r
406 def FromXml(self, Item, Key):\r
407 self.UiName = XmlAttribute(XmlNode(Item, '%s' % Key), 'UiName')\r
408 self.GuidTypes = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidTypes')\r
409 self.GuidType = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidType')\r
410 self.Notify = XmlAttribute(XmlNode(Item, '%s' % Key), 'Notify')\r
411 self.CName = XmlElement(Item, '%s/CName' % Key)\r
412 self.GuidValue = XmlElement(Item, '%s/GuidValue' % Key)\r
413 self.VariableName = XmlElement(Item, '%s/VariableName' % Key)\r
414 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
415 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
416 HelpTextObj = HelpTextXml()\r
417 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
418 self.HelpText.append(HelpTextObj)\r
419 \r
420 GuidProtocolPpi = GuidProtocolPpiCommonClass()\r
421 GuidProtocolPpi.Name = self.UiName\r
422 GuidProtocolPpi.CName = self.CName\r
423 GuidProtocolPpi.Guid = self.GuidValue\r
424 GuidProtocolPpi.VariableName = self.VariableName\r
425 GuidProtocolPpi.Notify = self.Notify\r
426 GuidProtocolPpi.Usage = self.CommonDefines.Usage\r
427 GuidProtocolPpi.FeatureFlag = self.CommonDefines.FeatureFlag\r
428 GuidProtocolPpi.SupArchList = self.CommonDefines.SupArchList\r
429 GuidProtocolPpi.SupModuleList = self.CommonDefines.SupModList\r
430 GuidProtocolPpi.GuidTypeLists = self.GuidTypes\r
431 GuidProtocolPpi.GuidTypeList = self.GuidType\r
432 GuidProtocolPpi.HelpTextList = GetHelpTextList(self.HelpText)\r
433 \r
434 return GuidProtocolPpi\r
435\r
436 def ToXml(self, GuidProtocolPpi, Key):\r
437 AttributeList = [['Usage', GetStringOfList(GuidProtocolPpi.Usage)],\r
438 ['UiName', GuidProtocolPpi.Name],\r
439 ['GuidTypes', GetStringOfList(GuidProtocolPpi.GuidTypeLists)],\r
440 ['GuidType', GetStringOfList(GuidProtocolPpi.GuidTypeList)],\r
441 ['Notify', str(GuidProtocolPpi.Notify)],\r
442 ['SupArchList', GetStringOfList(GuidProtocolPpi.SupArchList)],\r
443 ['SupModList', GetStringOfList(GuidProtocolPpi.SupModuleList)],\r
444 ['FeatureFlag', GuidProtocolPpi.FeatureFlag]\r
445 ]\r
446 NodeList = [['CName', GuidProtocolPpi.CName], \r
447 ['GuidValue', GuidProtocolPpi.Guid],\r
448 ['VariableName', GuidProtocolPpi.VariableName]\r
449 ]\r
450 for Item in GuidProtocolPpi.HelpTextList:\r
451 Tmp = HelpTextXml()\r
452 NodeList.append(Tmp.ToXml(Item))\r
453 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
454 \r
455 return Root\r
456\r
457 def __str__(self):\r
458 Str = "UiName = %s Notify = %s GuidTypes = %s CName = %s GuidValue = %s %s" \\r
459 % (self.UiName, self.Notify, self.GuidTypes, self.CName, self.GuidValue, self.CommonDefines)\r
460 for Item in self.HelpText:\r
461 Str = Str + "\n\t" + str(Item)\r
462 return Str\r
463\r
464# PcdErrorXml\r
465class PcdErrorXml(object):\r
466 def __init__(self):\r
467 self.ValidValueList = ''\r
468 self.ValidValueListLang = ''\r
469 self.ValidValueRange = ''\r
470 self.Expression = ''\r
471 self.ErrorNumber = ''\r
472 self.ErrorMessage = []\r
473 \r
474 def FromXml(self, Item, Key):\r
475 self.ValidValueList = XmlElement(Item, '%s/ValidValueList' % Key)\r
476 self.ValidValueListLang = XmlAttribute(XmlNode(Item, '%s/ValidValueList' % Key), 'Lang')\r
477 self.ValidValueRange = XmlElement(Item, '%s/ValidValueRange' % Key)\r
478 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
479 self.ErrorNumber = XmlElement(Item, '%s/ErrorNumber' % Key)\r
480 for ErrMsg in XmlList(Item, '%s/ErrorMessage' % Key):\r
481 ErrorMessageString = XmlElement(ErrMsg, 'ErrorMessage')\r
482 ErrorMessageLang = XmlAttribute(XmlNode(ErrMsg, 'ErrorMessage'), 'Lang')\r
483 self.ErrorMessage.append((ErrorMessageLang, ErrorMessageString))\r
484 \r
485 Error = PcdErrorClass()\r
486 Error.ValidValueList = self.ValidValueList\r
487 Error.ValidValueListLang = self.ValidValueListLang\r
488 Error.ValidValueRange = self.ValidValueRange\r
489 Error.Expression = self.Expression\r
490 Error.ErrorNumber = self.ErrorNumber\r
491 Error.ErrorMessage = self.ErrorMessage\r
492 \r
493 return Error\r
494\r
495 def ToXml(self, PcdError, Key):\r
496 AttributeList = []\r
497 Element1 = CreateXmlElement('ValidValueList', PcdError.ValidValueList, [], [['Lang', PcdError.ValidValueListLang]])\r
498 NodeList = [Element1,\r
499 ['ValidValueRange', PcdError.ValidValueRange], \r
500 ['Expression', PcdError.Expression],\r
501 ['ErrorNumber', PcdError.ErrorNumber],\r
502 ]\r
503 for Item in PcdError.ErrorMessage:\r
504 Element = CreateXmlElement('ErrorMessage', Item[1], [], [['Lang', Item[0]]])\r
505 NodeList.append(Element)\r
506 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
507 \r
508 return Root\r
509\r
510 def __str__(self):\r
511 return "ValidValueList = %s ValidValueListLang = %s ValidValueRange = %s Expression = %s ErrorNumber = %s %s" \\r
512 % (self.ValidValueList, self.ValidValueListLang, self.ValidValueRange, self.Expression, self.ErrorNumber, self.ErrorMessage)\r
513\r
514# PcdEntryXml\r
515class PcdEntryXml(object):\r
516 def __init__(self):\r
517 self.PcdItemType = ''\r
518 self.PcdUsage = ''\r
519 self.TokenSpaceGuidCName = ''\r
520 self.TokenSpaceGuidValue = ''\r
521 self.Token = ''\r
522 self.CName = ''\r
523 self.PcdCName = ''\r
524 self.DatumType = ''\r
525 self.ValidUsage = ''\r
526 self.DefaultValue = ''\r
527 self.MaxDatumSize = ''\r
528 self.Value = ''\r
529 self.Offset = ''\r
530 self.CommonDefines = CommonDefinesXml()\r
531 self.HelpText = []\r
532 self.PcdError = []\r
533 \r
534 def FromXml(self, Item, Key):\r
535 self.PcdItemType = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdItemType')\r
536 self.PcdUsage = XmlAttribute(XmlNode(Item, '%s' % Key), 'PcdUsage')\r
537 self.TokenSpaceGuidCName = XmlElement(Item, '%s/TokenSpaceGuidCName' % Key)\r
538 self.TokenSpaceGuidValue = XmlElement(Item, '%s/TokenSpaceGuidValue' % Key)\r
539 self.Token = XmlElement(Item, '%s/Token' % Key)\r
540 self.CName = XmlElement(Item, '%s/CName' % Key)\r
541 self.PcdCName = XmlElement(Item, '%s/PcdCName' % Key)\r
542 self.DatumType = XmlElement(Item, '%s/DatumType' % Key)\r
543 self.ValidUsage = XmlElement(Item, '%s/ValidUsage' % Key)\r
544 self.DefaultValue = XmlElement(Item, '%s/DefaultValue' % Key)\r
545 self.MaxDatumSize = XmlElement(Item, '%s/MaxDatumSize' % Key)\r
546 self.Value = XmlElement(Item, '%s/Value' % Key)\r
547 self.Offset = XmlElement(Item, '%s/Offset' % Key)\r
548 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
549 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
550 HelpTextObj = HelpTextXml()\r
551 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
552 self.HelpText.append(HelpTextObj)\r
553 for PcdErrorItem in XmlList(Item, '%s/PcdError' % Key):\r
554 PcdErrorObj = PcdErrorXml()\r
555 PcdErrorObj.FromXml(PcdErrorItem, 'PcdError')\r
556 self.PcdError.append(PcdErrorObj)\r
557 \r
558 PcdEntry = PcdClass()\r
559 PcdEntry.SupArchList = self.CommonDefines.SupArchList\r
560 PcdEntry.SupModuleList = self.CommonDefines.SupModList\r
561 PcdEntry.TokenSpaceGuidCName = self.TokenSpaceGuidCName\r
562 PcdEntry.TokenSpaceGuidValue = self.TokenSpaceGuidValue\r
563 PcdEntry.Token = self.Token\r
564 PcdEntry.CName = self.CName\r
565 PcdEntry.PcdCName = self.PcdCName\r
566 PcdEntry.DatumType = self.DatumType\r
567 PcdEntry.ValidUsage = self.ValidUsage\r
568 PcdEntry.PcdUsage = self.PcdUsage\r
569 PcdEntry.Usage = self.CommonDefines.Usage\r
570 PcdEntry.DefaultValue = self.DefaultValue\r
571 PcdEntry.Value = self.Value\r
572 PcdEntry.Offset = self.Offset\r
573 PcdEntry.MaxDatumSize = self.MaxDatumSize\r
574 PcdEntry.FeatureFlag = self.CommonDefines.FeatureFlag\r
575 PcdEntry.PcdItemType = self.PcdItemType\r
576 PcdEntry.HelpTextList = GetHelpTextList(self.HelpText)\r
577 PcdEntry.PcdErrors = self.PcdError\r
578 \r
579 return PcdEntry\r
580\r
581 def ToXml(self, PcdEntry, Key):\r
582 AttributeList = [['SupArchList', GetStringOfList(PcdEntry.SupArchList)],\r
583 ['PcdUsage', PcdEntry.PcdUsage],\r
584 ['PcdItemType', PcdEntry.PcdItemType],\r
585 ['FeatureFlag', PcdEntry.FeatureFlag],\r
586 ['SupModList', GetStringOfList(PcdEntry.SupModuleList)]\r
587 ]\r
588 NodeList = [['TokenSpaceGuidCName', PcdEntry.TokenSpaceGuidCName],\r
589 ['TokenSpaceGuidValue', PcdEntry.TokenSpaceGuidValue],\r
590 ['Token', PcdEntry.Token], \r
591 ['CName', PcdEntry.CName],\r
592 ['PcdCName', PcdEntry.PcdCName],\r
593 ['DatumType', PcdEntry.DatumType],\r
594 ['ValidUsage', GetStringOfList(PcdEntry.ValidUsage)],\r
595 ['DefaultValue', PcdEntry.DefaultValue],\r
596 ['Value', PcdEntry.Value],\r
597 ['Offset', PcdEntry.Offset],\r
598 ['MaxDatumSize', PcdEntry.MaxDatumSize],\r
599 ]\r
600 for Item in PcdEntry.HelpTextList:\r
601 Tmp = HelpTextXml()\r
602 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
603 for Item in PcdEntry.PcdErrors:\r
604 Tmp = PcdErrorXml()\r
605 NodeList.append(Tmp.ToXml(Item, 'PcdError'))\r
606 \r
607 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
608 \r
609 return Root\r
610\r
611 def __str__(self):\r
612 Str = "PcdItemType = %s PcdUsage = %s TokenSpaceGuidCName = %s TokenSpaceGuidValue = %s Token = %s CName = %s PcdCName = %s DatumType = %s ValidUsage = %s DefaultValue = %s MaxDatumSize = %s Value = %s Offset = %s %s" \\r
613 % (self.PcdItemType, self.PcdUsage, self.TokenSpaceGuidCName, self.TokenSpaceGuidValue, self.Token, self.CName, self.PcdCName, self.DatumType, self.ValidUsage, self.DefaultValue, self.MaxDatumSize, self.Value, self.Offset, self.CommonDefines)\r
614 for Item in self.HelpText:\r
615 Str = Str + "\n\t" + str(Item)\r
616 for Item in self.PcdError:\r
617 Str = Str + "\n\tPcdError:" + str(Item)\r
618 return Str\r
619\r
620# PcdCheckXml\r
621class PcdCheckXml(object):\r
622 def __init__(self):\r
623 self.PcdCheck = ''\r
624 \r
625 def FromXml(self, Item, Key):\r
626 self.PcdCheck = XmlElement(Item, 'PcdCheck')\r
627 \r
628 return self.PcdCheck\r
629\r
630 def ToXml(self, PcdCheck, Key):\r
631 Root = CreateXmlElement('%s' % Key, PcdCheck, [], [])\r
632 return Root\r
633\r
634 def __str__(self):\r
635 return "PcdCheck = %s" % (self.PcdCheck)\r
636\r
637# MiscellaneousFileXml\r
638class MiscellaneousFileXml(object):\r
639 def __init__(self):\r
640 self.Header = HeaderXml()\r
641 self.Files = []\r
642 \r
643 def FromXml(self, Item, Key):\r
644 self.Header.FromXml(Item, Key)\r
645 NewItem = XmlNode(Item, '%s/Header' % Key)\r
646 self.Header.FromXml(NewItem, 'Header')\r
647 \r
648 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
649 Filename = XmlElement(SubItem, '%s/Filename' % Key)\r
650 Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
651 self.Files.append([Filename, Executable])\r
652 \r
653 MiscFile = MiscFileClass()\r
654 MiscFile.Copyright = self.Header.Copyright\r
655 MiscFile.License = self.Header.License\r
656 MiscFile.Abstract = self.Header.Abstract\r
657 MiscFile.Description = self.Header.Description\r
658 for File in self.Files:\r
659 FileObj = FileClass()\r
660 FileObj.Filename = File[0]\r
661 FileObj.Executable = File[1]\r
662 MiscFile.Files.append(FileObj)\r
663 \r
664 return MiscFile\r
665\r
666 def FromXml2(self, Item, Key):\r
667 NewItem = XmlNode(Item, '%s/Header' % Key)\r
668 self.Header.FromXml(NewItem, 'Header')\r
669 \r
670 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
671 Filename = XmlElement(SubItem, '%s/Filename' % Key)\r
672 Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r
673 self.Files.append([Filename, Executable])\r
674 \r
675 MiscFile = MiscFileClass()\r
676 MiscFile.Name = self.Header.Name\r
677 MiscFile.Copyright = self.Header.Copyright\r
678 MiscFile.License = self.Header.License\r
679 MiscFile.Abstract = self.Header.Abstract\r
680 MiscFile.Description = self.Header.Description\r
681 for File in self.Files:\r
682 FileObj = FileClass()\r
683 FileObj.Filename = File[0]\r
684 FileObj.Executable = File[1]\r
685 MiscFile.Files.append(FileObj)\r
686 \r
687 return MiscFile\r
688\r
689\r
690 def ToXml(self, MiscFile, Key):\r
691 if MiscFile:\r
692 NodeList = [['Copyright', MiscFile.Copyright],\r
693 ['License', MiscFile.License],\r
694 ['Abstract', MiscFile.Abstract],\r
695 ['Description', MiscFile.Description],\r
696 ]\r
697 if MiscFile != None:\r
698 for File in MiscFile.Files:\r
699 NodeList.append(CreateXmlElement('Filename', File.Filename, [], [['Executable', File.Executable]]))\r
700 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
701 \r
702 return Root\r
703 \r
704 def ToXml2(self, MiscFile, Key):\r
705 if MiscFile:\r
706 NodeList = [['Name', MiscFile.Name],\r
707 ['Copyright', MiscFile.Copyright],\r
708 ['License', MiscFile.License],\r
709 ['Abstract', MiscFile.Abstract],\r
710 ['Description', MiscFile.Description],\r
711 ]\r
712 HeaderNode = CreateXmlElement('Header', '', NodeList, [])\r
713 NodeList = [HeaderNode]\r
714 \r
715 for File in MiscFile.Files:\r
716 NodeList.append(CreateXmlElement('Filename', File.Filename, [], [['Executable', File.Executable]]))\r
717 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
718 \r
719 return Root\r
720 \r
721 def __str__(self):\r
722 Str = str(self.Header)\r
723 for Item in self.Files:\r
724 Str = Str + '\n\tFilename:' + str(Item)\r
725 return Str \r
726\r
727# UserExtensionsXml\r
728class UserExtensionsXml(object):\r
729 def __init__(self):\r
730 self.UserId = ''\r
731 self.Identifier = ''\r
732 self.Defines = []\r
733 self.BuildOptions = []\r
734 \r
735 def FromXml(self, Item, Key):\r
736 self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r
737 self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r
738 for SubItem in XmlList(Item, '%s/Define' % Key):\r
739 self.Defines.append(XmlElement(SubItem, '%s/Define' % Key))\r
740 for SubItem in XmlList(Item, '%s/BuildOption' % Key):\r
741 self.BuildOptions.append(XmlElement(SubItem, '%s/BuildOption' % Key))\r
742 \r
743 UserExtension = UserExtensionsClass()\r
744 UserExtension.UserID = self.UserId\r
745 UserExtension.Identifier = self.Identifier\r
746 UserExtension.Defines = self.Defines\r
747 UserExtension.BuildOptions = self.BuildOptions\r
748 \r
749 return UserExtension\r
750\r
751 def ToXml(self, UserExtension, Key):\r
752 AttributeList = [['UserId', str(UserExtension.UserID)],\r
753 ['Identifier', str(UserExtension.Identifier)]\r
754 ]\r
755 NodeList = []\r
756 for Item in UserExtension.Defines:\r
757 NodeList.append(['Define', Item])\r
758 for Item in UserExtension.BuildOptions:\r
759 NodeList.append(['BuildOption', Item])\r
760 Root = CreateXmlElement('%s' % Key, UserExtension.Content, NodeList, AttributeList)\r
761 \r
762 return Root\r
763 \r
764 def __str__(self):\r
765 Str = "UserId = %s Identifier = %s" % (self.UserId, self.Identifier)\r
766 Str = Str + '\n\tDefines:' + str(self.Defines)\r
767 Str = Str + '\n\tBuildOptions:' + str(self.BuildOptions)\r
768 return Str\r
769\r
770# BootModeXml\r
771class BootModeXml(object):\r
772 def __init__(self):\r
773 self.SupportedBootModes = ''\r
774 self.CommonDefines = CommonDefinesXml()\r
775 self.HelpText = []\r
776 \r
777 def FromXml(self, Item, Key):\r
778 self.SupportedBootModes = XmlElement(Item, '%s/SupportedBootModes' % Key)\r
779 self.CommonDefines.FromXml(Item, Key)\r
780 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
781 HelpTextObj = HelpTextXml()\r
782 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
783 self.HelpText.append(HelpTextObj)\r
784 \r
785 BootMode = ModuleBootModeClass()\r
786 BootMode.Name = self.SupportedBootModes\r
787 BootMode.SupArchList = self.CommonDefines.SupArchList\r
788 BootMode.Usage = self.CommonDefines.Usage\r
789 BootMode.FeatureFlag = self.CommonDefines.FeatureFlag\r
790 BootMode.HelpTextList = GetHelpTextList(self.HelpText)\r
791 \r
792 return BootMode\r
793\r
794 def ToXml(self, BootMode, Key):\r
795 AttributeList = [['Usage', BootMode.Usage],\r
796 ['SupArchList', GetStringOfList(BootMode.SupArchList)],\r
797 ['FeatureFlag', BootMode.FeatureFlag],\r
798 ]\r
799 NodeList = [['SupportedBootModes', BootMode.Name]]\r
800 for Item in BootMode.HelpTextList:\r
801 Tmp = HelpTextXml()\r
802 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
803 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
804 \r
805 return Root\r
806 \r
807 def __str__(self):\r
808 Str = "SupportedBootModes = %s %s" % (self.SupportedBootModes, self.CommonDefines)\r
809 for Item in self.HelpText:\r
810 Str = Str + '\n\t' + str(Item)\r
811 return Str\r
812\r
813# EventXml\r
814class EventXml(object):\r
815 def __init__(self):\r
816 self.EventType = ''\r
817 self.Name = ''\r
818 self.CommonDefines = CommonDefinesXml()\r
819 self.HelpText = []\r
820 \r
821 def FromXml(self, Item, Key):\r
822 self.EventType = XmlAttribute(XmlNode(Item, '%s' % Key), 'EventType')\r
823 self.Name = XmlElement(Item, '%s' % Key)\r
824 self.CommonDefines.FromXml(Item, Key)\r
825 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
826 HelpTextObj = HelpTextXml()\r
827 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
828 self.HelpText.append(HelpTextObj)\r
829 \r
830 Event = ModuleEventClass()\r
831 Event.Type = self.EventType\r
832 Event.GuidCName = self.Name\r
833 Event.SupArchList = self.CommonDefines.SupArchList\r
834 Event.Usage = self.CommonDefines.Usage\r
835 Event.FeatureFlag = self.CommonDefines.FeatureFlag\r
836 Event.HelpTextList = GetHelpTextList(self.HelpText)\r
837 \r
838 return Event\r
839\r
840 def ToXml(self, Event, Key):\r
841 AttributeList = [['EventType', Event.Type],\r
842 ['Usage', Event.Usage],\r
843 ['SupArchList', GetStringOfList(Event.SupArchList)],\r
844 ['FeatureFlag', Event.FeatureFlag],\r
845 ]\r
846 NodeList = []\r
847 for Item in Event.HelpTextList:\r
848 Tmp = HelpTextXml()\r
849 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
850 Root = CreateXmlElement('%s' % Key, Event.GuidCName, NodeList, AttributeList)\r
851 \r
852 return Root\r
853 \r
854 def __str__(self):\r
855 Str = "EventType = %s %s" % (self.EventType, self.CommonDefines)\r
856 for Item in self.HelpText:\r
857 Str = Str + '\n\t' + str(Item)\r
858 return Str\r
859\r
860# HobXml\r
861class HobXml(object):\r
862 def __init__(self):\r
863 self.HobType = ''\r
864 self.Name = ''\r
865 self.CommonDefines = CommonDefinesXml()\r
866 self.HelpText = []\r
867 \r
868 def FromXml(self, Item, Key):\r
869 self.HobType = XmlAttribute(XmlNode(Item, '%s' % Key), 'HobType')\r
870 self.Name = XmlElement(Item, '%s' % Key)\r
871 self.CommonDefines.FromXml(Item, Key)\r
872 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
873 HelpTextObj = HelpTextXml()\r
874 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
875 self.HelpText.append(HelpTextObj)\r
876 \r
877 Hob = ModuleHobClass()\r
878 Hob.Type = self.HobType\r
879 Hob.GuidCName = self.Name\r
880 Hob.SupArchList = self.CommonDefines.SupArchList\r
881 Hob.Usage = self.CommonDefines.Usage\r
882 Hob.FeatureFlag = self.CommonDefines.FeatureFlag\r
883 Hob.HelpTextList = GetHelpTextList(self.HelpText)\r
884 \r
885 return Hob\r
886\r
887 def ToXml(self, Hob, Key):\r
888 AttributeList = [['EventType', Hob.Type],\r
889 ['Usage', Hob.Usage],\r
890 ['SupArchList', GetStringOfList(Hob.SupArchList)],\r
891 ['FeatureFlag', Hob.FeatureFlag],\r
892 ]\r
893 NodeList = []\r
894 for Item in Hob.HelpTextList:\r
895 Tmp = HelpTextXml()\r
896 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
897 Root = CreateXmlElement('%s' % Key, Hob.GuidCName, NodeList, AttributeList)\r
898 \r
899 return Root\r
900 \r
901 def __str__(self):\r
902 Str = "HobType = %s %s" % (self.HobType, self.CommonDefines)\r
903 for Item in self.HelpText:\r
904 Str = Str + '\n\t' + str(Item)\r
905 return Str\r
906\r
907# ModulePropertyXml\r
908class ModulePropertyXml(object):\r
909 def __init__(self):\r
910 self.CommonDefines = CommonDefinesXml()\r
911 self.ModuleType = ''\r
912 self.Path = ''\r
913 self.PcdIsDriver = ''\r
914 self.UefiSpecificationVersion = ''\r
915 self.PiSpecificationVersion = ''\r
916 self.Specification = ''\r
917 self.SpecificationVersion = ''\r
918 self.BootModes = []\r
919 self.Events = []\r
920 self.HOBs = []\r
921 \r
922 def FromXml(self, Item, Key, Header = None):\r
923 self.CommonDefines.FromXml(Item, Key)\r
924 self.ModuleType = XmlElement(Item, '%s/ModuleType' % Key)\r
925 self.Path = XmlElement(Item, '%s/Path' % Key)\r
926 self.PcdIsDriver = XmlElement(Item, '%s/PcdIsDriver' % Key)\r
927 self.UefiSpecificationVersion = XmlElement(Item, '%s/UefiSpecificationVersion' % Key)\r
928 self.PiSpecificationVersion = XmlElement(Item, '%s/PiSpecificationVersion' % Key)\r
929 self.Specification = XmlElement(Item, '%s/Specification' % Key)\r
930 self.SpecificationVersion = XmlAttribute(XmlNode(Item, '%s/Specification' % Key), 'Version')\r
931 for SubItem in XmlList(Item, '%s/BootMode' % Key):\r
932 A = BootModeXml()\r
933 BootMode = A.FromXml(SubItem, 'BootMode')\r
934 self.BootModes.append(BootMode)\r
935 for SubItem in XmlList(Item, '%s/Event' % Key):\r
936 A = EventXml()\r
937 Event = A.FromXml(SubItem, 'Event')\r
938 self.Events.append(Event)\r
939 for SubItem in XmlList(Item, '%s/HOB' % Key):\r
940 A = HobXml()\r
941 Hob = A.FromXml(SubItem, 'HOB')\r
942 self.HOBs.append(Hob)\r
943 \r
944 if Header == None:\r
945 Header = ModuleHeaderClass()\r
946 \r
947 Header.ModuleType = self.ModuleType\r
948 Header.SupArchList = self.CommonDefines.SupArchList\r
949 Header.SupModuleList = self.CommonDefines.SupModList\r
950 Header.CombinePath = self.Path\r
951 Header.PcdIsDriver = self.PcdIsDriver\r
952 Header.UefiSpecificationVersion = self.UefiSpecificationVersion\r
953 Header.PiSpecificationVersion = self.PiSpecificationVersion\r
954 \r
955 return Header, self.BootModes, self.Events, self.HOBs\r
956 \r
957 \r
958 def ToXml(self, Header, BootModes, Events, Hobs, Key):\r
959 AttributeList = [['SupArchList', GetStringOfList(Header.SupArchList)],\r
960 ['SupModList', GetStringOfList(Header.SupModuleList)],\r
961 ]\r
962 NodeList = [['ModuleType', Header.ModuleType],\r
963 ['Path', Header.CombinePath],\r
964 ['PcdIsDriver', Header.PcdIsDriver],\r
965 ['UefiSpecificationVersion', Header.UefiSpecificationVersion],\r
966 ['PiSpecificationVersion', Header.PiSpecificationVersion],\r
967 ]\r
968 for Item in BootModes:\r
969 Tmp = BootModeXml()\r
970 NodeList.append(Tmp.ToXml(Item, 'BootMode'))\r
971 for Item in Events:\r
972 Tmp = EventXml()\r
973 NodeList.append(Tmp.ToXml(Item, 'Event'))\r
974 for Item in Hobs:\r
975 Tmp = HobXml()\r
976 NodeList.append(Tmp.ToXml(Item, 'Hob'))\r
977 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
978 \r
979 return Root\r
980 \r
981 def __str__(self):\r
982 Str = "ModuleType = %s Path = %s PcdIsDriver = %s UefiSpecificationVersion = %s PiSpecificationVersion = %s Specification = %s SpecificationVersion = %s %s" \\r
983 % (self.ModuleType, self.Path, self.PcdIsDriver, self.UefiSpecificationVersion, self.PiSpecificationVersion, \\r
984 self.Specification, self.SpecificationVersion, self.CommonDefines)\r
985 for Item in self.BootModes:\r
986 Str = Str + '\n\t' + str(Item)\r
987 for Item in self.Events:\r
988 Str = Str + '\n\t' + str(Item)\r
989 for Item in self.HOBs:\r
990 Str = Str + '\n\t' + str(Item)\r
991 return Str\r
992\r
993# SourceFileXml\r
994class SourceFileXml(object):\r
995 def __init__(self):\r
996 self.SourceFile = ''\r
997 self.ToolChainFamily = ''\r
998 self.FileType = ''\r
999 self.CommonDefines = CommonDefinesXml()\r
1000\r
1001 def FromXml(self, Item, Key):\r
1002 self.ToolChainFamily = XmlAttribute(Item, 'Family')\r
1003 self.FileType = XmlAttribute(Item, 'FileType')\r
1004 self.SourceFile = XmlElement(Item, 'Filename')\r
1005 self.CommonDefines.FromXml(Item, Key)\r
1006 \r
1007 SourceFile = ModuleSourceFileClass()\r
1008 SourceFile.SourceFile = self.SourceFile\r
1009 SourceFile.FileType = self.FileType\r
1010 SourceFile.ToolChainFamily = self.ToolChainFamily\r
1011 SourceFile.SupArchList = self.CommonDefines.SupArchList\r
1012 SourceFile.FeatureFlag = self.CommonDefines.FeatureFlag\r
1013 \r
1014 return SourceFile\r
1015 \r
1016 def ToXml(self, SourceFile, Key):\r
1017 AttributeList = [['SupArchList', GetStringOfList(SourceFile.SupArchList)],\r
1018 ['Family', SourceFile.ToolChainFamily],\r
1019 ['FileType', SourceFile.FileType],\r
1020 ['FeatureFlag', SourceFile.FeatureFlag],\r
1021 ]\r
1022 Root = CreateXmlElement('%s' % Key, SourceFile.SourceFile, [], AttributeList)\r
1023 \r
1024 return Root\r
1025\r
1026# FilenameXml\r
1027class FilenameXml(object):\r
1028 def __init__(self):\r
1029 self.OS = ''\r
1030 self.Family = ''\r
1031 self.FileType = ''\r
1032 self.Filename = ''\r
1033 self.Executable = ''\r
1034 self.CommonDefines = CommonDefinesXml()\r
1035 \r
1036 def FromXml(self, Item, Key):\r
1037 self.OS = XmlAttribute(Item, 'OS')\r
1038 self.Family = XmlAttribute(Item, 'Family')\r
1039 self.FileType = XmlAttribute(Item, 'FileType')\r
1040 self.Filename = XmlElement(Item, 'Filename')\r
1041 self.Executable = XmlElement(Item, 'Executable')\r
1042 self.CommonDefines.FromXml(Item, Key)\r
1043 \r
1044 Filename = FileClass()\r
1045 Filename.Family = self.Family\r
1046 Filename.FileType = self.FileType\r
1047 Filename.Filename = self.Filename\r
1048 Filename.Executable = self.Executable\r
1049 Filename.SupArchList = self.CommonDefines.SupArchList\r
1050 Filename.FeatureFlag = self.CommonDefines.FeatureFlag\r
1051 \r
1052 return Filename\r
1053 \r
1054 def ToXml(self, Filename, Key):\r
1055 AttributeList = [['SupArchList', GetStringOfList(Filename.SupArchList)],\r
1056 ['Family', Filename.Family],\r
1057 ['FileType', Filename.FileType],\r
1058 ['Executable', Filename.Executable],\r
1059 ['FeatureFlag', Filename.FeatureFlag],\r
1060 ]\r
1061 NodeList = [['Filename', Filename.Filename],\r
1062 ]\r
1063 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
1064 \r
1065 return Root\r
1066 \r
1067 def __str__(self):\r
1068 return "OS = %s Family = %s FileType = %s Filename = %s Executable = %s %s" \\r
1069 % (self.OS, self.Family, self.FileType, self.Filename, self.Executable, self.CommonDefines)\r
1070 \r
1071class BinaryFileXml(object):\r
1072 def __init__(self):\r
1073 self.Filenames = []\r
1074 self.PatchPcdValues = []\r
1075 self.PcdExValues = []\r
1076 self.LibraryInstances = []\r
1077 self.BuildFlags = []\r
1078 \r
1079 def FromXml(self, Item, Key):\r
1080 BinaryFile = ModuleBinaryFileClass()\r
1081 for SubItem in XmlList(Item, '%s/Filename' % Key):\r
1082 A = FilenameXml()\r
1083 B = A.FromXml(SubItem, 'Filename')\r
1084 BinaryFile.Filenames.append(B)\r
1085 for SubItem in XmlList(Item, '%s/AsBuilt/PatchPcdValue' % Key):\r
1086 A = PcdEntryXml()\r
1087 B = A.FromXml(SubItem, 'PatchPcdValue')\r
1088 BinaryFile.PatchPcdValues.append(B)\r
1089 for SubItem in XmlList(Item, '%s/AsBuilt/PcdExValue' % Key):\r
1090 A = PcdEntryXml()\r
1091 B = A.FromXml(SubItem, 'PcdExValue')\r
1092 BinaryFile.PatchPcdValues.append(B)\r
1093 for SubItem in XmlList(Item, '%s/AsBuilt/LibraryInstances/GUID' % Key):\r
1094 GUID = XmlElement(SubItem, 'GUID')\r
1095 Version = XmlAttribute(XmlNode(SubItem, 'GUID'), 'Version')\r
1096 BinaryFile.LibraryInstances.append([GUID, Version])\r
1097 for SubItem in XmlList(Item, '%s/AsBuilt/BuildFlags' % Key):\r
1098 BinaryFile.BuildFlags.append(XmlElement(SubItem, 'BuildFlags'))\r
1099 \r
1100 return BinaryFile\r
1101 \r
1102 def ToXml(self, BinaryFile, Key):\r
1103 NodeList = []\r
1104 for Item in BinaryFile.Filenames:\r
1105 Tmp = FilenameXml()\r
1106 NodeList.append(Tmp.ToXml(Item, 'Filename'))\r
1107 AsBuiltNodeList = []\r
1108 for Item in BinaryFile.PatchPcdValues:\r
1109 Tmp = PcdEntryXml()\r
1110 AsBuiltNodeList.append(Tmp.ToXml(Item, 'PatchPcdValue'))\r
1111 for Item in BinaryFile.PcdExValues:\r
1112 Tmp = PcdEntryXml()\r
1113 AsBuiltNodeList.append(Tmp.ToXml(Item, 'PcdExValue'))\r
1114 LibNodeList = []\r
1115 for Item in BinaryFile.LibraryInstances:\r
1116 LibNode = CreateXmlElement('GUID', Item[0], [], [['Version', Item[1]]])\r
1117 LibNodeList.append(LibNode)\r
1118 if LibNodeList:\r
1119 AsBuiltNodeList.append(CreateXmlElement('LibraryInstances', '', LibNodeList, []))\r
1120 for Item in BinaryFile.BuildFlags:\r
1121 AsBuiltNodeList.append(CreateXmlElement('BuildFlags', Item, [], []))\r
1122 Element = CreateXmlElement('AsBuilt', '', AsBuiltNodeList, [])\r
1123 NodeList.append(Element)\r
1124 \r
1125 Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r
1126\r
1127 return Root\r
1128 \r
1129 def __str__(self):\r
1130 Str = "BinaryFiles:"\r
1131 for Item in self.Filenames:\r
1132 Str = Str + '\n\t' + str(Item)\r
1133 for Item in self.PatchPcdValues:\r
1134 Str = Str + '\n\t' + str(Item)\r
1135 for Item in self.PcdExValues:\r
1136 Str = Str + '\n\t' + str(Item)\r
1137 for Item in self.LibraryInstances:\r
1138 Str = Str + '\n\t' + str(Item)\r
1139 for Item in self.BuildFlags:\r
1140 Str = Str + '\n\t' + str(Item)\r
1141 return Str\r
1142\r
1143# PackageXml\r
1144class PackageXml(object):\r
1145 def __init__(self):\r
1146 self.Description = ''\r
1147 self.Guid = ''\r
1148 self.Version = ''\r
1149 self.CommonDefines = CommonDefinesXml()\r
1150 \r
1151 def FromXml(self, Item, Key):\r
1152 self.Description = XmlElement(Item, '%s/Description' % Key) \r
1153 self.Guid = XmlElement(Item, '%s/GUID' % Key)\r
1154 self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r
1155 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r
1156 \r
1157 PackageDependency = ModulePackageDependencyClass()\r
1158 PackageDependency.FilePath = self.Description\r
1159 PackageDependency.PackageGuid = self.Guid\r
1160 PackageDependency.PackageVersion = self.Version\r
1161 PackageDependency.FeatureFlag = self.CommonDefines.FeatureFlag\r
1162 PackageDependency.SupArchList = self.CommonDefines.SupArchList\r
1163 \r
1164 return PackageDependency\r
1165\r
1166 def ToXml(self, PackageDependency, Key):\r
1167 AttributeList = [['SupArchList', GetStringOfList(PackageDependency.SupArchList)],\r
1168 ['FeatureFlag', PackageDependency.FeatureFlag],\r
1169 ]\r
1170 Element1 = CreateXmlElement('GUID', PackageDependency.PackageGuid, [], [['Version', PackageDependency.PackageVersion]])\r
1171 NodeList = [['Description', PackageDependency.FilePath],\r
1172 Element1,\r
1173 ]\r
1174\r
1175 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
1176 \r
1177 return Root\r
1178\r
1179 def __str__(self):\r
1180 Str = "Description = %s Guid = %s Version = %s %s" \\r
1181 % (self.Description, self.Guid, self.Version, self.CommonDefines)\r
1182 return Str\r
1183\r
1184# ExternXml\r
1185class ExternXml(object):\r
1186 def __init__(self):\r
1187 self.CommonDefines = CommonDefinesXml()\r
1188 self.EntryPoint = ''\r
1189 self.UnloadImage = ''\r
1190 self.Constructor = ''\r
1191 self.Destructor = ''\r
1192 self.HelpText = []\r
1193 \r
1194 def FromXml(self, Item, Key):\r
1195 self.CommonDefines.FromXml(Item, Key)\r
1196 self.EntryPoint = XmlElement(Item, '%s/EntryPoint' % Key)\r
1197 self.UnloadImage = XmlElement(Item, '%s/UnloadImage' % Key)\r
1198 self.Constructor = XmlElement(Item, '%s/Constructor' % Key)\r
1199 self.Destructor = XmlElement(Item, '%s/Destructor' % Key)\r
1200 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
1201 HelpTextObj = HelpTextXml()\r
1202 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
1203 self.HelpText.append(HelpTextObj)\r
1204 \r
1205 Extern = ModuleExternClass()\r
1206 Extern.EntryPoint = self.EntryPoint\r
1207 Extern.UnloadImage = self.UnloadImage\r
1208 Extern.Constructor = self.Constructor\r
1209 Extern.Destructor = self.Destructor\r
1210 Extern.SupArchList = self.CommonDefines.SupArchList\r
1211 Extern.FeatureFlag = self.CommonDefines.FeatureFlag\r
1212 Extern.HelpTextList = GetHelpTextList(self.HelpText)\r
1213 \r
1214 return Extern\r
1215 \r
1216 def ToXml(self, Extern, Key):\r
1217 AttributeList = [['SupArchList', GetStringOfList(Extern.SupArchList)],\r
1218 ['FeatureFlag', Extern.FeatureFlag],\r
1219 ]\r
1220 NodeList = [['EntryPoint', Extern.EntryPoint],\r
1221 ['UnloadImage', Extern.UnloadImage],\r
1222 ['Constructor', Extern.Constructor],\r
1223 ['Destructor', Extern.Destructor],\r
1224 ]\r
1225 for Item in Extern.HelpTextList:\r
1226 Tmp = HelpTextXml()\r
1227 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
1228\r
1229 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
1230 \r
1231 return Root\r
1232 \r
1233 def __str__(self): \r
1234 Str = "EntryPoint = %s UnloadImage = %s Constructor = %s Destructor = %s %s" \\r
1235 % (self.EntryPoint, self.UnloadImage, self.Constructor, self.Destructor, self.CommonDefines)\r
1236 for Item in self.HelpText:\r
1237 Str = Str + '\n\t' + str(Item)\r
1238 return Str\r
1239# DepexXml\r
1240class DepexXml(object):\r
1241 def __init__(self):\r
1242 self.Expression = ''\r
1243 #self.HelpText = HelpTextXml()\r
1244 self.HelpText = []\r
1245 \r
1246 def FromXml(self, Item, Key):\r
1247 self.Expression = XmlElement(Item, '%s/Expression' % Key)\r
1248 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r
1249 HelpTextObj = HelpTextXml()\r
1250 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r
1251 self.HelpText.append(HelpTextObj)\r
1252 \r
1253 Depex = ModuleDepexClass()\r
1254 Depex.Depex = self.Expression\r
1255 Depex.HelpTextList = GetHelpTextList(self.HelpText)\r
1256\r
1257 return Depex\r
1258 \r
1259 def ToXml(self, Depex, Key):\r
1260 AttributeList = []\r
1261 NodeList = [['Expression', Depex.Depex],\r
1262 ]\r
1263 for Item in Depex.HelpTextList:\r
1264 Tmp = HelpTextXml()\r
1265 NodeList.append(Tmp.ToXml(Item, 'HelpText'))\r
1266\r
1267 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r
1268 \r
1269 return Root\r
1270 \r
1271 def __str__(self): \r
1272 Str = "Expression = %s" % (self.Expression)\r
1273 for Item in self.HelpText:\r
1274 Str = Str + '\n\t' + str(Item)\r
1275 return Str\r
1276\r
1277# PackageSurfaceAreaXml\r
1278class PackageSurfaceAreaXml(object):\r
1279 def __init__(self):\r
1280 self.Package = None\r
1281 \r
1282 def FromXml(self, Item, Key):\r
1283 # Create a package object\r
1284 Package = PackageClass()\r
1285 \r
1286 # Header\r
1287 Tmp = PackageHeaderXml()\r
1288 PackageHeader = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/Header'), 'Header')\r
1289 Package.PackageHeader = PackageHeader\r
1290 \r
1291 # ClonedFrom\r
1292 Tmp = ClonedFromXml()\r
1293 ClonedFrom = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
1294 if ClonedFrom:\r
1295 Package.PackageHeader.ClonedFrom.append(ClonedFrom)\r
1296 \r
1297 # LibraryClass\r
1298 for SubItem in XmlList(Item, '/PackageSurfaceArea/LibraryClassDeclarations/LibraryClass'):\r
1299 Tmp = LibraryClassXml()\r
1300 LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
1301 Package.LibraryClassDeclarations.append(LibraryClass)\r
1302 \r
1303 # IndustryStandardHeader\r
1304 for SubItem in XmlList(Item, '/PackageSurfaceArea/IndustryStandardIncludes/IndustryStandardHeader'):\r
1305 Tmp = IndustryStandardHeaderXml()\r
1306 Include = Tmp.FromXml(SubItem, 'IndustryStandardHeader')\r
1307 Package.IndustryStdHeaders.append(Include)\r
1308\r
1309 # PackageHeader\r
1310 for SubItem in XmlList(Item, '/PackageSurfaceArea/PackageIncludes/PackageHeader'):\r
1311 Tmp = PackageIncludeHeaderXml()\r
1312 Include = Tmp.FromXml(SubItem, 'PackageHeader')\r
1313 Package.PackageIncludePkgHeaders.append(Include)\r
1314 \r
1315 # Guid\r
1316 for SubItem in XmlList(Item, '/PackageSurfaceArea/GuidDeclarations/Entry'):\r
1317 Tmp = GuidProtocolPpiXml()\r
1318 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
1319 Package.GuidDeclarations.append(GuidProtocolPpi)\r
1320 \r
1321 # Protocol\r
1322 for SubItem in XmlList(Item, '/PackageSurfaceArea/ProtocolDeclarations/Entry'):\r
1323 Tmp = GuidProtocolPpiXml()\r
1324 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
1325 Package.ProtocolDeclarations.append(GuidProtocolPpi)\r
1326\r
1327 # Ppi\r
1328 for SubItem in XmlList(Item, '/PackageSurfaceArea/PpiDeclarations/Entry'):\r
1329 Tmp = GuidProtocolPpiXml()\r
1330 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Entry')\r
1331 Package.PpiDeclarations.append(GuidProtocolPpi)\r
1332 \r
1333 # PcdEntry\r
1334 for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdDeclarations/PcdEntry'):\r
1335 Tmp = PcdEntryXml()\r
1336 PcdEntry = Tmp.FromXml(SubItem, 'PcdEntry')\r
1337 Package.PcdDeclarations.append(PcdEntry)\r
1338 \r
1339 # PcdCheck\r
1340 for SubItem in XmlList(Item, '/PackageSurfaceArea/PcdRelationshipChecks/PcdCheck'):\r
1341 Tmp = PcdCheckXml()\r
1342 PcdCheck = Tmp.FromXml(SubItem, 'PcdCheck')\r
1343 Package.PcdChecks.append(PcdCheck)\r
1344 \r
1345 # MiscellaneousFile\r
1346 Tmp = MiscellaneousFileXml()\r
1347 Package.MiscFiles = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
1348 \r
1349 # UserExtensions\r
1350 Tmp = UserExtensionsXml()\r
1351 Package.UserExtensions = Tmp.FromXml(XmlNode(Item, '/PackageSurfaceArea/UserExtensions'), 'UserExtensions')\r
1352 \r
1353 # Modules\r
1354 for SubItem in XmlList(Item, '/PackageSurfaceArea/Modules/ModuleSurfaceArea'):\r
1355 Tmp = ModuleSurfaceAreaXml()\r
1356 Module = Tmp.FromXml(SubItem, 'ModuleSurfaceArea')\r
1357 Package.Modules[(Module.ModuleHeader.Guid, Module.ModuleHeader.Version, Module.ModuleHeader.CombinePath)] = Module\r
1358 \r
1359 self.Package = Package\r
1360 return self.Package\r
1361\r
1362 def ToXml(self, Package):\r
1363 # Create PackageSurfaceArea node\r
1364 DomPackage = minidom.Document().createElement('PackageSurfaceArea')\r
1365 \r
1366 # Header\r
1367 Tmp = PackageHeaderXml()\r
1368 DomPackage.appendChild(Tmp.ToXml(Package.PackageHeader, 'Header'))\r
1369 \r
1370 # ClonedFrom\r
1371 Tmp = ClonedFromXml()\r
1372 if Package.PackageHeader.ClonedFrom != []:\r
1373 DomPackage.appendChild(Tmp.ToXml(Package.PackageHeader.ClonedFrom[0], 'ClonedFrom'))\r
1374 \r
1375 # LibraryClass\r
1376 LibraryClassNode = CreateXmlElement('LibraryClassDeclarations', '', [], [])\r
1377 for LibraryClass in Package.LibraryClassDeclarations:\r
1378 Tmp = LibraryClassXml()\r
1379 LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))\r
1380 DomPackage.appendChild(LibraryClassNode)\r
1381 \r
1382 # IndustryStandardHeader\r
1383 IndustryStandardHeaderNode = CreateXmlElement('IndustryStandardIncludes', '', [], [])\r
1384 for Include in Package.IndustryStdHeaders:\r
1385 Tmp = IndustryStandardHeaderXml()\r
1386 IndustryStandardHeaderNode.appendChild(Tmp.ToXml(Include, 'IndustryStandardHeader'))\r
1387 DomPackage.appendChild(IndustryStandardHeaderNode)\r
1388 \r
1389 # PackageHeader\r
1390 PackageIncludeHeaderNode = CreateXmlElement('PackageIncludes', '', [], [])\r
1391 for Include in Package.PackageIncludePkgHeaders:\r
1392 Tmp = PackageIncludeHeaderXml()\r
1393 PackageIncludeHeaderNode.appendChild(Tmp.ToXml(Include, 'PackageHeader'))\r
1394 DomPackage.appendChild(PackageIncludeHeaderNode)\r
1395 \r
1396 # Guid\r
1397 GuidProtocolPpiNode = CreateXmlElement('GuidDeclarations', '', [], [])\r
1398 for GuidProtocolPpi in Package.GuidDeclarations:\r
1399 Tmp = GuidProtocolPpiXml()\r
1400 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
1401 DomPackage.appendChild(GuidProtocolPpiNode)\r
1402 \r
1403 # Protocol\r
1404 GuidProtocolPpiNode = CreateXmlElement('ProtocolDeclarations', '', [], [])\r
1405 for GuidProtocolPpi in Package.ProtocolDeclarations:\r
1406 Tmp = GuidProtocolPpiXml()\r
1407 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
1408 DomPackage.appendChild(GuidProtocolPpiNode)\r
1409\r
1410 # Ppi\r
1411 GuidProtocolPpiNode = CreateXmlElement('PpiDeclarations', '', [], [])\r
1412 for GuidProtocolPpi in Package.PpiDeclarations:\r
1413 Tmp = GuidProtocolPpiXml()\r
1414 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Entry'))\r
1415 DomPackage.appendChild(GuidProtocolPpiNode)\r
1416 \r
1417 # PcdEntry\r
1418 PcdEntryNode = CreateXmlElement('PcdDeclarations', '', [], [])\r
1419 for PcdEntry in Package.PcdDeclarations:\r
1420 Tmp = PcdEntryXml()\r
1421 PcdEntryNode.appendChild(Tmp.ToXml(PcdEntry, 'PcdEntry'))\r
1422 DomPackage.appendChild(PcdEntryNode)\r
1423 \r
1424 # PcdCheck\r
1425 PcdCheckNode = CreateXmlElement('PcdRelationshipChecks', '', [], [])\r
1426 for PcdCheck in Package.PcdChecks:\r
1427 Tmp = PcdCheckXml()\r
1428 PcdCheckNode.appendChild(Tmp.ToXml(PcdCheck, 'PcdCheck'))\r
1429 DomPackage.appendChild(PcdCheckNode)\r
1430 \r
1431 # MiscellaneousFile\r
1432 Tmp = MiscellaneousFileXml()\r
1433 DomPackage.appendChild(Tmp.ToXml(Package.MiscFiles, 'MiscellaneousFiles'))\r
1434 \r
1435 # UserExtensions\r
1436 Tmp = UserExtensionsXml()\r
1437 DomPackage.appendChild(Tmp.ToXml(Package.UserExtensions, 'UserExtensions'))\r
1438 \r
1439 # Modules\r
1440 ModuleNode = CreateXmlElement('Modules', '', [], [])\r
1441 for Module in Package.Modules.values():\r
1442 Tmp = ModuleSurfaceAreaXml()\r
1443 ModuleNode.appendChild(Tmp.ToXml(Module))\r
1444 DomPackage.appendChild(ModuleNode)\r
1445 \r
1446 return DomPackage\r
1447\r
1448# ModuleXml\r
1449class ModuleSurfaceAreaXml(object):\r
1450 def __init__(self):\r
1451 self.Module = None\r
1452 \r
1453 def FromXml(self, Item, Key):\r
1454 # Create a package object\r
1455 Module = ModuleClass()\r
1456 \r
1457 # Header\r
1458 Tmp = HeaderXml()\r
1459 ModuleHeader = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/Header'), 'Header')\r
1460 Module.ModuleHeader = ModuleHeader\r
1461 \r
1462 # ModuleProperties\r
1463 Tmp = ModulePropertyXml()\r
1464 (Header, BootModes, Events, HOBs) = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ModuleProperties'), 'ModuleProperties', ModuleHeader)\r
1465 Module.ModuleHeader = Header\r
1466 Module.BootModes = BootModes\r
1467 Module.Events = Events\r
1468 Module.Hobs = HOBs\r
1469 \r
1470 # ClonedFrom\r
1471 Tmp = ClonedFromXml()\r
1472 ClonedFrom = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/ClonedFrom'), 'ClonedFrom')\r
1473 if ClonedFrom:\r
1474 Module.ModuleHeader.ClonedFrom.append(ClonedFrom)\r
1475 \r
1476 # LibraryClass\r
1477 #LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
1478 for SubItem in XmlList(Item, '/ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass'):\r
1479 Tmp = LibraryClassXml()\r
1480 LibraryClass = Tmp.FromXml(SubItem, 'LibraryClass')\r
1481 Module.LibraryClasses.append(LibraryClass)\r
1482 \r
1483 # SourceFile\r
1484 #SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
1485 for SubItem in XmlList(Item, '/ModuleSurfaceArea/SourceFiles/Filename'):\r
1486 Tmp = SourceFileXml()\r
1487 SourceFile = Tmp.FromXml(SubItem, 'Filename')\r
1488 Module.Sources.append(SourceFile)\r
1489 \r
1490 # BinaryFile\r
1491 #BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
1492 for SubItem in XmlList(Item, '/ModuleSurfaceArea/BinaryFiles/BinaryFile'):\r
1493 Tmp = BinaryFileXml()\r
1494 BinaryFile = Tmp.FromXml(SubItem, 'BinaryFile')\r
1495 Module.Binaries.append(BinaryFile)\r
1496 \r
1497 # PackageDependencies\r
1498 #PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
1499 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PackageDependencies/Package'):\r
1500 Tmp = PackageXml()\r
1501 PackageDependency = Tmp.FromXml(SubItem, 'Package')\r
1502 Module.PackageDependencies.append(PackageDependency)\r
1503\r
1504 # Guid\r
1505 #GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
1506 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Guids/GuidCName'):\r
1507 Tmp = GuidProtocolPpiXml()\r
1508 GuidProtocolPpi = Tmp.FromXml(SubItem, 'GuidCName')\r
1509 Module.Guids.append(GuidProtocolPpi)\r
1510 \r
1511 # Protocol\r
1512 #GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
1513 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Protocols/Protocol'):\r
1514 Tmp = GuidProtocolPpiXml()\r
1515 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Protocol')\r
1516 Module.Protocols.append(GuidProtocolPpi)\r
1517\r
1518 # Ppi\r
1519 #GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
1520 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PPIs/Ppi'):\r
1521 Tmp = GuidProtocolPpiXml()\r
1522 GuidProtocolPpi = Tmp.FromXml(SubItem, 'Ppi')\r
1523 Module.Ppis.append(GuidProtocolPpi)\r
1524 \r
1525 # Extern\r
1526 #ExternNode = CreateXmlElement('Externs', '', [], [])\r
1527 for SubItem in XmlList(Item, '/ModuleSurfaceArea/Externs/Extern'):\r
1528 Tmp = ExternXml()\r
1529 Extern = Tmp.FromXml(SubItem, 'Extern')\r
1530 Module.Externs.append(Extern)\r
1531 \r
1532 # PcdCoded\r
1533 #PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
1534 for SubItem in XmlList(Item, '/ModuleSurfaceArea/PcdCoded/PcdEntry'):\r
1535 Tmp = PcdEntryXml()\r
1536 PcdEntry = Tmp.FromXml(SubItem, 'PcdEntry')\r
1537 Module.PcdCodes.append(PcdEntry)\r
1538\r
1539 # PeiDepex\r
1540 #DepexNode = CreateXmlElement('PeiDepex', '', [], [])\r
1541 Tmp = DepexXml()\r
1542 Module.PeiDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/PeiDepex'), 'PeiDepex')\r
1543\r
1544 # DxeDepex\r
1545 #DepexNode = CreateXmlElement('DxeDepex', '', [], [])\r
1546 Tmp = DepexXml()\r
1547 Module.DxeDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/DxeDepex'), 'DxeDepex')\r
1548 \r
1549 # SmmDepex\r
1550 #DepexNode = CreateXmlElement('SmmDepex', '', [], [])\r
1551 Tmp = DepexXml()\r
1552 Module.SmmDepex = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/DxeDepex'), 'SmmDepex')\r
1553\r
1554 # MiscellaneousFile\r
1555 Tmp = MiscellaneousFileXml()\r
1556 Module.MiscFiles = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/MiscellaneousFiles'), 'MiscellaneousFiles')\r
1557 \r
1558 # UserExtensions\r
1559 Tmp = UserExtensionsXml()\r
1560 Module.UserExtensions = Tmp.FromXml(XmlNode(Item, '/ModuleSurfaceArea/UserExtensions'), 'UserExtensions')\r
1561 \r
1562 # return the module object\r
1563 self.Module = Module\r
1564 return self.Module\r
1565\r
1566 def ToXml(self, Module):\r
1567 # Create root node of module surface area\r
1568 DomModule = minidom.Document().createElement('ModuleSurfaceArea')\r
1569\r
1570 # Header\r
1571 Tmp = HeaderXml()\r
1572 DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader, 'Header'))\r
1573 \r
1574 # ModuleProperties\r
1575 Tmp = ModulePropertyXml()\r
1576 DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader, Module.BootModes, Module.Events, Module.Hobs, 'ModuleProperties'))\r
1577 \r
1578 # ClonedFrom\r
1579 Tmp = ClonedFromXml()\r
1580 if Module.ModuleHeader.ClonedFrom != []:\r
1581 DomModule.appendChild(Tmp.ToXml(Module.ModuleHeader.ClonedFrom[0], 'ClonedFrom'))\r
1582 \r
1583 # LibraryClass\r
1584 LibraryClassNode = CreateXmlElement('LibraryClassDefinitions', '', [], [])\r
1585 for LibraryClass in Module.LibraryClasses:\r
1586 Tmp = LibraryClassXml()\r
1587 LibraryClassNode.appendChild(Tmp.ToXml(LibraryClass, 'LibraryClass'))\r
1588 DomModule.appendChild(LibraryClassNode)\r
1589 \r
1590 # SourceFile\r
1591 SourceFileNode = CreateXmlElement('SourceFiles', '', [], [])\r
1592 for SourceFile in Module.Sources:\r
1593 Tmp = SourceFileXml()\r
1594 SourceFileNode.appendChild(Tmp.ToXml(SourceFile, 'Filename'))\r
1595 DomModule.appendChild(SourceFileNode)\r
1596 \r
1597 # BinaryFile\r
1598 BinaryFileNode = CreateXmlElement('BinaryFiles', '', [], [])\r
1599 for BinaryFile in Module.Binaries:\r
1600 Tmp = BinaryFileXml()\r
1601 BinaryFileNode.appendChild(Tmp.ToXml(BinaryFile, 'BinaryFile'))\r
1602 DomModule.appendChild(BinaryFileNode)\r
1603 \r
1604 # PackageDependencies\r
1605 PackageDependencyNode = CreateXmlElement('PackageDependencies', '', [], [])\r
1606 for PackageDependency in Module.PackageDependencies:\r
1607 Tmp = PackageXml()\r
1608 PackageDependencyNode.appendChild(Tmp.ToXml(PackageDependency, 'Package'))\r
1609 DomModule.appendChild(PackageDependencyNode)\r
1610\r
1611 # Guid\r
1612 GuidProtocolPpiNode = CreateXmlElement('Guids', '', [], [])\r
1613 for GuidProtocolPpi in Module.Guids:\r
1614 Tmp = GuidProtocolPpiXml()\r
1615 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'GuidCName'))\r
1616 DomModule.appendChild(GuidProtocolPpiNode)\r
1617 \r
1618 # Protocol\r
1619 GuidProtocolPpiNode = CreateXmlElement('Protocols', '', [], [])\r
1620 for GuidProtocolPpi in Module.Protocols:\r
1621 Tmp = GuidProtocolPpiXml()\r
1622 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Protocol'))\r
1623 DomModule.appendChild(GuidProtocolPpiNode)\r
1624\r
1625 # Ppi\r
1626 GuidProtocolPpiNode = CreateXmlElement('PPIs', '', [], [])\r
1627 for GuidProtocolPpi in Module.Ppis:\r
1628 Tmp = GuidProtocolPpiXml()\r
1629 GuidProtocolPpiNode.appendChild(Tmp.ToXml(GuidProtocolPpi, 'Ppi'))\r
1630 DomModule.appendChild(GuidProtocolPpiNode)\r
1631 \r
1632 # Extern\r
1633 ExternNode = CreateXmlElement('Externs', '', [], [])\r
1634 for Extern in Module.Externs:\r
1635 Tmp = ExternXml()\r
1636 ExternNode.appendChild(Tmp.ToXml(Extern, 'Extern'))\r
1637 DomModule.appendChild(ExternNode)\r
1638 \r
1639 # PcdCoded\r
1640 PcdEntryNode = CreateXmlElement('PcdCoded', '', [], [])\r
1641 for PcdEntry in Module.PcdCodes:\r
1642 Tmp = PcdEntryXml()\r
1643 PcdEntryNode.appendChild(Tmp.ToXml(PcdEntry, 'PcdEntry'))\r
1644 DomModule.appendChild(PcdEntryNode)\r
1645\r
1646 # PeiDepex\r
1647 if Module.PeiDepex:\r
1648 DepexNode = CreateXmlElement('PeiDepex', '', [], [])\r
1649 Tmp = DepexXml()\r
1650 DomModule.appendChild(Tmp.ToXml(Module.PeiDepex, 'PeiDepex'))\r
1651\r
1652 # DxeDepex\r
1653 if Module.DxeDepex:\r
1654 DepexNode = CreateXmlElement('DxeDepex', '', [], [])\r
1655 Tmp = DepexXml()\r
1656 DomModule.appendChild(Tmp.ToXml(Module.DxeDepex, 'DxeDepex'))\r
1657 \r
1658 # SmmDepex\r
1659 if Module.SmmDepex:\r
1660 DepexNode = CreateXmlElement('SmmDepex', '', [], [])\r
1661 Tmp = DepexXml()\r
1662 DomModule.appendChild(Tmp.ToXml(Module.SmmDepex, 'SmmDepex'))\r
1663 \r
1664 # MiscellaneousFile\r
1665 Tmp = MiscellaneousFileXml()\r
1666 DomModule.appendChild(Tmp.ToXml(Module.MiscFiles, 'MiscellaneousFiles'))\r
1667 \r
1668 # UserExtensions\r
1669 Tmp = UserExtensionsXml()\r
1670 DomModule.appendChild(Tmp.ToXml(Module.UserExtensions, 'UserExtensions'))\r
1671 \r
1672 return DomModule\r
1673\r
1674# DistributionPackageXml\r
1675class DistributionPackageXml(object):\r
1676 def __init__(self):\r
1677 self.Dp = DistributionPackageClass()\r
1678\r
1679 def FromXml(self, Filename = None):\r
1680 if Filename != None:\r
1681 self.Dp = DistributionPackageClass()\r
1682 \r
1683 # Load to XML\r
1684 self.Pkg = XmlParseFile(Filename)\r
1685\r
1686 # Parse Header information\r
1687 Tmp = DistributionPackageHeaderXml()\r
1688 DistributionPackageHeader = Tmp.FromXml(XmlNode(self.Pkg, '/DistributionPackage/DistributionHeader'), 'DistributionHeader')\r
1689 self.Dp.Header = DistributionPackageHeader\r
1690 \r
1691 # Parse each PackageSurfaceArea\r
1692 for Item in XmlList(self.Pkg, '/DistributionPackage/PackageSurfaceArea'):\r
1693 Psa = PackageSurfaceAreaXml()\r
1694 Package = Psa.FromXml(Item, 'PackageSurfaceArea')\r
1695 self.Dp.PackageSurfaceArea[(Package.PackageHeader.Guid, Package.PackageHeader.Version, Package.PackageHeader.CombinePath)] = Package\r
1696 \r
1697 # Parse each ModuleSurfaceArea\r
1698 for Item in XmlList(self.Pkg, '/DistributionPackage/ModuleSurfaceArea'):\r
1699 Msa = ModuleSurfaceAreaXml()\r
1700 Module = Msa.FromXml(Item, 'ModuleSurfaceArea')\r
1701 self.Dp.ModuleSurfaceArea[(Module.ModuleHeader.Guid, Module.ModuleHeader.Version, Module.ModuleHeader.CombinePath)] = Module\r
1702 \r
1703 # Parse Tools\r
1704 Tmp = MiscellaneousFileXml()\r
1705 self.Dp.Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/Tools'), 'Tools')\r
1706 \r
1707 # Parse MiscFiles\r
1708 Tmp = MiscellaneousFileXml()\r
1709 self.Dp.MiscellaneousFiles = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/MiscellaneousFiles'), 'MiscellaneousFiles')\r
1710 \r
1711 return self.Dp\r
1712 \r
1713 def ToXml(self, Dp):\r
1714 if Dp != None:\r
1715 # Parse DistributionPackageHeader\r
1716 Attrs = [['xmlns', 'http://www.uefi.org/2008/2.1'], \r
1717 ['xmlns:xsi', 'http:/www.w3.org/2001/XMLSchema-instance'],\r
1718 ]\r
1719 Root = CreateXmlElement('DistributionPackage', '', [], Attrs)\r
1720 \r
1721 Tmp = DistributionPackageHeaderXml()\r
1722 Root.appendChild(Tmp.ToXml(Dp.Header, 'DistributionHeader'))\r
1723 \r
1724 # Parse each PackageSurfaceArea\r
1725 for Package in Dp.PackageSurfaceArea.values():\r
1726 Psa = PackageSurfaceAreaXml()\r
1727 DomPackage = Psa.ToXml(Package)\r
1728 Root.appendChild(DomPackage)\r
1729 \r
1730 # Parse each ModuleSurfaceArea\r
1731 for Module in Dp.ModuleSurfaceArea.values():\r
1732 Msa = ModuleSurfaceAreaXml()\r
1733 DomModule = Msa.ToXml(Module)\r
1734 Root.appendChild(DomModule)\r
1735 \r
1736 # Parse Tools\r
1737 Tmp = MiscellaneousFileXml()\r
1738 #Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/Tools'), 'Tools')\r
1739 Root.appendChild(Tmp.ToXml2(Dp.Tools, 'Tools'))\r
1740 \r
1741 # Parse MiscFiles\r
1742 Tmp = MiscellaneousFileXml()\r
1743 #Tools = Tmp.FromXml2(XmlNode(self.Pkg, '/DistributionPackage/MiscellaneousFiles'), 'MiscellaneousFiles')\r
1744 Root.appendChild(Tmp.ToXml2(Dp.MiscellaneousFiles, 'MiscellaneousFiles'))\r
1745 \r
1746 return Root.toprettyxml(indent = ' ')\r
1747 \r
1748 return ''\r
1749\r
1750if __name__ == '__main__':\r
1751 M = DistributionPackageXml()\r
1752 M.FromXml('C:\Test.xml')\r
1753 print M.ToXml(M.Dp)\r
1754