// ===================================================================
// Title:       Core Products & FRUs 2.8
// Filename:    Core28_ProductFRU.mof
// Version:     2.8
// Status:      Final
// Date:        Jan 26, 2004
// ===================================================================
// Copyright 1999-2003 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.
// DMTF is a not-for-profit association of industry members dedicated
// to promoting enterprise and systems management and interoperability.
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members,
// provided that correct attribution is given.
// As DMTF specifications may be revised from time to time,
// the particular version and release date should always be noted.
// 
// Implementation of certain elements of this standard or proposed
// standard may be subject to third party patent rights, including
// provisional patent rights (herein "patent rights"). DMTF makes
// no representations to users of the standard as to the existence
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or
// claimants, nor for any incomplete or inaccurate identification or
// disclosure of such rights, owners or claimants. DMTF shall have no
// liability to any party, in any manner or circumstance, under any
// legal theory whatsoever, for failure to recognize, disclose, or
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product,
// protocols or testing procedures. DMTF shall have no liability to
// any party implementing such standard, whether such implementation
// is foreseeable or not, nor to any patent owner or claimant, and shall
// have no liability or responsibility for costs or losses incurred if
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the
// standard from any and all claims of infringement by a patent owner
// for such implementations.
// 
// For information about patents held by third-parties which have
// notified the DMTF that, in their opinion, such patent may relate to
// or impact implementations of DMTF standards, visit
// http://www.dmtf.org/about/policies/disclosures.php.
// ===================================================================
// Description: The Core Model defines basic management concepts.
//              This file defines the concepts for Products and
//              FRUs (field replaceable units).
// 
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.8 - None
// 
// Change Log for v2.7
// CR968 - Remove the Experimental qualifier
// 
// Change Log for v2.7
// CR753 - Update description for Product and add ModelCorrespondence
//         to the CIM Support Schema
//       - Add ProductComponent, ProductPhysicalComponent,
//         ProductSoftwareComponent and ProductServiceComponent
//       - Deprecate ProductPhysicalElementsComponent
// CR761 - Add the Composition qualifier to ProductParentChild,
//         ProductPhysicalElements, FRUPhysicalElements, and
//         FRUIncludesProduct
// ==================================================================

#pragma locale ("en_US")


// ==================================================================
// Product
// ==================================================================
   [Version ( "2.7.0" ), Description (
       "CIM_Product is a concrete class that aggregates "
       "PhysicalElements, software (SoftwareIdentity and "
       "SoftwareFeatures), Services and/or other Products, and is "
       "acquired as a unit. Acquisition implies an agreement between "
       "supplier and consumer which may have implications to Product "
       "licensing, support and warranty. Non-commercial (e.g., "
       "in-house developed Products) should also be identified as an "
       "instance of CIM_Product. \n"
       "Note that software is handled a bit differently in the list of "
       "aggregated entities, above. This is because software can be "
       "viewed as a tangible asset (similar to PhysicalElements) AND/ "
       "OR as a set of features that make up a Product and are "
       "deployed. These are two different concepts, usually managed by "
       "different units in a business' organization. When software "
       "'features' are described, the CIM_SoftwareFeature class from "
       "the Application Model is instantiated (where Features are Weak "
       "to/scoped by a Product). When a specific piece of software is "
       "acquired and perhaps warrantied as part of a Product, this is "
       "addressed by the class, SoftwareIdentity.")]
class CIM_Product : CIM_ManagedElement {

      [Key, Description (
          "Commonly used Product name."), 
       MaxLen ( 256 ), 
       MappingStrings { "MIF.DMTF|ComponentID|001.2" }, 
       ModelCorrespondence { "PRS_Product.ProductName" }]
   string Name;

