harvester/harvesterserver/inc/cindexingmanager.h
changeset 0 671dee74050a
child 1 6f2c1c46032b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/harvesterserver/inc/cindexingmanager.h	Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#ifndef CINDEXINGMANAGER_H
+#define CINDEXINGMANAGER_H
+
+#include <CIndexingPlugin.h>
+#include <MIndexingPluginObserver.h>
+#include <RSearchServerSession.h>
+
+const TInt KFilePluginBaseAppClassMaxLen = 64;
+//Forward Declaration
+class CBlacklistMgr;
+
+class CIndexingManager : public CActive, public MIndexingService
+	{
+public:	
+	static CIndexingManager* NewL();
+	virtual ~CIndexingManager();
+
+protected:
+	/*
+	 * From CActive
+	 */
+	void DoCancel();
+	void RunL();
+
+protected:	
+	/**
+	 * derived from MIndexingService
+	 * A callback from CIndexingPlugin, called when it wants to schedule a harvesting event
+	 *
+     * @param aQualifiedBaseAppClass database to harvest
+	 * @param aMedia the media to be harvested
+	 * @param aForceReharvest force the aQualifiedBaseAppClass to be re-harvested.
+	 */
+	void AddHarvestingQueue(CIndexingPlugin* aPlugin, const TDesC& aQualifiedBaseAppClass, TBool aForceReharvest = EFalse);
+
+	/**
+	 * 
+	 * derived from MIndexingService
+	 * A callback from CIndexingPlugin, called when it wants to unschedule a harvesting event
+	 *
+     * @param aQualifiedBaseAppClass database to harvest
+	 * @param aMedia the media to be harvested
+	 */
+	void RemoveHarvestingQueue(CIndexingPlugin* aPlugin, const TDesC& aQualifiedBaseAppClass);
+
+	/**
+	 * derived from MIndexingService
+	 * A callback from CIndexingPlugin, called when it has ended harvesting
+	 * 
+	 * @param aPlugin the plugin object that calls this function 
+     * @param aQualifiedBaseAppClass database to harvest
+	 * @param aError KErrNone if harvesting completed successfully otherwise systemwide errorcodes
+	 */
+	void HarvestingCompleted(CIndexingPlugin* aPlugin, const TDesC& aQualifiedBaseAppClass, TInt aError);
+						
+private:
+
+	/**
+	 * LoadPluginsL loads all plugins
+	 */
+	void LoadPluginsL();
+
+	/**
+	 * StartPlugins starts all loaded plugins 
+	 */
+	void StartPlugins();
+
+	/**
+	 * Loading the state of the Plugins
+	 */
+	TInt Internalize();
+	/**
+     * saving the state of the Plugins
+     */
+	TInt Externalize();
+	/**
+     * Loading the state of the Plugins
+     */
+	void LoadL();
+	/**
+     * saving the state of the Plugins
+     */
+	void SaveL();
+	
+private:
+	CIndexingManager();
+	void ConstructL();
+
+private:
+	enum THarvesterStatus
+		{
+		EHarvesterStatusWaiting = 0, // A Plugin has requested this item to be harvested
+		EHarvesterStatusHibernate, // A plugin has requested for this item not to be harvested
+		EHarvesterStatusRunning // This item is being harvested
+		};
+
+	/*
+	 * Class to hold the details of a harvester plugin
+	 */
+	class THarvesterRecord
+		{
+	public:
+	    /*
+	     * Default constructor
+	     */
+		THarvesterRecord()
+			{
+			iPlugin = NULL;
+			iError = KErrNone;
+			iStatus = EHarvesterStatusHibernate;
+			iLastStart = TTime(0);
+			iLastComplete = TTime(0);
+			}
+		THarvesterRecord(CIndexingPlugin* aPlugin, const TDesC& aQualifiedBaseAppClass)
+			{
+			iPlugin = aPlugin;
+			iQualifiedBaseAppClass = aQualifiedBaseAppClass;
+			iError = KErrNone;
+			iStatus = EHarvesterStatusWaiting;
+			iLastStart = TTime(0); // Never started
+			iLastComplete = TTime(0); // Never complete
+			}
+	public:
+		/*
+		 * Pointer to hold a harvester plugin
+		 */
+		CIndexingPlugin* iPlugin;
+		/*
+         * Variable to hold the error code of plugin harvesting process
+         */
+		TInt iError;
+		/*
+         * status[waiting/hibernate/running] a harvester plugin
+         */
+		THarvesterStatus iStatus;
+		/*
+		 * Time before starting the harvesting of a plugin
+		 */
+		TTime iLastStart;
+		/*
+		 * Time after completing the harvesting of a plugin
+		 */
+		TTime iLastComplete;
+		/*
+         * Base app class of a harvester plugin
+         */
+		TBuf<KFilePluginBaseAppClassMaxLen> iQualifiedBaseAppClass;
+		};
+	
+private:
+	enum TState
+		{
+		EStateNone = 0, // Initial state
+		EStateCancelling, // Indexing manager is cancelled
+		EStateRunning // Indexing manager is running
+		};
+	
+private:	
+	/* List of plugins currently loaded */
+	RPointerArray<CIndexingPlugin> iPluginArray;
+	
+	/* List of harvester events */
+	RArray<THarvesterRecord> iHarvesterArray;
+	TBool iHarvesterArrayChanged;
+	
+	/* Timer event */
+	RTimer iTimer;
+	
+	/* Manager state */
+	TState iState;
+
+	/* Search Server session is passed to harvester plugins */
+	RSearchServerSession iSearchSession;
+	
+	/* Path to the manager state */
+	TFileName iManagerFilePath;
+	
+	/* File server connection */ 
+	RFs iFs;
+	
+	/* Time of previous RunL call */
+	TTime iPreviousRun;
+	/* Database to maintain blacklisted plugins.Owned */
+	CBlacklistMgr* iBlacklistMgr;
+	};
+
+#endif // CINDEXINGMANAGER_H