phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CContact.h
changeset 0 e686773b3f54
child 18 d4f567ce2e7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CContact.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,278 @@
+/*
+* 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 contact adapter between VPbk framework and VPbkSimStoreImpl
+*
+*/
+
+
+#ifndef VPBKSIMSTORE_CCONTACT_H
+#define VPBKSIMSTORE_CCONTACT_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <babitflags.h>
+#include "MVPbkStoreContact.h"
+#include <MVPbkStoreContact2.h>
+#include "TStoreContactFieldCollection.h"
+#include "MVPbkSimContactObserver.h"
+
+// FORWARD DECLARATIONS
+class CVPbkSimContact;
+class MVPbkSimStoreOperation;
+class MVPbkStoreContactProperties;
+
+// FORWARD DECLARATIONS
+namespace VPbkEngUtils { 
+class CVPbkAsyncOperation; 
+}
+
+namespace VPbkSimStore {
+
+// FORWARD DECLARATIONS
+class CContactStore;
+
+// CLASS DECLARATIONS
+
+/**
+ * Maps a Sim entry to a virtual Phonebook contact.
+ */
+NONSHARABLE_CLASS( CContact ): 
+        public CBase, 
+        public MVPbkStoreContact,
+        public MVPbkStoreContact2,
+        private MVPbkSimContactObserver
+    {
+    public:  // Constructor and destructor
+        /**
+        * Creates a new instance of this class.
+        *
+        * @param aParentStore the store in which this contact belongs
+        * @param aSimContact a sim contact, ownership is taken 
+        *        after construction.
+        * @return a new instance of this class
+        */
+        static CContact* NewL( CContactStore& aParentStore,
+            CVPbkSimContact* aSimContact, TBool aIsNewContact = EFalse );
+
+        /**
+        * Destructor.
+        */
+        ~CContact();
+
+    public:  // New functions
+
+        /**
+        * Returns the parent store of this contact.
+        * @return the parent store of this contact.
+        */
+        inline CContactStore& Store() const;
+
+        /**
+        * Returns the sim contact
+        * @return the sim contact
+        */
+        inline CVPbkSimContact& SimContact() const;
+
+        /**
+        * Sets the lock status of the contact
+        * @param aLocked if ETrue the contact is set to locked
+        */
+        inline void SetLock( TBool aLocked );
+
+    public:  // From base classes
+
+        /**
+        * From MVPbkObjectHierarchy
+        */
+        MVPbkObjectHierarchy& ParentObject() const;
+
+        /**
+        * From MVPbkBaseContact
+        */
+        const MVPbkStoreContactFieldCollection& Fields() const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        TBool IsSame( const MVPbkStoreContact& aOtherContact ) const;
+
+        /**
+        * From MVPbkBaseContact
+        */
+        MVPbkContactLink* CreateLinkLC() const;
+
+        /**
+        * From MVPbkBaseContact
+        */
+        void DeleteL(MVPbkContactObserver& aObserver) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        TBool MatchContactStore(const TDesC& aContactStoreUri) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        TBool MatchContactStoreDomain(const TDesC& aContactStoreDomain) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        MVPbkContactBookmark* CreateBookmarkLC() const;
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        MVPbkContactStore& ParentStore() const;
+
+        /**
+        * From MVPbkStoreContact
+        */
+        MVPbkStoreContactFieldCollection& Fields();
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        MVPbkStoreContactField* CreateFieldLC( 
+            const MVPbkFieldType& aFieldType ) const;
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        TInt AddFieldL( MVPbkStoreContactField* aField );
+
+        /**
+        * From MVPbkStoreContact
+        */
+        void RemoveField( TInt aIndex );
+
+        /**
+        * From MVPbkStoreContact
+        */
+        void RemoveAllFields();
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        void LockL(MVPbkContactObserver& aObserver) const;
+
+        /**
+        * From MVPbkStoreContact
+        */
+        void CommitL( MVPbkContactObserver& aObserver ) const;
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        MVPbkContactLinkArray* GroupsJoinedLC() const;
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        MVPbkContactGroup* Group();
+        
+        /**
+        * From MVPbkStoreContact
+        */
+        TInt MaxNumberOfFieldL(const MVPbkFieldType& aType) const;
+
+        /**
+        * From MVPbkStoreContact
+        */
+		TAny* StoreContactExtension(TUid aExtensionUid) ;
+        
+        /**
+        * From MVPbkStoreContact2
+        */        
+        MVPbkStoreContactProperties* PropertiesL() const;
+        
+        /**
+        * From MVPbkStoreContact2
+        */        
+        void SetAsOwnL(MVPbkContactObserver& aObserver) const;
+        
+    private:  // Construction
+
+        /**
+        * C++ constructor.
+        */
+        CContact( CContactStore& aParentStore );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( CVPbkSimContact& aSimContact, TBool aIsNewContact );
+    
+    private:    // Functions from base classes
+        
+        /**
+        * From MVPbkSimContactObserver
+        */
+        void ContactEventComplete( TEvent aEvent, CVPbkSimContact* aContact );
+
+        /**
+        * From MVPbkSimContactObserver
+        */
+        void ContactEventError( TEvent aEvent, CVPbkSimContact* aContact, 
+            TInt aError );
+            
+    private:    // New functions
+        /// Resets the contact state after contact operation
+        void ResetContactOperationState();
+        
+    private:  // Data
+
+        TStoreContactFieldCollection iFields;
+        /// The parent store of the contact
+        CContactStore& iParentStore;
+        /// Own: the sim contact
+        CVPbkSimContact* iSimContact;
+        /// ETrue if this contact has been locked by the client.
+        /// This is a requirement of vpbk framework -> sim contacts
+        /// can't be actually locked
+        mutable TBool iLocked;
+        /// Flags for contact state
+        mutable TBitFlagsT<TUint32> iFlags;
+        /// Own: an asynchronous call back that is needed if observer
+        /// must be notified e.g from ReadL
+        VPbkEngUtils::CVPbkAsyncOperation* iAsyncOp;
+        /// Ref: the observer for the CommitL/DeleteL
+        mutable MVPbkContactObserver* iObserver;
+        /// Own: an async operaton handle.
+        mutable MVPbkSimStoreOperation* iStoreOperation;
+    };
+
+
+// INLINE FUNCTIONS
+
+inline CContactStore& CContact::Store() const
+    {
+    return iParentStore;
+    }
+
+inline CVPbkSimContact& CContact::SimContact() const
+    {
+    return *iSimContact;
+    }
+
+inline void CContact::SetLock( TBool aLocked )
+    {
+    iLocked = aLocked;
+    }
+} // namespace VPbkSimStore
+
+#endif  // VPBKSIMSTORE_CCONTACT_H
+