diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdsubscriptionimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdsubscriptionimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,419 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Contains CNcdSubscription class +* +*/ + + +#ifndef NCD_SUBSCRIPTION_IMPL_H +#define NCD_SUBSCRIPTION_IMPL_H + + +// For streams +#include + +#include "catalogscommunicable.h" +#include "ncdstoragedataitem.h" +#include "ncdnodeclassids.h" +#include "ncdsubscription.h" + +class MNcdPreminetProtocolSubscription; +class CNcdPurchaseOptionImpl; +class CNcdSubscriptionGroup; + +/** + * This server side class contains the data and the functionality + * that the proxy objects will use to internalize itself. + * + * This object should be added to the session. So, it will be usable + * in the proxy side by using the handle gotten during addition. + * The handle is used to identify to what object the proxy directs + * the function call. When objects are added to sessions, + * multiple handles may be gotten for the same object if addition is + * done multiple times. + * + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdSubscription : public CCatalogsCommunicable, + public MNcdStorageDataItem + { + +public: + /** + * NewL + * + * @param aParentGroup The parent subscription group. + * @return CNcdSubscription* Pointer to the created object + * of this class. + */ + static CNcdSubscription* NewL( CNcdSubscriptionGroup& aParentGroup); + + /** + * NewLC + * + * @param aParentGroup The parent subscription group. + * @return CNcdSubscription* Pointer to the created object + * of this class. + */ + static CNcdSubscription* NewLC( CNcdSubscriptionGroup& aParentGroup); + + /** + * Destructor + * + * @note Because this is CCatalogsCommunicable function the + * session that owns this object should delete this class object. + * So, instead of directly deleting this object from some other + * class. Close-method should be used instead. + */ + virtual ~CNcdSubscription(); + + /** + * Function to query name of the subscription. + * + * @return Name of the subscription. + */ + const TDesC& SubscriptionName() const; + + /** + * Function to set a new name for the subscription. + * + * @param aNewName New name for the subscription. + */ + void SetSubscriptionNameL( const TDesC& aNewName ); + + /** + * Function to query purchaseoption that identifies subscription + * from other subscriptions of same dataentity. + * + * @return Purchaseoption that identifies this subscription. + */ + const TDesC& PurchaseOptionId() const; + + + /** + * Returns the parent subscription group of this subscription. + * + * @return The parent group. + */ + CNcdSubscriptionGroup& ParentGroup() const; + + /** + * Return the type of the subscription. + * + * @return The subscription type. + */ + MNcdSubscription::TType SubscriptionType() const; + + /** + * This function is called when the owner of this object + * wants to internalize the content according to the + * purchaseoption used to buy this subscription. + * + * @note Assumed to be used after purchase of a new subscription. + * Some data acquired earlier, for example by using + * InternalizeL with protocol parameter, is lost if this + * function is called. That is why this function should + * be called first. + * + * @param aData Data from purchaseoption that is used to initialize + * this subscription. + * + * @exception KErrArgument Given purchaseoption does not + * contain subscription information. + * @exception Leave System wide error code. + */ + void InternalizeL( const CNcdPurchaseOptionImpl& aData ); + + + /** + * This function is called when the owner of this object + * wants to internalize the content according to the + * updated subscription data that has been received from + * the parser. + * + * @note This function cannot be used to internalize fully + * subsription object because the protocol-object does + * not contain all info. At the moment such info is + * the name of the subscription that does not exist + * in the protocol element. + * + * @param aData The data is set in the protocol parser and can + * be used to initialize this class object. + */ + void InternalizeL( MNcdPreminetProtocolSubscription& aData ); + + + /** + * This function is called to set internal flag of the subscription + * to inform whether the subscription has been recently updated or + * not. + * + * @param aNewState New state for the recently updated flag. + * + */ + void SetRecentlyUpdated( TBool aNewState ); + + /** + * This function returns the information whether the subscription + * has been recently updated or not. + * + * @return aNewState New state for the recently updated flag. + */ + TBool RecentlyUpdated() const; + + +public: // MNcdStorageDataItem + + // These functions are used to get the data from and to insert the data + // into the database using by the given stream. + + /** + * @see MNcdStorageDataItem::ExternalizeL + */ + virtual void ExternalizeL( RWriteStream& aStream ); + + + /** + * @see MNcdStorageDataItem::InternalizeL + */ + virtual void InternalizeL( RReadStream& aStream ); + + + +public: // CCatalogsCommunicable + + /** + * @see CCatalogsCommunicable::ReceiveMessage + */ + virtual void ReceiveMessage( MCatalogsBaseMessage* aMessage, + TInt aFunctionNumber ); + + /** + * @see CCatalogsCommunicable::CounterPartLost + */ + virtual void CounterPartLost( const MCatalogsSession& aSession ); + + +protected: + + /** + * Constructor + * Is set in the NewLC function. + * + * @param aParentGroup The parent subscription group. + */ + CNcdSubscription( CNcdSubscriptionGroup& aParentGroup ); + + /** + * ConstructL + */ + virtual void ConstructL(); + + + // These functions are called from the ReceiveMessage when + // the given function id has matched to the function. + + /** + * This function is called when the proxy wants to get the + * data from the serverside. This function calls the + * InternalizeDataForRequestL which may be overloaded in the + * child classes + * @param aMessage Contains data from the proxy and can be used + * to send data back to proxy + */ + void InternalizeRequestL( MCatalogsBaseMessage& aMessage ); + + /** + * This function writes the object data to the stream. + * The stream content will be sent to the proxy that requested the data. + * Child classes should add their own data after this parent data. + * @param aStream The data content of this class object will be written + * into this stream. + */ + virtual void ExternalizeDataForRequestL( RWriteStream& aStream ); + + /** + * This function is called from the proxy side. When the proxy + * is deleted. + * @param aMessage Contains data from the proxy and can be used + * to send data back to proxy + */ + void ReleaseRequest( MCatalogsBaseMessage& aMessage ) const; + + +private: + + // Prevent these two if they are not implemented + CNcdSubscription( const CNcdSubscription& aObject ); + CNcdSubscription& operator =( const CNcdSubscription& aObject ); + + + /** + * Called when this subscription should be used to + * buy given purchaseoption. + * + * @since S60 ?S60_version + * @param aData Purchase option which was used to do the + * purchase. + * @exception Leave KErrArgument if the purchase option + * does not have needed info. + */ + void UseL( const CNcdPurchaseOptionImpl& aData ); + + /** + * Called when this subscription should be upgraded + * according to given purchase option. + * + * @since S60 ?S60_version + * @param aData Purchase option which was used to do the + * purchase of upgrade. + * @exception Leave KErrArgument if the purchase option + * does not have needed info. + */ + void UpgradeL( const CNcdPurchaseOptionImpl& aData ); + + /** + * Externalizes data of this class into stream. Does not + * externalize objects owned by this class. + * + * @since S60 ?S60_version + * @param aStream The data content of this class object will be written + * into this stream. + */ + void ExternalizeOwnDataL( RWriteStream& aStream ); + + /** + * Deletes all allocated member variables that can be + * reconstructed from a subscriptions protocol object. + * Sets related pointers to NULL. + * + * @since S60 ?S60_version + */ + void ResetProtocolMemberVariables(); + + + /** + * Deletes all allocated member variables and sets the pointers + * to NULL. + * + * @since S60 ?S60_version + */ + void ResetMemberVariables(); + +private: // data + + // The message is set when ReceiveMessage is called. The message + // is used in the CounterPartLost-function that informs the message + // if the session has been lost. + MCatalogsBaseMessage* iMessage; + + /* + * Internal flag of the subscription to inform whether the + * subscription has been recently updated or not. This has + * to be set by user. + */ + TBool iRecentlyUpdated; + + /** + * Name of the subscription. + * Own. + */ + HBufC* iName; + + /** + * Time of expiration. + * Own. + */ + HBufC* iExpiredOn; + + + /** + * Tells whether subscription is cancelled. In other words + * usubscribed. + */ + TBool iCancelled; + + + /** + * Type of the subscription. + */ + MNcdSubscription::TType iSubscriptionType; + + + + /** + * Tells if validity time is used in this subscription. + */ + TBool iValidityTimeSet; + /** + * Tells time until this subscription is valid. + */ + TTime iValidUntil; + + /** + * Total validity time that subscription had in the + * beginning. Notice that like other values this value can + * also grow for example because of upgrades. This value + * has to be stored also because in case of renew (when + * subscription is for example periodic) we have + * to know how much to increase the current validity. + */ + TInt iTotalValidityDelta; + + + /** + * Tells if credit limit is used in this subscription. + */ + TBool iCreditLimitSet; + /** + * Credits that are available using the subscription. + */ + TReal32 iCreditsLeft; + /** + * Total credits that were available in the beginning of the + * subscription. + */ + TReal32 iTotalCredits; + + + /** + * Tells if download limit is used in this subscription. + */ + TBool iDownloadLimitSet; + /** + * Downloads that are available using the subscription. + */ + TInt iDownloadsLeft; + /** + * Total downloads that were available in the beginning of the + * subscription. + */ + TInt iTotalDownloads; + + + /** + * Id of the purchase option where this subscription was + * bought from. + * Own. + */ + HBufC* iPurchaseOptionId; + + /** + * The parent subscription group. + */ + CNcdSubscriptionGroup& iParentGroup; + }; + +#endif // NCD_SUBSCRIPTION_IMPL_H