contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2005-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:  An ECOM interface for the virtual phonebook contact attributes.
+*                Contact attributes are e.g speed dial and defaults.
+*
+*/
+
+
+#ifndef CVPBKCONTACTATTRIBUTEPLUGIN_H
+#define CVPBKCONTACTATTRIBUTEPLUGIN_H
+
+// INCLUDES FILES
+#include <ecom/ecom.h>
+#include <MVPbkContactAttributeManager.h>
+
+// FORWARD DECLARATIONS
+class CVPbkContactManager;
+class MVPbkContactOperation;
+class MVPbkContactFindObserver;
+class MVPbkContactAttribute;
+
+/**
+ * ECom plugin interface for contact attribute plugins.
+ */
+class CVPbkContactAttributePlugin : 
+        public CBase,
+        public MVPbkContactAttributeManager
+    {
+    public: // Construction and destruction
+        class TParam
+            {
+            public:
+                /**
+                 * Constructor.
+                 *
+                 * @param aContactManager  Reference to the contact manager.
+                 */
+                TParam(CVPbkContactManager& aContactManager);
+            public:
+                ///Ref: Contact manager
+                CVPbkContactManager& iContactManager;
+                ///Own: Spare for future extension
+                TAny* iSpare;
+            };
+        
+        /**
+         * Two-phase constructor for the plugin.
+         *
+         * @param aUid    Plugin attribute type.
+         * @param aParam  Plugin parameters, see
+         *                CVPbkContactAttributePlugin::TParam.
+         * @return Plugin instance.
+         */
+        static CVPbkContactAttributePlugin* NewL(TUid aUid, TParam& aParam);
+        ~CVPbkContactAttributePlugin();
+        
+    public: // Interface
+        /**
+         * @return The attirbute type of this plugin.
+         */
+        TUid AttributeType() const;
+        
+        /**
+         * Creates an operation object instance for listing contacts.
+         *
+         * @param aAttributeType  Attribute type for the operation.
+         * @param aObserver       Operation observer.
+         * @return  Operation object.
+         */
+        virtual MVPbkContactOperation* CreateListContactsOperationL(
+            TUid aAttributeType, 
+            MVPbkContactFindObserver& aObserver) =0;
+            
+        /**
+         * Creates an operation object instance for listing contacts.
+         *
+         * @param aAttributeType  Attribute for the operation.
+         * @param aObserver       Operation observer.
+         * @return  Operation object.
+         */
+        virtual MVPbkContactOperation* CreateListContactsOperationL(
+            const MVPbkContactAttribute& aAttribute, 
+            MVPbkContactFindObserver& aObserver) =0;
+        
+    public: // From MVPbkContactAttributeManager
+    
+        /**
+         * This functionality has been implemented in terms of
+         * HasFieldAttributeL so plugins don't need to implement
+         * it by their own.
+         *
+         * @param aAttr     Contact attributes to search for.
+         * @param aContact  Contact from which to look for a field.
+         * @return  Pointer to a field matcing the given attribute.
+         * @exception KErrNotSupported The default implementation always
+         *                             leaves with KErrNotSupported.
+         */
+        inline MVPbkStoreContactField* FindFieldWithAttributeL(
+            const MVPbkContactAttribute& aAttr,
+            MVPbkStoreContact& aContact) const;
+        
+    private: // Data
+        ///Own: destructor id key
+        TUid iDtorIDKey;
+        ///Own: attribute type
+        TUid iAttributeType;
+    };
+    
+inline CVPbkContactAttributePlugin::TParam::TParam(
+        CVPbkContactManager& aContactManager) :
+    iContactManager(aContactManager)
+    {
+    }
+    
+inline CVPbkContactAttributePlugin* CVPbkContactAttributePlugin::NewL(
+        TUid aUid, TParam& aParam)
+    {
+    TAny* ptr = NULL;
+    ptr = REComSession::CreateImplementationL(
+            aUid, 
+            _FOFF(CVPbkContactAttributePlugin, iDtorIDKey),
+            static_cast<TAny*>(&aParam));
+
+    CVPbkContactAttributePlugin* plugin = 
+        reinterpret_cast<CVPbkContactAttributePlugin*>(ptr);
+    if (plugin)
+        {
+        plugin->iAttributeType = aUid;
+        }
+
+    return plugin;
+    }
+    
+inline CVPbkContactAttributePlugin::~CVPbkContactAttributePlugin()
+    {
+    REComSession::DestroyedImplementation(iDtorIDKey);
+    }
+    
+inline TUid CVPbkContactAttributePlugin::AttributeType() const
+    {
+    return iAttributeType;
+    }
+
+inline MVPbkStoreContactField* 
+    CVPbkContactAttributePlugin::FindFieldWithAttributeL(
+            const MVPbkContactAttribute& /*aAttr*/,
+            MVPbkStoreContact& /*aContact*/) const
+    {
+    // This functionality has been implemented in terms of
+    // HasFieldAttributeL so plugins don't need to implement
+    // it by their own.
+    User::Leave( KErrNotSupported );
+    return NULL;
+    }
+#endif // CVPBKCONTACTATTRIBUTEPLUGIN_H
+
+// End of File