// ===================================================================
// Title:       Core Products & FRUs 2.7
// Filename:    Core27_ProductFRU.mof
// Version:     2.7.0
// Release:     Final
// Date:        03/31/03
// ===================================================================
// 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.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, MaxLen (256),
        Description ("Commonly used Product name."), 
        ModelCorrespondence {"CIM.DMTF|PRS_Product.ProductName"}, 
        MappingStrings {"MIF.DMTF|ComponentID|001.2"} ] 
    string Name;
      
    [Key, MaxLen (64), 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."), 
        MappingStrings {"MIF.DMTF|ComponentID|001.4"} ] 
    string IdentifyingNumber;
    
    [Key, MaxLen (256), 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."), 
        ModelCorrespondence {"CIM.DMTF|PRS_Product.Vendor"}, 
        MappingStrings {"MIF.DMTF|ComponentID|001.1"} ] 
    string Vendor;
    
    [Key, MaxLen (64), 
        Description ("Product version information."), 
        ModelCorrespondence {"CIM.DMTF|PRS_Product.Version"},
        MappingStrings {"MIF.DMTF|ComponentID|001.3"} ] 
    string Version;

    [MaxLen (64), Description (
        "Product SKU (stock keeping unit) information.") ] 
    string SKUNumber;
      
    [Description (
        "If this Product is under warranty, the start date of the "
        "warranty."),
        ModelCorrespondence {"CIM_Product.WarrantyDuration"},
        MappingStrings {"MIF.DMTF|FRU|002.9"} ]
    datetime WarrantyStartDate;

    [Description (
        "If this Product is under warranty, the duration of the "
        "warranty in days."), Units ("Days"), 
        ModelCorrespondence {"CIM_Product.WarrantyStartDate"},
        MappingStrings {"MIF.DMTF|FRU|002.10"}]
    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 {

    [Override ("GroupComponent"), Aggregate,  
        ModelCorrespondence {"PRS_ProductComponent.Antecedent"}, 
        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.") ] 
    CIM_Product REF GroupComponent;

    [Override ("PartComponent"), 
        ModelCorrespondence {"PRS_ProductComponent.Dependent"}, 
        Description ("The contained Product.") ] 
    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 {

    [Aggregate, Key, 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, MaxLen (256), 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.") ] 
    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;
    
    [MaxLen (64), Description (
        "Locale defines the geographic region and/or language dialect "
        "to which this Support resource pertains."), 
        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, MaxLen (64), Description (
        "FRU ordering information."), 
        MappingStrings {"MIF.DMTF|FRU|002.6"} ] 
    string FRUNumber;
    
    [Key, MaxLen (64), Description (
        "FRU identification such as a serial number on software or "
        "a die number on a hardware chip."), 
        MappingStrings {"MIF.DMTF|FRU|002.7"} ] 
    string IdentifyingNumber;
    
    [Key, MaxLen (256),
        Description ("The name of the FRU's supplier."), 
        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;
    
    [MaxLen (256), Description (
        "FRU name.") ] 
    string Name;
    
    [MaxLen (64), Description (
        "The FRU's revision level."),
        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 {
    
    [Max (1), Key, 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 {

    [Max (1), Key, 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 {

    [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, Aggregation, Deprecated {"CIM_ProductPhysicalComponent"}, 
    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 {

    [Max (1), Aggregate, Key, 
        Deprecated {"CIM_ProductPhysicalComponent.GroupComponent"}, 
        Description ("The Product.") ]
    CIM_Product REF Product;
    
    [Key, 
        Deprecated {"CIM_ProductPhysicalComponent.PartComponent"},
        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 {

    [Max (1), Aggregate, Key, 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 {

    [Max (1), Aggregate, Key, 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
// ===================================================================
