// Copyright (c) 2011 DMTF.  All rights reserved.
   [Version ( "2.28.0" ), 
    ClassConstraint { 
       "inv:self.IsLargeBuildNumber=true implies self.BuildNumber = null and self.LargeBuildNumber <> null", 
       "inv:self.IsLargeBuildNumber=false implies self.LargeBuildNumber=null" }, 
    UMLPackagePath ( "CIM::Core::Software" ), 
    Description ( 
       "SoftwareIdentity provides descriptive information about a "
       "software component for asset tracking and/or installation "
       "dependency management. When the IsEntity property has the "
       "value TRUE, the instance of SoftwareIdentity represents an "
       "individually identifiable entity similar to Physical Element. "
       "SoftwareIdentity does NOT indicate whether the software is "
       "installed, executing, etc. This extra information may be "
       "provided through specialized associations to Software "
       "Identity. For instance, both InstalledSoftwareIdentity and "
       "ElementSoftwareIdentity may be used to indicate that the "
       "software identified by this class is installed. "
       "SoftwareIdentity is used when managing the software components "
       "of a ManagedElement that is the management focus. Since "
       "software may be acquired, SoftwareIdentity can be associated "
       "with a Product using the ProductSoftwareComponent "
       "relationship. The Application Model manages the deployment and "
       "installation of software via the classes, SoftwareFeatures and "
       "SoftwareElements. SoftwareFeature and SoftwareElement are used "
       "when the software component is the management focus. The "
       "deployment/installation concepts are related to the "
       "asset/identity one. In fact, a SoftwareIdentity may correspond "
       "to a Product, or to one or more SoftwareFeatures or "
       "SoftwareElements - depending on the granularity of these "
       "classes and the deployment model. The correspondence of "
       "Software Identity to Product, SoftwareFeature or "
       "SoftwareElement is indicated using the ConcreteIdentity "
       "association. Note that there may not be sufficient detail or "
       "instrumentation to instantiate ConcreteIdentity. And, if the "
       "association is instantiated, some duplication of information "
       "may result. For example, the Vendor described in the instances "
       "of Product and SoftwareIdentity MAY be the same. However, this "
       "is not necessarily true, and it is why vendor and similar "
       "information are duplicated in this class. \n"
       "Note that ConcreteIdentity can also be used to describe the "
       "relationship of the software to any LogicalFiles that result "
       "from installing it. As above, there may not be sufficient "
       "detail or instrumentation to instantiate this association." )]
class CIM_SoftwareIdentity : CIM_LogicalElement {

      [Key, Override ( "InstanceID" ), 
       Description ( 
          "Within the scope of the instantiating Namespace, "
          "InstanceID opaquely and uniquely identifies an instance "
          "of this class. In order to ensure uniqueness within the "
          "NameSpace, the value of InstanceID SHOULD be constructed "
          "using the following \'preferred\' algorithm: \n"
          "<OrgID>:<LocalID> \n"
          "Where <OrgID> and <LocalID> are separated by a colon "
          "\':\', and where <OrgID> MUST include a copyrighted, "
          "trademarked or otherwise unique name that is owned by "
          "the business entity creating/defining the InstanceID, or "
          "is a registered ID that is assigned to the business "
          "entity by a recognized global authority (This is similar "
          "to the <Schema Name>_<Class Name> structure of Schema "
          "class names.) In addition, to ensure uniqueness <OrgID> "
          "MUST NOT contain a colon (\':\'). When using this "
          "algorithm, the first colon to appear in InstanceID MUST "
          "appear between <OrgID> and <LocalID>. \n"
          "<LocalID> is chosen by the business entity and SHOULD "
          "not be re-used to identify different underlying "
          "(real-world) elements. If the above \'preferred\' "
          "algorithm is not used, the defining entity MUST assure "
          "that the resultant InstanceID is not re-used across any "
          "InstanceIDs produced by this or other providers for this "
          "instance\'s NameSpace. \n"
          "For DMTF defined instances, the \'preferred\' algorithm "
          "MUST be used with the <OrgID> set to \'CIM\'." )]
   string InstanceID;

