diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdnodemetadataimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdnodemetadataimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,519 @@ +/* +* 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 CNcdNodeMetaData class +* +*/ + + +#ifndef NCD_NODE_META_DATA_H +#define NCD_NODE_META_DATA_H + + +#include +#include +#include + +#include "catalogscommunicable.h" +#include "ncdnodemanager.h" +#include "ncdstoragedataitem.h" +#include "ncdnodeclassids.h" + + +class CNcdNodeIdentifier; +class MNcdPreminetProtocolDataEntity; +class MNcdPreminetProtocolPurchaseOption; +class CNcdNodeIcon; +class CNcdNodeScreenshot; +class CNcdNodeSkin; +class CNcdPurchaseOptionImpl; +class CNcdNodeDisclaimer; +class CNcdNodeUriContent; +class CNcdNodeDownload; +class CNcdNodeInstall; +class CNcdNodeContentInfo; +class CNcdNodePreview; +class CNcdNodeUpgrade; +class CNcdNodeDependency; +class CNcdServerSubscribableContent; +class CNcdPurchaseDetails; +class MNcdPurchaseDetails; +class CNcdNodeUserData; +class CNcdKeyValuePair; + +/** + * CNcdNodeMetaData ... + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdNodeMetaData : public CCatalogsCommunicable, + public MNcdStorageDataItem + { + +public: + + /** + * Destructor + */ + virtual ~CNcdNodeMetaData(); + + + /** + * @return The nodemanager that has created this node metadata. + */ + CNcdNodeManager& NodeManager() const; + + + /** + * + */ + const CNcdNodeIdentifier& Identifier() const; + + + /** + * 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 factory that creates object. + * The factory should know which integer is reserved for which class. + * + * @return NcdNodeClassIds::TNcdNodeClassId Describes the data type. + */ + NcdNodeClassIds::TNcdNodeClassId ClassId() const; + + + /** + * + */ + const TDesC& TimeStamp() const; + + /** + * + */ + const TDesC& NodeName() const; + + void SetNodeNameL( const TDesC& aName ); + + /** + * + */ + const TDesC& Description() const; + + void SetDescriptionL( const TDesC& aDescription); + + /** + * Returns the layout type if defined. + */ + const TDesC& LayoutType() const; + + /** + * @exception KErrNotFound if the disclaimer does not exist. + */ + const CNcdNodeDisclaimer& DisclaimerL() const; + + /** + * Disclaimer setter. Used by bundle load operation for setting + * the bundle disclaimer + */ + void SetDisclaimer( CNcdNodeDisclaimer* aDisclaimer ); + + /** + * + */ + CNcdNodeIcon& IconL() const; + + void SetIcon( CNcdNodeIcon* aIcon ); + + /** + * + */ + const CNcdNodeScreenshot& ScreenshotL() const; + + /** + * + */ + const CNcdNodeSkin& SkinL() const; + + + /** + * + */ + CNcdNodePreview& PreviewL() const; + + + /** + * + */ + const CNcdNodeUpgrade& UpgradeL() const; + + + /** + * + */ + const CNcdNodeDependency& DependencyL() const; + + + /** + * Content info getter + * + * @return Content info + */ + const CNcdNodeContentInfo& ContentInfoL() const; + + + const CNcdNodeDisclaimer& MoreInfoL() const; + + /** + * + */ + const CNcdServerSubscribableContent* SubscribableContent() const; + + /** + * + */ + const RPointerArray& PurchaseOptions() const; + + CNcdPurchaseOptionImpl& PurchaseOptionByIdL( + const TDesC& aPurchaseOptionId ) const; + + /** + * Tells whether the node should be always visible in UI. + * + * @return True if always visible, otherwise false. + */ + TBool AlwaysVisible() const; + + /** + * Sets the always visible property. + * + * @param aValue The new value. + */ + void SetAlwaysVisible( TBool aValue ); + + + /** + * + */ + void InternalizeL( MNcdPreminetProtocolDataEntity& aData ); + + + void InternalizeContentInfoL( const MNcdPurchaseDetails& aDetails ); + + void InternalizeUriContentL( const MNcdPurchaseDetails& aDetails ); + + + /** + * Get content download. + * + * @return Reference to the node download. + * @exception KErrNotFound if node download has not been set. + */ + CNcdNodeDownload& DownloadL(); + + /** + * Internalizes data to the node download from purchase history. If the + * node download does not exists it is created. + */ + void InternalizeDownloadL( const MNcdPurchaseDetails& aDetails ); + + + /** + * Get content install. + * + * @return Reference to the node install. + * @exception KErrNotFound if node install has not been set. + */ + CNcdNodeInstall& InstallL(); + + /** + * Internalizes data to the node install from purchase history. If the + * node install does not exists it is created. + */ + void InternalizeInstallL( const MNcdPurchaseDetails& aDetails ); + + /** + * Internalizes install from content info. Creates node install if necessary + */ + void InternalizeInstallFromContentInfoL(); + + /** + * Internalizes dependency information from purchase history + * + * @param aDetails Purchase details + */ + void InternalizeDependencyL( const MNcdPurchaseDetails& aDetails ); + + /** + * Internalizes icon information from purchase history + * + * @param aDetails Purchase details + */ + void InternalizeIconL( const MNcdPurchaseDetails& aDetails ); + + /** + * Get purchase details from the purchase history + */ + CNcdPurchaseDetails* PurchaseDetailsLC( TBool aLoadIcon = EFalse ) const; + + + /** + * Updates CNcdNodeUpgrade from CNcdNodeContentInfo and CNcdNodeInstall + */ + TBool HandleContentUpgradeL(); + + + void SetDeleteSoon( TBool aDeleteSoon ); + + + TBool DeleteSoon() const; + + +public: // MNcdStorageDataItem + + /** + * @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 + */ + CNcdNodeMetaData( + NcdNodeClassIds::TNcdNodeClassId aClassId, + CNcdNodeManager& aNodeManager ); + + /** + * ConstructL + */ + virtual void ConstructL( const CNcdNodeIdentifier& aIdentifier ); + + + /** + * 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 + */ + void InternalizeRequestL( MCatalogsBaseMessage& aMessage ) const; + /** + * This function writes the object data to the stream. Child + * classes should add theri own data after the parent data. + */ + virtual void ExternalizeDataForRequestL( RWriteStream& aStream ) const; + + + /** + * + */ + void InternalizePurchaseMeansRequestL( MCatalogsBaseMessage& aMessage ) const; + + /** + * This function writes the purchase option amount and handles + * to the stream. + */ + void ExternalizePurchaseMeansForRequestL( + const CDesCArray& aPurchaseOptionIds, + RWriteStream& aStream, + MCatalogsSession& aSession ) const; + + /** + * + */ + void InternalizePurchaseHistoryRequestL( MCatalogsBaseMessage& aMessage ) const; + + /** + * + */ + void ExternalizePurchaseHistoryForRequestL( RWriteStream& aStream ) const; + + + /** + * This function is called when the proxy wants to get purchase + * option ids from the server side. + */ + void PurchaseOptionIdsRequestL( MCatalogsBaseMessage& aMessage ) const; + + + void ReleaseRequest( MCatalogsBaseMessage& aMessage ) const; + + void IconIdRequestL( MCatalogsBaseMessage& aMessage ) const; + void IconDataRequestL( MCatalogsBaseMessage& aMessage ) const; + + void UserDataHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void DisclaimerHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void IconHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void ScreenshotHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void SkinHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void UriContentHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void ContentInfoHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void PreviewHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void UpgradeHandleRequestL( MCatalogsBaseMessage& aMessage ); + void DependencyHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void DownloadHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void InstallHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void MoreInfoHandleRequestL( MCatalogsBaseMessage& aMessage ) const; + void IsPurchaseSupportedRequestL( MCatalogsBaseMessage& aMessage ) const; + +private: + + // Prevent these two if they are not implemented + CNcdNodeMetaData( const CNcdNodeMetaData& aObject ); + CNcdNodeMetaData& operator =( const CNcdNodeMetaData& aObject ); + + + // Functions related to internalization of purchase options + + + /** + * Function that creates needed purchaseoption and internalizes + * it from the given data or reinternalizes already existing + * purchase option if purchase option with the same id is found + */ + void InternalizePurchaseOptionL( + const MNcdPreminetProtocolPurchaseOption& aData ); + + /** + * Gets existing purchase option with given id or if + * one is not found creates one and inserts it into array + * containing existing purchase options. Option can be + * removed from the array later if necessary with + * RemovePurchaseOptionL() function. + */ + CNcdPurchaseOptionImpl& CreateOrGetPurchaseOptionL( + const TDesC& aPurchaseOptionId ); + + /** + * Finds purchase option with given id and removes it + * from the array of the current purchase options. Also + * closes the option once. + */ + void RemovePurchaseOptionL( const TDesC& aPurchaseOptionId ); + + /** + * Removes all purchase options that have not been recently + * updated. Used to remove purchase options that are still in + * memory but are not received from the server anymore. + * Also sets all options as not recently updated. + */ + void RemoveNotUpdatedPurchaseOptions(); + + /** + * Function that creates needed purchaseoption and internalizes + * it from the given data or reinternalizes already existing + * purchase option if purchase option with the same id is found + */ + void InternalizePurchaseOptionL( RReadStream& aStream ); + + + /** + * Updates free content URIs to purchase history if they have been + * 'bought'. Also internalizes CNcdNodeContentUri + */ + void HandleContentUriUpdateL( const CNcdPurchaseOptionImpl& aOption ); + + +private: // data + + // The class id is the id for this class that a factory uses + // when it creates an object of this class. + NcdNodeClassIds::TNcdNodeClassId iClassId; + + // Node manager + CNcdNodeManager& iNodeManager; + + // This info is set already during creation of the object + CNcdNodeIdentifier* iIdentifier; + + // This information is set when internalizing + HBufC* iTimeStamp; + HBufC* iName; + HBufC* iDescription; + HBufC* iLayoutType; + + // This class owns user data if it has been created. + CNcdNodeUserData* iUserData; + + CNcdNodeDisclaimer* iDisclaimer; + + CNcdNodeIcon* iIcon; + + CNcdNodeScreenshot* iScreenshot; + + CNcdNodeSkin* iSkin; + + CNcdNodePreview* iPreview; + + CNcdServerSubscribableContent* iSubscribableContent; + RPointerArray iPurchaseOptions; + + CNcdNodeUriContent* iUriContent; + + CNcdNodeContentInfo* iContentInfo; + + // This class owns node download if it has been set. + CNcdNodeDownload* iDownload; + + // This class owns node install if it has been set + CNcdNodeInstall* iInstall; + + CNcdNodeDisclaimer* iMoreInfo; + + RPointerArray iDetails; + + CNcdNodeUpgrade* iUpgrade; + + CNcdNodeDependency* iDependency; + + TBool iAlwaysVisible; + + // 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; + + // ETrue if the metadata object should be deleted as soon as possible + // from memory. It's not necessary save this on disk + TBool iDeleteSoon; + + // Version of the bought content if any. This is read from purchase history + // This is here because NodeInstall may not be available when + // this is needed and making it available in those cases would make + // things much more complicated + TCatalogsVersion iBoughtContentVersion; + }; + +#endif // NCD_NODE_META_DATA_H