// Provider Registration Class MOF
// Status Draft
// Authors Guru Bhat, Karl Schopmeyer
// Version 0.5
// 21 February 2001
//
[Abstract,
 Description("The ProviderRegistration class is an abstraction that " 
 "represents the registration of a provider with a CIM Object "
 "Manager. This class is the superclass of the different registration"
 " classes for various types of providers."
]
class CIM_ProviderRegistration : CIM_ManagedElement {
    [Key,
     Description("The name by which this provider is knwon"
	 " At this time, we expect that this will be a unique "
	 "ID generated by the CIM Object Manager")
    ]
    String Name;
    [Key,
    Description("The name of the class the provider is providing information "
	 "about. Note that the provider might be providing "
	 "information about instances, classes, properties, "
	 "methods etc. The type of information will be captured "
	 "in the Type field. There must be only one registration
	 of a provider Name for a ClassName")
    ]
    String ClassName;
    
    [Description("URL to locate the provider that this registration "
	 "instance is referring to". Probably will be of the "
	 "form <transport_protocol>://<location_string> "
	 "The <location_string> is implementation dependent.")
    ]
    String ProviderLocation; 
    
    [Description("Types of function for which this provider is registering. This
        is an array of of the function catagories for which the provider
        is registering (ex. Instances, etc.) It is an array because the provider
        can register for multiple types,")
    ValueMap {"1", "2", "3", "4" "5", "6"},
    Values {"Instance", "Method", "Property", "Associator", "Event, All"}
        ]
    Uint16 ProviderType[];
    
    [Description("Registration for Class is separate characteristic. Therefore
         it is not included in the the Provider Type property. In reality we
         are not certain exactly what the use of this will be since it appears
         that it it defining this Provider as a substitute for the CIMOM and the
         Class registry for this Class.  We specifically did not put this as a 
         Value in Provide Type to allow the ALL option to define a provider
         that covers all of the normal catagories of type.")
    Boolean ClassProvider;
.
// One characteristic that has been discussed but not defined here is
// the concept of exclusivity.  Should it be possible for the provider
// to say that it demands exclusive control over the operations.

// We have also not figured out if we should be characterizing the
// concept of the push provider and if the registration is the place to
// do that.  Therefore there is not capability refering to the push provider
// in this MOF>

    [Description("The encoding that this provider uses in its "
                 "communication with the CIM Object Manager")
     ValueMap("XML", "Direct", "Other")
    ]
    String Encoding;

    [Description("Details about the encoding, in case it is Other")]
    String OtherEncodingDescription;
    /// GURU should this not be a set of types

    [Description("Boolean to indicate whether this provider can be "
                 "unloaded or not")
    ]
    boolean CanUnload;

    [Description("If CanUnload is true, the period of time between "
                 "access, that must elapse before the CIM Object Manager "
                 "can unload a provider."
     Units("MilliSeconds")
    ]
    uint64 UnloadTimeout;
    
    // Dependencies... if this provider depends on other
    // classes/providers being present, should we include them as an
    // array here - or should we model this through CIM_Dependency?
    
    [Description(" ClassNames of classes on which this provider depends. the
	provider will not be registered if Classes named in this property are
	not previously defined in the CIMOM.")]
    String ClassDependency[]:

    [Description(" Names of providers on which this provider depends. The 
	provider will not be registered if providers named in this property are 
	not previously registered.")]
    String ProviderDependency[]:
};