      [Description ( 
          "The major number component of the software\'s version "
          "information - for example, \'12\' from version 12.1(3)T. "
          "This property is defined as a numeric value to allow the "
          "determination of \'newer\' vs. \'older\' releases. A "
          "\'newer\' major release is indicated by a larger numeric "
          "value." )]
   uint16 MajorVersion;

      [Description ( 
          "The minor number component of the software\'s version "
          "information - for example, \'1\' from version 12.1(3)T. "
          "This property is defined as a numeric value to allow the "
          "determination of \'newer\' vs. \'older\' releases. A "
          "\'newer\' minor release is indicated by a larger numeric "
          "value." )]
   uint16 MinorVersion;

      [Description ( 
          "The revision or maintenance release component of the "
          "software\'s version information - for example, \'3\' "
          "from version 12.1(3)T. This property is defined as a "
          "numeric value to allow the determination of \'newer\' "
          "vs. \'older\' releases. A \'newer\' revision is "
          "indicated by a larger numeric value." )]
   uint16 RevisionNumber;

      [Description ( "The build number of the software." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.LargeBuildNumber", 
          "CIM_SoftwareIdentity.IsLargeBuildNumber" }]
   uint16 BuildNumber;

      [Description ( 
          "The build number of the software if IsLargeBuildNumber "
          "is TRUE. TheLargeBuildNumber property should be used for "
          "all future implementations." ), 
       ModelCorrespondence { "CIM_SoftwareIdentity.BuildNumber", 
          "CIM_SoftwareIdentity.IsLargeBuildNumber" }]
   uint64 LargeBuildNumber;

      [Description ( 
          "The IsLargeBuildNumber property is used to indicate if "
          "the BuildNumber of LargeBuildNumber property contains "
          "the value of the software build. A value of TRUE shall "
          "indicate that the build number is represented by the "
          "LargeBuildNumber property. A value of FALSE shall "
          "indicate that the build number is represented by the "
          "BuildNumber property." ), 
       ModelCorrespondence { "CIM_SoftwareIdentity.BuildNumber", 
          "CIM_SoftwareIdentity.LargeBuildNumber" }]
   boolean IsLargeBuildNumber = false;

      [Description ( 
          "A string representing the complete software version "
          "information - for example, \'12.1(3)T\'. This string and "
          "the numeric major/minor/revision/build properties are "
          "complementary. Since vastly different representations "
          "and semantics exist for versions, it is not assumed that "
          "one representation is sufficient to permit a client to "
          "perform computations (i.e., the values are numeric) and "
          "a user to recognize the software\'s version (i.e., the "
          "values are understandable and readable). Hence, both "
          "numeric and string representations of version are "
          "provided." )]
   string VersionString;

      [Description ( 
          "Specifies the target operating systems of the software. "
          "This property should be used when a target operating "
          "system is not listed in the TargetOSTypes array values." )]
   string TargetOperatingSystems[];

      [Description ( "Manufacturer of this software." )]
   string Manufacturer;

      [Description ( 
          "The language editions supported by the software. The "
          "language codes defined in ISO 639 should be used." )]
   string Languages[];

