PEP #: 17

TITLE: Merge-local: Add containers for indication subscription and delivery parameters

Version : 1.1

Authors: Carol Ann Krug Graves

State:  Accepted

Approvals Required: Architecture Team

Type: Design

Created: 3 February 2003

Version History:

Version      Date      Authors      Reason     
1.0      3 February 2003      Carol Ann Krug Graves      Initial proposal     
1.1      13 February 2003      Carol Ann Krug Graves      Updated status     


Abstract: This PEP proposes the addition of new OperationContext container classes (SubscriptionInstanceContainer, SubscriptionFilterConditionContainer, and SubscriptionInstanceNamesContainer) for indication subscription and delivery parameters. These changes would make possible the future development of more sophisticated Indication providers that could, for example, make use of the subscription filter condition to optimize indication generation, make use of subscription repeat notification parameters to tailor the reporting of repeating occurrences of events to the subscriber's specifications, and generate indications for specific subscription instances.


Problem:

Pegasus currently has no OperationContext container classes to allow passing the Subscription instance and Subscription filter condition to an Indication Provider when a subscription is created. Similarly, there is no OperationContext container class to allow the Indication provider to pass a list of Subscription instance names back to the Indication Processor when an indication is generated.

Solution:

This PEP proposes the addition of new OperationContext container classes, SubscriptionInstanceContainer, SubscriptionFilterConditionContainer, and SubscriptionInstanceNamesContainer, for indication subscription and delivery parameters, with accompanying new test cases. This proposal would also require changes to the ProviderManagerService, OperationResponseHandler, and IndicationService to make use of the new classes.

The proposed new classes are as follows:

class SubscriptionInstanceContainerRep;

class PEGASUS_COMMON_LINKAGE SubscriptionInstanceContainer
    : virtual public OperationContext::Container
{
public:
    static const String NAME;

    SubscriptionInstanceContainer
        (const OperationContext::Container & container);
    SubscriptionInstanceContainer
        (const SubscriptionInstanceContainer & container);
    SubscriptionInstanceContainer(const CIMInstance & subscriptionInstance);
    virtual ~SubscriptionInstanceContainer(void);

    SubscriptionInstanceContainer & operator=
        (const SubscriptionInstanceContainer & container);

    virtual String getName(void) const;
    virtual OperationContext::Container * clone(void) const;
    virtual void destroy(void);

    CIMInstance getInstance(void) const;

protected:
    SubscriptionInstanceContainerRep* _rep;

};

class SubscriptionFilterConditionContainerRep;

class PEGASUS_COMMON_LINKAGE SubscriptionFilterConditionContainer
    : virtual public OperationContext::Container
{
public:
    static const String NAME;

    SubscriptionFilterConditionContainer
        (const OperationContext::Container & container);
    SubscriptionFilterConditionContainer
        (const SubscriptionFilterConditionContainer & container);
    SubscriptionFilterConditionContainer
        (const String & filterCondition,
        const String & queryLanguage);
    virtual ~SubscriptionFilterConditionContainer(void);

    SubscriptionFilterConditionContainer & operator=
        (const SubscriptionFilterConditionContainer & container);

    virtual String getName(void) const;
    virtual OperationContext::Container * clone(void) const;
    virtual void destroy(void);

    String getFilterCondition(void) const;
    String getQueryLanguage(void) const;

protected:

    SubscriptionFilterConditionContainerRep* _rep;

};

class SubscriptionInstanceNamesContainerRep;

class PEGASUS_COMMON_LINKAGE SubscriptionInstanceNamesContainer
    : virtual public OperationContext::Container
{
public:
    static const String NAME;

    SubscriptionInstanceNamesContainer
        (const OperationContext::Container & container);
    SubscriptionInstanceNamesContainer
        (const SubscriptionInstanceNamesContainer & container);
    SubscriptionInstanceNamesContainer
        (const Array<CIMObjectPath> & subscriptionInstanceNames);
    virtual ~SubscriptionInstanceNamesContainer(void);

    SubscriptionInstanceNamesContainer & operator=
        (const SubscriptionInstanceNamesContainer & container);

    virtual String getName(void) const;
    virtual OperationContext::Container * clone(void) const;
    virtual void destroy(void);

    Array<CIMObjectPath> getInstanceNames(void) const;
protected:
    SubscriptionInstanceNamesContainerRep* _rep;

};

Schedule:

Action Planned Actual Comment
PEP Submitted 3 February 2003 3 February 2003  
PEP Reviewed 7 February 2003 7 February 2003  
PEP Approved 7 February 2003 11 February 2003  
Code Committed 14 February 2003 12 February 2003  

Addendum:

This change has been implemented and submitted to the "local" branch. Following is the original COMMIT message associated with the submittal.

From: "Carol Ann Krug Graves" <carolann@hpgssl.cup.hp.com>
Date: Mon, 13 Jan 2003 13:32:16 -0800
Subject: COMMIT-local: Added containers for indication subscription and
delivery parameters

This change affects only the Pegasus "local" branch.

New OperationContext container classes, SubscriptionInstanceContainer,
SubscriptionFilterConditionContainer, and SubscriptionInstanceNamesContainer,
were added for indication subscription and delivery parameters.  New test cases
were added.


Modified Files:

pegasus/src/Pegasus/Common/CIMMessage.h
pegasus/src/Pegasus/Common/OperationContext.cpp
pegasus/src/Pegasus/Common/OperationContext.h
pegasus/src/Pegasus/Common/tests/OperationContext/TestOperationContext.cpp
pegasus/src/Pegasus/IndicationService/IndicationService.cpp
pegasus/src/Pegasus/ProviderManager/OperationResponseHandler.h
pegasus/src/Pegasus/ProviderManager/ProviderManagerService.cpp


The changes have been tested successfully on HP-UX and Windows.

Please let me know if you have any questions or problems related to these
changes.

Thanks,
Carol Ann

-- 
Carol Ann Krug Graves     carolann.graves@hp.com
Hewlett-Packard Company   408-447-5208