diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdpurchaseoptionimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdpurchaseoptionimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,444 @@ +/* +* 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: +* +*/ + + +#ifndef C_NCDPURCHASEOPTIONIMPL_H +#define C_NCDPURCHASEOPTIONIMPL_H + +// For streams +#include + +#include "catalogscommunicable.h" +#include "ncdstoragedataitem.h" +#include "ncdnodeclassids.h" +#include "ncdprotocoltypes.h" +#include "ncdpurchaseoption.h" // To get TType enum for purchaseoption + +class MNcdPreminetProtocolPurchaseOption; +class CNcdPurchaseDownloadInfo; + +class CNcdServerSubscription; +class CNcdServerPartOfSubscription; +class CNcdServerUpgrade; +class CNcdNodeMetaData; +class CNcdNodeIdentifier; +class CNcdServerSubscribableContent; +class CNcdNodeIcon; + + +/** + * Server-side purchaseoption-implementation + * + * This class implements server-side functionality related to + * each node's purchaseoptions. + * + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdPurchaseOptionImpl : public CCatalogsCommunicable, + public MNcdStorageDataItem +{ + +public: + + + static CNcdPurchaseOptionImpl* NewL( + const CNcdNodeMetaData& aParentMetaData ); + + static CNcdPurchaseOptionImpl* NewLC( + const CNcdNodeMetaData& aParentMetaData ); + + virtual ~CNcdPurchaseOptionImpl(); + + /** + * Retrieves the data type that informs what class the data is for. + * By checking the data type information, an InternalizeL function + * of a right class can be called when the object data is set + * from the storage. + * The data type may be decided and set in a object that creates this + * class object. + * + * @return NcdNodeClassIds::TNcdNodeClassId Describes the data type. + */ + NcdNodeClassIds::TNcdNodeClassId ClassId() const; + + + /** + * This function is called when the owner of this object + * wants to internalize the content according to the data + * that has been received from the parser. + * + * @param aOption The data is set in the protocol parser and can + * be used to initialize this class object. + */ + void InternalizeL( const MNcdPreminetProtocolPurchaseOption& aOption ); + + + /** + * Returns reference to parent meta data's node identifier. + * + * @return Node identifier of parent meta data. + */ + const CNcdNodeIdentifier& ParentMetaIdentifier() const; + + /** + * Returns pointer to parent node's subscribable content. + * + * @return Subscribable content info of parent node. NULL if + * not found. + */ + const CNcdServerSubscribableContent* ParentSubscribableContent() const; + + /** + * Returns reference to parent node's icon. + * + * @return Icon of parent node. + */ + const CNcdNodeIcon& ParentIconL() const; + + /** + * Getter for the name of the purchaseoption. + * + * @note This function is not named simply Name, because such + * function allready exists in CObject. Only the return value + * would be different. + * + * @return Name of the purchase option + */ + const TDesC& PurchaseOptionName() const; + + /** + * Setter for the id of the purchaseoption. Intended to be used + * only when creting a new purchase option. + * + * @return Id of the purchase option + */ + void SetIdL( const TDesC& aId ); + + /** + * Getter for the id of the purchaseoption. + * + * @return Id of the purchase option + */ + const TDesC& Id() const; + + /** + * Getter for the type of the purchaseoption. + * + * @return Type of the purchase option + */ + MNcdPurchaseOption::TType PurchaseOptionType() const; + + /** + * Tells whether this purchase option is free. + * + * @return ETrue if the purchase option is free, EFalse otherwise. + */ + TBool IsFree() const; + + /** + * Tells whether purchase process is reuqired when using + * this option. + * + * @return ETrue if the purchase process is required, EFalse + * otherwise. + */ + TBool RequirePurchaseProcess() const; + + /** + * Setter for price text. + * + * @param aPriceText New price text for this purchase option. + */ + void SetPriceTextL( const TDesC& aPriceText ); + + /** + * Getter for price text. + * + * @return Textual representation of the price + */ + const TDesC& PriceText() const; + + /** + * Getter for amount of download infos. + * + * @return Amount of download infos. + */ + TInt DownloadInfoCount() const; + /** + * Getter for amount of download info with given index. + * + * @return Download info. + */ + const CNcdPurchaseDownloadInfo& DownloadInfo( TInt aInfoIndex ) const; + + + + /** + * Getter for the subscription info of this purchaseoption. + * If subscription is purchased, this tells details of the + * subscription. + * + * @return Object representing subscription info of this purchase option. + * NULL if not found. + * + */ + const CNcdServerSubscription* SubscriptionInfo() const; + + /** + * Getter for the partOfSubscription info of this purchaseoption. + * These things are used to purchase something using a subscription. + * + * + * @return Object representing partOfSubscription info of this + * purchase option. NULL if not found. + * + */ + const CNcdServerPartOfSubscription* PartOfSubscriptionInfo() const; + + /** + * Getter for the upgrade info of this purchaseoption. These + * things are used to upgrade a subscription. + * + * + * @return Object representing upgrade info of this + * purchase option. NULL if not found. + * + */ + const CNcdServerUpgrade* UpgradeInfo() const; + + + /** + * This function is called to set internal flag of the purchase + * option to inform whether the purchase option 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 purchase + * option has been recently updated or not. + * + * @return 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: + + CNcdPurchaseOptionImpl( + NcdNodeClassIds::TNcdNodeClassId aClassId, + const CNcdNodeMetaData& aParentMetaData ); + + void ConstructL(); + + /** + * 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 ) const; + + /** + * 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 ) const; + + /** + * 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 + CNcdPurchaseOptionImpl( const CNcdPurchaseOptionImpl& aObject ); + CNcdPurchaseOptionImpl& operator =( const CNcdPurchaseOptionImpl& aObject ); + + + /** + * This function is called during internalization of this object to + * internalize subscriptions related info. + * + * @param aOption The data is set in the protocol parser and can + * be used to initialize this class object. + */ + void InternalizeSubscriptionsInfoL( + const MNcdPreminetProtocolPurchaseOption& aOption ); + + /** + * This function is called during internalization of this object to + * internalize downloaddetails. + * + * @param aOption The data is set in the protocol parser and can + * be used to initialize this class object. + */ + void InternalizeDownloadDetailsL( + const MNcdPreminetProtocolPurchaseOption& aOption ); + + + /** + * Deletes all allocated member variables and sets the pointers to NULL. + * Also sets other variables to their initial values. + * + * @since S60 ?S60_version + */ + void ResetMemberVariables(); + +private: + + // The class id is identifies this class. The id may be used to + // identify what kind of class object is created when data is gotten + // from the db. + NcdNodeClassIds::TNcdNodeClassId iClassId; + + // 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; + + + // Parent meta data. + const CNcdNodeMetaData& iParentMetaData; + + + /* + * Internal flag of the purchase option to inform whether the + * purchase option has been recently updated or not. This has + * to be set by user. + */ + TBool iRecentlyUpdated; + + + /** + * Name of the option. For example "Try" or "Full". + * Own. + */ + HBufC* iName; + /** + * Textual representation of price when using this purchase option. + * Own. + */ + HBufC* iPriceText; + /** + * If iPriceText is not used then this tells the price. + */ + TReal32 iPrice; + /** + * Currency of iPriceText. + * Own. + */ + HBufC* iPriceCurrency; + /** + * If target is free using this purchase option. + */ + TBool iIsFree; + + /** + * Id of this purchase option. + * Own. + */ + HBufC* iPurchaseOptionId; + + /** + * Type of this entity. + */ + MNcdPurchaseOption::TType iType; + + /** + * If purchase process is needed when buying target with this + * purchase option. + */ + TBool iRequirePurchaseProcess; + + /** + * Array to store downloadinfo related to this purchase option + */ + RPointerArray iDownloadInfo; + + + // NOTICE: purchaseoption can contain more than one of the + // following components. For example it could be + // possible that a subscription is a part of subscription + // although in reality this is probably never the case. + + /** + * Subscription info if this is a subscription. + * Own. + */ + CNcdServerSubscription* iSubscription; + + /** + * Part of subscription info if this is a part of subscription. + * Own. + */ + CNcdServerPartOfSubscription* iPartOfSubscription; + + /** + * Upgrade info if this is a upgrade. + * Own. + */ + CNcdServerUpgrade* iUpgrade; + + +}; + + +#endif // C_NCDPURCHASEOPTIONIMPL_H