## @file
# This file is used to define a class object to describe a module
#
# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent

'''
ModuleObject
'''

##
# Import Modules
#
from edk2basetools.UPT.Object.POM.CommonObject import CommonPropertiesObject
from edk2basetools.UPT.Object.POM.CommonObject import IdentificationObject
from edk2basetools.UPT.Object.POM.CommonObject import CommonHeaderObject
from edk2basetools.UPT.Object.POM.CommonObject import BinaryHeaderObject
from edk2basetools.UPT.Object.POM.CommonObject import HelpTextListObject
from edk2basetools.UPT.Object.POM.CommonObject import GuidVersionObject


##
# BootModeObject
#
class BootModeObject(CommonPropertiesObject, HelpTextListObject):
    def __init__(self):
        self.SupportedBootModes = ''
        CommonPropertiesObject.__init__(self)
        HelpTextListObject.__init__(self)

    def SetSupportedBootModes(self, SupportedBootModes):
        self.SupportedBootModes = SupportedBootModes

    def GetSupportedBootModes(self):
        return self.SupportedBootModes

##
# EventObject
#
class EventObject(CommonPropertiesObject, HelpTextListObject):
    def __init__(self):
        self.EventType = ''
        CommonPropertiesObject.__init__(self)
        HelpTextListObject.__init__(self)

    def SetEventType(self, EventType):
        self.EventType = EventType

    def GetEventType(self):
        return self.EventType

##
# HobObject
#
class HobObject(CommonPropertiesObject, HelpTextListObject):
    def __init__(self):
        self.HobType = ''
        CommonPropertiesObject.__init__(self)
        HelpTextListObject.__init__(self)

    def SetHobType(self, HobType):
        self.HobType = HobType

    def GetHobType(self):
        return self.HobType

##
# SpecObject
#
class SpecObject(object):
    def __init__(self):
        self.Spec = ''
        self.Version = ''

    def SetSpec(self, Spec):
        self.Spec = Spec

    def GetSpec(self):
        return self.Spec

    def SetVersion(self, Version):
        self.Version = Version

    def GetVersion(self):
        return self.Version

## ModuleHeaderObject
#
# This class defined header items used in Module file
#
class ModuleHeaderObject(IdentificationObject, CommonHeaderObject, BinaryHeaderObject):
    def __init__(self):
        self.IsLibrary = False
        self.IsLibraryModList = []
        self.ModuleType = ''
        self.BinaryModule = False
        self.PcdIsDriver = ''
        self.PiSpecificationVersion = ''
        self.UefiSpecificationVersion = ''
        self.UNIFlag = False
        self.ModuleUniFile = ''
        #
        # SpecObject
        #
        self.SpecList = []
        #
        # BootModeObject
        #
        self.BootModeList = []
        #
        # EventObject
        #
        self.EventList = []
        #
        # HobObject
        #
        self.HobList = []
        #
        # LibraryClassObject
        #
        self.LibraryClassList = []
        self.SupArchList = []
        IdentificationObject.__init__(self)
        CommonHeaderObject.__init__(self)
        BinaryHeaderObject.__init__(self)

    def SetIsLibrary(self, IsLibrary):
        self.IsLibrary = IsLibrary

    def GetIsLibrary(self):
        return self.IsLibrary

    def SetIsLibraryModList(self, IsLibraryModList):
        self.IsLibraryModList = IsLibraryModList

    def GetIsLibraryModList(self):
        return self.IsLibraryModList

    def SetModuleType(self, ModuleType):
        self.ModuleType = ModuleType

    def GetModuleType(self):
        return self.ModuleType

    def SetBinaryModule(self, BinaryModule):
        self.BinaryModule = BinaryModule

    def GetBinaryModule(self):
        return self.BinaryModule

    def SetPcdIsDriver(self, PcdIsDriver):
        self.PcdIsDriver = PcdIsDriver

    def GetPcdIsDriver(self):
        return self.PcdIsDriver

    def SetPiSpecificationVersion(self, PiSpecificationVersion):
        self.PiSpecificationVersion = PiSpecificationVersion

    def GetPiSpecificationVersion(self):
        return self.PiSpecificationVersion

    def SetUefiSpecificationVersion(self, UefiSpecificationVersion):
        self.UefiSpecificationVersion = UefiSpecificationVersion

    def GetUefiSpecificationVersion(self):
        return self.UefiSpecificationVersion

    def SetSpecList(self, SpecList):
        self.SpecList = SpecList

    def GetSpecList(self):
        return self.SpecList

    def SetBootModeList(self, BootModeList):
        self.BootModeList = BootModeList

    def GetBootModeList(self):
        return self.BootModeList

    def SetEventList(self, EventList):
        self.EventList = EventList

    def GetEventList(self):
        return self.EventList

    def SetHobList(self, HobList):
        self.HobList = HobList

    def GetHobList(self):
        return self.HobList

    def SetLibraryClassList(self, LibraryClassList):
        self.LibraryClassList = LibraryClassList

    def GetLibraryClassList(self):
        return self.LibraryClassList

    def SetSupArchList(self, SupArchList):
        self.SupArchList = SupArchList

    def GetSupArchList(self):
        return self.SupArchList

    def SetModuleUniFile(self, ModuleUniFile):
        self.ModuleUniFile = ModuleUniFile

    def GetModuleUniFile(self):
        return self.ModuleUniFile