      [Description ( 
          "An array of enumerated integers that classify this "
          "software. For example, the software MAY be "
          "instrumentation (value=5) or firmware and diagnostic "
          "software (10 and 7). The use of value 6, Firmware/BIOS, "
          "is being deprecated. Instead, either the value 10 "
          "(Firmware) and/or 11 (BIOS/FCode) SHOULD be used. The "
          "value 13, Software Bundle, identifies a software package "
          "consisting of multiple discrete software instances that "
          "can be installed individually or together.\n"
          "Each contained software instance is represented by an "
          "instance of SoftwareIdentity that is associated to this "
          "instance of SoftwareIdentityinstance via a Component "
          "association." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12", "13", "..", "0x8000..0xFFFF" }, 
       Values { "Unknown", "Other", "Driver", 
          "Configuration Software", "Application Software", 
          "Instrumentation", "Firmware/BIOS", "Diagnostic Software", 
          "Operating System", "Middleware", "Firmware", 
          "BIOS/FCode", "Support/Service Pack", "Software Bundle", 
          "DMTF Reserved", "Vendor Reserved" }, 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ClassificationDescriptions" }]
   uint16 Classifications[];

      [Description ( 
          "An array of free-form strings providing more detailed "
          "explanations for any of the entries in the "
          "Classifications array. Note that each entry is related "
          "to one in the Classifications array located at the same "
          "index." ), 
       ArrayType ( "Indexed" ), 
       ModelCorrespondence { "CIM_SoftwareIdentity.Classifications" }]
   string ClassificationDescriptions[];

      [Description ( 
          "A manufacturer-allocated number used to identify the software."
           )]
   string SerialNumber;

      [Description ( 
          "An array of strings that describes the compatible "
          "installer(s). The purpose of the array elements is to "
          "establish compatibility between a SoftwareIdentity and a "
          "SoftwareInstallationService that can install the "
          "SoftwareIdentity by comparing the values of the array "
          "elements of this property to the values of "
          "SoftwareInstallationServiceCapabilities.SupportedTargetTypes[] "
          "property\'s array elements." ), 
       ModelCorrespondence { 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedTargetTypes" }]
   string TargetTypes[];

      [Description ( 
          "IdentityInfoValue captures additional information that "
          "MAY be used by an organization to describe or identify a "
          "software instance within the context of the "
          "organization. For example, large organizations may have "
          "several ways to address or identify a particular "
          "instance of software depending on where it is stored; a "
          "catalog, a web site, or for whom it is intended; "
          "development, customer service, etc. The indexed array "
          "property IdentityInfoValue contains 0 or more strings "
          "that contain a specific identity info string value. "
          "IdentityInfoValue is mapped and indexed to "
          "IdentityInfoType. When the IdentityInfoValue property is "
          "implemented, the IdentityInfoType property MUST be "
          "implemented and shall be formatted using the algorithm "
          "provided in the IdentityInfoType property Description." ), 
       ArrayType ( "Indexed" ), 
       MaxLen ( 256 ), 
       ModelCorrespondence { "CIM_SoftwareIdentity.IdentityInfoType" }]
   string IdentityInfoValue[];

      [Description ( 
          "An indexed array of fixed-form strings that provide the "
          "description of the type of information that is stored in "
          "the corresponding component of the IdentityInfoValue "
          "array. The elements of this property array describe the "
          "type of the value in the corresponding elements of the "
          "IndetityInfoValue array. When the IdentityInfoValue "
          "property is implemented, the IdentityInfoType property "
          "MUST be implemented. To insure uniqueness the "
          "IdentityInfoType property SHOULD be formatted using the "
          "following algorithm: < OrgID > : < LocalID > Where < "
          "OrgID > and < LocalID > are separated by a colon (:), "
          "and where < OrgID > MUST include a copyrighted, "
          "trademarked, or otherwise unique name that is owned by "
          "the business entity that is creating or defining the "
          "IdentityInfoType or that is a registered ID assigned to "
          "the business entity by a recognized global authority. "
          "(This requirement is similar to the < Schema Name > _ < "
          "Class Name > structure of Schema class names.) In "
          "addition, to ensure uniqueness, < OrgID > MUST NOT "
          "contain a colon (:). When using this algorithm, the "
          "first colon to appear in IdentityInfoType MUST appear "
          "between < OrgID > and < LocalID > . < LocalID > is "
          "chosen by the business entity and SHOULD NOT be reused "
          "to identify different underlying software elements." ), 
       ArrayType ( "Indexed" ), 
       MaxLen ( 256 ), 
       ModelCorrespondence { "CIM_SoftwareIdentity.IdentityInfoValue" }]
   string IdentityInfoType[];

      [Description ( "The date the software was released." )]
   datetime ReleaseDate;

      [Description ( 
          "The IsEntity property is used to indicate whether the "
          "SoftwareIdentity corresponds to a discrete copy of the "
          "software component or is being used to convey "
          "descriptive and identifying information about software "
          "that is not present in the management domain.A value of "
          "TRUE shall indicate that the SoftwareIdentity instance "
          "corresponds to a discrete copy of the software "
          "component. A value of FALSE shall indicate that the "
          "SoftwareIdentity instance does not correspond to a "
          "discrete copy of the Software." )]
   boolean IsEntity = false;

      [Description ( 
          "The binary format type of the installation package of "
          "the software. This property can be used to locate a "
          "SoftwareInstallationService capable of installing this "
          "software." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "..", "0x8000.." }, 
       Values { "Unknown", "Other", "Not Applicable", "Linux RPM", 
          "HP-UX Depot", "Windows MSI", "Solaris Package", 
          "Macintosh Disk Image", "Debian linux Package", 
          "VMware vSphere Installation Bundle", 
          "VMware Software Bulletin", "HP Smart Component", 
          "DMTF Reserved", "Vendor Reserved" }, 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.OtherExtendedResourceTypeDescription", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeMajorVersion", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeMinorVersion", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeRevisionNumber", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeBuildNumber", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes" }]
   uint16 ExtendedResourceType;

      [Description ( 
          "A string describing the binary format type of the "
          "installation package of the software when the "
          "ExtendedResourceType property has a value of 1 (Other)." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ExtendedResourceType", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeMajorVersion", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeMinorVersion", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeRevisionNumber", 
          "CIM_SoftwareIdentity.MinExtendedResourceTypeBuildNumber", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes" }]
   string OtherExtendedResourceTypeDescription;

      [Description ( 
          "This property represents the major number component of "
          "the minimum version of the installer, represented by the "
          "ExtendedResourceType property, that is required to "
          "install this software." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ExtendedResourceType", 
          "CIM_SoftwareIdentity.OtherExtendedResourceTypeDescription", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypesMajorVersions" }]
   uint16 MinExtendedResourceTypeMajorVersion;

      [Description ( 
          "This property represents the minor number component of "
          "the minimum version of the installer, represented by "
          "theExtendedResourceType property, that is required to "
          "install this software." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ExtendedResourceType", 
          "CIM_SoftwareIdentity.OtherExtendedResourceTypeDescription", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypesMinorVersions" }]
   uint16 MinExtendedResourceTypeMinorVersion;

      [Description ( 
          "This property represents the Revision number component "
          "of the minimum version of the installer, represented by "
          "theExtendedResourceType property, that is required to "
          "install this software." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ExtendedResourceType", 
          "CIM_SoftwareIdentity.OtherExtendedResourceTypeDescription", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypesRevisionNumbers" }]
   uint16 MinExtendedResourceTypeRevisionNumber;

      [Description ( 
          "This property represents the Build number component of "
          "the minimum version of the installer, represented by "
          "theExtendedResourceType property, that is required to "
          "install this software." ), 
       ModelCorrespondence { 
          "CIM_SoftwareIdentity.ExtendedResourceType", 
          "CIM_SoftwareIdentity.OtherExtendedResourceTypeDescription", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypes", 
          "CIM_SoftwareInstallationServiceCapabilities.SupportedExtendedResourceTypesBuildNumbers" }]
   uint16 MinExtendedResourceTypeBuildNumber;

      [Description ( 
          "The TargetOSTypes property specifies the target "
          "operating systems supported by the software. When the "
          "target operating system of the software is not listed in "
          "the enumeration values, TargetOperatingSystems[] "
          "property should be used to specify the target operating "
          "system." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11", "12", "13", "14", "15", "16", "17", "18", 
          "19", "20", "21", "22", "23", "24", "25", "26", "27", 
          "28", "29", "30", "31", "32", "33", "34", "35", "36", 
          "37", "38", "39", "40", "41", "42", "43", "44", "45", 
          "46", "47", "48", "49", "50", "51", "52", "53", "54", 
          "55", "56", "57", "58", "59", "60", "61", "62", "63", 
          "64", "65", "66", "67", "68", "69", "70", "71", "72", 
          "73", "74", "75", "76", "77", "78", "79", "80", "81", 
          "82", "83", "84", "85", "86", "87", "88", "89", "90", 
          "91", "92", "93", "94", "95", "96", "97", "98", "99", 
          "100", "101", "102", "103", "104", "105", "106", "107", 
          "108", "109", "110", "111", "113", "114", "115", "116" }, 
       Values { "Unknown", "Other", "MACOS", "ATTUNIX", "DGUX", 
          "DECNT", "Tru64 UNIX", "OpenVMS", "HPUX", "AIX", 
          //10 
          "MVS", "OS400", "OS/2", "JavaVM", "MSDOS", 
          "WIN3x", "WIN95", "WIN98", "WINNT", "WINCE", 
          //20 
          "NCR3000", "NetWare", "OSF", "DC/OS", 
          "Reliant UNIX", "SCO UnixWare", "SCO OpenServer", 
          "Sequent", "IRIX", "Solaris", //30 
          "SunOS", 
          "U6000", "ASERIES", "HP NonStop OS", "HP NonStop OSS", 
          "BS2000", "LINUX", "Lynx", "XENIX", "VM", 
          //40 
          "Interactive UNIX", "BSDUNIX", "FreeBSD", 
          "NetBSD", "GNU Hurd", "OS9", "MACH Kernel", "Inferno", 
          "QNX", "EPOC", //50 
          "IxWorks", "VxWorks", 
          "MiNT", "BeOS", "HP MPE", "NextStep", "PalmPilot", 
          "Rhapsody", "Windows 2000", "Dedicated", 
          //60 
          "OS/390", "VSE", "TPF", "Windows (R) Me", 
          "Caldera Open UNIX", "OpenBSD", "Not Applicable", 
          "Windows XP", "z/OS", "Microsoft Windows Server 2003", 
          //70
          "Microsoft Windows Server 2003 64-Bit", 
          "Windows XP 64-Bit", "Windows XP Embedded", 
          "Windows Vista", "Windows Vista 64-Bit", 
          "Windows Embedded for Point of Service", 
          "Microsoft Windows Server 2008", 
          "Microsoft Windows Server 2008 64-Bit", "FreeBSD 64-Bit", 
          "RedHat Enterprise Linux", 
          //80
          "RedHat Enterprise Linux 64-Bit", 
          "Solaris 64-Bit", "SUSE", "SUSE 64-Bit", "SLES", 
          "SLES 64-Bit", "Novell OES", "Novell Linux Desktop", 
          "Sun Java Desktop System", "Mandriva", 
          //90
          "Mandriva 64-Bit", "TurboLinux", 
          "TurboLinux 64-Bit", "Ubuntu", "Ubuntu 64-Bit", "Debian", 
          "Debian 64-Bit", "Linux 2.4.x", "Linux 2.4.x 64-Bit", 
          "Linux 2.6.x", //100
          "Linux 2.6.x 64-Bit", 
          "Linux 64-Bit", "Other 64-Bit", 
          "Microsoft Windows Server 2008 R2", "VMware ESXi", 
          "Microsoft Windows 7", "CentOS 32-bit", "CentOS 64-bit", 
          "Oracle Linux 32-bit", "Oracle Linux 64-bit", 
          //110 
          "eComStation 32-bitx", 
          "Microsoft Windows Server 2011", 
          "Microsoft Windows Server 2012", "Microsoft Windows 8", 
          "Microsoft Windows 8 64-bit", 
          "Microsoft Windows Server 2012 R2" }, 
       ModelCorrespondence { "CIM_OperatingSystem.OSType" }]
   uint16 TargetOSTypes[];


};
