]>
Commit | Line | Data |
---|---|---|
4234283c LG |
1 | ## @file\r |
2 | # This file is used to parse a PCD file of .PKG file\r | |
3 | #\r | |
64285f15 | 4 | # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r |
4234283c | 5 | #\r |
2e351cbe | 6 | # SPDX-License-Identifier: BSD-2-Clause-Patent\r |
4234283c LG |
7 | #\r |
8 | \r | |
9 | '''\r | |
10 | CommonXml\r | |
11 | '''\r | |
12 | \r | |
13 | ##\r | |
14 | # Import Modules\r | |
15 | #\r | |
16 | \r | |
17 | from Core.DistributionPackageClass import DistributionPackageHeaderObject\r | |
64285f15 YZ |
18 | from Library.StringUtils import ConvertNEToNOTEQ\r |
19 | from Library.StringUtils import ConvertNOTEQToNE\r | |
20 | from Library.StringUtils import GetSplitValueList\r | |
21 | from Library.StringUtils import GetStringOfList\r | |
4234283c LG |
22 | from Library.Xml.XmlRoutines import XmlElement\r |
23 | from Library.Xml.XmlRoutines import XmlElement2\r | |
24 | from Library.Xml.XmlRoutines import XmlAttribute\r | |
25 | from Library.Xml.XmlRoutines import XmlNode\r | |
26 | from Library.Xml.XmlRoutines import XmlList\r | |
27 | from Library.Xml.XmlRoutines import CreateXmlElement\r | |
421ccda3 HC |
28 | from Library.UniClassObject import ConvertSpecialUnicodes\r |
29 | from Library.UniClassObject import GetLanguageCode1766\r | |
4234283c LG |
30 | from Object.POM.CommonObject import FileObject\r |
31 | from Object.POM.CommonObject import MiscFileObject\r | |
32 | from Object.POM.CommonObject import UserExtensionObject\r | |
33 | from Object.POM.CommonObject import ClonedRecordObject\r | |
34 | from Object.POM.CommonObject import LibraryClassObject\r | |
35 | from Object.POM.CommonObject import FileNameObject\r | |
36 | from Object.POM.ModuleObject import ModuleObject\r | |
37 | from Xml.XmlParserMisc import IsRequiredItemListNull\r | |
38 | from Xml.XmlParserMisc import GetHelpTextList\r | |
4234283c LG |
39 | import Library.DataType as DataType\r |
40 | \r | |
41 | ##\r | |
42 | # ClonedFromXml\r | |
43 | #\r | |
44 | class ClonedFromXml(object):\r | |
45 | def __init__(self):\r | |
46 | self.GUID = ''\r | |
47 | self.Version = ''\r | |
48 | \r | |
49 | def FromXml(self, Item, Key):\r | |
50 | self.GUID = XmlElement(Item, '%s/GUID' % Key)\r | |
51 | self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r | |
4234283c LG |
52 | if self.GUID == '' and self.Version == '':\r |
53 | return None\r | |
4234283c LG |
54 | ClonedFrom = ClonedRecordObject()\r |
55 | ClonedFrom.SetPackageGuid(self.GUID)\r | |
56 | ClonedFrom.SetPackageVersion(self.Version)\r | |
4234283c LG |
57 | return ClonedFrom\r |
58 | \r | |
59 | def ToXml(self, ClonedFrom, Key):\r | |
60 | if self.GUID:\r | |
61 | pass\r | |
62 | Element1 = CreateXmlElement('GUID', ClonedFrom.GetPackageGuid(), [],\r | |
63 | [['Version', ClonedFrom.GetPackageVersion()]])\r | |
64 | AttributeList = []\r | |
65 | NodeList = [Element1]\r | |
66 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r | |
4234283c LG |
67 | return Root\r |
68 | \r | |
69 | def __str__(self):\r | |
70 | return "GUID = %s Version = %s" % (self.GUID, self.Version)\r | |
71 | \r | |
72 | \r | |
73 | ##\r | |
74 | # CommonDefinesXml\r | |
75 | #\r | |
76 | class CommonDefinesXml(object):\r | |
77 | def __init__(self):\r | |
78 | self.Usage = ''\r | |
79 | self.SupArchList = []\r | |
80 | self.SupModList = []\r | |
81 | self.FeatureFlag = ''\r | |
82 | \r | |
83 | def FromXml(self, Item, Key):\r | |
84 | if Key:\r | |
85 | pass\r | |
86 | self.Usage = XmlAttribute(Item, 'Usage')\r | |
87 | self.SupArchList = \\r | |
88 | [Arch for Arch in GetSplitValueList(XmlAttribute(Item, 'SupArchList'), DataType.TAB_SPACE_SPLIT) if Arch]\r | |
89 | self.SupModList = \\r | |
90 | [Mod for Mod in GetSplitValueList(XmlAttribute(Item, 'SupModList'), DataType.TAB_SPACE_SPLIT) if Mod]\r | |
91 | self.FeatureFlag = ConvertNOTEQToNE(XmlAttribute(Item, 'FeatureFlag'))\r | |
92 | \r | |
4234283c LG |
93 | def ToXml(self):\r |
94 | pass\r | |
95 | \r | |
96 | def __str__(self):\r | |
97 | return "Usage = %s SupArchList = %s SupModList = %s FeatureFlag = %s" \\r | |
98 | % (self.Usage, self.SupArchList, self.SupModList, self.FeatureFlag)\r | |
99 | \r | |
421ccda3 HC |
100 | ##\r |
101 | # PromptXml\r | |
102 | #\r | |
103 | class PromptXml(object):\r | |
104 | def __init__(self):\r | |
105 | self.Prompt = ''\r | |
106 | self.Lang = ''\r | |
4234283c | 107 | \r |
421ccda3 HC |
108 | def FromXml(self, Item, Key):\r |
109 | if Key:\r | |
110 | pass\r | |
111 | self.Prompt = XmlElement2(Item, 'Prompt')\r | |
112 | self.Lang = XmlAttribute(Item, 'Lang')\r | |
113 | \r | |
114 | def ToXml(self, Prompt, Key='Prompt'):\r | |
115 | if self.Prompt:\r | |
116 | pass\r | |
117 | return CreateXmlElement('%s' % Key, Prompt.GetString(), [], [['Lang', Prompt.GetLang()]])\r | |
118 | def __str__(self):\r | |
119 | return "Prompt = %s Lang = %s" % (self.Prompt, self.Lang)\r | |
f7496d71 | 120 | \r |
4234283c LG |
121 | ##\r |
122 | # HelpTextXml\r | |
123 | #\r | |
124 | class HelpTextXml(object):\r | |
125 | def __init__(self):\r | |
126 | self.HelpText = ''\r | |
127 | self.Lang = ''\r | |
128 | \r | |
129 | def FromXml(self, Item, Key):\r | |
130 | if Key:\r | |
131 | pass\r | |
132 | self.HelpText = XmlElement2(Item, 'HelpText')\r | |
133 | self.Lang = XmlAttribute(Item, 'Lang')\r | |
134 | \r | |
135 | def ToXml(self, HelpText, Key='HelpText'):\r | |
136 | if self.HelpText:\r | |
137 | pass\r | |
138 | return CreateXmlElement('%s' % Key, HelpText.GetString(), [], [['Lang', HelpText.GetLang()]])\r | |
139 | def __str__(self):\r | |
140 | return "HelpText = %s Lang = %s" % (self.HelpText, self.Lang)\r | |
141 | \r | |
142 | ##\r | |
143 | # HeaderXml\r | |
144 | #\r | |
145 | class HeaderXml(object):\r | |
146 | def __init__(self):\r | |
147 | self.Name = ''\r | |
148 | self.BaseName = ''\r | |
149 | self.GUID = ''\r | |
150 | self.Version = ''\r | |
421ccda3 HC |
151 | self.CopyrightList = []\r |
152 | self.LicenseList = []\r | |
153 | self.AbstractList = []\r | |
154 | self.DescriptionList = []\r | |
4234283c LG |
155 | \r |
156 | def FromXml(self, Item, Key, IsRequiredCheck=False, IsStandAlongModule=False):\r | |
157 | if not Item and IsRequiredCheck:\r | |
158 | XmlTreeLevel = []\r | |
159 | if IsStandAlongModule:\r | |
160 | XmlTreeLevel = ['DistributionPackage', 'ModuleSurfaceArea']\r | |
161 | else:\r | |
162 | XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea', 'ModuleSurfaceArea']\r | |
163 | CheckDict = {'Header':''}\r | |
164 | IsRequiredItemListNull(CheckDict, XmlTreeLevel)\r | |
165 | self.Name = XmlElement(Item, '%s/Name' % Key)\r | |
166 | self.BaseName = XmlAttribute(XmlNode(Item, '%s/Name' % Key), 'BaseName')\r | |
167 | self.GUID = XmlElement(Item, '%s/GUID' % Key)\r | |
168 | self.Version = XmlAttribute(XmlNode(Item, '%s/GUID' % Key), 'Version')\r | |
4234283c | 169 | \r |
421ccda3 HC |
170 | for SubItem in XmlList(Item, '%s/Abstract' % Key):\r |
171 | HeaderAbstractLang = XmlAttribute(SubItem, 'Lang')\r | |
172 | self.AbstractList.append((HeaderAbstractLang, XmlElement(SubItem, '%s/Abstract' % Key)))\r | |
173 | for SubItem in XmlList(Item, '%s/Description' % Key):\r | |
174 | HeaderDescriptionLang = XmlAttribute(SubItem, 'Lang')\r | |
175 | self.DescriptionList.append((HeaderDescriptionLang, XmlElement(SubItem, '%s/Description' % Key)))\r | |
176 | for SubItem in XmlList(Item, '%s/Copyright' % Key):\r | |
177 | HeaderCopyrightLang = XmlAttribute(SubItem, 'Lang')\r | |
178 | self.CopyrightList.append((HeaderCopyrightLang, XmlElement(SubItem, '%s/Copyright' % Key)))\r | |
179 | for SubItem in XmlList(Item, '%s/License' % Key):\r | |
180 | HeaderLicenseLang = XmlAttribute(SubItem, 'Lang')\r | |
f7496d71 | 181 | self.LicenseList.append((HeaderLicenseLang, XmlElement(SubItem, '%s/License' % Key)))\r |
4234283c LG |
182 | ModuleHeader = ModuleObject()\r |
183 | ModuleHeader.SetName(self.Name)\r | |
184 | ModuleHeader.SetBaseName(self.BaseName)\r | |
185 | ModuleHeader.SetGuid(self.GUID)\r | |
186 | ModuleHeader.SetVersion(self.Version)\r | |
421ccda3 HC |
187 | ModuleHeader.SetCopyright(self.CopyrightList)\r |
188 | ModuleHeader.SetLicense(self.LicenseList)\r | |
189 | ModuleHeader.SetAbstract(self.AbstractList)\r | |
190 | ModuleHeader.SetDescription(self.DescriptionList)\r | |
4234283c LG |
191 | return ModuleHeader\r |
192 | \r | |
193 | def ToXml(self, Header, Key):\r | |
194 | if self.GUID:\r | |
195 | pass\r | |
196 | Element1 = CreateXmlElement('Name', Header.GetName(), [], [['BaseName', Header.GetBaseName()]])\r | |
197 | Element2 = CreateXmlElement('GUID', Header.GetGuid(), [], [['Version', Header.GetVersion()]])\r | |
4234283c LG |
198 | NodeList = [Element1,\r |
199 | Element2,\r | |
4234283c | 200 | ]\r |
4234283c | 201 | \r |
421ccda3 HC |
202 | UNIInfAbstractList = []\r |
203 | UNIInfDescriptionList = []\r | |
204 | # Get Abstract and Description from Uni File\r | |
205 | # if the Uni File exists\r | |
206 | if Header.UniFileClassObject is not None:\r | |
207 | UniStrDict = Header.UniFileClassObject.OrderedStringList\r | |
208 | for Lang in UniStrDict:\r | |
209 | for StringDefClassObject in UniStrDict[Lang]:\r | |
210 | if not StringDefClassObject.StringValue:\r | |
211 | continue\r | |
212 | if StringDefClassObject.StringName == DataType.TAB_INF_ABSTRACT:\r | |
213 | UNIInfAbstractList.append((GetLanguageCode1766(Lang),\r | |
214 | ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r | |
215 | \r | |
216 | if StringDefClassObject.StringName == DataType.TAB_INF_DESCRIPTION:\r | |
217 | UNIInfDescriptionList.append((GetLanguageCode1766(Lang),\r | |
218 | ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r | |
219 | \r | |
220 | # Get Abstract and Description from INF File Header\r | |
221 | for (Lang, Value) in Header.GetCopyright():\r | |
222 | if Value:\r | |
223 | NodeList.append(CreateXmlElement('Copyright', Value, [], []))\r | |
224 | for (Lang, Value) in Header.GetLicense():\r | |
225 | if Value:\r | |
226 | NodeList.append(CreateXmlElement('License', Value, [], []))\r | |
227 | for (Lang, Value) in Header.GetAbstract() + UNIInfAbstractList:\r | |
228 | if Value:\r | |
229 | NodeList.append(CreateXmlElement('Abstract', Value, [], [['Lang', Lang]]))\r | |
230 | for (Lang, Value) in Header.GetDescription() + UNIInfDescriptionList:\r | |
231 | if Value:\r | |
232 | NodeList.append(CreateXmlElement('Description', Value, [], [['Lang', Lang]]))\r | |
233 | \r | |
234 | AttributeList = []\r | |
235 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r | |
4234283c LG |
236 | return Root\r |
237 | \r | |
238 | def __str__(self):\r | |
239 | return "Name = %s BaseName = %s GUID = %s Version = %s Copyright = %s \\r | |
240 | License = %s Abstract = %s Description = %s" % \\r | |
421ccda3 HC |
241 | (self.Name, self.BaseName, self.GUID, self.Version, self.CopyrightList, \\r |
242 | self.LicenseList, self.AbstractList, self.DescriptionList)\r | |
4234283c LG |
243 | ##\r |
244 | # DistributionPackageHeaderXml\r | |
245 | #\r | |
246 | class DistributionPackageHeaderXml(object):\r | |
247 | def __init__(self):\r | |
248 | self.Header = HeaderXml()\r | |
249 | self.ReadOnly = ''\r | |
250 | self.RePackage = ''\r | |
251 | self.Vendor = ''\r | |
252 | self.Date = ''\r | |
253 | self.Signature = ''\r | |
254 | self.XmlSpecification = ''\r | |
255 | \r | |
256 | def FromXml(self, Item, Key):\r | |
257 | if not Item:\r | |
258 | return None\r | |
259 | self.ReadOnly = XmlAttribute(XmlNode(Item, '%s' % Key), 'ReadOnly')\r | |
260 | self.RePackage = XmlAttribute(XmlNode(Item, '%s' % Key), 'RePackage')\r | |
261 | self.Vendor = XmlElement(Item, '%s/Vendor' % Key)\r | |
262 | self.Date = XmlElement(Item, '%s/Date' % Key)\r | |
263 | self.Signature = XmlElement(Item, '%s/Signature' % Key)\r | |
264 | self.XmlSpecification = XmlElement(Item, '%s/XmlSpecification' % Key)\r | |
265 | self.Header.FromXml(Item, Key)\r | |
4234283c LG |
266 | DistributionPackageHeader = DistributionPackageHeaderObject()\r |
267 | if self.ReadOnly.upper() == 'TRUE':\r | |
268 | DistributionPackageHeader.ReadOnly = True\r | |
269 | elif self.ReadOnly.upper() == 'FALSE':\r | |
270 | DistributionPackageHeader.ReadOnly = False\r | |
4234283c LG |
271 | if self.RePackage.upper() == 'TRUE':\r |
272 | DistributionPackageHeader.RePackage = True\r | |
273 | elif self.RePackage.upper() == 'FALSE':\r | |
274 | DistributionPackageHeader.RePackage = False\r | |
275 | DistributionPackageHeader.Vendor = self.Vendor\r | |
276 | DistributionPackageHeader.Date = self.Date\r | |
277 | DistributionPackageHeader.Signature = self.Signature\r | |
278 | DistributionPackageHeader.XmlSpecification = self.XmlSpecification\r | |
4234283c LG |
279 | DistributionPackageHeader.SetName(self.Header.Name)\r |
280 | DistributionPackageHeader.SetBaseName(self.Header.BaseName)\r | |
281 | DistributionPackageHeader.SetGuid(self.Header.GUID)\r | |
282 | DistributionPackageHeader.SetVersion(self.Header.Version)\r | |
421ccda3 HC |
283 | DistributionPackageHeader.SetCopyright(self.Header.CopyrightList)\r |
284 | DistributionPackageHeader.SetLicense(self.Header.LicenseList)\r | |
285 | DistributionPackageHeader.SetAbstract(self.Header.AbstractList)\r | |
286 | DistributionPackageHeader.SetDescription(self.Header.DescriptionList)\r | |
4234283c LG |
287 | return DistributionPackageHeader\r |
288 | \r | |
289 | def ToXml(self, DistributionPackageHeader, Key):\r | |
290 | if self.Header:\r | |
291 | pass\r | |
292 | Element1 = CreateXmlElement('Name', \\r | |
293 | DistributionPackageHeader.GetName(), [], \\r | |
294 | [['BaseName', \\r | |
295 | DistributionPackageHeader.GetBaseName()]])\r | |
296 | Element2 = CreateXmlElement('GUID', \\r | |
297 | DistributionPackageHeader.GetGuid(), [], \\r | |
298 | [['Version', \\r | |
299 | DistributionPackageHeader.GetVersion()]])\r | |
300 | AttributeList = []\r | |
301 | if DistributionPackageHeader.ReadOnly != '':\r | |
302 | AttributeList.append(['ReadOnly', str(DistributionPackageHeader.ReadOnly).lower()])\r | |
303 | if DistributionPackageHeader.RePackage != '':\r | |
304 | AttributeList.append(['RePackage', str(DistributionPackageHeader.RePackage).lower()])\r | |
421ccda3 HC |
305 | if DistributionPackageHeader.GetAbstract():\r |
306 | DPAbstract = DistributionPackageHeader.GetAbstract()[0][1]\r | |
307 | else:\r | |
308 | DPAbstract = ''\r | |
309 | if DistributionPackageHeader.GetDescription():\r | |
310 | DPDescription = DistributionPackageHeader.GetDescription()[0][1]\r | |
311 | else:\r | |
312 | DPDescription = ''\r | |
313 | if DistributionPackageHeader.GetCopyright():\r | |
314 | DPCopyright = DistributionPackageHeader.GetCopyright()[0][1]\r | |
315 | else:\r | |
316 | DPCopyright = ''\r | |
317 | if DistributionPackageHeader.GetLicense():\r | |
318 | DPLicense = DistributionPackageHeader.GetLicense()[0][1]\r | |
319 | else:\r | |
320 | DPLicense = ''\r | |
4234283c LG |
321 | NodeList = [Element1,\r |
322 | Element2,\r | |
323 | ['Vendor', DistributionPackageHeader.Vendor],\r | |
324 | ['Date', DistributionPackageHeader.Date],\r | |
421ccda3 HC |
325 | ['Copyright', DPCopyright],\r |
326 | ['License', DPLicense],\r | |
327 | ['Abstract', DPAbstract],\r | |
328 | ['Description', DPDescription],\r | |
4234283c LG |
329 | ['Signature', DistributionPackageHeader.Signature],\r |
330 | ['XmlSpecification', \\r | |
331 | DistributionPackageHeader.XmlSpecification],\r | |
332 | ]\r | |
333 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r | |
4234283c LG |
334 | return Root\r |
335 | \r | |
336 | def __str__(self):\r | |
337 | return "ReadOnly = %s RePackage = %s Vendor = %s Date = %s \\r | |
338 | Signature = %s XmlSpecification = %s %s" % \\r | |
339 | (self.ReadOnly, self.RePackage, self.Vendor, self.Date, \\r | |
340 | self.Signature, self.XmlSpecification, self.Header)\r | |
341 | ##\r | |
342 | # PackageHeaderXml\r | |
343 | #\r | |
344 | class PackageHeaderXml(object):\r | |
345 | def __init__(self):\r | |
346 | self.Header = HeaderXml()\r | |
347 | self.PackagePath = ''\r | |
348 | \r | |
349 | def FromXml(self, Item, Key, PackageObject2):\r | |
350 | if not Item:\r | |
351 | XmlTreeLevel = ['DistributionPackage', 'PackageSurfaceArea']\r | |
ccaa7754 | 352 | CheckDict = {'PackageHeader': None, }\r |
4234283c LG |
353 | IsRequiredItemListNull(CheckDict, XmlTreeLevel)\r |
354 | self.PackagePath = XmlElement(Item, '%s/PackagePath' % Key)\r | |
355 | self.Header.FromXml(Item, Key)\r | |
4234283c LG |
356 | PackageObject2.SetName(self.Header.Name)\r |
357 | PackageObject2.SetBaseName(self.Header.BaseName)\r | |
358 | PackageObject2.SetGuid(self.Header.GUID)\r | |
359 | PackageObject2.SetVersion(self.Header.Version)\r | |
421ccda3 HC |
360 | PackageObject2.SetCopyright(self.Header.CopyrightList)\r |
361 | PackageObject2.SetLicense(self.Header.LicenseList)\r | |
362 | PackageObject2.SetAbstract(self.Header.AbstractList)\r | |
363 | PackageObject2.SetDescription(self.Header.DescriptionList)\r | |
4234283c LG |
364 | PackageObject2.SetPackagePath(self.PackagePath)\r |
365 | \r | |
366 | def ToXml(self, PackageObject2, Key):\r | |
367 | if self.PackagePath:\r | |
368 | pass\r | |
421ccda3 | 369 | Element1 = CreateXmlElement('Name', PackageObject2.GetName(), [], \\r |
4234283c LG |
370 | [['BaseName', PackageObject2.GetBaseName()]])\r |
371 | Element2 = CreateXmlElement('GUID', PackageObject2.GetGuid(), [], \\r | |
372 | [['Version', PackageObject2.GetVersion()]])\r | |
4234283c | 373 | NodeList = [Element1,\r |
421ccda3 | 374 | Element2\r |
4234283c | 375 | ]\r |
f7496d71 | 376 | \r |
421ccda3 HC |
377 | UNIPackageAbrstractList = []\r |
378 | UNIPackageDescriptionList = []\r | |
379 | # Get Abstract and Description from Uni File\r | |
380 | # if the Uni File exists\r | |
381 | if PackageObject2.UniFileClassObject is not None:\r | |
382 | UniStrDict = PackageObject2.UniFileClassObject.OrderedStringList\r | |
383 | for Lang in UniStrDict:\r | |
384 | for StringDefClassObject in UniStrDict[Lang]:\r | |
385 | if not StringDefClassObject.StringValue:\r | |
386 | continue\r | |
387 | if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_ABSTRACT:\r | |
f7496d71 | 388 | UNIPackageAbrstractList.append((GetLanguageCode1766(Lang),\r |
421ccda3 HC |
389 | ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r |
390 | \r | |
391 | if StringDefClassObject.StringName == DataType.TAB_DEC_PACKAGE_DESCRIPTION:\r | |
f7496d71 | 392 | UNIPackageDescriptionList.append((GetLanguageCode1766(Lang),\r |
421ccda3 HC |
393 | ConvertSpecialUnicodes(StringDefClassObject.StringValue)))\r |
394 | \r | |
395 | # Get Abstract and Description from DEC File Header\r | |
396 | for (Lang, Value) in PackageObject2.GetCopyright():\r | |
397 | if Value:\r | |
398 | NodeList.append(CreateXmlElement(DataType.TAB_HEADER_COPYRIGHT, Value, [], []))\r | |
399 | for (Lang, Value) in PackageObject2.GetLicense():\r | |
400 | if Value:\r | |
401 | NodeList.append(CreateXmlElement(DataType.TAB_HEADER_LICENSE, Value, [], []))\r | |
402 | for (Lang, Value) in PackageObject2.GetAbstract() + UNIPackageAbrstractList:\r | |
403 | if Value:\r | |
404 | NodeList.append(CreateXmlElement(DataType.TAB_HEADER_ABSTRACT, Value, [], [['Lang', Lang]]))\r | |
405 | for (Lang, Value) in PackageObject2.GetDescription() + UNIPackageDescriptionList:\r | |
406 | if Value:\r | |
407 | NodeList.append(CreateXmlElement(DataType.TAB_HEADER_DESCRIPTION, Value, [], [['Lang', Lang]]))\r | |
f7496d71 | 408 | \r |
421ccda3 HC |
409 | \r |
410 | NodeList.append(['PackagePath', PackageObject2.GetPackagePath()])\r | |
411 | AttributeList = []\r | |
4234283c | 412 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r |
4234283c LG |
413 | return Root\r |
414 | \r | |
415 | def __str__(self):\r | |
416 | return "PackagePath = %s %s" \\r | |
417 | % (self.PackagePath, self.Header)\r | |
418 | \r | |
419 | ##\r | |
420 | # MiscellaneousFileXml\r | |
421 | #\r | |
422 | class MiscellaneousFileXml(object):\r | |
423 | def __init__(self):\r | |
424 | self.Header = HeaderXml()\r | |
425 | self.Files = []\r | |
426 | ##\r | |
427 | # This API is used for Package or Module's MiscellaneousFile section\r | |
428 | #\r | |
429 | def FromXml(self, Item, Key):\r | |
430 | if not Item:\r | |
431 | return None\r | |
432 | self.Header.FromXml(Item, Key)\r | |
433 | NewItem = XmlNode(Item, '%s/Header' % Key)\r | |
434 | self.Header.FromXml(NewItem, 'Header')\r | |
4234283c LG |
435 | for SubItem in XmlList(Item, '%s/Filename' % Key):\r |
436 | Filename = XmlElement(SubItem, '%s/Filename' % Key)\r | |
437 | Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r | |
438 | if Executable.upper() == "TRUE":\r | |
439 | Executable = True\r | |
2bc3256c | 440 | elif Executable.upper() == "FALSE":\r |
4234283c | 441 | Executable = False\r |
2bc3256c LG |
442 | else:\r |
443 | Executable = ''\r | |
4234283c | 444 | self.Files.append([Filename, Executable])\r |
4234283c | 445 | MiscFile = MiscFileObject()\r |
421ccda3 HC |
446 | MiscFile.SetCopyright(self.Header.CopyrightList)\r |
447 | MiscFile.SetLicense(self.Header.LicenseList)\r | |
448 | MiscFile.SetAbstract(self.Header.AbstractList)\r | |
449 | MiscFile.SetDescription(self.Header.DescriptionList)\r | |
4234283c LG |
450 | MiscFileList = []\r |
451 | for File in self.Files:\r | |
452 | FileObj = FileObject()\r | |
453 | FileObj.SetURI(File[0])\r | |
454 | FileObj.SetExecutable(File[1])\r | |
455 | MiscFileList.append(FileObj)\r | |
456 | MiscFile.SetFileList(MiscFileList)\r | |
4234283c LG |
457 | return MiscFile\r |
458 | ##\r | |
459 | # This API is used for DistP's tool section\r | |
460 | #\r | |
461 | def FromXml2(self, Item, Key):\r | |
462 | if Item is None:\r | |
463 | return None\r | |
4234283c LG |
464 | NewItem = XmlNode(Item, '%s/Header' % Key)\r |
465 | self.Header.FromXml(NewItem, 'Header')\r | |
4234283c LG |
466 | for SubItem in XmlList(Item, '%s/Filename' % Key):\r |
467 | Filename = XmlElement(SubItem, '%s/Filename' % Key)\r | |
468 | Executable = \\r | |
469 | XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable')\r | |
470 | OsType = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'OS')\r | |
471 | if Executable.upper() == "TRUE":\r | |
472 | Executable = True\r | |
2bc3256c | 473 | elif Executable.upper() == "FALSE":\r |
4234283c | 474 | Executable = False\r |
2bc3256c LG |
475 | else:\r |
476 | Executable = ''\r | |
4234283c | 477 | self.Files.append([Filename, Executable, OsType])\r |
4234283c LG |
478 | MiscFile = MiscFileObject()\r |
479 | MiscFile.SetName(self.Header.Name)\r | |
421ccda3 HC |
480 | MiscFile.SetCopyright(self.Header.CopyrightList)\r |
481 | MiscFile.SetLicense(self.Header.LicenseList)\r | |
482 | MiscFile.SetAbstract(self.Header.AbstractList)\r | |
483 | MiscFile.SetDescription(self.Header.DescriptionList)\r | |
4234283c LG |
484 | MiscFileList = []\r |
485 | for File in self.Files:\r | |
486 | FileObj = FileObject()\r | |
487 | FileObj.SetURI(File[0])\r | |
488 | FileObj.SetExecutable(File[1])\r | |
489 | FileObj.SetOS(File[2])\r | |
490 | MiscFileList.append(FileObj)\r | |
491 | MiscFile.SetFileList(MiscFileList)\r | |
4234283c LG |
492 | return MiscFile\r |
493 | \r | |
494 | ##\r | |
495 | # This API is used for Package or Module's MiscellaneousFile section\r | |
496 | #\r | |
497 | def ToXml(self, MiscFile, Key):\r | |
498 | if self.Header:\r | |
499 | pass\r | |
500 | if MiscFile:\r | |
421ccda3 HC |
501 | if MiscFile.GetAbstract():\r |
502 | DPAbstract = MiscFile.GetAbstract()[0][1]\r | |
503 | else:\r | |
504 | DPAbstract = ''\r | |
505 | if MiscFile.GetDescription():\r | |
506 | DPDescription = MiscFile.GetDescription()[0][1]\r | |
507 | else:\r | |
508 | DPDescription = ''\r | |
509 | if MiscFile.GetCopyright():\r | |
510 | DPCopyright = MiscFile.GetCopyright()[0][1]\r | |
511 | else:\r | |
512 | DPCopyright = ''\r | |
513 | if MiscFile.GetLicense():\r | |
514 | DPLicense = MiscFile.GetLicense()[0][1]\r | |
515 | else:\r | |
516 | DPLicense = ''\r | |
517 | NodeList = [['Copyright', DPCopyright],\r | |
518 | ['License', DPLicense],\r | |
519 | ['Abstract', DPAbstract],\r | |
520 | ['Description', DPDescription],\r | |
4234283c | 521 | ]\r |
4234283c LG |
522 | for File in MiscFile.GetFileList():\r |
523 | NodeList.append\\r | |
524 | (CreateXmlElement\\r | |
525 | ('Filename', File.GetURI(), [], \\r | |
526 | [['Executable', str(File.GetExecutable()).lower()]]))\r | |
527 | Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r | |
4234283c LG |
528 | return Root\r |
529 | ##\r | |
530 | # This API is used for DistP's tool section\r | |
531 | #\r | |
532 | def ToXml2(self, MiscFile, Key):\r | |
533 | if self.Header:\r | |
534 | pass\r | |
535 | if MiscFile:\r | |
421ccda3 HC |
536 | if MiscFile.GetAbstract():\r |
537 | DPAbstract = MiscFile.GetAbstract()[0][1]\r | |
538 | else:\r | |
539 | DPAbstract = ''\r | |
540 | if MiscFile.GetDescription():\r | |
541 | DPDescription = MiscFile.GetDescription()[0][1]\r | |
542 | else:\r | |
543 | DPDescription = ''\r | |
544 | if MiscFile.GetCopyright():\r | |
545 | DPCopyright = MiscFile.GetCopyright()[0][1]\r | |
546 | else:\r | |
547 | DPCopyright = ''\r | |
548 | if MiscFile.GetLicense():\r | |
549 | DPLicense = MiscFile.GetLicense()[0][1]\r | |
550 | else:\r | |
551 | DPLicense = ''\r | |
4234283c | 552 | NodeList = [['Name', MiscFile.GetName()],\r |
421ccda3 HC |
553 | ['Copyright', DPCopyright],\r |
554 | ['License', DPLicense],\r | |
555 | ['Abstract', DPAbstract],\r | |
556 | ['Description', DPDescription],\r | |
4234283c LG |
557 | ]\r |
558 | HeaderNode = CreateXmlElement('Header', '', NodeList, [])\r | |
559 | NodeList = [HeaderNode]\r | |
4234283c LG |
560 | for File in MiscFile.GetFileList():\r |
561 | NodeList.append\\r | |
562 | (CreateXmlElement\\r | |
563 | ('Filename', File.GetURI(), [], \\r | |
564 | [['Executable', str(File.GetExecutable()).lower()], \\r | |
565 | ['OS', File.GetOS()]]))\r | |
566 | Root = CreateXmlElement('%s' % Key, '', NodeList, [])\r | |
4234283c LG |
567 | return Root\r |
568 | \r | |
569 | def __str__(self):\r | |
570 | Str = str(self.Header)\r | |
571 | for Item in self.Files:\r | |
572 | Str = Str + '\n\tFilename:' + str(Item)\r | |
573 | return Str\r | |
574 | ##\r | |
575 | # UserExtensionsXml\r | |
576 | #\r | |
577 | class UserExtensionsXml(object):\r | |
578 | def __init__(self):\r | |
579 | self.UserId = ''\r | |
580 | self.Identifier = ''\r | |
421ccda3 HC |
581 | self.BinaryAbstractList = []\r |
582 | self.BinaryDescriptionList = []\r | |
583 | self.BinaryCopyrightList = []\r | |
584 | self.BinaryLicenseList = []\r | |
585 | self.LangDefsList = []\r | |
4234283c LG |
586 | self.DefineDict = {}\r |
587 | self.BuildOptionDict = {}\r | |
588 | self.IncludesDict = {}\r | |
589 | self.SourcesDict = {}\r | |
590 | self.BinariesDict = {}\r | |
591 | self.SupArchList = []\r | |
592 | self.Statement = ''\r | |
593 | self.Defines = ''\r | |
594 | self.BuildOptions = ''\r | |
595 | \r | |
596 | def FromXml2(self, Item, Key):\r | |
597 | self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r | |
598 | self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r | |
4234283c LG |
599 | UserExtension = UserExtensionObject()\r |
600 | UserExtension.SetUserID(self.UserId)\r | |
601 | UserExtension.SetIdentifier(self.Identifier)\r | |
4234283c LG |
602 | return UserExtension\r |
603 | \r | |
604 | def FromXml(self, Item, Key):\r | |
605 | self.UserId = XmlAttribute(XmlNode(Item, '%s' % Key), 'UserId')\r | |
606 | self.Identifier = XmlAttribute(XmlNode(Item, '%s' % Key), 'Identifier')\r | |
421ccda3 HC |
607 | if self.UserId == DataType.TAB_BINARY_HEADER_USERID \\r |
608 | and self.Identifier == DataType.TAB_BINARY_HEADER_IDENTIFIER:\r | |
609 | for SubItem in XmlList(Item, '%s/BinaryAbstract' % Key):\r | |
610 | BinaryAbstractLang = XmlAttribute(SubItem, 'Lang')\r | |
611 | self.BinaryAbstractList.append((BinaryAbstractLang, XmlElement(SubItem, '%s/BinaryAbstract' % Key)))\r | |
612 | for SubItem in XmlList(Item, '%s/BinaryDescription' % Key):\r | |
613 | BinaryDescriptionLang = XmlAttribute(SubItem, 'Lang')\r | |
f7496d71 | 614 | self.BinaryDescriptionList.append((BinaryDescriptionLang,\r |
421ccda3 HC |
615 | XmlElement(SubItem, '%s/BinaryDescription' % Key)))\r |
616 | for SubItem in XmlList(Item, '%s/BinaryCopyright' % Key):\r | |
617 | BinaryCopyrightLang = XmlAttribute(SubItem, 'Lang')\r | |
f7496d71 | 618 | self.BinaryCopyrightList.append((BinaryCopyrightLang,\r |
421ccda3 HC |
619 | XmlElement(SubItem, '%s/BinaryCopyright' % Key)))\r |
620 | for SubItem in XmlList(Item, '%s/BinaryLicense' % Key):\r | |
621 | BinaryLicenseLang = XmlAttribute(SubItem, 'Lang')\r | |
f7496d71 LG |
622 | self.BinaryLicenseList.append((BinaryLicenseLang,\r |
623 | XmlElement(SubItem, '%s/BinaryLicense' % Key)))\r | |
4234283c LG |
624 | \r |
625 | DefineItem = XmlNode(Item, '%s/Define' % Key)\r | |
626 | for SubItem in XmlList(DefineItem, 'Define/Statement'):\r | |
627 | Statement = XmlElement(SubItem, '%s/Statement' % Key)\r | |
628 | self.DefineDict[Statement] = ""\r | |
4234283c LG |
629 | BuildOptionItem = XmlNode(Item, '%s/BuildOption' % Key)\r |
630 | for SubItem in XmlList(BuildOptionItem, 'BuildOption/Statement'):\r | |
631 | Statement = XmlElement(SubItem, '%s/Statement' % Key)\r | |
632 | Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')\r | |
633 | self.BuildOptionDict[Arch] = Statement\r | |
4234283c LG |
634 | IncludesItem = XmlNode(Item, '%s/Includes' % Key)\r |
635 | for SubItem in XmlList(IncludesItem, 'Includes/Statement'):\r | |
636 | Statement = XmlElement(SubItem, '%s/Statement' % Key)\r | |
637 | Arch = XmlAttribute(XmlNode(SubItem, '%s/Statement' % Key), 'SupArchList')\r | |
638 | self.IncludesDict[Statement] = Arch\r | |
4234283c LG |
639 | SourcesItem = XmlNode(Item, '%s/Sources' % Key)\r |
640 | Tmp = UserExtensionSourceXml()\r | |
641 | SourceDict = Tmp.FromXml(SourcesItem, 'Sources')\r | |
642 | self.SourcesDict = SourceDict\r | |
4234283c LG |
643 | BinariesItem = XmlNode(Item, '%s/Binaries' % Key)\r |
644 | Tmp = UserExtensionBinaryXml()\r | |
645 | BinariesDict = Tmp.FromXml(BinariesItem, 'Binaries')\r | |
646 | self.BinariesDict = BinariesDict\r | |
4234283c LG |
647 | self.Statement = XmlElement(Item, 'UserExtensions')\r |
648 | SupArch = XmlAttribute(XmlNode(Item, '%s' % Key), 'SupArchList')\r | |
649 | self.SupArchList = [Arch for Arch in GetSplitValueList(SupArch, DataType.TAB_SPACE_SPLIT) if Arch]\r | |
4234283c LG |
650 | UserExtension = UserExtensionObject()\r |
651 | UserExtension.SetUserID(self.UserId)\r | |
652 | UserExtension.SetIdentifier(self.Identifier)\r | |
421ccda3 HC |
653 | UserExtension.SetBinaryAbstract(self.BinaryAbstractList)\r |
654 | UserExtension.SetBinaryDescription(self.BinaryDescriptionList)\r | |
655 | UserExtension.SetBinaryCopyright(self.BinaryCopyrightList)\r | |
656 | UserExtension.SetBinaryLicense(self.BinaryLicenseList)\r | |
4234283c LG |
657 | UserExtension.SetStatement(self.Statement)\r |
658 | UserExtension.SetSupArchList(self.SupArchList)\r | |
659 | UserExtension.SetDefinesDict(self.DefineDict)\r | |
660 | UserExtension.SetBuildOptionDict(self.BuildOptionDict)\r | |
661 | UserExtension.SetIncludesDict(self.IncludesDict)\r | |
662 | UserExtension.SetSourcesDict(self.SourcesDict)\r | |
663 | UserExtension.SetBinariesDict(self.BinariesDict)\r | |
4234283c LG |
664 | return UserExtension\r |
665 | \r | |
666 | def ToXml(self, UserExtension, Key):\r | |
667 | if self.UserId:\r | |
668 | pass\r | |
4234283c LG |
669 | AttributeList = [['UserId', str(UserExtension.GetUserID())],\r |
670 | ['Identifier', str(UserExtension.GetIdentifier())],\r | |
671 | ['SupArchList', \\r | |
672 | GetStringOfList(UserExtension.GetSupArchList())],\r | |
673 | ]\r | |
4234283c | 674 | Root = CreateXmlElement('%s' % Key, UserExtension.GetStatement(), [], \\r |
421ccda3 HC |
675 | AttributeList)\r |
676 | if UserExtension.GetIdentifier() == DataType.TAB_BINARY_HEADER_IDENTIFIER and \\r | |
677 | UserExtension.GetUserID() == DataType.TAB_BINARY_HEADER_USERID:\r | |
678 | for (Lang, Value) in UserExtension.GetBinaryAbstract():\r | |
679 | if Value:\r | |
680 | ChildElement = CreateXmlElement('BinaryAbstract', Value, [], [['Lang', Lang]])\r | |
681 | Root.appendChild(ChildElement)\r | |
682 | for (Lang, Value) in UserExtension.GetBinaryDescription():\r | |
683 | if Value:\r | |
684 | ChildElement = CreateXmlElement('BinaryDescription', Value, [], [['Lang', Lang]])\r | |
685 | Root.appendChild(ChildElement)\r | |
686 | for (Lang, Value) in UserExtension.GetBinaryCopyright():\r | |
687 | if Value:\r | |
688 | ChildElement = CreateXmlElement('BinaryCopyright', Value, [], [])\r | |
689 | Root.appendChild(ChildElement)\r | |
690 | for (Lang, Value) in UserExtension.GetBinaryLicense():\r | |
691 | if Value:\r | |
692 | ChildElement = CreateXmlElement('BinaryLicense', Value, [], [])\r | |
693 | Root.appendChild(ChildElement)\r | |
f7496d71 | 694 | \r |
4234283c LG |
695 | NodeList = []\r |
696 | DefineDict = UserExtension.GetDefinesDict()\r | |
697 | if DefineDict:\r | |
698 | for Item in DefineDict.keys():\r | |
699 | NodeList.append(CreateXmlElement\\r | |
700 | ('Statement', Item, [], []))\r | |
701 | DefineElement = CreateXmlElement('Define', '', NodeList, [])\r | |
702 | Root.appendChild(DefineElement)\r | |
4234283c LG |
703 | NodeList = []\r |
704 | BuildOptionDict = UserExtension.GetBuildOptionDict()\r | |
705 | if BuildOptionDict:\r | |
706 | for Item in BuildOptionDict.keys():\r | |
707 | NodeList.append(CreateXmlElement\\r | |
708 | ('Statement', BuildOptionDict[Item], [], \\r | |
709 | [['SupArchList', Item]]))\r | |
710 | BuildOptionElement = \\r | |
711 | CreateXmlElement('BuildOption', '', NodeList, [])\r | |
712 | Root.appendChild(BuildOptionElement)\r | |
4234283c LG |
713 | NodeList = []\r |
714 | IncludesDict = UserExtension.GetIncludesDict()\r | |
715 | if IncludesDict:\r | |
716 | for Item in IncludesDict.keys():\r | |
717 | NodeList.append(CreateXmlElement\\r | |
718 | ('Statement', Item, [], \\r | |
719 | [['SupArchList', IncludesDict[Item]]]))\r | |
720 | IncludesElement = CreateXmlElement('Includes', '', NodeList, [])\r | |
721 | Root.appendChild(IncludesElement)\r | |
4234283c LG |
722 | NodeList = []\r |
723 | SourcesDict = UserExtension.GetSourcesDict()\r | |
724 | if SourcesDict:\r | |
725 | Tmp = UserExtensionSourceXml()\r | |
726 | Root.appendChild(Tmp.ToXml(SourcesDict, 'Sources'))\r | |
4234283c LG |
727 | NodeList = []\r |
728 | BinariesDict = UserExtension.GetBinariesDict()\r | |
729 | if BinariesDict:\r | |
730 | Tmp = UserExtensionBinaryXml()\r | |
731 | Root.appendChild(Tmp.ToXml(BinariesDict, 'Binaries'))\r | |
4234283c LG |
732 | return Root\r |
733 | \r | |
734 | def __str__(self):\r | |
735 | Str = "UserId = %s Identifier = %s" % (self.UserId, self.Identifier)\r | |
736 | Str = Str + '\n\tDefines:' + str(self.Defines)\r | |
737 | Str = Str + '\n\tBuildOptions:' + str(self.BuildOptions)\r | |
738 | return Str\r | |
739 | \r | |
740 | ##\r | |
741 | # UserExtensionSourceXml\r | |
742 | #\r | |
743 | class UserExtensionSourceXml(object):\r | |
744 | def __init__(self):\r | |
745 | self.UserExtensionSource = ''\r | |
746 | \r | |
747 | def FromXml(self, Item, Key):\r | |
748 | if Key:\r | |
749 | pass\r | |
750 | if self.UserExtensionSource:\r | |
751 | pass\r | |
752 | Dict = {}\r | |
4234283c LG |
753 | #SourcesItem = XmlNode(Item, '%s/Sources' % Key)\r |
754 | for SubItem in XmlList(Item, 'Sources/SourceFile'):\r | |
755 | FileName = XmlElement(SubItem, 'SourceFile/FileName')\r | |
756 | Family = XmlElement(SubItem, 'SourceFile/Family')\r | |
757 | FeatureFlag = XmlElement(SubItem, 'SourceFile/FeatureFlag')\r | |
758 | SupArchStr = XmlElement(SubItem, 'SourceFile/SupArchList')\r | |
759 | DictKey = (FileName, Family, FeatureFlag, SupArchStr)\r | |
4234283c LG |
760 | ValueList = []\r |
761 | for ValueNodeItem in XmlList(SubItem, \\r | |
762 | 'SourceFile/SourceFileOtherAttr'):\r | |
763 | TagName = XmlElement(ValueNodeItem, \\r | |
764 | 'SourceFileOtherAttr/TagName')\r | |
765 | ToolCode = XmlElement(ValueNodeItem, \\r | |
766 | 'SourceFileOtherAttr/ToolCode')\r | |
767 | Comment = XmlElement(ValueNodeItem, \\r | |
768 | 'SourceFileOtherAttr/Comment')\r | |
769 | if (TagName == ' ') and (ToolCode == ' ') and (Comment == ' '):\r | |
770 | TagName = ''\r | |
771 | ToolCode = ''\r | |
772 | Comment = ''\r | |
773 | ValueList.append((TagName, ToolCode, Comment))\r | |
4234283c | 774 | Dict[DictKey] = ValueList\r |
4234283c LG |
775 | return Dict\r |
776 | \r | |
777 | def ToXml(self, Dict, Key):\r | |
778 | if self.UserExtensionSource:\r | |
779 | pass\r | |
780 | SourcesNodeList = []\r | |
781 | for Item in Dict:\r | |
782 | ValueList = Dict[Item]\r | |
783 | (FileName, Family, FeatureFlag, SupArchStr) = Item\r | |
784 | SourceFileNodeList = []\r | |
785 | SourceFileNodeList.append(["FileName", FileName])\r | |
786 | SourceFileNodeList.append(["Family", Family])\r | |
787 | SourceFileNodeList.append(["FeatureFlag", FeatureFlag])\r | |
788 | SourceFileNodeList.append(["SupArchList", SupArchStr])\r | |
789 | for (TagName, ToolCode, Comment) in ValueList:\r | |
790 | ValueNodeList = []\r | |
791 | if not (TagName or ToolCode or Comment):\r | |
792 | TagName = ' '\r | |
793 | ToolCode = ' '\r | |
794 | Comment = ' '\r | |
795 | ValueNodeList.append(["TagName", TagName])\r | |
796 | ValueNodeList.append(["ToolCode", ToolCode])\r | |
797 | ValueNodeList.append(["Comment", Comment])\r | |
798 | ValueNodeXml = CreateXmlElement('SourceFileOtherAttr', '', \\r | |
799 | ValueNodeList, [])\r | |
800 | SourceFileNodeList.append(ValueNodeXml)\r | |
801 | SourceFileNodeXml = CreateXmlElement('SourceFile', '', \\r | |
802 | SourceFileNodeList, [])\r | |
803 | SourcesNodeList.append(SourceFileNodeXml)\r | |
804 | Root = CreateXmlElement('%s' % Key, '', SourcesNodeList, [])\r | |
805 | return Root\r | |
806 | \r | |
807 | ##\r | |
808 | # UserExtensionBinaryXml\r | |
809 | #\r | |
810 | class UserExtensionBinaryXml(object):\r | |
811 | def __init__(self):\r | |
812 | self.UserExtensionBinary = ''\r | |
813 | \r | |
814 | def FromXml(self, Item, Key):\r | |
815 | if Key:\r | |
816 | pass\r | |
817 | if self.UserExtensionBinary:\r | |
818 | pass\r | |
4234283c | 819 | Dict = {}\r |
4234283c LG |
820 | for SubItem in XmlList(Item, 'Binaries/Binary'):\r |
821 | FileName = XmlElement(SubItem, 'Binary/FileName')\r | |
822 | FileType = XmlElement(SubItem, 'Binary/FileType')\r | |
823 | FFE = XmlElement(SubItem, 'Binary/FeatureFlag')\r | |
824 | SupArch = XmlElement(SubItem, 'Binary/SupArchList')\r | |
825 | DictKey = (FileName, FileType, ConvertNOTEQToNE(FFE), SupArch)\r | |
4234283c LG |
826 | ValueList = []\r |
827 | for ValueNodeItem in XmlList(SubItem, \\r | |
828 | 'Binary/BinaryFileOtherAttr'):\r | |
829 | Target = XmlElement(ValueNodeItem, \\r | |
830 | 'BinaryFileOtherAttr/Target')\r | |
831 | Family = XmlElement(ValueNodeItem, \\r | |
832 | 'BinaryFileOtherAttr/Family')\r | |
833 | TagName = XmlElement(ValueNodeItem, \\r | |
834 | 'BinaryFileOtherAttr/TagName')\r | |
835 | Comment = XmlElement(ValueNodeItem, \\r | |
836 | 'BinaryFileOtherAttr/Comment')\r | |
837 | if (Target == ' ') and (Family == ' ') and \\r | |
838 | (TagName == ' ') and (Comment == ' '):\r | |
839 | Target = ''\r | |
840 | Family = ''\r | |
841 | TagName = ''\r | |
842 | Comment = ''\r | |
843 | \r | |
844 | ValueList.append((Target, Family, TagName, Comment))\r | |
4234283c | 845 | Dict[DictKey] = ValueList\r |
4234283c LG |
846 | return Dict\r |
847 | \r | |
848 | def ToXml(self, Dict, Key):\r | |
849 | if self.UserExtensionBinary:\r | |
850 | pass\r | |
851 | BinariesNodeList = []\r | |
852 | for Item in Dict:\r | |
853 | ValueList = Dict[Item]\r | |
854 | (FileName, FileType, FeatureFlag, SupArch) = Item\r | |
855 | FileNodeList = []\r | |
856 | FileNodeList.append(["FileName", FileName])\r | |
857 | FileNodeList.append(["FileType", FileType])\r | |
858 | FileNodeList.append(["FeatureFlag", ConvertNEToNOTEQ(FeatureFlag)])\r | |
859 | FileNodeList.append(["SupArchList", SupArch])\r | |
860 | for (Target, Family, TagName, Comment) in ValueList:\r | |
861 | ValueNodeList = []\r | |
862 | if not (Target or Family or TagName or Comment):\r | |
863 | Target = ' '\r | |
864 | Family = ' '\r | |
865 | TagName = ' '\r | |
866 | Comment = ' '\r | |
867 | ValueNodeList.append(["Target", Target])\r | |
868 | ValueNodeList.append(["Family", Family])\r | |
869 | ValueNodeList.append(["TagName", TagName])\r | |
870 | ValueNodeList.append(["Comment", Comment])\r | |
871 | ValueNodeXml = CreateXmlElement('BinaryFileOtherAttr', '', \\r | |
872 | ValueNodeList, [])\r | |
873 | FileNodeList.append(ValueNodeXml)\r | |
874 | FileNodeXml = CreateXmlElement('Binary', '', FileNodeList, [])\r | |
875 | BinariesNodeList.append(FileNodeXml)\r | |
876 | Root = CreateXmlElement('%s' % Key, '', BinariesNodeList, [])\r | |
877 | return Root\r | |
878 | \r | |
879 | ##\r | |
880 | # LibraryClassXml\r | |
881 | #\r | |
882 | class LibraryClassXml(object):\r | |
883 | def __init__(self):\r | |
884 | self.Keyword = ''\r | |
885 | self.HeaderFile = ''\r | |
886 | self.RecommendedInstanceGuid = ''\r | |
887 | self.RecommendedInstanceVersion = ''\r | |
888 | self.CommonDefines = CommonDefinesXml()\r | |
889 | self.HelpText = []\r | |
890 | \r | |
891 | def FromXml(self, Item, Key):\r | |
892 | self.Keyword = XmlAttribute(XmlNode(Item, '%s' % Key), 'Keyword')\r | |
893 | if self.Keyword == '':\r | |
894 | self.Keyword = XmlElement(Item, '%s/Keyword' % Key)\r | |
895 | self.HeaderFile = XmlElement(Item, '%s/HeaderFile' % Key)\r | |
896 | self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)\r | |
897 | for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):\r | |
898 | HelpTextObj = HelpTextXml()\r | |
899 | HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)\r | |
900 | self.HelpText.append(HelpTextObj)\r | |
4234283c LG |
901 | LibraryClass = LibraryClassObject()\r |
902 | LibraryClass.SetLibraryClass(self.Keyword)\r | |
903 | LibraryClass.SetIncludeHeader(self.HeaderFile)\r | |
904 | if self.CommonDefines.Usage:\r | |
905 | LibraryClass.SetUsage(self.CommonDefines.Usage)\r | |
906 | LibraryClass.SetSupArchList(self.CommonDefines.SupArchList)\r | |
907 | LibraryClass.SetSupModuleList(self.CommonDefines.SupModList)\r | |
908 | LibraryClass.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))\r | |
909 | LibraryClass.SetHelpTextList(GetHelpTextList(self.HelpText))\r | |
4234283c LG |
910 | return LibraryClass\r |
911 | \r | |
912 | def ToXml(self, LibraryClass, Key):\r | |
913 | if self.HeaderFile:\r | |
914 | pass\r | |
915 | AttributeList = \\r | |
916 | [['Keyword', LibraryClass.GetLibraryClass()],\r | |
917 | ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())],\r | |
918 | ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())]\r | |
919 | ]\r | |
920 | NodeList = [['HeaderFile', LibraryClass.GetIncludeHeader()]]\r | |
921 | for Item in LibraryClass.GetHelpTextList():\r | |
922 | Tmp = HelpTextXml()\r | |
923 | NodeList.append(Tmp.ToXml(Item))\r | |
4234283c | 924 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r |
4234283c LG |
925 | return Root\r |
926 | \r | |
927 | def ToXml2(self, LibraryClass, Key):\r | |
928 | if self.HeaderFile:\r | |
929 | pass\r | |
4234283c | 930 | FeatureFlag = ConvertNEToNOTEQ(LibraryClass.GetFeatureFlag())\r |
4234283c LG |
931 | AttributeList = \\r |
932 | [['Usage', LibraryClass.GetUsage()], \\r | |
933 | ['SupArchList', GetStringOfList(LibraryClass.GetSupArchList())], \\r | |
934 | ['SupModList', GetStringOfList(LibraryClass.GetSupModuleList())], \\r | |
935 | ['FeatureFlag', FeatureFlag]\r | |
936 | ]\r | |
937 | NodeList = [['Keyword', LibraryClass.GetLibraryClass()], ]\r | |
938 | for Item in LibraryClass.GetHelpTextList():\r | |
939 | Tmp = HelpTextXml()\r | |
940 | NodeList.append(Tmp.ToXml(Item))\r | |
4234283c | 941 | Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)\r |
4234283c LG |
942 | return Root\r |
943 | \r | |
944 | def __str__(self):\r | |
945 | Str = "Keyword = %s HeaderFile = %s RecommendedInstanceGuid = %s RecommendedInstanceVersion = %s %s" % \\r | |
946 | (self.Keyword, self.HeaderFile, self.RecommendedInstanceGuid, self.RecommendedInstanceVersion, \\r | |
947 | self.CommonDefines)\r | |
948 | for Item in self.HelpText:\r | |
949 | Str = Str + "\n\t" + str(Item)\r | |
950 | return Str\r | |
951 | \r | |
952 | ##\r | |
953 | # FilenameXml\r | |
954 | #\r | |
955 | class FilenameXml(object):\r | |
956 | def __init__(self):\r | |
957 | self.FileType = ''\r | |
958 | self.Filename = ''\r | |
959 | self.CommonDefines = CommonDefinesXml()\r | |
960 | \r | |
961 | def FromXml(self, Item, Key):\r | |
962 | self.FileType = XmlAttribute(Item, 'FileType')\r | |
421ccda3 | 963 | Guid = XmlAttribute(Item, 'GUID')\r |
4234283c LG |
964 | self.Filename = XmlElement(Item, 'Filename')\r |
965 | self.CommonDefines.FromXml(Item, Key)\r | |
4234283c | 966 | FeatureFlag = ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)\r |
4234283c LG |
967 | Filename = FileNameObject()\r |
968 | #\r | |
969 | # Convert File Type\r | |
970 | #\r | |
971 | if self.FileType == 'UEFI_IMAGE':\r | |
972 | self.FileType = 'PE32'\r | |
f7496d71 | 973 | \r |
421ccda3 | 974 | Filename.SetGuidValue(Guid)\r |
4234283c LG |
975 | Filename.SetFileType(self.FileType)\r |
976 | Filename.SetFilename(self.Filename)\r | |
977 | Filename.SetSupArchList(self.CommonDefines.SupArchList)\r | |
978 | Filename.SetFeatureFlag(FeatureFlag)\r | |
979 | \r | |
980 | return Filename\r | |
981 | \r | |
982 | def ToXml(self, Filename, Key):\r | |
983 | if self.Filename:\r | |
984 | pass\r | |
985 | AttributeList = [['SupArchList', \\r | |
986 | GetStringOfList(Filename.GetSupArchList())],\r | |
987 | ['FileType', Filename.GetFileType()],\r | |
988 | ['FeatureFlag', ConvertNEToNOTEQ(Filename.GetFeatureFlag())],\r | |
421ccda3 | 989 | ['GUID', Filename.GetGuidValue()]\r |
4234283c LG |
990 | ]\r |
991 | Root = CreateXmlElement('%s' % Key, Filename.GetFilename(), [], AttributeList)\r | |
992 | \r | |
993 | return Root\r | |
994 | \r | |
995 | def __str__(self):\r | |
996 | return "FileType = %s Filename = %s %s" \\r | |
997 | % (self.FileType, self.Filename, self.CommonDefines)\r |