phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CRemoteStore.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CRemoteStore.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,424 @@
+/*
+* Copyright (c) 2002-2007 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:  A remote sim store implementation
+*
+*/
+
+
+
+#ifndef VPBKSIMSTORE_CREMOTESTORE_H
+#define VPBKSIMSTORE_CREMOTESTORE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <MVPbkSimCntStore.h>
+#include <RVPbkStreamedIntArray.h>
+#include <MVPbkSimStoreOperation.h>
+#include <RVPbkSimStore.h>
+
+// FORWARD DECLARATIONS
+class MVPbkSimFindObserver;
+class CVPbkSimContactBuf;
+class CVPbkSimFieldTypeFilter;
+class MVPbkSimViewFindObserver;
+class MVPbkSimCntView;
+template<typename MVPbkSimStoreObserver> class CVPbkAsyncObjectOperation;
+
+namespace VPbkSimStore {
+
+// CLASS DECLARATION
+
+/**
+*  A remote sim store implementation
+*
+*/
+NONSHARABLE_CLASS( CRemoteStore ): 
+        public CActive,
+        public MVPbkSimCntStore
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param aIdentifier the store identifier
+        * @return a new instance of this class
+        */
+        static CRemoteStore* NewL( 
+            TVPbkSimStoreIdentifier aIdentifier );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CRemoteStore();
+
+    public: // New functions
+        
+        /**
+        * Returns the store session
+        * @return the store session
+        */
+        inline RVPbkSimStore& StoreSession();
+
+        /**
+        * Adds an observer for the store
+        * @param aObserver a new observer
+        */
+        void AddObserverL( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * Removes an observer
+        * @param aObserver the observer to be removed
+        */
+        void RemoveObserver( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * @return ETrue if store is open
+        */
+        TBool IsOpen() const;
+        
+        /**
+         * Opens the store asynchronously. This is used beside MVPbkSimCntStore::OpenL
+         * 
+         * Calls back the observers attached to this contact store when the
+         * opening completes.
+         *
+         * @param aSecurityInfo Clients security information
+         * @param aObserver Observer.
+         */
+        void OpenL( const TSecurityInfo& aSecurityInfo, 
+                    MVPbkSimStoreObserver& aObserver );        
+
+    public: // Functions from base classes
+
+        /**
+        * From CActive
+        */
+        void RunL();
+
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+        /**
+        * From CActive
+        */
+        TInt RunError( TInt aError );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        TVPbkSimStoreIdentifier Identifier() const;
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        void OpenL( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        void Close( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimCntView* CreateViewL(
+            const RVPbkSimFieldTypeArray& aSortOrder,
+            TVPbkSimViewConstructionPolicy aConstructionPolicy,
+            const TDesC& aViewName,
+            CVPbkSimFieldTypeFilter* aFilter );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        const TDesC8* AtL( TInt aSimIndex );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        const MVPbkSimContact* ContactAtL( TInt aSimIndex );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* SaveL( const TDesC8& aData, TInt& aSimIndex, 
+            MVPbkSimContactObserver& aObserver );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* DeleteL( RVPbkStreamedIntArray& aSimIndexes, 
+                      MVPbkSimContactObserver& aObserver );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        TInt GetGsmStoreProperties( TVPbkGsmStoreProperty& aGsmProperties ) const;
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        TInt GetUSimStoreProperties( TVPbkUSimStoreProperty& aUSimProperties ) const;
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        const CVPbkETelCntConverter& ContactConverter() const;
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* CreateMatchPhoneNumberOperationL( 
+            const TDesC& aPhoneNumber, TInt aMaxMatchDigits, 
+            MVPbkSimFindObserver& aObserver );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* CreateFindOperationL( 
+            const TDesC& aStringToFind, RVPbkSimFieldTypeArray& aFieldTypes,
+            MVPbkSimFindObserver& aObserver );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        TInt SystemPhoneNumberMaxLength() const;
+        
+    private: // Construction
+
+        /**
+        * C++ constructor.
+        */
+        CRemoteStore( TVPbkSimStoreIdentifier aIdentifier );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // New functions
+        /// Resets the store
+        void ResetAndCloseStore();
+        /// Callback function for OpenL
+        void DoOpenL( MVPbkSimStoreObserver& aObserver );
+        /// An error handling of DoOpenL
+        void DoOpenError( MVPbkSimStoreObserver& aObserver, TInt aError );
+
+    private:    // Data
+        /// The store identifier
+        TVPbkSimStoreIdentifier iIdentifier;
+        /// Ref: the observers of the store
+        RPointerArray<MVPbkSimStoreObserver> iObservers;
+        /// The sim store subsession
+        RVPbkSimStore iSimStore;
+        /// The store event updated by the server
+        TVPbkSimContactEventData iStoreEvent;
+        /// The store event error updated by the server
+        TInt iStoreEventError;
+        /// A find operation class
+        class CFindOperation;
+        /// A number matching operation class
+        class CNumberMatchOperation;                
+        /// Own: native contact versus ETel contact conversion
+        CVPbkETelCntConverter* iContactConverter;
+        /// Own: the current contact requested with AtL
+        CVPbkSimContactBuf* iCurrentETelContact;
+        /// Own: the current contact requested with ContactAtL
+        CVPbkSimContactBuf* iCurrentContact;
+        /// The current state of the store changed by store events
+        TVPbkSimEvent iCurrentState;
+        /// The system max length for phonenumber
+        TInt iSystemPhoneNumberMaxLength;
+        /// Does not own. Security information of client.
+        const TSecurityInfo* iSecurityInfo;
+        CVPbkAsyncObjectOperation<MVPbkSimStoreObserver>* iAsyncOpenOp;
+    };
+
+// INLINE FUNCTIONS
+inline RVPbkSimStore& CRemoteStore::StoreSession()
+    {
+    return iSimStore;
+    }
+
+/**
+* An active object for saving a contact
+*/
+class CAsyncSave : public CActive,
+                   public MVPbkSimStoreOperation
+    {
+    public: // Construction and destruction
+        CAsyncSave( RVPbkSimStore& aStore );
+        ~CAsyncSave();
+
+    public: // New functions
+        void DoRequestL( const TDesC8& aData, TInt& aSimIndex, 
+            MVPbkSimContactObserver& aObserver );
+
+    public: // Functions from base classes
+        /**
+        * From CActive
+        */
+        void RunL();
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+    private:
+        RVPbkSimStore& iStore;
+        MVPbkSimContactObserver* iObserver;
+    };
+
+/**
+* An active object for deleting a contact
+*/
+class CAsyncDelete : public CActive,
+                     public MVPbkSimStoreOperation
+    {
+    public: // Construction and destruction
+        CAsyncDelete( RVPbkSimStore& aStore );
+        ~CAsyncDelete();
+
+    public: // New functions
+        void DoRequestL( RVPbkStreamedIntArray& aSimIndexes, 
+                        MVPbkSimContactObserver& aObserver );
+
+    public: // Functions from base classes
+        /**
+        * From CActive
+        */
+        void RunL();
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+    private:
+        RVPbkSimStore& iStore;
+        MVPbkSimContactObserver* iObserver;
+    };
+
+/**
+* An active object for number matching
+*/
+NONSHARABLE_CLASS( CRemoteStore::CNumberMatchOperation ): 
+        public CActive,
+        public MVPbkSimStoreOperation
+    {
+    public: // Construction and destruction
+        static CNumberMatchOperation* NewL( CRemoteStore& aStore,
+            const TDesC& aPhoneNumber, TInt aMaxMatchDigits, 
+            MVPbkSimFindObserver& aObserver );
+        ~CNumberMatchOperation();
+
+    public: // New functions
+        void Activate();        
+
+    public: // Functions from base classes
+        /**
+        * From CActive
+        */
+        void RunL();
+
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+        /**
+        * From CActive
+        */
+        TInt RunError( TInt aError );
+
+    private:
+
+        /**
+        * C++ constructor
+        */
+        CNumberMatchOperation( CRemoteStore& aStore, const TDesC& aPhoneNumber, 
+            TInt aMaxMatchDigits, MVPbkSimFindObserver& aObserver );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:
+        CRemoteStore& iStore;
+        const TDesC& iPhoneNumber;
+        TInt iMaxMatchDigits;
+        MVPbkSimFindObserver& iObserver;
+        HBufC8* iSimIndexBuf;
+        TPtr8 iSimIndexBufPtr;
+    };
+    
+/**
+* An active object for number matching
+*/
+NONSHARABLE_CLASS( CRemoteStore::CFindOperation ): 
+        public CActive,
+        public MVPbkSimStoreOperation
+    {
+    public: // Construction and destruction
+        static CFindOperation* NewL( CRemoteStore& aStore, 
+            const TDesC& aStringToFind, MVPbkSimFindObserver& aObserver,
+            RVPbkSimFieldTypeArray& aFieldTypes );
+        ~CFindOperation();
+
+    public: // New functions
+        void Activate();
+
+    public: // Functions from base classes
+        /**
+        * From CActive
+        */
+        void RunL();
+
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+        /**
+        * From CActive
+        */
+        TInt RunError( TInt aError );
+
+    private:
+
+        /**
+        * C++ constructor
+        */
+        CFindOperation( CRemoteStore& aStore, const TDesC& aStringToFind,
+            MVPbkSimFindObserver& aObserver );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( RVPbkSimFieldTypeArray& aFieldTypes );
+
+    private:
+        CRemoteStore& iStore;
+        const TDesC& iStringToFind;
+        MVPbkSimFindObserver& iObserver;
+        HBufC8* iSimIndexBuf;
+        TPtr8 iSimIndexBufPtr;
+        HBufC8* iFieldTypes;
+    };
+
+} // namespace VPbkSimStore
+#endif      // VPBKSIMSTORE_CREMOTESTORE_H
+            
+// End of File