mds_plat/harvester_framework_api/inc/composerplugin.h
changeset 0 c53acadfccc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mds_plat/harvester_framework_api/inc/composerplugin.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2006-2009 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:  Composer Plug-in ECom interface
+*
+*/
+
+#ifndef __CCOMPOSERPLUGIN_H__
+#define __CCOMPOSERPLUGIN_H__
+
+#include <e32base.h>
+#include <ecom.h>
+#include <badesca.h>
+
+#include <mdesession.h>
+
+/** @var Uid for this interface */
+const TUid KCComposerPluginInterfaceUid = { 0x2000717E };
+
+ /**
+ * Composer Plug-in ECom interface definition. Composer plug-in implementation
+ * needs to inherit this class and implement the pure virtual methods which exist 
+ * in this interface.
+ *
+ * Example:
+ *
+ * class CMyVideoComposerPlugin: public CComposerPlugin
+ *     {
+ *     protected:
+ *         void SetObservers();    
+ *         void RemoveObservers();
+ * 
+ *         // Because CComposerPlugin inherits MMdEObjectObserver
+ *         void HandleObjectNotification(CMdESession& aSession, 
+ *				TObserverNotificationType aType,
+ *				const RArray<TItemId>& aObjectIdArray);
+ *     
+ *     private:
+ *         // Active object which does the actual binary writing
+ *         // so that this interface and its observers remain responsive
+ *         CMyVideoComposerAO* iVideoComposerAO;       
+ *     }
+ *
+ * void SetObservers()
+ *     {
+ *	   // We want to listen to changes in Video metadata objects
+ *     // and setup an observer for this  
+ *     CMdENamespaceDef& defaultNamespace = iSession->GetDefaultNamespaceDefL();
+ *     CMdEObjectDef& videoDef = 
+ *        defaultNamespace.GetObjectDefL( MdeConstants::Video::KVideoObject );
+ *     CMdELogicCondition* condition = CMdELogicCondition::NewL( ELogicConditionOperatorAnd );
+ *     condition->AddObjectConditionL( videoDef );
+ *       
+ *     // iSession is reference to CMdESession which is always set in CComposerPlugin::SetSession()
+ *     iSession->AddObjectObserverL( *this, condition, ENotifyModify, &defaultNamespace );
+ *     }
+ * 
+ * void RemoveObservers()
+ *     {
+ *     iSession->RemoveObjectObserverL( *this )
+ *     }
+ *
+ * void CComposerImagePlugin::HandleObjectNotification(CMdESession& aSession, 
+ *		TObserverNotificationType aType, const RArray<TItemId>& aObjectIdArray)
+ *     {
+ *     // We give ID-array of changed Video objects to our active object
+ *     // which adds then to a its internal queue and processes them one-by-one 
+ *     // with different RunL-calls so that we don't stuck the thread by composing
+ *     // for example 1000 binary files in a row.
+ *     iVideoComposerAO->AddToQueue( aObjectIdArray );
+ *     }
+ */
+class CComposerPlugin : public CBase, public MMdEObjectObserver
+    {
+    public:
+
+        /**
+         * Construction.
+         *
+         * @param aUid  Implementation UID which plug-in to invoke.
+         */
+        IMPORT_C static CComposerPlugin* NewL( const TUid& aUid );
+
+        /**
+         * Lists all available implementations which satisfy this given interface.
+         * 
+         * @param aImplInfoArray  Reference to a list which will be populated with 
+         *                        plug-in implementation details. 
+         */
+        IMPORT_C static void ListImplementationsL(RImplInfoPtrArray& aImplInfoArray);
+
+        /**
+         * Destructor.
+         */ 
+        IMPORT_C virtual ~CComposerPlugin();
+
+        /**
+         * Sets Mde session to be used.
+         * 
+         * @param aSession  Open MdE session to utilize in the Composer plug-in
+         */
+        IMPORT_C void SetSession( CMdESession& aSession );
+
+        /**
+         * Unsets Mde session.
+         */
+        IMPORT_C void RemoveSession();
+
+        /**
+         * Checks if composing is completed.
+         *
+         * @return  Whether composing is on-going
+         */
+        virtual TBool IsComposingComplete() = 0;
+
+    protected:
+    
+        /**
+         * Sets observers to be notified. Called by the interface itself when
+         * SetSession method is called from Harvester server side.
+         */
+        virtual void SetObservers() = 0;
+
+        /**
+         * Unsets observers. Called by the interface itself when
+         * RemoveSession method is called from Harvester server side.
+         */
+        virtual void RemoveObservers() = 0;
+
+    protected:
+
+        /* Pointer to Mde session used by the plugin */
+    CMdESession* iSession;
+
+    private:
+
+        /* Identification on cleanup */
+        TUid iDtor_ID_Key;
+    };
+
+#endif // __CCOMPOSERPLUGIN_H__