searchsrv_plat/cpix_search_api/inc/cpixsearcher.h
author hgs
Mon, 26 Jul 2010 12:27:31 +0530
changeset 13 fcb2a58c181b
child 14 8bd192d47aaa
permissions -rw-r--r--
201029
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Qt search APIs
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef _CPIXSEARCHER_H
hgs
parents:
diff changeset
    19
#define _CPIXSEARCHER_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
//Uncomment the following line to enable performance measurements
hgs
parents:
diff changeset
    22
//#define OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#ifdef OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include <qdatetime.h>
hgs
parents:
diff changeset
    27
#include <qdebug.h>
hgs
parents:
diff changeset
    28
#define PERF_SEARCH_START_TIMER  searchTimer.start();
hgs
parents:
diff changeset
    29
#define PERF_SEARCH_RESTART_TIMER searchTimer.restart();
hgs
parents:
diff changeset
    30
#define PERF_SEARCH_ENDLOG qDebug() << "Search QT API took: " << searchTimer.elapsed() << "msec";
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
#define PERF_GETDOC_START_TIMER  getDocumentTimer.start();
hgs
parents:
diff changeset
    33
#define PERF_GETDOC_RESTART_TIMER getDocumentTimer.restart();
hgs
parents:
diff changeset
    34
#define PERF_GETDOC_ENDLOG qDebug() << "Search QT API took: " << getDocumentTimer.elapsed() << "msec";
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
#define PERF_TIME_NOW(message) qDebug() << "Search QT API: " << QString(message) << ": " << QTime::currentTime().toString("hh:mm:ss.zzz");
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
#else 
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
#define PERF_SEARCH_START_TIMER  
hgs
parents:
diff changeset
    41
#define PERF_SEARCH_RESTART_TIMER 
hgs
parents:
diff changeset
    42
#define PERF_SEARCH_ENDLOG 
hgs
parents:
diff changeset
    43
#define PERF_GETDOC_START_TIMER
hgs
parents:
diff changeset
    44
#define PERF_GETDOC_RESTART_TIMER
hgs
parents:
diff changeset
    45
#define PERF_GETDOC_ENDLOG
hgs
parents:
diff changeset
    46
#define PERF_TIME_NOW(message)
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
#endif
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/**
hgs
parents:
diff changeset
    51
 * @file
hgs
parents:
diff changeset
    52
 * @ingroup Search Client API fpr Qt Clients
hgs
parents:
diff changeset
    53
 * @brief Contains CCPixSearcher used for searching
hgs
parents:
diff changeset
    54
 */
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
#ifdef BUILD_DLL
hgs
parents:
diff changeset
    57
#define DLL_EXPORT Q_DECL_EXPORT
hgs
parents:
diff changeset
    58
#else
hgs
parents:
diff changeset
    59
#define DLL_EXPORT Q_DECL_IMPORT
hgs
parents:
diff changeset
    60
#endif
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
#include <QObject>
hgs
parents:
diff changeset
    63
#include <cpixcommon.h>
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
//forward declarations
hgs
parents:
diff changeset
    66
class CpixDocument;
hgs
parents:
diff changeset
    67
class CpixSearcherPrivate;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// CLASS DECLARATION
hgs
parents:
diff changeset
    70
