mds_plat/harvester_framework_api/inc/harvesterplugin.h
changeset 0 c53acadfccc6
child 1 acef663c1218
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mds_plat/harvester_framework_api/inc/harvesterplugin.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* 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:  Definition of the Harvester plug-in ECom interface.*
+*/
+
+#ifndef __CHARVESTERPLUGIN_H__
+#define __CHARVESTERPLUGIN_H__
+
+#include <e32base.h>
+#include <ecom.h>
+
+// forward declarations
+class CMdESession;
+class CHarvesterBlacklist;
+class CHarvesterData;
+class CMdEPropertyDef;
+
+// Uid for this interface
+const TUid KCHarvesterPluginInterfaceUid = { 0x200009F8 };
+
+struct THarvestResult
+    {
+    HBufC16* iUri;   // URI of the file/item
+    TInt iErrorCode; // Harvesting error code
+    };
+
+/**
+ * Harvester Plug-in ECom interface definition. Harvester plug-in implementation
+ * needs to inherit this class and implement the pure virtual method (HarvestL) which exist 
+ * in this interface.
+ *
+ * Example:
+ * 
+ * class CMyHarvesterPlugin:  public CHarvesterPlugin
+ *     {
+ *     public:
+ *
+ *         // This method should also be overwritten in the plug-in
+ *         void GetObjectType( const TDesC& aUri, TDes& aObjectType );
+ *
+ *         void HarvestL( CHarvesterData* aHD );
+ *     }
+ *
+ * void GetObjectType( const TDesC& aUri, TDes& aObjectType )
+ *     {
+ *      // Idea in this method is that it MUST return one of the object types
+ *	    // supported by the MdE DB - for example "Image", "Video" or "Audio".
+ * 	    // If plug-in supports only one type of objects then it can just return
+ * 	    // always that like:  
+ * 	    // TPtrC ptrImage( KImage );
+ * 	    // aObjectType.Copy( KImage ); return;
+ * 	    //
+ * 	    // However if multiple MdE object types are supported then file content
+ * 	    // needs to be checked for example from file MIME-type like here:
+ * 	  
+ *	   	TRAPD( err, content = CContent::NewL( aUri ) );
+ *	    if (err == KErrNone) 
+ *		    {
+ *		    err = content->GetStringAttribute( EMimeType, mime );
+ *		    delete content;
+ *		    }
+ *
+ *	    TPtrC ptrImage( KImage );
+ *	    
+ *	    // MdsUtils::Find tries to find word "image" from the MIME-type
+ *      // so that we know the file is an image
+ *		if( MdsUtils::Find( mime, ptrImage ) != KErrNotFound )
+ *			{
+ *			WRITELOG1( "CHarvesterOMADRMPlugin::GetObjectType - mimetype %S. Object type changed to Image", &mime );
+ *			aObjectType.Copy( KImage );
+ *			return;
+ *			}
+ *		
+ *		TPtrC ptrVideo( KVideo );
+ *		if( MdsUtils::Find( mime, ptrVideo ) != KErrNotFound )
+ *			{
+ *			WRITELOG1( "CHarvesterOMADRMPlugin::GetObjectType - mimetype %S. Object type changed to Video", &mime );
+ *			aObjectType.Copy( KVideo );
+ *			return;
+ *			}
+ *     }
+ *
+ * void HarvestL( CHarvesterData* aHD )
+ *     {
+ *     CMdEObject& mdeObject = aHD->MdeObject();
+ *      
+ *     CMdeObjectWrapper* wrapper = CMdeObjectWrapper::NewL();
+ *     }	 
+ */
+class CHarvesterPlugin : public CActive
+    {
+public:
+	    
+	enum THarvesterState
+	    {
+	    EHarvesterIdle = 0,   // No harvesting requests to process
+	    EHarvesterGathering,  // Harvesting a file
+	    };
+	
+	/** 
+	 * Construction 
+	 */
+	IMPORT_C static CHarvesterPlugin* 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 - virtual and class not intended
+	 * for derivation, so not exported.
+	 */
+	IMPORT_C virtual ~CHarvesterPlugin();
+	
+	/**
+	 *  Method sets the Harvesting queue to the plug-in.
+	 * 
+	 * @param aQueue  Queue which contains harvesting requests.
+	 */
+	IMPORT_C virtual void SetQueue( RPointerArray<CHarvesterData>& aQueue );
+	
+	/** 
+	 * Method which starts the harvesting of the file. Called by the 
+	 * harvesting framework from CHarvesterPluginFactory::HarvestL.
+	 */
+	IMPORT_C virtual void StartHarvest();
+	
+	/** 
+	 * Method which returns the MdE object type to harvesting FW when passing the file
+	 * name to this method (aURI). The harvesting plug-in should overwrite method. In the
+	 * case there are more than one plug-ins which support same file extension atleast
+	 * one of these plug-ins needs to read the binary file for determining the valid MdE
+	 * object type for the file.
+	 *
+	 * @param aUri         URI of the file/item.
+	 * @param aObjectType  Reference to an object type which will returned to the FW 
+	 *                     from the plug-in
+	 */
+	IMPORT_C virtual void GetObjectType( const TDesC& aUri, TDes& aObjectType );
+	
+	/** 
+	 * Method for setting the blacklisting functionality for the plug-in.
+	 * 
+	 * @param aBlacklist  Reference to blacklisting component.
+	 */
+	IMPORT_C virtual void SetBlacklist( CHarvesterBlacklist& aBlacklist );
+
+protected:
+    
+	/** 
+	 * The method which does the actual harvesting. Harvesting plug-in MUST
+	 * implelemt this method.
+	 * 
+	 * @param aHD  Pointer to harvesting data/request.
+	 */
+	IMPORT_C virtual void HarvestL( CHarvesterData* aHD ) = 0;
+	
+	/** 
+	 * Active object RunL implementation.
+	 */
+	IMPORT_C virtual void RunL();
+	  
+	/** 
+	 * Active object DoCancel implementation.
+	 */
+	IMPORT_C virtual void DoCancel();
+	  
+	/** 
+	 * Active object RunError implementation.
+	 */
+	IMPORT_C virtual TInt RunError( TInt aError );
+	
+	 /** 
+	  * Construction of the interface class
+	  */
+	 void ConstructL();
+	
+	 /** 
+	  * Constuctor 
+	  */
+	 IMPORT_C CHarvesterPlugin();
+         
+private:
+    
+	/** 
+	 * Sets next state for the active object
+	 *
+	 * @param aState  Next state to execute with RunL.
+	 */
+	void SetNextRequest( THarvesterState aState );
+		
+	/** 
+	 * Method sets some default properties to the metadata object
+	 * 
+	 * @param aData  Pointer to harvesting data/request.
+	 */
+	void SetDefaultPropertiesL(CHarvesterData& aData);
+	
+protected:
+	
+	/** 
+	 * Handle to File server session.
+	 */
+	RFs iFs;
+	
+	/**
+	 *  State of this active object.
+	*/
+	THarvesterState iState;
+	     
+	/** 
+	 * Pointer to Harvesting request queue.
+	 */
+	RPointerArray<CHarvesterData>* iQueue;
+	
+	/** 
+	 * Pointer to blacklisting functionality
+	 */
+	CHarvesterBlacklist* iBlacklist;
+	
+private:
+	
+	/* Identification on cleanup */ 
+	TUid iDtor_ID_Key;
+
+	CMdEPropertyDef* iOriginPropertyDef;
+	CMdEPropertyDef* iTitlePropertyDef;
+    };
+
+#endif // __CHARVESTERPLUGIN_H__