      [Key, Description (
          "Product identification such as a serial number on software, "
          "a die number on a hardware chip, or (for non-commercial "
          "Products) a project number."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|ComponentID|001.4" }]
   string IdentifyingNumber;

      [Key, Description (
          "The name of the Product's supplier, or entity selling the "
          "Product (the manufacturer, reseller, OEM, etc.). "
          "Corresponds to the Vendor property in the Product object in "
          "the DMTF Solution Exchange Standard."), 
       MaxLen ( 256 ), 
       MappingStrings { "MIF.DMTF|ComponentID|001.1" }, 
       ModelCorrespondence { "PRS_Product.Vendor" }]
   string Vendor;

      [Key, Description (
          "Product version information."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|ComponentID|001.3" }, 
       ModelCorrespondence { "PRS_Product.Version" }]
   string Version;

      [Description (
          "Product SKU (stock keeping unit) information."), 
       MaxLen ( 64 )]
   string SKUNumber;

      [Description (
          "If this Product is under warranty, the start date of the "
          "warranty."), 
       MappingStrings { "MIF.DMTF|FRU|002.9" }, 
       ModelCorrespondence { "CIM_Product.WarrantyDuration" }]
   datetime WarrantyStartDate;

      [Description (
          "If this Product is under warranty, the duration of the "
          "warranty in days."), 
       Units ( "Days" ), 
       MappingStrings { "MIF.DMTF|FRU|002.10" }, 
       ModelCorrespondence { "CIM_Product.WarrantyStartDate" }]
   uint32 WarrantyDuration;
};


// ==================================================================
// ProductComponent
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "The CIM_ProductComponent association defines a containment and "
       "component relationship among Products. For example, a Product "
       "may come bundled with other Products. \n"
       "Note that this association duplicates ProductParentChild. The "
       "latter association is maintained for legacy reasons. This "
       "association, ProductComponent, is added for ease of query and "
       "modeling consistency. Using ProductComponent, an application "
       "can query for all Component relationships for a Product, "
       "versus querying the various Component relationships AND "
       "ProductParentChild.")]
class CIM_ProductComponent : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Description (
          "The Product which contains another Product as a component. "
          "The cardinality of this reference takes the default values "
          "(no minimum or maximum) since an instance of Product can "
          "describe either a general product type, or a specific item "
          "that is acquired. In the case of a specific item, a "
          "cardinality of Max(1) is indicated. However, when dealing "
          "with the general description/templating of a Product, then "
          "it may be a component of several others and a cardinality "
          "of Max(1) would be invalid."), 
       ModelCorrespondence { "PRS_ProductComponent.Antecedent" }]
   CIM_Product REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The contained Product."), 
       ModelCorrespondence { "PRS_ProductComponent.Dependent" }]
   CIM_Product REF PartComponent;
};


// ==================================================================
// ProductParentChild
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "The CIM_ProductParentChild association defines a parent child "
       "hierarchy among Products. For example, a Product may come "
       "bundled with other Products.")]
class CIM_ProductParentChild {

      [Key, Aggregate, Description (
          "The parent Product in the association.")]
   CIM_Product REF Parent;

      [Key, Description (
          "The child Product in the association.")]
   CIM_Product REF Child;
};


// ==================================================================
// CompatibleProduct
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_CompatibleProduct is an association between Products that "
       "can indicate a wide variety of information. For example, it "
       "can indicate that the two referenced Products interoperate, "
       "that they can be installed together, that one can be the "
       "physical container for the other, etc. The string property, "
       "CompatibilityDescription, defines how the Products "
       "interoperate or are compatible, any limitations regarding "
       "interoperability or installation, ...")]
class CIM_CompatibleProduct {

      [Key, Description (
          "The Product for which compatible offerings are defined.")]
   CIM_Product REF Product;

      [Key, Description (
          "The compatible Product.")]
   CIM_Product REF CompatibleProduct;

      [Description (
          "CompatibilityDescription is a free-form string defining how "
          "the two referenced Products interoperate or are compatible, "
          "any limitations to compatibility, etc.")]
   string CompatibilityDescription;
};


// ==================================================================
// ProductProductDependency
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_ProductProductDependency is an association between two "
       "Products, indicating that one must be installed, or must be "
       "absent, for the other to function. This is conceptually "
       "equivalent to the ServiceServiceDependency association.")]
class CIM_ProductProductDependency {

      [Key, Description (
          "The required Product.")]
   CIM_Product REF RequiredProduct;

      [Key, Description (
          "The Product that is dependent on another Product.")]
   CIM_Product REF DependentProduct;

      [Description (
          "The nature of the Product dependency. This property "
          "describes that the associated Product must be installed "
          "(value=2) or must be absent (value=3) in order for the "
          "Product to function."), 
       ValueMap { "0", "1", "2", "3" }, 
       Values { "Unknown", "Other", "Product Must Be Installed",
          "Product Must Not Be Installed" }]
   uint16 TypeOfDependency;
};


