// ===================================================================
// Title:  Core Physical
// $State: Exp $
// $Date: 2004/08/15 05:55:36 $
// $Source: /cvsroot/wbemservices/open/mof/dmtf/2.9/Core_Physical.mof,v $
// $Revision: 1.1 $
// ===================================================================
//#pragma inLine ("Includes/copyright.inc")
// Copyright 1998-2004 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.
//#pragma inLine
// ===================================================================
// Description: The Core Model defines basic management concepts.
//              This file defines the concepts for PhysicalElements
//              and their Locations.
// 
//              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.9 Prelininary
// CR1050 - Deprecate FRU in lieu of putting the information in
//          PhysicalElement
// 
// Change Log for v2.8 Final
// CR1210 - Removal of experimental Qualifiers for core.

// Change Log for v2.8 Preliminary
// CR1019 - CIM Versioning for 2.8 Preliminary
// CR1071 - Add the following properties of PhyscialElement
//          VendorEquipmentType, UserTracking, CanBeFRUed.
// 
// Change Log for v2.7 Final
// CR968 - Remove the Experimental qualifier
//         Remove the following properties of PhyscialElement so
//         they can remain experimental in 2.8
//            VendorEquipmentType, UserTracking, CanBeFRUed.
// 
// Change Log for v2.7
// CR774 - Add ContainedLocation
// CR821 - Add PhysicalElement.VendorEquipmentType, PhysicalElement.
//         UserTracking, and PhysicalElement.CanBeFRUed properties.
//       - Add mapping string to indicate the support of the SNMP
//         Entity MIB
//       - Add the Write qualifier to PhysicalElement.Other
//         IdentifyingInfo
// CR822 - Add SystemPackaging
// CR899 - Expand the MaxLen qualifier on 2 PhysicalElement .Model
//         and .SerialNumber properties from 64 to 256.
// CR902 - Create a general superclass ElementLocation of the
//         PhysicalElementLocation association.
// ==================================================================

#pragma locale ("en_US")


// =================================================================
// PhysicalElement
// ==================================================================
   [Abstract, Version ( "2.8.1000" ), Description (
       "Subclasses of CIM_PhysicalElement define any component of a "
       "System that has a distinct physical identity. Instances of "
       "this class can be defined as an object that can be seen or "
       "touched. All Processes, Files, and LogicalDevices are "
       "considered not to be Physical Elements. For example, it is not "
       "possible to touch the functionality of a 'modem', only the "
       "card or package that implements the modem. The same card could "
       "also implement a LAN adapter. PhysicalElements are tangible "
       "ManagedSystemElements that have a physical manifestation of "
       "some sort. \n"
       "\n"
       "Note that the properties of PhysicalElement describe a "
       "hardware entity. Possible replacement (FRU) information is "
       "defined by following the ElementFRU association to one or more "
       "instances of the ReplacementFRU class. This allows a client to "
       "determine what hardware can be replaced/FRUed and what 'spare' "
       "parts may be required by a customer or engineer doing the "
       "replacement. If it can be instrumented or manually determined "
       "that an element actually replaced/FRUed another, then this can "
       "be described in the model using the ElementHasBeenFRUed "
       "association.")]
class CIM_PhysicalElement : CIM_ManagedSystemElement {

      [Key, Description (
          "An arbitrary string that uniquely identifies the Physical "
          "Element and serves as the Element's key. The Tag property "
          "can contain information such as asset tag or serial number "
          "data. The key for PhysicalElement is placed very high in "
          "the object hierarchy in order to independently identify the "
          "hardware/entity, regardless of physical placement in or on "
          "Cabinets, Adapters, etc. For example, a hotswappable or "
          "removeable component may be taken from its containing "
          "(scoping) Package and be temporarily unused. The object "
          "still continues to exist - and may even be inserted into a "
          "different scoping container. Therefore, the key for "
          "Physical Element is an arbitrary string and is defined "
          "independently of any placement or location-oriented "
          "hierarchy."), 
       MaxLen ( 256 )]
   string Tag;

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

      [Key, Description (
          "CreationClassName indicates the name of the class or the "
          "subclass used in the creation of an instance. When used "
          "with the other key properties of this class, this property "
          "allows all instances of this class and its subclasses to be "
          "uniquely identified."), 
       MaxLen ( 256 )]
   string CreationClassName;

