## @file # This file is used to parse a xml file of .PKG file # # Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ''' GuidProtocolPpiXml ''' from Library.StringUtils import ConvertNEToNOTEQ from Library.StringUtils import ConvertNOTEQToNE from Library.StringUtils import GetStringOfList from Library.Xml.XmlRoutines import XmlElement from Library.Xml.XmlRoutines import XmlAttribute from Library.Xml.XmlRoutines import XmlNode from Library.Xml.XmlRoutines import XmlList from Library.Xml.XmlRoutines import CreateXmlElement from Object.POM.CommonObject import GuidObject from Object.POM.CommonObject import ProtocolObject from Object.POM.CommonObject import PpiObject from Xml.CommonXml import CommonDefinesXml from Xml.CommonXml import HelpTextXml from Xml.XmlParserMisc import GetHelpTextList ## #GUID/Protocol/Ppi Common # class GuidProtocolPpiXml(object): def __init__(self, Mode): self.UiName = '' self.GuidTypes = '' self.Notify = '' self.CName = '' self.GuidValue = '' self.CommonDefines = CommonDefinesXml() self.HelpText = [] # # Guid/Ppi/Library, internal used for indicate return object for # FromXml # self.Type = '' # # there are slightly different field between package and module # self.Mode = Mode self.GuidType = '' self.VariableName = '' def FromXml(self, Item, Key): self.UiName = XmlAttribute(XmlNode(Item, '%s' % Key), 'UiName') self.GuidType = XmlAttribute(XmlNode(Item, '%s' % Key), 'GuidType') self.Notify = XmlAttribute(XmlNode(Item, '%s' % Key), 'Notify') self.CName = XmlElement(Item, '%s/CName' % Key) self.GuidValue = XmlElement(Item, '%s/GuidValue' % Key) self.VariableName = XmlElement(Item, '%s/VariableName' % Key) self.CommonDefines.FromXml(XmlNode(Item, '%s' % Key), Key) for HelpTextItem in XmlList(Item, '%s/HelpText' % Key): HelpTextObj = HelpTextXml() HelpTextObj.FromXml(HelpTextItem, '%s/HelpText' % Key) self.HelpText.append(HelpTextObj) if self.Type == 'Guid': GuidProtocolPpi = GuidObject() elif self.Type == 'Protocol': GuidProtocolPpi = ProtocolObject() else: GuidProtocolPpi = PpiObject() GuidProtocolPpi.SetHelpTextList(GetHelpTextList(self.HelpText)) return GuidProtocolPpi def ToXml(self, GuidProtocolPpi, Key): if self.GuidValue: pass AttributeList = \ [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \ ['UiName', GuidProtocolPpi.GetName()], \ ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \ ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \ ['SupArchList', GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['SupModList', GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \ ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())] ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ['GuidValue', GuidProtocolPpi.GetGuid()], ['VariableName', GuidProtocolPpi.VariableName] ] for Item in GuidProtocolPpi.GetHelpTextList(): Tmp = HelpTextXml() NodeList.append(Tmp.ToXml(Item)) Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root def __str__(self): Str = \ "UiName = %s Notify = %s GuidTypes = %s CName = %s GuidValue = %s %s" \ % (self.UiName, self.Notify, self.GuidTypes, self.CName, \ self.GuidValue, self.CommonDefines) for Item in self.HelpText: Str = Str + "\n\t" + str(Item) return Str ## #GUID Xml # class GuidXml(GuidProtocolPpiXml): def __init__(self, Mode): GuidProtocolPpiXml.__init__(self, Mode) self.Type = 'Guid' def FromXml(self, Item, Key): GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key) if self.Mode == 'Package': GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList) GuidProtocolPpi.SetCName(self.CName) GuidProtocolPpi.SetGuid(self.GuidValue) else: GuidProtocolPpi.SetUsage(self.CommonDefines.Usage) if self.GuidType: GuidProtocolPpi.SetGuidTypeList([self.GuidType]) GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)) GuidProtocolPpi.SetCName(self.CName) GuidProtocolPpi.SetVariableName(self.VariableName) return GuidProtocolPpi def ToXml(self, GuidProtocolPpi, Key): if self.Mode == 'Package': AttributeList = \ [['GuidType', \ GetStringOfList(GuidProtocolPpi.GetGuidTypeList())], \ ['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['SupModList', \ GetStringOfList(GuidProtocolPpi.GetSupModuleList())], ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ['GuidValue', GuidProtocolPpi.GetGuid()], ] else: AttributeList = \ [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \ ['GuidType', GetStringOfList(GuidProtocolPpi.GetGuidTypeList())],\ ['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())] ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ['VariableName', GuidProtocolPpi.GetVariableName()] ] for Item in GuidProtocolPpi.GetHelpTextList(): Tmp = HelpTextXml() NodeList.append(Tmp.ToXml(Item)) Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root ## #Protocol Xml # class ProtocolXml(GuidProtocolPpiXml): def __init__(self, Mode): GuidProtocolPpiXml.__init__(self, Mode) self.Type = 'Protocol' def FromXml(self, Item, Key): GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key) if self.Mode == 'Package': GuidProtocolPpi.SetFeatureFlag(self.CommonDefines.FeatureFlag) GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList) GuidProtocolPpi.SetCName(self.CName) GuidProtocolPpi.SetGuid(self.GuidValue) else: GuidProtocolPpi.SetUsage(self.CommonDefines.Usage) if self.Notify.upper() == "TRUE": GuidProtocolPpi.SetNotify(True) elif self.Notify.upper() == "FALSE": GuidProtocolPpi.SetNotify(False) else: GuidProtocolPpi.SetNotify('') GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)) GuidProtocolPpi.SetCName(self.CName) return GuidProtocolPpi def ToXml(self, GuidProtocolPpi, Key): if self.Mode == 'Package': AttributeList = \ [['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['SupModList', \ GetStringOfList(GuidProtocolPpi.GetSupModuleList())], \ ['FeatureFlag', GuidProtocolPpi.GetFeatureFlag()] ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ['GuidValue', GuidProtocolPpi.GetGuid()], ] else: AttributeList = \ [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \ ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \ ['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())] ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ] for Item in GuidProtocolPpi.GetHelpTextList(): Tmp = HelpTextXml() NodeList.append(Tmp.ToXml(Item)) Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root ## #Ppi Xml # class PpiXml(GuidProtocolPpiXml): def __init__(self, Mode): GuidProtocolPpiXml.__init__(self, Mode) self.Type = 'Ppi' def FromXml(self, Item, Key): GuidProtocolPpi = GuidProtocolPpiXml.FromXml(self, Item, Key) if self.Mode == 'Package': GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetSupModuleList(self.CommonDefines.SupModList) GuidProtocolPpi.SetCName(self.CName) GuidProtocolPpi.SetGuid(self.GuidValue) else: GuidProtocolPpi.SetUsage(self.CommonDefines.Usage) if self.Notify.upper() == "TRUE": GuidProtocolPpi.SetNotify(True) elif self.Notify.upper() == "FALSE": GuidProtocolPpi.SetNotify(False) else: GuidProtocolPpi.SetNotify('') GuidProtocolPpi.SetSupArchList(self.CommonDefines.SupArchList) GuidProtocolPpi.SetFeatureFlag(ConvertNOTEQToNE(self.CommonDefines.FeatureFlag)) GuidProtocolPpi.SetCName(self.CName) return GuidProtocolPpi def ToXml(self, GuidProtocolPpi, Key): if self.Mode == 'Package': AttributeList = \ [['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ['GuidValue', GuidProtocolPpi.GetGuid()], ] else: AttributeList = \ [['Usage', GetStringOfList(GuidProtocolPpi.GetUsage())], \ ['Notify', str(GuidProtocolPpi.GetNotify()).lower()], \ ['SupArchList', \ GetStringOfList(GuidProtocolPpi.GetSupArchList())], \ ['FeatureFlag', ConvertNEToNOTEQ(GuidProtocolPpi.GetFeatureFlag())] ] NodeList = [['CName', GuidProtocolPpi.GetCName()], ] for Item in GuidProtocolPpi.GetHelpTextList(): Tmp = HelpTextXml() NodeList.append(Tmp.ToXml(Item)) Root = CreateXmlElement('%s' % Key, '', NodeList, AttributeList) return Root