// ==================================================================
// SupportAccess
// ==================================================================
   [Version ( "2.6.0" ), Description (
       "The CIM_SupportAccess association defines how to obtain "
       "assistance for a Product.")]
class CIM_SupportAccess : CIM_ManagedElement {

      [Key, Description (
          "SupportAccessID is an arbitrary, free form string defined "
          "by the Product Vendor or by the organization that deploys "
          "the Product. This property, since it is a key, should be "
          "unique throughout the enterprise."), 
       MaxLen ( 256 )]
   string SupportAccessId;

      [Override ( "Description" ), Description (
          "A textual description of the type of Support provided."), 
       MappingStrings { "MIF.DMTF|Support|001.3" }]
   string Description;

      [Description (
          "CommunicationInfo provides the details of the Communication "
          "Mode. For example, if the CommunicationMode is 'Phone', "
          "CommunicationInfo specifies the phone number to be called."), 
       MappingStrings { "MIF.DMTF|FRU|002.11", "MIF.DMTF|FRU|002.12" }]
   string CommunicationInfo;

      [Description (
          "CommunicationMode defines the form of communication in "
          "order to obtain support. For example, phone communication "
          "(value =2), fax (3) or email (8) can be specified."), 
       ValueMap { "1", "2", "3", "4", "5", "6", "7", "8" }, 
       Values { "Other", "Phone", "Fax", "BBS", "Online Service",
          "Web Page", "FTP", "E-mail" }, 
       MappingStrings { "MIF.DMTF|Support|001.5" }]
   uint16 CommunicationMode;

      [Description (
          "Locale defines the geographic region and/or language "
          "dialect to which this Support resource pertains."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|Support|001.2" }]
   string Locale;
};


// ==================================================================
// ProductSupport
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_ProductSupport is an association between Product and "
       "SupportAccess that conveys how support is obtained for the "
       "Product. This is a many-to-many relationship, implying that "
       "various types of Support are available for a Product, and that "
       "the same Support object can provide assistance for multiple "
       "Products.")]
class CIM_ProductSupport {

      [Key, Description (
          "The Product.")]
   CIM_Product REF Product;

      [Key, Description (
          "Support for the Product.")]
   CIM_SupportAccess REF Support;
};


// ==================================================================
//  FRU
// ==================================================================
   [Version ( "2.6.0" ), Description (
       "The CIM_FRU class is a vendor-defined collection of Products "
       "and/or PhysicalElements that is associated with a Product for "
       "the purpose of supporting, maintaining or upgrading that "
       "Product at the customer's location. FRU is an acronym for "
       "'field replaceable unit'.")]
class CIM_FRU : CIM_ManagedElement {

      [Key, Description (
          "FRU ordering information."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|FRU|002.6" }]
   string FRUNumber;

      [Key, Description (
          "FRU identification such as a serial number on software or a "
          "die number on a hardware chip."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|FRU|002.7" }]
   string IdentifyingNumber;

      [Key, Description (
          "The name of the FRU's supplier."), 
       MaxLen ( 256 ), 
       MappingStrings { "MIF.DMTF|FRU|002.4" }]
   string Vendor;

      [Override ( "Description" ), Description (
          "A textual description of the FRU."), 
       MappingStrings { "MIF.DMTF|FRU|002.3" }]
   string Description;

      [Description (
          "FRU name."), 
       MaxLen ( 256 )]
   string Name;

      [Description (
          "The FRU's revision level."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIF.DMTF|FRU|002.8" }]
   string RevisionLevel;

      [Description (
          "Indicates whether the FRU is customer replaceable.")]
   boolean CustomerReplaceable;
};


// ==================================================================
// ProductFRU
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "CIM_ProductFRU is an association between Product and FRU that "
       "provides information regarding what Product components have "
       "been or are being replaced. The association is one to many, "
       "conveying that a Product can have many FRUs, and that a "
       "particular instance of a FRU is only applied to one (instance "
       "of a) Product.")]
class CIM_ProductFRU {

      [Key, Max ( 1 ), Description (
          "The Product to which the FRU is applied.")]
   CIM_Product REF Product;

      [Key, Description (
          "The FRU.")]
   CIM_FRU REF FRU;
};


// ==================================================================
// ReplaceableProductFRU
// ==================================================================
   [Association, Version ( "2.6.0" ), Description (
       "ReplaceableProductFRU is an association between Product and "
       "FRU that shows what Product components may be replaced. The "
       "association is one to many, conveying that a Product can have "
       "many FRUs, and that a particular instance of a FRU is only "
       "applied to one (instance of a) Product.")]
class CIM_ReplaceableProductFRU {

      [Key, Max ( 1 ), Description (
          "The Product to which the FRU is applied.")]
   CIM_Product REF Product;

      [Key, Description (
          "The FRU.")]
   CIM_FRU REF FRU;
};


// ==================================================================
// ProductPhysicalComponent
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Indicates that the referenced PhysicalElement is acquired as "
       "part of a Product.")]
class CIM_ProductPhysicalComponent : CIM_Component {

      [Override ( "GroupComponent" ), Max ( 1 ), Description (
          "The Product.")]
   CIM_Product REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The PhysicalElement which is a part of the Product.")]
   CIM_PhysicalElement REF PartComponent;
};


// ==================================================================
// ProductSoftwareComponent
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Indicates that the referenced SoftwareIdentity is acquired as "
       "part of a Product.")]