      [Override ( "ElementName" ), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalName" }]
   string ElementName;

      [Description (
          "The name of the organization responsible for producing the "
          "PhysicalElement. This may be the entity from whom the "
          "Element is purchased, but this is not necessarily true. The "
          "latter information is contained in the Vendor property of "
          "CIM_Product."), 
       MaxLen ( 256 ), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalMfgName",
          "MIF.DMTF|FRU|003.4" }]
   string Manufacturer;

      [Description (
          "The name by which the PhysicalElement is generally known."), 
       MaxLen ( 256 ), 
       MappingStrings { 
          "MIB.IETF|Entity-MIB.entPhysicalDescr","MIF.DMTF|FRU|003.5" }]
   string Model;

      [Description (
          "The stock keeping unit number for this PhysicalElement."), 
       MaxLen ( 64 )]
   string SKU;

      [Description (
          "A manufacturer-allocated number used to identify the "
          "Physical Element."), 
       MaxLen ( 256 ), 
       MappingStrings { 
          "MIB.IETF|Entity-MIB.entPhysicalSerialNum",""
          "MIF.DMTF|FRU|003.7" }]
   string SerialNumber;

      [Description (
          "A string indicating the version of the PhysicalElement."), 
       MaxLen ( 64 ), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalHardwareRev",
          "MIF.DMTF|FRU|003.8" }]
   string Version;

      [Description (
          "The part number assigned by the organization responsible "
          "for producing or manufacturing the PhysicalElement."), 
       MaxLen ( 256 ), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalModelName" }]
   string PartNumber;

      [Write, Description (
          "OtherIdentifyingInfo captures additional data, beyond that "
          "of Tag information, that could be used to identify a "
          "Physical Element. One example is bar code data associated "
          "with an Element that also has an asset tag. Note that if "
          "only bar code data is available and is unique/able to be "
          "used as an Element key, this property would be NULL and the "
          "bar code data used as the class key, in the Tag property."), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalAlias" }]
   string OtherIdentifyingInfo;

      [Description (
          "Boolean indicating that the PhysicalElement is powered on "
          "(TRUE), or is currently off (FALSE).")]
   boolean PoweredOn;

      [Description (
          "Date that this PhysicalElement was manufactured.")]
   datetime ManufactureDate;

      [Description (
          "A vendor-specific hardware type for the PhysicalElement. It "
          "describes the specific equipment type for the element, as "
          "defined by the vendor/manufacturer."), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalVendorType" }]
   string VendorEquipmentType;

      [Write, Description (
          "User-assigned and writeable asset tracking identifier for "
          "the PhysicalElement."), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalAssetID" }]
   string UserTracking;

      [Description (
          "Boolean indicating whether this PhysicalElement can be "
          "FRUed (TRUE) or not (FALSE)."), 
       MappingStrings { "MIB.IETF|Entity-MIB.entPhysicalIsFRU" }]
   boolean CanBeFRUed;
};

// ==================================================================
//  ReplacementFRU
// ==================================================================
   [Experimental, Version ( "2.8.1000" ), Description (
       "The ReplacementFRU class defines ordering information for "
       "replacement hardware/PhysicalElements. The element or elements "
       "that can be replaced are defined via the association, "
       "ElementFRU. If a FRU is made up of other more specific parts, "
       "then this can be described by instantiating the "
       "ConcreteComponent relationship between the grouping FRU and "
       "its parts.")]
class CIM_ReplacementFRU : CIM_ManagedElement {

      [Key, 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 (
          "Replacement ordering information.")]
   string OrderNumber;

      [Description (
          "The name of the vendor/supplier in whose context the "
          "OrderNumber is defined.")]
   string Vendor;

      [Override ( "Description" ), Description (
          "A textual description of the replacement.")]
   string Description;

      [Description (
          "Indicates whether this replacement part is considered "
          "customer replaceable (TRUE) or not (FALSE).")]
   boolean CustomerReplaceable;
};

// ==================================================================
// ElementFRU
// ==================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "ElementFRU associates a PhysicalElement to information about "
       "possible replacement parts. The association is many to many, "
       "describing that an element can have several replacement "
       "options and that those options can apply to multiple pieces of "
       "hardware.")]
class CIM_ElementFRU {

      [Key, Description (
          "The PhysicalElement which can be replaced/FRUed.")]
   CIM_PhysicalElement REF ReplaceableElement;

      [Key, Description (
          "Ordering information for a replacement element.")]
   CIM_ReplacementFRU REF ReplacementElement;
};


// ==================================================================
// ElementHasBeenFRUed
// ==================================================================
   [Association, Experimental, Version ( "2.8.1000" ), Description (
       "CIM_ElementHasBeenFRUed is an association between two Physical "
       "Elements indicating that the entity referenced as the "
       "ReplacedElement was swapped for/replaced by the entity "
       "referenced as the ReplacementElement. The association is many "
       "to many, conveying that an element may require several other "
       "elements to replace it, and vice-versa. The typical scenario, "
       "however, is that one PhysicalElement replaces another. It MAY "
       "NOT be possible to instrument or manually determine that an "
       "element actually replaced/FRUed another. This is especially "
       "true if the original element is discarded. However, if this "
       "information is available, then this association describes this "
       "scenario.")]
class CIM_ElementHasBeenFRUed {

      [Key, Description (
          "The PhysicalElement which is being replaced/FRUed.")]
   CIM_PhysicalElement REF ReplacedElement;

      [Key, Description (
          "The element that is used as the replacement part.")]
   CIM_PhysicalElement REF ReplacementElement;
};
// ===================================================================
// Location
// ===================================================================
   [Version ( "2.6.0" ), Description (
       "The Location class specifies the position and address of a "
       "PhysicalElement.")]
class CIM_Location : CIM_ManagedElement {

      [Key, Description (
          "Name is a free-form string defining a label for the "
          "Location. It is a part of the key for the object."), 
       MaxLen ( 256 )]
   string Name;

      [Key, Description (
          "Position is a free-form string indicating the placement of "
          "a PhysicalElement. It can specify slot information on a "
          "HostingBoard, mounting site in a Cabinet, or latitude and "
          "longitude information, for example, from a GPS. It is part "
          "of the key of the Location object."), 
       MaxLen ( 256 )]
   string PhysicalPosition;

      [Description (
          "Address is a free-form string indicating a street, building "
          "or other type of address for the PhysicalElement's "
          "Location."), 
       MaxLen ( 1024 )]
   string Address;
};


// ==================================================================
// ElementLocation
// ==================================================================
   [Association, Version ( "2.7.0" ), Description (
       "ElementLocation associates a ManagedElement with a Location "
       "for positioning, inventory, maintenance and similar purposes. "
       "PhysicalElements can certainly have Locations - this is "
       "explicitly defined in a subclass, PhysicalElement Location. "
       "However, other ManagedElements may also be associated with "
       "Locations. For example, Organizations may be 'in' one or more "
       "Locations, or Services may be restricted to a Location.")]
class CIM_ElementLocation {

      [Key, Description (
          "The ManagedElement whose Location is specified.")]
   CIM_ManagedElement REF Element;

      [Key, Description (
          "The element's Location.")]
   CIM_Location REF PhysicalLocation;
};


// ==================================================================
// PhysicalElementLocation
// ==================================================================
   [Association, Version ( "2.7.0" ), Description (
       "PhysicalElementLocation associates a PhysicalElement with a "
       "Location object for inventory or replacement purposes.")]
class CIM_PhysicalElementLocation : CIM_ElementLocation {

      [Override ( "Element" ), Description (
          "The PhysicalElement whose Location is specified.")]
   CIM_PhysicalElement REF Element;

      [Override ( "PhysicalLocation" ), Max ( 1 ), Description (
          "The PhysicalElement's Location.")]
   CIM_Location REF PhysicalLocation;
};


// ==================================================================
// ContainedLocation
// ==================================================================
   [Association, Aggregation, Composition, Version ( "2.7.0" ), 
    Description (
       "ContainedLocation defines one location in the context of "
       "another. For example, a campus may 'contain' a building, which "
       "in turn 'contains' a floor.")]
class CIM_ContainedLocation : CIM_Component {

      [Aggregate, Override ( "GroupComponent" ), Max ( 1 ), 
       Description (
          "The containing location.")]
   CIM_Location REF GroupComponent;

      [Override ( "PartComponent" ), Description (
          "The contained location.")]
   CIM_Location REF PartComponent;
};


// ==================================================================
// SystemPackaging
// ==================================================================
   [Association, Version ( "2.7.0" ), Description (
       "Similar to the way that LogicalDevices are 'Realized' by "
       "PhysicalElements, Systems may be associated with specific "
       "packaging/PhysicalElements. This association explicitly "
       "defines the relationship between a System and its packaging.")]
class CIM_SystemPackaging : CIM_Dependency {

      [Override ( "Antecedent" ), Description (
          "The PhysicalElement(s) that provide the packaging of a "
          "System.")]
   CIM_PhysicalElement REF Antecedent;

      [Override ( "Dependent" ), Description (
          "The System whose packaging is described.")]
   CIM_System REF Dependent;
};


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