emailservices/emailstore/message_store/server/inc/ContainerStoreSearchHandler.h
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/message_store/server/inc/ContainerStoreSearchHandler.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 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:  Container store search handler.
+*
+*/
+
+#ifndef CONTAINER_STORE_SEARCH_HANDLER_H_
+#define CONTAINER_STORE_SEARCH_HANDLER_H_
+
+#include "ContainerStore.h"
+
+class CContainerStoreSearchResultTable;
+class CContainerStoreSortingTable;
+
+/** The interface to be implemented by asynchronous search clients. */  
+class MContainerStoreSearchClient
+    {
+    public:
+
+        // ==============
+        // PUBLIC METHODS
+        // ==============
+        
+        virtual void MatchFound( TContainerId aMsgId, TContainerId aFolderId, const TDesC8& aPropertyBuf ) = 0;
+    
+        virtual void SearchComplete( TInt aStatus ) = 0;
+        
+    }; // end class MSearchClient
+    
+/** The class represents an asynchronous search operation. */   
+class CContainerStoreSearchHandler : private CActive
+    {
+    public:
+    
+        // ==============
+        // PUBLIC METHODS
+        // ==============
+        
+        virtual ~CContainerStoreSearchHandler();
+        
+        void StartL();
+        
+        TBool IsSameSearchCriteriaL( RPointerArray<HBufC>& aSearchStrings );
+        
+        void RestartL( TMsgStoreSearchCmdParams& aCmdParam, 
+                       RArray<TContainerId>&     aFolderIds, 
+                       RPointerArray<HBufC8>&    aPropertyNames );
+        
+        void CancelSearch() { Cancel(); }
+        
+        TBool IsSearchInProgress() { return IsActive(); }
+        
+    private:
+
+        // ===============
+        // PRIVATE METHODS
+        // ===============
+        
+        friend class CContainerStore;
+        
+        CContainerStoreSearchHandler( CContainerStore&                  aContainerStore,
+                                      CContainerStoreContentManager&    aContentManager, 
+                                      CContainerStoreSearchResultTable& aSearchResultTable,
+                                      CContainerStoreSortingTable&      aSortingTable,
+                                      TContainerId                      aType, 
+                                      MContainerStoreSearchClient&      aClient,
+                                      TInt                              aPriority );
+        
+        void ConstructL( RPointerArray<HBufC>&     aSearchString,
+                         TMsgStoreSearchCmdParams& aCmdParam,
+                         RArray<TContainerId>&     aFolderIds,
+                         RPointerArray<HBufC8>&    aPropertyNames );
+            
+        void InitializeL( TMsgStoreSearchCmdParams& aCmdParams, 
+                          RArray<TContainerId>&     aFolderIds, 
+                          RPointerArray<HBufC8>&    aPropertyNames );
+        
+        void DoNextSearchL();
+        
+        TBool SortNextFolderL();
+        
+        TBool SearchL( TContainerId aMessageId );
+        
+        void CreateSearchPatternL( RPointerArray<HBufC>& aOriginalSearchString, RPointerArray<HBufC>& aSearchPatterns );
+        
+        void TPtrC8ToRBuf16L( const TPtrC8& aPtr8, RBuf& aBuf ) const;
+        
+        // inherited from CActive
+        void RunL();
+        void DoCancel();
+
+        // ==================
+        // PRIVATE ATTRIBUTES
+        // ==================
+            
+        CContainerStore&                  iContainerStore;
+        CContainerStoreContentManager&    iContentManager; 
+        CContainerStoreSearchResultTable& iSearchResultTable;
+        CContainerStoreSortingTable&      iSortingTable;
+        MContainerStoreSearchClient&      iClient;
+        TContainerId                      iParentId;
+        TContainerId                      iType;
+        TMsgStoreSearchCmdParams          iSearchParams;
+        RArray<TContainerId>              iFolderIds;
+        RPointerArray<HBufC8>             iPropertyNames;
+        RPointerArray<HBufC>              iSearchStrings;
+        //RArray<TContainerId>              iSearchIds;
+        
+        // Keep the search buffer around for the duration of the search, to avoid a lot of
+        // large allocates/deallocates.
+        RBuf8                             iSearchBuffer;
+        
+        TInt                              iCurFolderIdIndex;
+        CMsgStoreSortResultRowSet*        iSortResultSet;
+        RBuf8                             iPropertyBuf;
+        TBool                             iIsNewSearch;
+        
+        __LOG_DECLARATION
+        
+    }; // end CContainerStoreSearchHandler
+
+
+
+#endif /*CONTAINER_STORE_SEARCH_HANDLER_H_*/