##
# SourceFileObject
#
class SourceFileObject(CommonPropertiesObject):
    def __init__(self):
        CommonPropertiesObject.__init__(self)
        self.SourceFile = ''
        self.TagName = ''
        self.ToolCode = ''
        self.Family = ''
        self.FileType = ''

    def SetSourceFile(self, SourceFile):
        self.SourceFile = SourceFile

    def GetSourceFile(self):
        return  self.SourceFile

    def SetTagName(self, TagName):
        self.TagName = TagName

    def GetTagName(self):
        return self.TagName

    def SetToolCode(self, ToolCode):
        self.ToolCode = ToolCode

    def GetToolCode(self):
        return self.ToolCode

    def SetFamily(self, Family):
        self.Family = Family

    def GetFamily(self):
        return self.Family

    def SetFileType(self, FileType):
        self.FileType = FileType

    def GetFileType(self):
        return self.FileType


##
# BinaryFileObject
#
class BinaryFileObject(CommonPropertiesObject):
    def __init__(self):
        self.FileNamList = []
        self.AsBuiltList = []
        CommonPropertiesObject.__init__(self)

    def SetFileNameList(self, FileNamList):
        self.FileNamList = FileNamList

    def GetFileNameList(self):
        return self.FileNamList

    def SetAsBuiltList(self, AsBuiltList):
        self.AsBuiltList = AsBuiltList

    def GetAsBuiltList(self):
        return self.AsBuiltList


##
# AsBuildLibraryClassObject
#
class AsBuildLibraryClassObject(object):
    def __init__(self):
        self.LibGuid = ''
        self.LibVersion = ''
        self.SupArchList = []

    def SetLibGuid(self, LibGuid):
        self.LibGuid = LibGuid
    def GetLibGuid(self):
        return self.LibGuid

    def SetLibVersion(self, LibVersion):
        self.LibVersion = LibVersion
    def GetLibVersion(self):
        return self.LibVersion

    def SetSupArchList(self, SupArchList):
        self.SupArchList = SupArchList
    def GetSupArchList(self):
        return self.SupArchList

