]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/UPT/Xml/GuidProtocolPpiXml.py
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Xml / GuidProtocolPpiXml.py
1 ## @file
2 # This file is used to parse a xml file of .PKG file
3 #
4 # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
5 #
6 # SPDX-License-Identifier: BSD-2-Clause-Patent
7 #
8
9 '''
10 GuidProtocolPpiXml
11 '''
12 from Library.StringUtils import ConvertNEToNOTEQ
13 from Library.StringUtils import ConvertNOTEQToNE
14 from Library.StringUtils import GetStringOfList
15 from Library.Xml.XmlRoutines import XmlElement
16 from Library.Xml.XmlRoutines import XmlAttribute
17 from Library.Xml.XmlRoutines import XmlNode
18 from Library.Xml.XmlRoutines import XmlList
19 from Library.Xml.XmlRoutines import CreateXmlElement
20
21 from Object.POM.CommonObject import GuidObject
22 from Object.POM.CommonObject import ProtocolObject
23 from Object.POM.CommonObject import PpiObject
24
25 from Xml.CommonXml import CommonDefinesXml
26 from Xml.CommonXml import HelpTextXml
27
28 from Xml.XmlParserMisc import GetHelpTextList
29
30 ##
31 #GUID/Protocol/Ppi Common
32 #
33 class GuidProtocolPpiXml(object):
34 def __init__(self, Mode):
35 self.UiName = ''
36 self.GuidTypes = ''
37 self.Notify = ''
38 self.CName = ''
39 self.GuidValue = ''
40 self.CommonDefines = CommonDefinesXml()
41 self.HelpText = []
42 #
43 # Guid/Ppi/Library, internal used for indicate return object for
44 # FromXml
45 #
46 self.Type = ''
47 #
48 # there are slightly different field between package and module
49 #
50 self.Mode = Mode
51 self.GuidType = ''
52 self.VariableName = ''
53
54 def FromXml(self, Item, Key):
55 self.UiName = XmlAttribute(XmlNode(Item, '%s' % Key), 'UiName')
56 self.GuidType = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidType')
57 self.Notify = XmlAttribute(XmlNode(Item, '%s' % Key), 'Notify')
58 self.CName = XmlElement(Item, '%s/CName' % Key)
59 self.GuidValue = XmlElement(Item, '%s/GuidValue' % Key)
60 self.VariableName = XmlElement(Item, '%s/VariableName' % Key)
61 self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key)
62 for HelpTextItem in XmlList(Item, '%s/HelpText' % Key):
63 HelpTextObj = HelpTextXml()
64 HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key)
65 self.HelpText.append(HelpTextObj)
66
67 if self.Type == 'Guid':
68 GuidProtocolPpi = GuidObject()
69 elif self.Type == 'Protocol':
70 GuidProtocolPpi = ProtocolObject()
71 else:
72 GuidProtocolPpi = PpiObject()
73 GuidProtocolPpi.SetHelpTextList(GetHelpTextList(self.HelpText))
74
75 return GuidProtocolPpi
76
77 def ToXml(self, GuidProtocolPpi, Key):
78 if self.GuidValue:
79 pass
80 AttributeList = \
81 [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
82 ['UiName', GuidProtocolPpi.GetName()], \
83 ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \
84 ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
85 ['SupArchList', GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
86 ['SupModList', GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \
87 ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
88 ]
89 NodeList = [['CName', GuidProtocolPpi.GetCName()],
90 ['GuidValue', GuidProtocolPpi.GetGuid()],
91 ['VariableName', GuidProtocolPpi.VariableName]
92 ]
93 for Item in GuidProtocolPpi.GetHelpTextList():
94 Tmp = HelpTextXml()
95 NodeList.append(Tmp.ToXml(Item))
96 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
97
98 return Root
99
100 def __str__(self):
101 Str = \
102 "UiName = %s Notify = %s GuidTypes = %s CName = %s GuidValue = %s %s" \
103 % (self.UiName, self.Notify, self.GuidTypes, self.CName, \
104 self.GuidValue, self.CommonDefines)
105 for Item in self.HelpText:
106 Str = Str + "\n\t" + str(Item)
107 return Str
108 ##
109 #GUID Xml
110 #
111 class GuidXml(GuidProtocolPpiXml):
112 def __init__(self, Mode):
113 GuidProtocolPpiXml.__init__(self, Mode)
114 self.Type = 'Guid'
115
116 def FromXml(self, Item, Key):
117 GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
118
119 if self.Mode == 'Package':
120
121 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
122 GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
123 GuidProtocolPpi.SetCName(self.CName)
124 GuidProtocolPpi.SetGuid(self.GuidValue)
125 else:
126 GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
127 if self.GuidType:
128 GuidProtocolPpi.SetGuidTypeList([self.GuidType])
129 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
130 GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
131 GuidProtocolPpi.SetCName(self.CName)
132 GuidProtocolPpi.SetVariableName(self.VariableName)
133 return GuidProtocolPpi
134
135 def ToXml(self, GuidProtocolPpi, Key):
136 if self.Mode == 'Package':
137 AttributeList = \
138 [['GuidType', \
139 GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \
140 ['SupArchList', \
141 GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
142 ['SupModList', \
143 GetStringOfList(GuidProtocolPpi.GetSupModuleList())],
144 ]
145 NodeList = [['CName', GuidProtocolPpi.GetCName()],
146 ['GuidValue', GuidProtocolPpi.GetGuid()],
147 ]
148 else:
149 AttributeList = \
150 [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
151 ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())],\
152 ['SupArchList', \
153 GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
154 ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
155 ]
156 NodeList = [['CName', GuidProtocolPpi.GetCName()],
157 ['VariableName', GuidProtocolPpi.GetVariableName()]
158 ]
159
160 for Item in GuidProtocolPpi.GetHelpTextList():
161 Tmp = HelpTextXml()
162 NodeList.append(Tmp.ToXml(Item))
163 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
164
165 return Root
166 ##
167 #Protocol Xml
168 #
169 class ProtocolXml(GuidProtocolPpiXml):
170 def __init__(self, Mode):
171 GuidProtocolPpiXml.__init__(self, Mode)
172 self.Type = 'Protocol'
173
174 def FromXml(self, Item, Key):
175 GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
176 if self.Mode == 'Package':
177 GuidProtocolPpi.SetFeatureFlag(self.CommonDefines.FeatureFlag)
178 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
179 GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
180 GuidProtocolPpi.SetCName(self.CName)
181 GuidProtocolPpi.SetGuid(self.GuidValue)
182 else:
183 GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
184 if self.Notify.upper() == "TRUE":
185 GuidProtocolPpi.SetNotify(True)
186 elif self.Notify.upper() == "FALSE":
187 GuidProtocolPpi.SetNotify(False)
188 else:
189 GuidProtocolPpi.SetNotify('')
190 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
191 GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
192 GuidProtocolPpi.SetCName(self.CName)
193
194 return GuidProtocolPpi
195
196 def ToXml(self, GuidProtocolPpi, Key):
197 if self.Mode == 'Package':
198 AttributeList = \
199 [['SupArchList', \
200 GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
201 ['SupModList', \
202 GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \
203 ['FeatureFlag', GuidProtocolPpi.GetFeatureFlag()]
204 ]
205 NodeList = [['CName', GuidProtocolPpi.GetCName()],
206 ['GuidValue', GuidProtocolPpi.GetGuid()],
207 ]
208 else:
209 AttributeList = \
210 [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
211 ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
212 ['SupArchList', \
213 GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
214 ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
215 ]
216 NodeList = [['CName', GuidProtocolPpi.GetCName()],
217 ]
218
219 for Item in GuidProtocolPpi.GetHelpTextList():
220 Tmp = HelpTextXml()
221 NodeList.append(Tmp.ToXml(Item))
222 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
223
224 return Root
225 ##
226 #Ppi Xml
227 #
228 class PpiXml(GuidProtocolPpiXml):
229 def __init__(self, Mode):
230 GuidProtocolPpiXml.__init__(self, Mode)
231 self.Type = 'Ppi'
232
233 def FromXml(self, Item, Key):
234 GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key)
235 if self.Mode == 'Package':
236 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
237 GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList)
238 GuidProtocolPpi.SetCName(self.CName)
239 GuidProtocolPpi.SetGuid(self.GuidValue)
240 else:
241 GuidProtocolPpi.SetUsage(self.CommonDefines.Usage)
242 if self.Notify.upper() == "TRUE":
243 GuidProtocolPpi.SetNotify(True)
244 elif self.Notify.upper() == "FALSE":
245 GuidProtocolPpi.SetNotify(False)
246 else:
247 GuidProtocolPpi.SetNotify('')
248 GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList)
249 GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag))
250 GuidProtocolPpi.SetCName(self.CName)
251
252 return GuidProtocolPpi
253
254 def ToXml(self, GuidProtocolPpi, Key):
255 if self.Mode == 'Package':
256 AttributeList = \
257 [['SupArchList', \
258 GetStringOfList(GuidProtocolPpi.GetSupArchList())],
259 ]
260 NodeList = [['CName', GuidProtocolPpi.GetCName()],
261 ['GuidValue', GuidProtocolPpi.GetGuid()],
262 ]
263 else:
264 AttributeList = \
265 [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \
266 ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \
267 ['SupArchList', \
268 GetStringOfList(GuidProtocolPpi.GetSupArchList())], \
269 ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())]
270 ]
271 NodeList = [['CName', GuidProtocolPpi.GetCName()],
272 ]
273
274 for Item in GuidProtocolPpi.GetHelpTextList():
275 Tmp = HelpTextXml()
276 NodeList.append(Tmp.ToXml(Item))
277 Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList)
278 return Root