ncdengine/provider/server/inc/ncdsubscriptionimpl.h
changeset 0 ba25891c3a9e
--- /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 <s32mem.h>
+
+#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