/**
hgs
parents:
diff changeset
    71
 * @brief Used for searching.
hgs
parents:
diff changeset
    72
 * @ingroup Qt Search Client API
hgs
parents:
diff changeset
    73
 * Link against: cpixsearch.lib 
hgs
parents:
diff changeset
    74
 * 
hgs
parents:
diff changeset
    75
 * An instance of CpixSearcher is used to commit search operations.
hgs
parents:
diff changeset
    76
 * 
hgs
parents:
diff changeset
    77
 * Example code:
hgs
parents:
diff changeset
    78
 * 
hgs
parents:
diff changeset
    79
 * Usecase 1: Sync calls. 
hgs
parents:
diff changeset
    80
 * \code
hgs
parents:
diff changeset
    81
 * CpixSearcher* searcher = CpixSearcher::newInstance("root");
hgs
parents:
diff changeset
    82
 * if(searcher){
hgs
parents:
diff changeset
    83
 *      int hitCount = searcher->search("search for me");
hgs
parents:
diff changeset
    84
 *      for(int i=0; i<hitCount; i++) {
hgs
parents:
diff changeset
    85
 *      CpixDocument* doc = document(0);
hgs
parents:
diff changeset
    86
 *      // do something with doc.
hgs
parents:
diff changeset
    87
 *      delete doc;
hgs
parents:
diff changeset
    88
 *      }
hgs
parents:
diff changeset
    89
 *  }
hgs
parents:
diff changeset
    90
 * \endcode
hgs
parents:
diff changeset
    91
 * 
hgs
parents:
diff changeset
    92
 * Usecase 2: Sync calls with explicit SetDatabase().
hgs
parents:
diff changeset
    93
 * \code
hgs
parents:
diff changeset
    94
 * CpixSearcher* searcher = CpixSearcher::newInstance();
hgs
parents:
diff changeset
    95
 * searcher->SetDatabase("root");
hgs
parents:
diff changeset
    96
 * int hitCount = searcher->search("search for me");
hgs
parents:
diff changeset
    97
 * for(int i=0; i<hitCount; i++) {
hgs
parents:
diff changeset
    98
 *      try{
hgs
parents:
diff changeset
    99
 *          CpixDocument* doc = document(i);
hgs
parents:
diff changeset
   100
 *          // do something with doc.
hgs
parents:
diff changeset
   101
 *          delete doc;
hgs
parents:
diff changeset
   102
 *      catch(...){
hgs
parents:
diff changeset
   103
 *      //Do Cleanup
hgs
parents:
diff changeset
   104
 *      }
hgs
parents:
diff changeset
   105
 * }
hgs
parents:
diff changeset
   106
 * \endcode
hgs
parents:
diff changeset
   107
 * 
hgs
parents:
diff changeset
   108
 * Usecase 3: Async Calls
hgs
parents:
diff changeset
   109
 * \code
hgs
parents:
diff changeset
   110
 * 
hgs
parents:
diff changeset
   111
 * iCurrentDocumentCount = 0;
hgs
parents:
diff changeset
   112
 * 
hgs
parents:
diff changeset
   113
 * CpixSearcher* searcher = CpixSearcher::newInstance("root");
hgs
parents:
diff changeset
   114
 * connect(searcher, SIGNAL(handleSearchResults(int,int)), this, SLOT(ClientHandleSearchCompleteSlot(int,int)) );
hgs
parents:
diff changeset
   115
 * connect(searcher, SIGNAL(handleDocument(int,CpixDocument*)), this, SLOT(ClientHandleGetDocumentCompleteSlot(int,CpixDocument*)) );
hgs
parents:
diff changeset
   116
 * int hitCount = searcher->search("search for me");
hgs
parents:
diff changeset
   117
 * GetDocumentAsync( iCurrentDocumentCount++ );
hgs
parents:
diff changeset
   118
 * 
hgs
parents:
diff changeset
   119
 * ClientClass::ClientHandleGetDocumentCompleteSlot(int aError, CpixDocument* aDocument){
hgs
parents:
diff changeset
   120
 *  if( KErrNone != aError ){
hgs
parents:
diff changeset
   121
 *  //do something with aDocument
hgs
parents:
diff changeset
   122
 *  }
hgs
parents:
diff changeset
   123
 *  documentAsync( iCurrentDocumentCount++ ); //Now get the next document.
hgs
parents:
diff changeset
   124
 * }
hgs
parents:
diff changeset
   125
 * 
hgs
parents:
diff changeset
   126
 * \endcode
hgs
parents:
diff changeset
   127
 * 
hgs
parents:
diff changeset
   128
 */
hgs
parents:
diff changeset
   129