class CIM_ProductSoftwareComponent : CIM_Component {

      [Override ( "GroupComponent" ), Max ( 1 ), Description (
          "The Product.")]
   CIM_Product REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The software which is a part of the Product.")]
   CIM_SoftwareIdentity REF PartComponent;
};


// ==================================================================
// ProductServiceComponent
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Indicates that the referenced Service is acquired as part of a "
       "Product. Examples of Services that may be acquired are "
       "outsourced storage and networking services, or support and "
       "warranty services. Expanding on the examples, Services "
       "represent generic functionality - so, it is possible to model "
       "the existence of storage volume management or warranty "
       "services as individual instances of subclasses of CIM_Service. "
       "These 'Services' may be enabled/disabled, started/stopped, "
       "signal an error, etc. (They behave as standard "
       "ManagedSystemElements.) Specific requests against the Services "
       "- for example, a request for warranty service or increased "
       "storage space - are NOT new instances of Service, but may be "
       "requested via the methods of the Service subclass, or be "
       "instantiated as specific subclasses of ManagedElement.")]
class CIM_ProductServiceComponent : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Max ( 1 ), 
       Description (
          "The Product.")]
   CIM_Product REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The Service which is a part of the Product.")]
   CIM_Service REF PartComponent;
};


// ==================================================================
// ProductPhysicalElements
// ==================================================================
   [Association, Deprecated { "CIM_ProductPhysicalComponent" },
    Aggregation, Composition, Version ( "2.7.0" ), Description (
       "Indicates the PhysicalElement(s) that make up a Product. This "
       "association is deprecated in order to correctly place it in "
       "the inheritance hierarchy and align the definition with other "
       "new classes that are being added to the model, such as "
       "CIM_ProductServiceComponent. ProductPhysicalElements was "
       "defined in the original CIM V2.0 release, when a Managed "
       "Element and a Component relationship between ManagedElements "
       "did not exist.")]
class CIM_ProductPhysicalElements {

      [Deprecated { "CIM_ProductPhysicalComponent.GroupComponent" },
       Key, Aggregate, Max ( 1 ), Description (
          "The Product.")]
   CIM_Product REF Product;

      [Deprecated { "CIM_ProductPhysicalComponent.PartComponent" }, Key, 
       Description (
          "The PhysicalElement which is a part of the Product.")]
   CIM_PhysicalElement REF Component;
};


// ==================================================================
// FRUPhysicalElements
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Indicates the PhysicalElements that make up a FRU.")]
class CIM_FRUPhysicalElements {

      [Key, Aggregate, Max ( 1 ), Description (
          "The FRU.")]
   CIM_FRU REF FRU;

      [Key, Description (
          "The PhysicalElement which is a part of the FRU.")]
   CIM_PhysicalElement REF Component;
};


// ==================================================================
// FRUIncludesProduct
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "Indicates that a FRU may be composed of other Product(s).")]
class CIM_FRUIncludesProduct {

      [Key, Aggregate, Max ( 1 ), Description (
          "The FRU.")]
   CIM_FRU REF FRU;

      [Key, Description (
          "The Product which is a part of the FRU.")]
   CIM_Product REF Component;
};


// ===================================================================
// end of file
// ===================================================================
