--- /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 <e32cmn.h>
+#include <s32mem.h>
+#include <badesca.h>
+
+#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<CNcdPurchaseOptionImpl>& 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<CNcdPurchaseOptionImpl> 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<CNcdKeyValuePair> 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