class DLL_EXPORT CpixSearcher: public QObject
hgs
parents:
diff changeset
   130
    {
hgs
parents:
diff changeset
   131
    Q_OBJECT
hgs
parents:
diff changeset
   132
public:
hgs
parents:
diff changeset
   133
    /**
hgs
parents:
diff changeset
   134
       * Constructor.
hgs
parents:
diff changeset
   135
       * Creates a CpixSearcher object and return a pointer to the created object.
hgs
parents:
diff changeset
   136
       * @return A pointer to the created instance of CCPixSearcher.
hgs
parents:
diff changeset
   137
       * 
hgs
parents:
diff changeset
   138
       * @note After using this constructor, the client has to mandatorily call 
hgs
parents:
diff changeset
   139
       * SetDatabase() before invoking any search.
hgs
parents:
diff changeset
   140
       */
hgs
parents:
diff changeset
   141
    static CpixSearcher* newInstance();
hgs
parents:
diff changeset
   142
    
hgs
parents:
diff changeset
   143
    /**
hgs
parents:
diff changeset
   144
     * Overloaded constructor
hgs
parents:
diff changeset
   145
     * Creates a CCPixSearcher object and return a pointer to the created object.
hgs
parents:
diff changeset
   146
     * If this constructor is used, the client can directly invoke Search without
hgs
parents:
diff changeset
   147
     * the need to call SetDatabase.
hgs
parents:
diff changeset
   148
     * @param aBaseAppClass The baseAppClass on which to invoke searches on.
hgs
parents:
diff changeset
   149
     * @param aDefaultSearchField Default field where the keywords are searched from.
hgs
parents:
diff changeset
   150
     * @return A pointer to the created instance of CCPixSearcher.
hgs
parents:
diff changeset
   151
     */
hgs
parents:
diff changeset
   152
    static CpixSearcher* newInstance( QString aBaseAppClass, QString aDefaultSearchField=NULL );
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    /**
hgs
parents:
diff changeset
   155
     * Destructor. 
hgs
parents:
diff changeset
   156
     */
hgs
parents:
diff changeset
   157
    ~CpixSearcher();
hgs
parents:
diff changeset
   158
    
hgs
parents:
diff changeset
   159
    /**
hgs
parents:
diff changeset
   160
     * Synchronously set (or change the database, if already set) on which to invoke subsequent searches.
hgs
parents:
diff changeset
   161
     * @param aBaseAppClass baseAppClass whose corresponding database is to be opened.
hgs
parents:
diff changeset
   162
     */
hgs
parents:
diff changeset
   163
    void setDatabase(QString aBaseAppClass) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    /**
hgs
parents:
diff changeset
   166
     * Asynchronously set (or change the database, if already set) on which to invoke subsequent searches.
hgs
parents:
diff changeset
   167
     * @param aBaseAppClass baseAppClass whose corresponding database is to be opened.
hgs
parents:
diff changeset
   168
     *
hgs
parents:
diff changeset
   169
     * @note Client is notified on completion of this call via HandleDatabaseSet signal.
hgs
parents:
diff changeset
   170
     */
hgs
parents:
diff changeset
   171
    void setDatabaseAsync(QString aBaseAppClass) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    /**
hgs
parents:
diff changeset
   174
     * Syncronously search for aSearchString.
hgs
parents:
diff changeset
   175
     * @param aSearchString keywords to be searched for.
hgs
parents:
diff changeset
   176
     * @param aDefaultSearchField Default field where the keywords are searched from.
hgs
parents:
diff changeset
   177
     * @return Estimated number of documents containing aSearchString.
hgs
parents:
diff changeset
   178
     */
hgs
parents:
diff changeset
   179
    int search(QString aSearchString, QString aDefaultSearchField=NULL) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
    /**
hgs
parents:
diff changeset
   182
     * Asyncronously search for aSearchString.
hgs
parents:
diff changeset
   183
     * @param aSearchString keywords to be searched for.
hgs
parents:
diff changeset
   184
     * @param aDefaultSearchField Default field where the keywords are searched from.
hgs
parents:
diff changeset
   185
     * @return Estimated number of documents containing aSearchString.
hgs
parents:
diff changeset
   186
     *
hgs
parents:
diff changeset
   187
     * @note Client is notified on completion of this call via HandleSearchResults signal.
hgs
parents:
diff changeset
   188
     */
hgs
parents:
diff changeset
   189
    void searchAsync(QString aSearchString, QString aDefaultSearchField=NULL) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
    /**
hgs
parents:
diff changeset
   192
     * Synchronously get the document with index aIndex.
hgs
parents:
diff changeset
   193
     * @param aIndex Index of document to be retrieved
hgs
parents:
diff changeset
   194
     * @return A pointer to CpixDocument that has been retrieved. Null on error.
hgs
parents:
diff changeset
   195
     *
hgs
parents:
diff changeset
   196
     * @note This should be called only after the synchronous search call has returned
hgs
parents:
diff changeset
   197
     *      and aIndex should be between 0 and estimated count returned by Search().
hgs
parents:
diff changeset
   198
     */     
hgs
parents:
diff changeset
   199
    CpixDocument* document(int aIndex) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
    /**
hgs
parents:
diff changeset
   202
     * Asynchronously get the document with index aIndex.
hgs
parents:
diff changeset
   203
     * @param aIndex Index of document to be retrieved
hgs
parents:
diff changeset
   204
     * @return A pointer to CpixDocument that has been retrieved. Null on error.
hgs
parents:
diff changeset
   205
     *
hgs
parents:
diff changeset
   206
     * @note This should be called only after the synchronous search call has returned
hgs
parents:
diff changeset
   207
     *      and aIndex should be between 0 and estimated count returned by Search().
hgs
parents:
diff changeset
   208
     */     
hgs
parents:
diff changeset
   209
    void documentAsync(int aIndex) THROWS_EXCEPTION;
hgs
parents:
diff changeset
   210
    
hgs
parents:
diff changeset
   211
    /**
hgs
parents:
diff changeset
   212
     * Cancels any outstanding searches.
hgs
parents:
diff changeset
   213
     */
hgs
parents:
diff changeset
   214
    void cancelSearch();
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
signals:
hgs
parents:
diff changeset
   217
    /**
hgs
parents:
diff changeset
   218
     * Notify completion of SetDatabaseAsyc
hgs
parents:
diff changeset
   219
     * @param aError Completion (error) code of SetDatabaseAsync
hgs
parents:
diff changeset
   220
     */
hgs
parents:
diff changeset
   221
    void handleDatabaseSet(int aError);
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    /**
hgs
parents:
diff changeset
   224
     * Notify completion of SearchAsyc
hgs
parents:
diff changeset
   225
     * @param aError Completion (error) code of SearchAsyc
hgs
parents:
diff changeset
   226
     * @param aEstimatedResultCount Estimated number of documents found after SearchAsync
hgs
parents:
diff changeset
   227
     */     
hgs
parents:
diff changeset
   228
    void handleSearchResults(int aError, int aEstimatedResultCount);
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    /**
hgs
parents:
diff changeset
   231
     * Notify completion of GetDatabaseAsyc
hgs
parents:
diff changeset
   232
     * @param aError Completion (error) code of GetDatabaseAsyc
hgs
parents:
diff changeset
   233
     * @param aDocument The requested document.
hgs
parents:
diff changeset
   234
     */     
hgs
parents:
diff changeset
   235
    void handleDocument(int aError, CpixDocument* aDocument);
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
private:
hgs
parents:
diff changeset
   238
    /**
hgs
parents:
diff changeset
   239
       * Defaul constructor.
hgs
parents:
diff changeset
   240
       * Creates a CpixSearcher object and return a pointer to the created object.
hgs
parents:
diff changeset
   241
       * @return A pointer to the created instance of CCPixSearcher.
hgs
parents:
diff changeset
   242
       */
hgs
parents:
diff changeset
   243
    CpixSearcher();
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
    CpixSearcherPrivate* const iPvtImpl;
hgs
parents:
diff changeset
   246
    Q_DECLARE_PRIVATE_D( iPvtImpl, CpixSearcher )
hgs
parents:
diff changeset
   247
    
hgs
parents:
diff changeset
   248
#ifdef OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
   249
    QTime searchTimer; 
hgs
parents:
diff changeset
   250
    QTime getDocumentTimer;
hgs
parents:
diff changeset
   251
#endif
hgs
parents:
diff changeset
   252
    };
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
#endif //_CPIXSEARCHER_H