##
# AsBuiltObject
#
class AsBuiltObject(object):
    def __init__(self):
        #
        # list of PcdObject
        #
        self.PatchPcdList = []
        #
        # list of PcdObject
        #
        self.PcdExValueList = []
        #
        # list of GuidVersionObject
        #
        self.LibraryInstancesList = []
        #
        # List of BinaryBuildFlag object
        #
        self.BinaryBuildFlagList = []

    def SetPatchPcdList(self, PatchPcdList):
        self.PatchPcdList = PatchPcdList

    def GetPatchPcdList(self):
        return self.PatchPcdList

    def SetPcdExList(self, PcdExValueList):
        self.PcdExValueList = PcdExValueList

    def GetPcdExList(self):
        return self.PcdExValueList

    def SetLibraryInstancesList(self, LibraryInstancesList):
        self.LibraryInstancesList = LibraryInstancesList

    def GetLibraryInstancesList(self):
        return self.LibraryInstancesList

    def SetBuildFlagsList(self, BinaryBuildFlagList):
        self.BinaryBuildFlagList = BinaryBuildFlagList

    def GetBuildFlagsList(self):
        return self.BinaryBuildFlagList

##
# BinaryBuildFlag, this object will include those fields that are not
# covered by the UPT Spec BinaryFile field
#
class BinaryBuildFlagObject(object):
    def __init__(self):
        self.Target = ''
        self.TagName = ''
        self.Family = ''
        self.AsBuiltOptionFlags = ''

    def SetTarget(self, Target):
        self.Target = Target

    def GetTarget(self):
        return self.Target

    def SetTagName(self, TagName):
        self.TagName = TagName

    def GetTagName(self):
        return self.TagName

    def SetFamily(self, Family):
        self.Family = Family

    def GetFamily(self):
        return self.Family

    def SetAsBuiltOptionFlags(self, AsBuiltOptionFlags):
        self.AsBuiltOptionFlags = AsBuiltOptionFlags
    def GetAsBuiltOptionFlags(self):
        return self.AsBuiltOptionFlags

##
# ExternObject
#
class ExternObject(CommonPropertiesObject):
    def __init__(self):
        self.EntryPoint = ''
        self.UnloadImage = ''
        self.Constructor = ''
        self.Destructor = ''
        self.SupModList = []
        CommonPropertiesObject.__init__(self)

    def SetEntryPoint(self, EntryPoint):
        self.EntryPoint = EntryPoint

    def GetEntryPoint(self):
        return self.EntryPoint

    def SetUnloadImage(self, UnloadImage):
        self.UnloadImage = UnloadImage

    def GetUnloadImage(self):
        return self.UnloadImage

    def SetConstructor(self, Constructor):
        self.Constructor = Constructor

    def GetConstructor(self):
        return self.Constructor

    def SetDestructor(self, Destructor):
        self.Destructor = Destructor

    def GetDestructor(self):
        return self.Destructor

    def SetSupModList(self, SupModList):
        self.SupModList = SupModList
    def GetSupModList(self):
        return self.SupModList

##
# DepexObject
#
class DepexObject(CommonPropertiesObject):
    def __init__(self):
        self.Depex = ''
        self.ModuelType = ''
        CommonPropertiesObject.__init__(self)

    def SetDepex(self, Depex):
        self.Depex = Depex

    def GetDepex(self):
        return self.Depex

    def SetModuleType(self, ModuleType):
        self.ModuelType = ModuleType

    def GetModuleType(self):
        return self.ModuelType

##
# PackageDependencyObject
#
class PackageDependencyObject(GuidVersionObject, CommonPropertiesObject):
    def __init__(self):
        self.Package = ''
        self.PackageFilePath = ''
        GuidVersionObject.__init__(self)
        CommonPropertiesObject.__init__(self)

    def SetPackageFilePath(self, PackageFilePath):
        self.PackageFilePath = PackageFilePath

    def GetPackageFilePath(self):
        return self.PackageFilePath

    def SetPackage(self, Package):
        self.Package = Package

    def GetPackage(self):
        return self.Package

##
# BuildOptionObject
#
class BuildOptionObject(CommonPropertiesObject):
    def __init__(self):
        CommonPropertiesObject.__init__(self)
        self.BuildOption = ''

    def SetBuildOption(self, BuildOption):
        self.BuildOption = BuildOption

    def GetBuildOption(self):
        return self.BuildOption

