presadap12/Parser2/Inc/CPEngSessionSlotState.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presadap12/Parser2/Inc/CPEngSessionSlotState.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2005 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:  Presence Engine Session Slot State container.
+*
+*/
+
+#ifndef __CPENGSESSIONSLOTSTATE_H__
+#define __CPENGSESSIONSLOTSTATE_H__
+
+//  INCLUDES
+#include    <E32Base.h>
+#include    <BaDesca.h>
+#include    "PEngPresenceEngineConsts2.h"
+
+
+
+
+// DATA TYPES
+
+/**
+ * Data selection enmumeration to select
+ * which parts of the CPEngSessionSlotState
+ * to stream.
+ *
+ * @since 3.0
+ */
+enum TPEngDataSelection
+    {
+    /**
+     * Session Slot Id part.
+     */
+    EIdentification  = 0x00000001,
+
+    /**
+     * Registered application IDs part.
+     */
+    ERegistredIDs    = 0x00000010,
+
+    /**
+     * State specific data.
+     * Active Application Ids and the state part.
+     */
+    EStateSpecific   = 0x00000100,
+
+
+
+    //Mixed fields for real storage purposes.
+
+    /**
+     * Only Session Slot Id and Registered application IDs.
+     */
+    EPermanentData   = EIdentification | ERegistredIDs,
+
+
+    /**
+     * Whole state container data without the Slot ID.
+     */
+    EPureState       =  ERegistredIDs | EStateSpecific,
+
+
+    /**
+     * Whole state container data.
+     */
+    EWholeState      = EIdentification | ERegistredIDs | EStateSpecific,
+
+    };
+
+
+
+// FORWARD DECLARATIONS
+class RWriteStream;
+class RReadStream;
+class CPEngSessionSlotId;
+class CPEngSessionSlotEvent;
+
+
+
+
+// CLASS DECLARATION
+
+
+/**
+* Presence Engine Session Slot State container.
+* It is used infernally by the PE for transportation
+* of the slot state between the engine components
+* and also to maintain the slot state both
+* in permanent and cached memory.
+*
+* @since 3.0
+*/
+class CPEngSessionSlotState : public CBase
+    {
+    public: // Construction
+
+        /**
+         * Instantiates CPEngSessionSlotState object.
+         *
+         * @return New CPEngSessionSlotState instance.
+         */
+        IMPORT_C static CPEngSessionSlotState* NewL( );
+        IMPORT_C static CPEngSessionSlotState* NewLC( );
+
+
+        /**
+         * Destructor.
+         */
+        ~CPEngSessionSlotState();
+
+    protected:
+
+        /**
+         * C++ constructor.
+         */
+        CPEngSessionSlotState();
+
+
+
+    public: // Getters
+
+        /**
+         * Session Slot ID identification
+         *
+         * @since 3.0
+         * @return session slot ID identification class
+         */
+        IMPORT_C CPEngSessionSlotId& SessionSlotId( ) const;
+
+
+        /**
+         * Session slot Online state
+         *
+         * @since 3.0
+         * @return session slot state
+         */
+        IMPORT_C TPEngNWSessionSlotState SessionSlotState() const;
+
+
+        /**
+         * Gets list of Application IDs which are registered
+         * to this Session Slot.
+         *
+         * @since 3.0
+         * @return descriptor array with application IDs
+         */
+        IMPORT_C const MDesC16Array& RegisteredApplications() const;
+
+
+        /**
+         * Gets list of Application IDs which are active with
+         * this Session Slot.
+         *
+         * @since 3.0
+         * @return descriptor array with application IDs
+         */
+        IMPORT_C const MDesC16Array& ActiveApplications() const;
+
+
+        /**
+         * Gets certain application state from
+         * the session slot state.
+         *
+         * @since 3.0
+         * @param aAppId Application Id for which to get the state.
+         * @return State of the requested application Id.
+         */
+        IMPORT_C TPEngNWSessionSlotState AppState( const TDesC& aAppId ) const;
+
+
+        /**
+         * Checks if application is registered to this session slot.
+         * If application is not registered, leaves with KErrNotFound
+         *
+         * @since 3.0
+         * @param aAppId Application Id to check.
+         */
+        IMPORT_C void ApplicationRegisteredL( const TDesC& aAppId ) const;
+
+
+
+
+    public: // Setters
+
+        /**
+         * Set session slot ID.
+         *
+         * @since 3.0
+         * @param aSlotId New session slot Id.
+         * @param aOwnershipTransfered ETrue if aSlotId ownership is
+         *        transfered to CPEngSessionSlotState instance
+         */
+        IMPORT_C void SetSessionSlotId( CPEngSessionSlotId& aSlotId,
+                                        TBool aOwnershipTransfered = EFalse );
+
+
+        /**
+         * Sets Session Slot State as closed.
+         *
+         * @since 3.0
+         */
+        IMPORT_C void SetSessionSlotStateClosed();
+
+
+        /**
+         * Update Session Slot State based on the event.
+         *
+         * @since 3.0
+         * @param aSessEvent Session Slot event.
+         * @return ETrue if state was updated because of event and
+         *         state needs to be stored to permanent storage.
+         *         Else EFalse.
+         */
+        IMPORT_C TBool UpdateStateL( const CPEngSessionSlotEvent& aSessEvent );
+
+
+        /**
+         * Updates and commits the Session Slot State
+         * based on the event.
+         *
+         * @since 3.0
+         * @param aSessEvent Session Slot event.
+         * @return ETrue if state was updated because of event and
+         *         state needs to be stored to permanent storage.
+         *         Else EFalse.
+         */
+        IMPORT_C TBool UpdateAndCommitStateL( const CPEngSessionSlotEvent& aSessEvent );
+
+
+        /**
+         * Rollback last change
+         *
+         * @since 3.0
+         */
+        IMPORT_C void RollBackLastUpdate();
+
+
+        /**
+         * Commit last change
+         *
+         * @since 3.0
+         */
+        IMPORT_C void CommitLastUpdate();
+
+
+
+    public: // Export import of the state
+
+        /**
+         * Internalize Session Slot state from stream.
+         *
+         * @since 3.0
+         * @param aStream stream to internalize from
+         * @param aSelection selection flag describing what to internalize
+         */
+        IMPORT_C void InternalizeL( RReadStream& aStream,
+                                    TPEngDataSelection aSelection );
+
+
+        /**
+         * Externalize Session Slot state to stream
+         *
+         * @since 3.0
+         * @param aStream stream to externalize
+         * @param aSelection selection flag describing what to externalize
+         */
+        IMPORT_C void ExternalizeL( RWriteStream& aStream,
+                                    TPEngDataSelection aSelection ) const;
+
+
+        /**
+         * Packs Session Slot State to the buffer.
+         *
+         * @since 3.0
+         * @param aSelection selection flag describing what to pack
+         * @return Buffer with streamed session slot state data.
+         * Buffer ownership is returned to caller.
+         */
+        IMPORT_C HBufC8* PackDataLC( TPEngDataSelection aSelection ) const;
+        IMPORT_C void PackDataL( TPEngDataSelection aSelection, RBuf8& aBuf ) const;
+
+
+        /**
+         * Unpacks Session Slot State from the passed descriptor
+         *
+         * @since 3.0
+         * @param aDes Descriptor to unpack from.
+         * @param aSelection selection flag describing what to unpack
+         */
+        IMPORT_C void UnpackDataL( const TDesC8& aDes,
+                                   TPEngDataSelection aSelection );
+
+        /**
+         * Size of needed stream to externalizate the container.
+         *
+         * @since 3.0
+         * @param aSelection selection flag describing what
+         *        to calculate to the size.
+         * @return size of the buffer in the bytes
+         */
+        IMPORT_C TInt Size( TPEngDataSelection aSelection ) const;
+
+
+
+    private:    //Helpers
+
+        /**
+         * Add registered Application Id
+         *
+         * @since 3.0
+         * @param aAppId application Id to be added
+         */
+        void AddRegisteredAppIdL( const TDesC& aAppId );
+
+
+        /**
+         * Remove registered Application Id
+         *
+         * @since 3.0
+         * @param aAppId application Id to be removed
+         */
+        void RemoveRegisteredAppIdL( const TDesC& aAppId );
+
+
+        /**
+         * Add Active Application Id
+         *
+         * @since 3.0
+         * @param aAppId application Id to be added
+         */
+        void AddActiveAppIdL( const TDesC& aAppId );
+
+
+        /**
+         * Remove Active Application Id
+         *
+         * @since 3.0
+         * @param aAppId application Id to be removed
+         */
+        void RemoveActiveAppId( const TDesC& aAppId );
+
+        /**
+         * Checks is the Application Id registered or not
+         *
+         * @since 3.0
+         * @param aAppId application Id to be check.
+         * @return ETrue if app id is registered. Else EFalse.
+         */
+        TBool ApplicationRegistered( const TDesC& aAppId ) const;
+
+
+
+    private: // data
+
+        //OWN/REF: Session Slot ID
+        CPEngSessionSlotId*             iSessionId;
+
+        //OWN: Is previous session Slot ID owned or not
+        TBool                           iSessionIdOwned;
+
+        //OWN: Session Slot State
+        TPEngNWSessionSlotState         iState;
+
+        //OWN: Active Application's Application IDs
+        CDesCArrayFlat                  iActiveApps;
+
+        //OWN: Registered Application's Application IDs
+        CDesCArrayFlat                  iRegisteredApps;
+
+
+
+        // Roll back support for app id changes
+
+        //OWN: Index of added active Id
+        TInt                            iActiveAdded;
+
+        //OWN: Index of removed active Id
+        TInt                            iActiveRemoved;
+
+        //OWN: Index of added Registered Id
+        TInt                            iRegAdded;
+
+        //OWN: Index of removed Registered Id
+        TInt                            iRegRemoved;
+
+    };
+
+#endif      // __CPENGNWSESSIONSLOTEVENT_H__
+// End of File
\ No newline at end of file