imservices/imfeatureplugin/srcimdatamodel/ximpimsubscriptionitembase.h
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imservices/imfeatureplugin/srcimdatamodel/ximpimsubscriptionitembase.h	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,243 @@
+/*
+* 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:  IM Service Connection subscription item base.
+*
+*/
+
+#ifndef CXIMPPSCSUBSCRIPTIONITEMBASE_H
+#define CXIMPPSCSUBSCRIPTIONITEMBASE_H
+
+#include <e32base.h>
+#include <ximpdatasubscriptionstate.h>
+#include "ximpsubscriptionitem.h"
+
+
+class MXIMPIMItemParent;
+class MXIMPPscContext;
+class CXIMPDataSubscriptionStateImp;
+
+/**
+ * PSC subscription implementation
+ *
+ * @since S60 v3.2
+ */
+class CXIMPIMSubscriptionItemBase : public CObject, public MXIMPSubscriptionItem
+    {
+public: // Definitions
+
+    /**
+     * Subscription status
+     */
+    enum TSubscriptionStatus
+        {
+        ENotSubscribedAtAll,
+        ESubscribedForOtherCtxOnly,
+        ESubscribedForCtxOnly,
+        ESubscribedForCtxAndOthers
+        };
+
+    /**
+     * Subscription update event.
+     * Update subscription based on event.
+     */
+    enum TSubscriptionEvent
+        {
+        ECompleteDataReceived
+        };
+	/**
+     * For linear ordering by pointers
+     */
+    static TInt OrderOfContexts( const MXIMPPscContext& aFirst,
+                                 const MXIMPPscContext& aSecond );
+
+    /**
+     * For linear ordering by pointers
+     */
+    static TInt OrderOfItems( const CXIMPIMSubscriptionItemBase& aFirst,
+                              const CXIMPIMSubscriptionItemBase& aSecond );
+
+protected: // Construction and destruction
+
+    /**
+     * Destruction
+     * - Remember to inform parent about delete.
+     */
+    IMPORT_C virtual ~CXIMPIMSubscriptionItemBase();
+
+public: // Construction and destruction
+
+    /**
+     * Construction
+     * @param aParent. Parent has to be informed when this object is deleted by RemoveMe method.
+     */
+    IMPORT_C CXIMPIMSubscriptionItemBase( MXIMPIMItemParent& aParent );
+
+    /**
+     * Base construction. Must be called from inherited classes ConstructL
+     */
+    IMPORT_C void BaseConstructL();
+
+
+public: // New methods
+
+    IMPORT_C TSubscriptionStatus SubscriptionStatus( MXIMPPscContext* aContext );
+
+    /**
+     * Add subscriber for item.
+     * @param aContext. Context to be added.
+     */
+    IMPORT_C void AddSubscriberL( MXIMPPscContext* aContext );
+
+    /**
+     * Remove subscriber from item
+     * @param aContext. Context to be removed.
+     */
+    IMPORT_C void RemoveSubscriber( MXIMPPscContext* aContext );
+
+    /**
+     * Add subscriber for item.
+     * @param aItem. Item to be added.
+     */
+    IMPORT_C void AddSubscriberL( CXIMPIMSubscriptionItemBase* aItem );
+
+    /**
+     * Remove subscriber from item
+     * @param aContext. Item to be removed.
+     */
+    IMPORT_C void RemoveSubscriber( CXIMPIMSubscriptionItemBase* aItem );
+
+    /**
+     * Activate subscriber for item.
+     * @param aItem. Item to be activated.
+     */
+    IMPORT_C void ActivateSubscriberL( CXIMPIMSubscriptionItemBase* aItem );
+
+    /**
+     * Call RemoveSubscriber for all contexts registered to item.
+     */
+    IMPORT_C void ForceClose();
+
+    /**
+     * Clean item if expired.
+     * @return ETrue if expired and cleaned.EFalse if not.
+     */
+    IMPORT_C TBool CleanIfExpired();
+
+    /**
+     * Update subscription based on event happened.
+     * @param aUpdateState. Event which happened.
+     */
+    IMPORT_C void UpdateSubscriptionStateL( TSubscriptionEvent aUpdateState );
+    
+    /**
+     *
+     */
+    IMPORT_C const MXIMPDataSubscriptionState& DataSubscriptionState();
+        
+    /**
+     * Count of subscribed contexts.
+     */
+    IMPORT_C TInt ContextCount() const;
+
+    /**
+     * Reference to context in index.
+     */
+    IMPORT_C MXIMPPscContext& Context( TInt aIndex );
+
+    /**
+     * Can context be found from contexts.
+     */
+    IMPORT_C TBool IsContext( MXIMPPscContext* aContext ) const;
+
+public: // From MXIMPSubscriptionItem
+
+    /**
+     * @see MXIMPSubscriptionItem
+     */
+    IMPORT_C void SynthesiseSubscriptionEventToAllCtxsL();
+
+    /**
+     * @see MXIMPSubscriptionItem
+     */
+    IMPORT_C void ActivateSubscriberL( MXIMPPscContext* aContext );
+        
+    /**
+     * @see MXIMPSubscriptionItem
+     */
+    IMPORT_C void SetDataSubscriptionStateL( CXIMPDataSubscriptionStateImp& aNewState );
+
+public: // Helpers
+
+    /**
+     * Status for context
+     */
+    IMPORT_C CXIMPDataSubscriptionStateImp* StatusLC( MXIMPPscContext* aContext ) const;
+
+    /**
+     * Update time to new expire time.
+     */
+    IMPORT_C void UpdateExpirationL();
+
+    /**
+     * Change status after subscriber is added/removed.
+     */
+    IMPORT_C void ChangeStatusAfterAdd();
+    IMPORT_C void ChangeStatusAfterRemove();
+
+    /**
+     * Count of subscribers. Items counted as 1.
+     */
+    IMPORT_C TInt CountOfSubscribers();
+
+protected: // New interface methods.
+
+    /**
+     * Clean data because expiration
+     */
+    virtual void CleanExpired() = 0;
+
+protected: // Data
+
+    /**
+     * Parent object to inform when object is deleted.
+     * Used also for sending events.
+     */
+    MXIMPIMItemParent& iParent;
+
+
+    /**
+     * Subscribed contexts.
+     */
+    RPointerArray< MXIMPPscContext > iContexts;
+    RPointerArray< MXIMPPscContext > iPreContexts;
+    RPointerArray< CXIMPIMSubscriptionItemBase > iItems;
+    RPointerArray< CXIMPIMSubscriptionItemBase > iPreItems;
+
+    /**
+     * Current IM info status.
+     */
+    CXIMPDataSubscriptionStateImp* iSubscriptionState;
+
+    /**
+     * Time when ready for expire.
+     */
+    TTime iExpireTime;
+    };
+
+
+/* ======================================================================== */
+
+
+
+#endif // CXIMPPSCSUBSCRIPTIONITEMBASE_H