##
# ModuleObject
#
class ModuleObject(ModuleHeaderObject):
    def __init__(self):
        #
        # {Arch : ModuleHeaderObject}
        #
        self.HeaderDict = {}
        #
        # LibraryClassObject
        #
        self.LibraryClassList = []
        #
        # SourceFileObject
        #
        self.SourceFileList = []
        #
        # BinaryFileObject
        #
        self.BinaryFileList = []
        #
        # PackageDependencyObject
        #
        self.PackageDependencyList = []
        #
        # DepexObject
        #
        self.PeiDepex = []
        #
        # DepexObject
        #
        self.DxeDepex = []
        #
        # DepexObject
        #
        self.SmmDepex = []
        #
        # ProtocolObject
        #
        self.ProtocolList = []
        #
        # PpiObject
        #
        self.PpiList = []
        #
        # GuidObject
        #
        self.GuidList = []
        #
        # PcdObject
        #
        self.PcdList = []
        #
        # ExternObject
        #
        self.ExternList = []
        #
        # BuildOptionObject
        #
        self.BuildOptionList = []
        #
        # UserExtensionObject
        #
        self.UserExtensionList = []
        #
        # MiscFileObject
        #
        self.MiscFileList = []
        #
        # ClonedFromObject
        #
        self.ClonedFrom = None

        ModuleHeaderObject.__init__(self)

    def SetHeaderDict(self, HeaderDict):
        self.HeaderDict = HeaderDict

    def GetHeaderDict(self):
        return self.HeaderDict

    def SetLibraryClassList(self, LibraryClassList):
        self.LibraryClassList = LibraryClassList

    def GetLibraryClassList(self):
        return self.LibraryClassList

    def SetSourceFileList(self, SourceFileList):
        self.SourceFileList = SourceFileList

    def GetSourceFileList(self):
        return self.SourceFileList

    def SetBinaryFileList(self, BinaryFileList):
        self.BinaryFileList = BinaryFileList

    def GetBinaryFileList(self):
        return self.BinaryFileList

    def SetPackageDependencyList(self, PackageDependencyList):
        self.PackageDependencyList = PackageDependencyList

    def GetPackageDependencyList(self):
        return self.PackageDependencyList

    def SetPeiDepex(self, PeiDepex):
        self.PeiDepex = PeiDepex

    def GetPeiDepex(self):
        return self.PeiDepex

    def SetDxeDepex(self, DxeDepex):
        self.DxeDepex = DxeDepex

    def GetDxeDepex(self):
        return self.DxeDepex

    def SetSmmDepex(self, SmmDepex):
        self.SmmDepex = SmmDepex

    def GetSmmDepex(self):
        return self.SmmDepex

    def SetPpiList(self, PpiList):
        self.PpiList = PpiList

    def GetPpiList(self):
        return self.PpiList

    def SetProtocolList(self, ProtocolList):
        self.ProtocolList = ProtocolList

    def GetProtocolList(self):
        return self.ProtocolList

    def SetPcdList(self, PcdList):
        self.PcdList = PcdList

    def GetPcdList(self):
        return self.PcdList

    def SetGuidList(self, GuidList):
        self.GuidList = GuidList

    def GetGuidList(self):
        return self.GuidList

    def SetExternList(self, ExternList):
        self.ExternList = ExternList

    def GetExternList(self):
        return self.ExternList

    def SetBuildOptionList(self, BuildOptionList):
        self.BuildOptionList = BuildOptionList

    def GetBuildOptionList(self):
        return self.BuildOptionList

    def SetUserExtensionList(self, UserExtensionList):
        self.UserExtensionList = UserExtensionList

    def GetUserExtensionList(self):
        return self.UserExtensionList

    def SetMiscFileList(self, MiscFileList):
        self.MiscFileList = MiscFileList

    def GetMiscFileList(self):
        return self.MiscFileList

    def SetClonedFrom(self, ClonedFrom):
        self.ClonedFrom = ClonedFrom

    def GetClonedFrom(self):
        return self.ClonedFrom
