searchfw/plugins/notessearchplugin/inc/notessearcher.h
author Stefan Karlsson <stefan.karlsson@nokia.com>
Sun, 28 Mar 2010 16:36:17 +0100
branchCompilerCompatibility
changeset 15 21b79936b33a
parent 0 f979ecb2b13e
permissions -rw-r--r--
Fixed "extra qualification" syntax errors.

/*
* Copyright (c) 2006-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:   ECom search interface definition
*
*/




#ifndef      C_CNOTESSEARCHER_H
#define      C_CNOTESSEARCHER_H

//System Includes
#include <e32std.h>
#include <d32dbms.h>
#include <e32cmn.h> 
#include <badesca.h> 
 
//Search FW Common includes
#include <searchcontent.h>
#include <searchcontentsearcher.h>


//Forwared declarations
class CSearchCondition;
class CSearchResult;  
class CSearchTextSearcher;
class MSearchPluginObserver;
class CNotesSearchPluginUtils;

/**
 *  This class is the searcher class for the notes
 *
 *  This class searches the phonebook notes
 *
 *  @lib notessearchplugin.lib
 */

class CNotesSearcher : public CActive , 
                       public MSearchContentSearcher
	{

public: // Constructors and destructor
        /**
        * 
        * First phase construction
        * 
        * @return constructed CNotesSearchPlugin object.
        */
      	static CNotesSearcher*  NewL(const RArray<TUid>& aContentIdArray, 
                                         	  const CSearchCondition& aCondition, 
                                			  const TUid& aPluginId,
                                			  MSearchPluginObserver& aObserver );
      	
        /**
        * Destructor.
        * 
        */
        virtual ~CNotesSearcher();
        
        /**
        * Check if the entry exists in notes
        *
        */
        TBool CheckIfEntryExistsL (TInt aNoteKey);
        /**
        * Cleanup internal resource
        *
        */
        void  CleanUp();

        

        
public:// from MSearchContentSearcher interface 
    
		/**
		* Search FW calls this function when it no longer needs this searcher.
		*
		*/
		void Destroy();


		/**
		* Starts the search. Progress of the search is notified through aObserver. Notice that
		* this call must be asynchronous.
		*
		*/
		void SearchL( void);

		/**
		* Function returning ETrue when a search is ongoing.  EFalse otherwise.
		* 
		* @return ETrue when a search is ongoing.  EFalse otherwise.
		*/
		TBool IsSearching();

		/**
		* Cancels the ongoing search. This call must complete synchronously and no calls for
		* observers must be made after this call.
		*  
		*/
		void CancelSearch();

		/**
		* Gets the results got so far. A call to this function must flush the 
		* plugins internal buffer so that results returned by this call are not
		* given twice. 
		* This is called in case the plugin fails to provide results to the framework
		* through MSearchPlugInObserver in the time defined by the engine.
		*
		* @param aResults Results of the search process. Ownership transfers to caller.
		*/
		void GetResultsL( const RPointerArray<CSearchDocumentId>& aDocumentIdArray );

	
		/**
		* Gets the current search progress. Typically this is called by the framework 
		* in case the plugin fails to provide results through MSearchPlugInObserver in the 
		* time defined by the framework.
		*
		* @param aContentClassId The content class, whose search progress is requested. If NULL, the function should return the 
		*                        total search progress.
		* @param aCurrentDocument The index document that is currently being searched (from the set of documents belonging to given
		*                         content class).
		* @param aTotalDocuments The total count of documents to be searched (from the set of documents belonging to given
		*                         content class).
		*/         
		void GetSearchProgressL( TUid& aContentClassId, TInt& aCurrentDocument, TInt& aTotalDocuments );
		
		/**
        * Cancels the result retrieval process.
        *
        */
		void CancelResultsRetrieve();
		
protected: //from the base class CActive 
        
         /**
    * From CActive
	* Handles an active object's request completion event.
	*
	* The function is called by the active scheduler when a request
	* completion event occurs, i.e. after the active scheduler's
	* WaitForAnyRequest() function completes.
	*
	* Before calling this active object's RunL() function, the active scheduler 
	* has:
    * 	
	* 1. decided that this is the highest priority active object with
	*   a completed request
	*
    * 2. marked this active object's request as complete (i.e. the request is no 
	*   longer outstanding)
	*
	* RunL() runs under a trap harness in the active scheduler. If it leaves,
	* then the active scheduler calls RunError() to handle the leave.
	*
	* Note that once the active scheduler's Start() function has been called, 
	* all user code is run under one of the program's active object's RunL() or 
	* RunError() functions.
	*
	*/
    void RunL();
        
    /**
    * From CActive.
    *
    * Implements cancellation of an outstanding request.
    */
    void DoCancel();
        
    /**
	* From CActive 
	* If the RunL function leaves,
	* then the active scheduler calls RunError() to handle the leave.
	*
	*/
    TInt RunError( TInt aError );

        		
private:
    /**
    * Does some initialization for database
	*/  
    void    InitDbL();
        
	/**
    * Does the search of the note.  Called from RunL.  In one RunL call
    *  a limited number of note items are searched.
    *
    * @return	ETrue if more note items need to be searched. EFalse otherwise.
	*/
	TBool   DoActualSearchL();
		
    /**
    * from MSearchTextSearcherObserver
    * @param aKeywordCharPos keyword position     
    * 
    * @return void 	
	*/
    void HitL( TInt aKeywordCharPos ); 
        
    HBufC8* LaunchInfoL( const CSearchDocumentId& aDocumentID );
    /**
    * Gets the content and date by key value
   	*
   	* @param    aKey
   	* @param    aContentDes
   	* @param    aTime
   	* @return void 	
	*/
    void  GetContentAndDateByKeyL(const TInt& aKey,HBufC*& aContentDes,TTime& aTime);
        
private:

    /**
    * Constructor
    *
    *
    * @param aPluginId
    */
    CNotesSearcher( const TUid&  aPluginId); 
     
    /** 
    * 2nd phase constructor
    *
    * @param aContentIdArray
    * @param aCondition
    */
    void  ConstructL( const RArray<TUid>& aContentIdArray,
                      const CSearchCondition& aCondition,
                      MSearchPluginObserver& aObserver); 		
        
       
    
    RPointerArray<CSearchLightResult> iSearchLightResult;
    RPointerArray<CSearchResult> iHeavyResultsArray;        
        
protected:

        enum TNotepadColumnType
        {
        ENotepadKey = 1, // this must be 1 (DBMS/SQL restriction)
        ENotepadUpdateTime,
        ENotepadMemo,
        ENotepadColCountPlusOne // sentinel
        };
            
private: //Data members

     	/**
    * The notes plugin id
    */
	const TUid                      iNotesPluginId;
        
    
    /**
    * Represents the DB status
    */      
    TBool                           iSDbmsUp;
    
    /**
    * Represents a session with the DBMS server
    */  
    RDbs                            iDbSession;  
    
    /**
    * provides an interface for creating and opening a database identified by name and format.
    */  
    
    RDbNamedDatabase                iNamedDataBase; // 
    
    /**
    * Provides a view to a table. The view depends on the SQL query used for building the view.
    */  
    RDbView                         iDbView;        
    
    /**
    * Counter used when reporting the status of the search. 
    */
    TInt            iStatusItemCounter;
       
    /**
    * Total number of items to be searched, used when reporting the status 
    * of the search.Set to KErrUnknown when the total number of items 
    * is not known in advance..
    */
    TInt                             iTotalNumOfItems;
	    

	
	/**
    * The array containg the key word hit position
    * Own
    */  
	RArray<TInt> iKeyHitPos;
	    
	    
    /**
    * The plugin observer 
    */
    MSearchPluginObserver*          iObserver;
      
    /**
    * The  Text searcher 
    * Own
    */
    CSearchTextSearcher*             iTextSearcher; //own
	    

	/**
    * The notes content
    * Own
    */  
	HBufC16*                         iContent;

    /**
    * The date format,read from the resource file
    * Own
    */	
    HBufC16*  iDateFormat;
    };


#endif  //C_CNOTESSEARCHER_H