text: ## @file
  # This file is used to define a class object to describe a module
  #
  # Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
  #
  # This program and the accompanying materials are licensed and made available 
  # under the terms and conditions of the BSD License which accompanies this 
  # distribution. The full text of the license may be found at 
  # http://opensource.org/licenses/bsd-license.php
  #
  # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
  
  '''
  ModuleObject
  '''
  
  ##
  # Import Modules
  #                     
  from Object.POM.CommonObject import CommonPropertiesObject
  from Object.POM.CommonObject import IdentificationObject
  from Object.POM.CommonObject import CommonHeaderObject
  from Object.POM.CommonObject import HelpTextListObject
  from 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):
      def __init__(self):
          self.IsLibrary = False
          self.IsLibraryModList = []
          self.ModuleType = ''
          self.BinaryModule = False
          self.PcdIsDriver = ''
          self.PiSpecificationVersion = ''
          self.UefiSpecificationVersion = ''
          #
          # SpecObject
          #
          self.SpecList = []              
          #
          # BootModeObject
          #
          self.BootModeList = []          
          #
          # EventObject
          #
          self.EventList = []             
          #
          # HobObject
          #
          self.HobList = []
          #               
          # LibraryClassObject
          #
          self.LibraryClassList = []      
          self.SupArchList = []
          IdentificationObject.__init__(self)
          CommonHeaderObject.__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
  
  ##
  # 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 = ''
      
      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
  
  ##
  # 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
  