Revision: 201033
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 21:37:32 +0300
changeset 18 3e1f76dd2722
parent 15 cf5c74390b98
child 21 2c484ac32ef0
Revision: 201033 Kit: 201035
harvester/harvesterserver/src/ccontentinfodb.cpp
qcpix/src/platform/s60/inc/cpixdocumentprivate.h
qcpix/src/platform/s60/src/cpixutils.cpp
rom/cpix_mw.iby
searchengine/cpix/cpix/inc/public/appclass-hierarchy.txt
searchengine/cpix/cpix/src/prefixqueryparser.cpp
searchengine/oss/cl/clucene/src/clucene/analysis/standard/standardtokenizer.cpp
searchengine/oss/cl/clucene/src/clucene/search/hits.cpp
searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.cpp
searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.h
searchengine/oss/cl/clucene/src/clucene/search/multisearcher.cpp
searchengine/oss/cl/clucene/src/clucene/search/multisearcher.h
searchengine/oss/cl/clucene/src/clucene/search/searchheader.h
searcher/searchclient/bwins/cpixsearchclientu.def
searcher/searchclient/eabi/cpixsearchclientu.def
searcher/searchclient/group/searchclient.mmp
searcher/searchclient/src/ccpixsearcher.cpp
searcher/searchclient/src/csearchdocument.cpp
searcher/searchclient/src/rsearchserversession.cpp
searcher/searchclient/traces/CCPixSearcherTraces.h
searcher/searchclient/traces/RSearchServerSessionTraces.h
searcher/searchclient/traces/fixed_id.definitions
searcher/searchserver/group/searchserver.mmp
searcher/searchserver/inc/CCPixAbstractSearcher.h
searcher/searchserver/src/CCPixAbstractSearcher.cpp
searcher/searchserver/src/ccpixsearch.cpp
searcher/searchserver/src/csearchserversubsession.cpp
searcher/searchserver/traces/CSearchServerSubSessionTraces.h
searcher/searchserver/traces/fixed_id.definitions
searcher/tsrc/cpixsearchertest/group/cpixsearchertest.mmp
searchsrv_plat/cpix_framework_api/inc/csearchdocument.h
searchsrv_plat/cpix_utility_api/group/bld.inf
searchsrv_plat/cpix_utility_api/inc/cpixmaindefs.h
searchsrv_plat/cpix_utility_api/inc/cpixwatchdogcommon.h
sis/centrep.pkg
sis/cpixsearch.pkg.source
watchdog/cenrep/20029AB8.cre
watchdog/cenrep/20029AB8.txt
watchdog/group/bld.inf
watchdog/group/watchdog.mmp
watchdog/inc/centrepmonitor.h
watchdog/inc/cwdmonitor.h
watchdog/inc/mcentrephandler.h
watchdog/sis/watchdog.pkg.source
watchdog/src/centrepmonitor.cpp
watchdog/src/cwdmonitor.cpp
--- a/harvester/harvesterserver/src/ccontentinfodb.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/harvester/harvesterserver/src/ccontentinfodb.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -266,9 +266,12 @@
     sql.Format( KCISqlFormatSeek, &aContentName );
     
     RSqlStatement stmt;
-    stmt.Prepare( iDatabase , sql );
-    
-    TBool isfound = ( KSqlAtRow == stmt.Next() )?ETrue:EFalse; 
+    TBool isfound = EFalse;
+    //Error check necessary to avoid sqldb 2 panic, 
+    //if sqlstatement preparation fails, call to Next() raises this panic
+    TInt err = stmt.Prepare( iDatabase , sql );
+    if ( err == KErrNone)
+        isfound = ( KSqlAtRow == stmt.Next() )?ETrue:EFalse; 
     OstTraceFunctionExit0( CCONTENTINFODB_FINDL_EXIT );
     return isfound;
     }
@@ -290,11 +293,14 @@
     sql.Copy( KSelectAllRowsFormat );
     
     RSqlStatement stmt;
-    stmt.Prepare( iDatabase , sql );
-    
-    while ( KSqlAtEnd != stmt.Next() )
-        ++count;
-        
+    TInt err = stmt.Prepare( iDatabase , sql );
+    //Error check necessary to avoid sqldb 2 panic, 
+    //if sqlstatement preparation fails, call to Next() raises this panic     
+    if( err == KErrNone)
+        {
+        while ( KSqlAtEnd != stmt.Next() )
+            ++count;
+        }
     OstTraceFunctionExit0( CCONTENTINFODB_GETCONTENTCOUNTL_EXIT );
     return count;
     }
--- a/qcpix/src/platform/s60/inc/cpixdocumentprivate.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/qcpix/src/platform/s60/inc/cpixdocumentprivate.h	Thu Sep 02 21:37:32 2010 +0300
@@ -32,6 +32,14 @@
     QString iExcerpt;
     QString iBaseAppClass;
     QList< CpixDocumentField* > iFields;
+    
+    CpixDocumentPrivate::~CpixDocumentPrivate()
+        {
+        for (int i =0; i< iFields.count();i++)
+            {
+            delete iFields.at(i);
+            }
+        }
 };
 
 #endif //_CPIXDOCUMENTPVTIMPL_H
--- a/qcpix/src/platform/s60/src/cpixutils.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/qcpix/src/platform/s60/src/cpixutils.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -46,26 +46,30 @@
 	
 CpixDocument** CpixBatchDocFromCSearchDocument( TInt aReturnDoc, CSearchDocument** aDoc )
     {
-    if( aDoc == NULL ) return NULL;
+    if( aDoc == NULL || !aReturnDoc ) return NULL;
     CpixDocument** cpixBatchDocs = NULL;
     cpixBatchDocs = (CpixDocument**)malloc ( sizeof(CpixDocument*) * (aReturnDoc));
     for (int count = 0; count < aReturnDoc; count++)
         {        
         CpixDocument* cpixDoc = CpixDocument::newInstance();
-        cpixDoc->setBaseAppClass( QStringFromDescriptor( aDoc[count]->AppClass() ) );
-        cpixDoc->setDocId( QStringFromDescriptor( aDoc[count]->Id() ) );
-        cpixDoc->setExcerpt( QStringFromDescriptor( aDoc[count]->Excerpt() ) );
-    
-        int fieldCount = aDoc[count]->FieldCount();
-        for( int i=0; i< fieldCount; i++ )
+        if ( cpixDoc )
             {
-            const CDocumentField& field = aDoc[count]->Field( i );
-            cpixDoc->addField( QStringFromDescriptor( field.Name() ), QStringFromDescriptor( field.Value() ), field.Config() );
+            cpixDoc->setBaseAppClass( QStringFromDescriptor( aDoc[count]->AppClass() ) );
+            cpixDoc->setDocId( QStringFromDescriptor( aDoc[count]->Id() ) );
+            cpixDoc->setExcerpt( QStringFromDescriptor( aDoc[count]->Excerpt() ) );
+        
+            int fieldCount = aDoc[count]->FieldCount();
+            for( int i=0; i< fieldCount; i++ )
+                {
+                const CDocumentField& field = aDoc[count]->Field( i );
+                cpixDoc->addField( QStringFromDescriptor( field.Name() ), QStringFromDescriptor( field.Value() ), field.Config() );
+                }
             }
         cpixBatchDocs[count]= cpixDoc;
         delete aDoc[count];
         aDoc[count] = NULL;
         }
     delete aDoc;
+    aDoc = NULL;
     return cpixBatchDocs;
     }
--- a/rom/cpix_mw.iby	Wed Aug 18 10:53:26 2010 +0300
+++ b/rom/cpix_mw.iby	Thu Sep 02 21:37:32 2010 +0300
@@ -59,6 +59,7 @@
 data=ZSYSTEM\install\cpixsearch_stub.sis    System\Install\cpixsearch_stub.sis
 
 data=DATAZ_\private\10202be9\2001f6fb.cre       private\10202be9\2001f6fb.cre
+data=DATAZ_\private\10202be9\20029AB8.cre       private\10202be9\20029AB8.cre
 
 #endif //FF_SEARCH_SW
 
--- a/searchengine/cpix/cpix/inc/public/appclass-hierarchy.txt	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/cpix/cpix/inc/public/appclass-hierarchy.txt	Thu Sep 02 21:37:32 2010 +0300
@@ -124,6 +124,7 @@
 	/* The order of fields in excerpt is as below. The order in this case
 	 * is the order of fields shown when you 'Edit' the contact.
 	 */
+    | [ IsGroup		    ]    {EStoreYes | EIndexNo}
     | [ GivenName           ]    {EStoreYes | EIndexTokenized | EIndexFreeText} {ExcerptNo}
     | [ FamilyName          ]    {EStoreYes | EIndexTokenized | EIndexFreeText} {ExcerptNo}
     | [ PhoneNumber         ]    {EStoreYes | EIndexTokenized}   								{ExcerptYes}
--- a/searchengine/cpix/cpix/src/prefixqueryparser.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/cpix/cpix/src/prefixqueryparser.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -60,7 +60,7 @@
 			void add(auto_ptr<Query> q) {
 				if ( q.get() ) {
 					if ( bq_ ) {
-						bq_->add( q.release(), true, true, false ); 
+						bq_->add( q.release(), true, false, false ); 
 					} else {
 						if ( q_.get() ) {
 							auto_ptr<BooleanQuery> bq( new BooleanQuery() );
--- a/searchengine/oss/cl/clucene/src/clucene/analysis/standard/standardtokenizer.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/analysis/standard/standardtokenizer.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -267,9 +267,9 @@
 		CONSUME_WORD;
 		if (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { //still have space for 1 more character?
 			switch(ch) { /* What follows the first alphanum segment? */
-				case '.':
-					str.appendChar('.');
-					return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t);
+//				case '.':
+//					str.appendChar('.');
+//					return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t);
 				case '\'':
 					str.appendChar('\'');
 					return ReadApostrophe(&str,t);
--- a/searchengine/oss/cl/clucene/src/clucene/search/hits.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/hits.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -12,11 +12,17 @@
 #include "filter.h"
 #include "clucene/search/searchheader.h"
 //#ifdef USE_HIGHLIGHTER 
-//#include "CLucene/highlighter/QueryTermExtractor.h"
-//#include "CLucene/highlighter/QueryScorer.h"
-//#include "CLucene/highlighter/Highlighter.h"
-//#include "CLucene/highlighter/SimpleHTMLFormatter.h"
-//#include "CLucene/analysis/standard/StandardAnalyzer.h"
+
+#include "CLucene/highlighter/QueryTermExtractor.h"
+#include "CLucene/highlighter/QueryScorer.h"
+#include "CLucene/highlighter/Highlighter.h"
+#include "CLucene/highlighter/SimpleHTMLFormatter.h"
+#include "CLucene/analysis/standard/StandardAnalyzer.h"
+#include "clucene/search/prefixquery.h"
+
+// internal libs
+#include "cpixparsetools.h"
+
 //#endif
 
 CL_NS_USE(document)
@@ -50,7 +56,7 @@
 	Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort):
 		query(q), searcher(s), filter(f), sort(_sort)
 //#ifdef USE_HIGHLIGHTER
-//		, hl_frag(20)
+		, hl_frag(20)
 //#endif		
 	{
 	//Func - Constructor
@@ -94,40 +100,71 @@
 			hitDoc->doc = _CLNEW Document;
 			searcher->doc(hitDoc->id, hitDoc->doc);	  // cache miss: read document
 //#ifdef USE_HIGHLIGHTER
-//            CL_NS(document)::Document* document = hitDoc->doc;
-//
-//            const TCHAR* text = document->get(LCPIX_EXCERPT_FIELD);
-//
-//            if(text)
-//              {
-//                Query* rwquery = searcher->getrewritten(hitDoc->id, query);
-//
-//                TCHAR * str = rwquery->toString();
-//                
-//                CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery);
-//
-//                CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer);
-//
-//                highlighter.setTextFragmenter(&hl_frag);
-//
-//                wstring hlText;
-//                
-//                StringReader strreader(text);
-//
-//                lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_EXCERPT_FIELD, &strreader);
-//
-//                TCHAR* result = highlighter.getBestFragments(tokenStream, text, 2,L"...");
-//               
-//                if (result != NULL)
-//                    {
-//                    hlText.append(result);
-//                    
-//                    document->removeField( LCPIX_EXCERPT_FIELD );
-//
-//                    document->add(*_CLNEW Field(LCPIX_EXCERPT_FIELD,
-//                                    hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO));
-//                    }
-//                } 
+
+            CL_NS(document)::Document* document = hitDoc->doc;
+            
+	            TCHAR* result = NULL;
+	            Query* rwquery[2];
+	            searcher->getrewritten(hitDoc->id, query, rwquery);
+	            
+	            const TCHAR* firstlnHLtxt = document->get(LCPIX_HL_EXCERPT_FIELD);
+	            
+	            if(firstlnHLtxt && rwquery[1])
+	              {
+	                CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery[1]);
+	
+	                CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer);
+	
+	                highlighter.setTextFragmenter(&hl_frag);
+	
+	                wstring hlText;
+	                
+	                StringReader strreader(firstlnHLtxt);
+	
+	                lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_HL_EXCERPT_FIELD, &strreader);
+	
+	                result = highlighter.getBestFragments(tokenStream, firstlnHLtxt, 2,L"...");
+	                
+	                if (result != NULL && *((int*)result) != 0x00)
+	                    {
+	                    hlText.append(result);
+	                    
+	                    document->removeField( LCPIX_HL_EXCERPT_FIELD );
+	
+	                    document->add(*_CLNEW Field(LCPIX_HL_EXCERPT_FIELD,
+	                                    hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO));
+	                    }
+	                
+	              }
+	            
+	            const TCHAR* text = document->get(LCPIX_EXCERPT_FIELD);
+	
+	            if(text && rwquery[1])
+	              { 
+	                CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery[1]);
+	
+	                CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer);
+	
+	                highlighter.setTextFragmenter(&hl_frag);
+	
+	                wstring hlText;
+	                
+	                StringReader strreader(text);
+	
+	                lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_EXCERPT_FIELD, &strreader);
+	
+	                result = highlighter.getBestFragments(tokenStream, text, 2,L"...");
+	               
+	                if (result != NULL && *((int*)result) != 0x00)
+	                    {
+	                    hlText.append(result);
+	                    
+	                    document->removeField( LCPIX_EXCERPT_FIELD );
+	
+	                    document->add(*_CLNEW Field(LCPIX_EXCERPT_FIELD,
+	                                    hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO));
+	                    }
+	                } 
 //#endif            
 		}
 
--- a/searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -17,12 +17,12 @@
 #include "clucene/util/bitset.h"
 #include "fieldsortedhitqueue.h"
 //#ifdef USE_HIGHLIGHTER 
-//#include "CLucene/highlighter/QueryTermExtractor.h"
-//#include "CLucene/highlighter/QueryScorer.h"
-//#include "CLucene/highlighter/Highlighter.h"
-//#include "CLucene/highlighter/SimpleHTMLFormatter.h"
-//#include "CLucene/analysis/standard/StandardAnalyzer.h"
-//#include "CLucene/queryParser/QueryParser.h"
+#include "CLucene/highlighter/QueryTermExtractor.h"
+#include "CLucene/highlighter/QueryScorer.h"
+#include "CLucene/highlighter/Highlighter.h"
+#include "CLucene/highlighter/SimpleHTMLFormatter.h"
+#include "CLucene/analysis/standard/StandardAnalyzer.h"
+#include "CLucene/queryParser/QueryParser.h"
 //#endif
 CL_NS_USE(index)
 CL_NS_USE(util)
@@ -120,7 +120,8 @@
       reader = IndexReader::open(path);
       readerOwner = true;
 //#ifdef USE_HIGHLIGHTER
-//      rewrittenQuery = NULL;
+      fistlnHLQuery = NULL;
+      excerptrwQuery = NULL;
 //#endif      
      
   }
@@ -136,7 +137,8 @@
       reader = IndexReader::open(directory);
       readerOwner = true;
 //#ifdef USE_HIGHLIGHTER
-//      rewrittenQuery = NULL;
+      fistlnHLQuery = NULL;
+      excerptrwQuery = NULL;
 //#endif      
       
   }
@@ -150,7 +152,8 @@
       reader      = r;
       readerOwner = false;
 //#ifdef USE_HIGHLIGHTER
-//      rewrittenQuery = NULL;
+      fistlnHLQuery = NULL;
+      excerptrwQuery = NULL;
 //#endif     
   }
 
@@ -218,15 +221,14 @@
   //Func -
   //Pre  - reader != NULL
   //Post -
-//#ifdef USE_HIGHLIGHTER
-//      if(!rewrittenQuery)
-//         {
-//         rewrittenQuery = query->rewrite(reader);        
-//         }          
-//#endif        
-          
       CND_PRECONDITION(reader != NULL, "reader is NULL");
       CND_PRECONDITION(query != NULL, "query is NULL");
+//#ifdef USE_HIGHLIGHTER     
+	if(!excerptrwQuery || !fistlnHLQuery)
+		{                          
+  			excerptrwQuery = query->rewrite(reader); 
+  		}           
+//#endif 
 
 	  Weight* weight = query->weight(this);
       Scorer* scorer = weight->scorer(reader);
@@ -271,15 +273,18 @@
   // inherit javadoc
   TopFieldDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs,
          const Sort* sort) {
-//#ifdef USE_HIGHLIGHTER
-//      if(!rewrittenQuery)
-//         {
-//         rewrittenQuery = query->rewrite(reader);        
-//         }          
-//#endif  
+
+
       CND_PRECONDITION(reader != NULL, "reader is NULL");
       CND_PRECONDITION(query != NULL, "query is NULL");
 
+//#ifdef USE_HIGHLIGHTER     
+	if(!excerptrwQuery || !fistlnHLQuery)
+		{                          
+  			excerptrwQuery = query->rewrite(reader); 
+  		}           
+//#endif
+
     Weight* weight = query->weight(this);
     Scorer* scorer = weight->scorer(reader);
     if (scorer == NULL){
@@ -324,14 +329,17 @@
   //       filter may or may not be NULL
   //       results is a valid reference to a HitCollector and used to store the results
   //Post - filter if non-NULL, a bitset used to eliminate some documents
-//#ifdef USE_HIGHLIGHTER      
-//      if(!rewrittenQuery)
-//         {
-//         rewrittenQuery = query->rewrite(reader);        
-//         } 
-//#endif      
+     
       CND_PRECONDITION(reader != NULL, "reader is NULL");
       CND_PRECONDITION(query != NULL, "query is NULL");
+     
+//#ifdef USE_HIGHLIGHTER     
+	if(!excerptrwQuery || !fistlnHLQuery)
+		{                          
+  			excerptrwQuery = query->rewrite(reader); 
+  		}           
+//#endif
+
 
       BitSet* bits = NULL;
       SimpleFilteredCollector* fc = NULL; 
@@ -373,14 +381,11 @@
         return query;
     }
 //#ifdef USE_HIGHLIGHTER
-//Query* IndexSearcher::getrewritten(int32_t n, Query* original) 
-//          {
-//        if(!rewrittenQuery)
-//           {
-//           rewrittenQuery = original->rewrite(reader);        
-//           }
-//          return rewrittenQuery;
-//          }
+void IndexSearcher::getrewritten(int32_t n, Query* original, Query* rwQuery[]) 
+          {
+            rwQuery[0] = fistlnHLQuery;
+            rwQuery[1] = excerptrwQuery;
+          }
 //#endif
     void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret){
         Weight* weight = query->weight(this);
--- a/searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/indexsearcher.h	Thu Sep 02 21:37:32 2010 +0300
@@ -30,7 +30,9 @@
 	CL_NS(index)::IndexReader* reader;
 	bool readerOwner;
 //#ifdef USE_HIGHLIGHTER	
-//	Query *rewrittenQuery;
+	Query *fistlnHLQuery;
+	Query *excerptrwQuery;
+	CL_NS2(analysis,standard)::StandardAnalyzer hl_analyzer;
 //#endif	
 public:
 	/// Creates a searcher searching the index in the named directory.
@@ -64,8 +66,9 @@
 	}
 
 	Query* rewrite(Query* original);
-///#ifdef USE_HIGHLIGHTER
-//	Query* getrewritten(int32_t n, Query* original);
+	
+//#ifdef USE_HIGHLIGHTER
+	void getrewritten(int32_t n, Query* original, Query* rwQuery[]);
 //#endif	
 	void explain(Query* query, int32_t doc, Explanation* ret);
 };
--- a/searchengine/oss/cl/clucene/src/clucene/search/multisearcher.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/multisearcher.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -64,11 +64,11 @@
   }
   
 //#ifdef USE_HIGHLIGHTER  
-//  Query* MultiSearcher::getrewritten(int32_t n, Query* original) {
-//    int32_t i = subSearcher(n);           // find searcher index 
-//   // changed to get already rewritten query
-//    return searchables[i]->getrewritten(n, original);
-//  }
+  void MultiSearcher::getrewritten(int32_t n, Query* original, Query* rwQuery[]) {
+    int32_t i = subSearcher(n);           // find searcher index 
+   // changed to get already rewritten query
+    searchables[i]->getrewritten(n, original, rwQuery);
+  }
 //#endif  
 
   int32_t MultiSearcher::searcherIndex(int32_t n) const{
--- a/searchengine/oss/cl/clucene/src/clucene/search/multisearcher.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/multisearcher.h	Thu Sep 02 21:37:32 2010 +0300
@@ -89,7 +89,7 @@
 
 		Query* rewrite(Query* original);
 //#ifdef USE_HIGHLIGHTER			
-//		Query* getrewritten(int32_t n, Query* original);
+		void getrewritten(int32_t n, Query* original, Query* rwQuery[]);
 //#endif	
 		void explain(Query* query, int32_t doc, Explanation* ret);
     };
--- a/searchengine/oss/cl/clucene/src/clucene/search/searchheader.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchengine/oss/cl/clucene/src/clucene/search/searchheader.h	Thu Sep 02 21:37:32 2010 +0300
@@ -21,11 +21,12 @@
 #include "clucene/search/similarity.h"
 
 //#ifdef USE_HIGHLIGHTER
-//#include "CLucene/highlighter/SimpleFragmenter.h"
-//#include "CLucene/highlighter/SimpleHTMLFormatter.h"
-//#include "CLucene/analysis/standard/StandardAnalyzer.h"
-//
-//#define LCPIX_EXCERPT_FIELD   L"_excerpt"
+#include "CLucene/highlighter/SimpleFragmenter.h"
+#include "CLucene/highlighter/SimpleHTMLFormatter.h"
+#include "CLucene/analysis/standard/StandardAnalyzer.h"
+#define LCPIX_DEFAULT_FIELD   L"_aggregate"
+#define LCPIX_HL_EXCERPT_FIELD  L"_hlexcerpt"
+#define LCPIX_EXCERPT_FIELD   L"_excerpt"
 //#endif
 
 CL_NS_DEF(search)
@@ -168,11 +169,11 @@
 		int32_t numDocs;			  // number cached
 		int32_t maxDocs;			  // max to cache
 //#ifdef USE_HIGHLIGHTER		
-//		CL_NS2(search,highlight)::SimpleHTMLFormatter hl_formatter;
-//		
-//		CL_NS2(search,highlight)::SimpleFragmenter hl_frag;
-//        
-//		CL_NS2(analysis,standard)::StandardAnalyzer hl_analyzer;
+		CL_NS2(search,highlight)::SimpleHTMLFormatter hl_formatter;
+		
+		CL_NS2(search,highlight)::SimpleFragmenter hl_frag;
+        
+		CL_NS2(analysis,standard)::StandardAnalyzer hl_analyzer;
 //#endif		
     public:
 		Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL);
@@ -292,7 +293,7 @@
       */
 	  	virtual TopFieldDocs* _search(Query* query, Filter* filter, const int32_t n, const Sort* sort) = 0;
 //#ifdef USE_HIGHLIGHTER	  	
-//	  	virtual Query* getrewritten(int32_t n, Query* original)= 0;
+	  	virtual void getrewritten(int32_t n, Query* original, Query* rwQuery[])= 0;
 //#endif	  	
    };
 
--- a/searcher/searchclient/bwins/cpixsearchclientu.def	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/bwins/cpixsearchclientu.def	Thu Sep 02 21:37:32 2010 +0300
@@ -99,4 +99,5 @@
 	?UnDefineVolume@RSearchServerSession@@QAEHABVTDesC16@@@Z @ 98 NONAME ; int RSearchServerSession::UnDefineVolume(class TDesC16 const &)
 	?ExternalizeL@CDocumentField@@QBEXAAVRWriteStream@@@Z @ 99 NONAME ; void CDocumentField::ExternalizeL(class RWriteStream &) const
 	?AddL@RSearchServerSubSession@@QAEXABVTDesC8@@@Z @ 100 NONAME ; void RSearchServerSubSession::AddL(class TDesC8 const &)
+	?AddHLDisplayFieldL@CSearchDocument@@QAEXABVTDesC16@@@Z @ 101 NONAME ; void CSearchDocument::AddHLDisplayFieldL(class TDesC16 const &)
 
--- a/searcher/searchclient/eabi/cpixsearchclientu.def	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/eabi/cpixsearchclientu.def	Thu Sep 02 21:37:32 2010 +0300
@@ -116,4 +116,5 @@
 	_ZTV13CCPixSearcher @ 115 NONAME
 	_ZTV14CDocumentField @ 116 NONAME
 	_ZTV15CSearchDocument @ 117 NONAME
+	_ZN15CSearchDocument18AddHLDisplayFieldLERK7TDesC16 @ 118 NONAME
 
--- a/searcher/searchclient/group/searchclient.mmp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/group/searchclient.mmp	Thu Sep 02 21:37:32 2010 +0300
@@ -40,7 +40,10 @@
 LIBRARY         estor.lib
 
 LIBRARY         flogger.lib 
+LIBRARY      centralrepository.lib
 
 CAPABILITY        CAP_GENERAL_DLL
 
+//Useto enable highlighter 
+MACRO USE_HIGHLIGHTER
 // End of File
--- a/searcher/searchclient/src/ccpixsearcher.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/src/ccpixsearcher.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -98,6 +98,7 @@
 //
 EXPORT_C void CCPixSearcher::OpenDatabaseL(const TDesC& aBaseAppClass)
 	{
+	OstTraceFunctionEntry0( CCPIXSEARCHER_OPENDATABASEL_ENTRY );
 	if ( IsActive() )
 		{
 		User::Leave(KErrInUse);
@@ -112,12 +113,14 @@
 	iBaseAppClass = aBaseAppClass.AllocL();
 	iSubSession.OpenDatabaseL(ETrue, *iBaseAppClass, *iDefaultSearchField);
 	iIsDatabaseOpen = ETrue; 
+	OstTraceFunctionExit0( CCPIXSEARCHER_OPENDATABASEL_EXIT );
 	}
 
 //
 //
 EXPORT_C void CCPixSearcher::OpenDatabaseL(MCPixOpenDatabaseRequestObserver& aObserver, const TDesC& aBaseAppClass)
 	{
+	OstTraceFunctionEntry0( DUP1_CCPIXSEARCHER_OPENDATABASEL_ENTRY );
 	if ( IsActive() )
 		{
 		User::Leave( KErrInUse);
@@ -135,18 +138,22 @@
 	iBaseAppClass = aBaseAppClass.AllocL();
 	iSubSession.OpenDatabase(ETrue, *iBaseAppClass, *iDefaultSearchField, iStatus); // Create if not found
 	SetActive(); 
+	OstTraceFunctionExit0( DUP1_CCPIXSEARCHER_OPENDATABASEL_EXIT );
 	}
 
 EXPORT_C void CCPixSearcher::SetAnalyzerL( const TDesC& aAnalyzer )
 	{
+	OstTraceFunctionEntry0( CCPIXSEARCHER_SETANALYZERL_ENTRY );
 	if ( !iIsDatabaseOpen ) 	User::Leave(KErrNotReady);
 	if ( IsActive() ) 			User::Leave(KErrInUse);
 
 	iSubSession.SetAnalyzerL( aAnalyzer ); 
+	OstTraceFunctionExit0( CCPIXSEARCHER_SETANALYZERL_EXIT );
 	}
 
 EXPORT_C void CCPixSearcher::SetAnalyzerL( MCPixSetAnalyzerRequestObserver& aObserver, const TDesC& aAnalyzer )
 	{
+	OstTraceFunctionEntry0( DUP1_CCPIXSEARCHER_SETANALYZERL_ENTRY );
 	if ( !iIsDatabaseOpen ) 	User::Leave(KErrNotReady);
 	if ( IsActive() ) 			User::Leave(KErrInUse);
 	
@@ -156,6 +163,7 @@
 	iState = EStateSetAnalyzer; 
 	iSubSession.SetAnalyzer( aAnalyzer, iStatus );
 	SetActive(); 
+	OstTraceFunctionExit0( DUP1_CCPIXSEARCHER_SETANALYZERL_EXIT );
 	}
 	
 	EXPORT_C void CCPixSearcher::SetQueryParserL( TQueryParser aQueryParser ) 
@@ -206,7 +214,7 @@
 	{
 	OstTraceFunctionEntry0( CCPIXSEARCHER_SEARCHL_ENTRY );
 	PERFORMANCE_LOG_START("CCPixSearcher::SearchL");
-	
+	OstTraceExt2( TRACE_NORMAL, CCPIXSEARCHER_SEARCHL, "CCPixSearcher::SearchL::sync::;Search string =%S;field=%S", aQueryString, aDocumentField );
 	if ( !iIsDatabaseOpen ) 	
 		User::Leave( KErrNotReady );
 	if ( IsActive() )
@@ -229,6 +237,7 @@
     OstTraceFunctionEntry0( DUP1_CCPIXSEARCHER_SEARCHL_ENTRY );
     PERFORMANCE_LOG_START("CCPixSearcher::SearchL");
 
+	OstTraceExt2( TRACE_NORMAL, DUP1_CCPIXSEARCHER_SEARCHL, "CCPixSearcher::SearchL::Async::;Search string=%S;Field=%S", aQueryString, aDocumentField );
 	if ( !iIsDatabaseOpen ) 	User::Leave( KErrNotReady );
 	if ( IsActive() )
 		{
@@ -251,6 +260,7 @@
     OstTraceFunctionEntry0( CCPIXSEARCHER_GETDOCUMENTL_ENTRY );
     PERFORMANCE_LOG_START("CCPixSearcher::GetDocumentL");
     
+	OstTrace1( TRACE_NORMAL, CCPIXSEARCHER_GETDOCUMENTL, "CCPixSearcher::GetDocumentL;aIndex=%d", aIndex );
 	if ( !iIsDatabaseOpen ) 	User::Leave( KErrNotReady );
 	if ( IsActive() )
 		{
@@ -265,6 +275,7 @@
     OstTraceFunctionEntry0( DUP1_CCPIXSEARCHER_GETDOCUMENTL_ENTRY );
     PERFORMANCE_LOG_START("CCPixSearcher::GetDocumentL");
     
+    OstTrace1( TRACE_NORMAL, DUP1_CCPIXSEARCHER_GETDOCUMENTL, "CCPixSearcher::GetDocumentL::Async::;aIndex=%d", aIndex );
     if ( !iIsDatabaseOpen ) 	User::Leave( KErrNotReady );
 	if ( IsActive() )
 		{
@@ -283,6 +294,7 @@
     {
     PERFORMANCE_LOG_START("CCPixSearcher::GetBatchDocumentL");
     
+	OstTraceExt2( TRACE_NORMAL, CCPIXSEARCHER_GETBATCHDOCUMENTL, "CCPixSearcher::GetBatchDocumentL;aIndex=%d;aCount=%d", aIndex, aCount );
 	if ( !iIsDatabaseOpen ) 	User::Leave( KErrNotReady );
 	if ( IsActive() )
 		{
@@ -296,6 +308,7 @@
     {
     PERFORMANCE_LOG_START("CCPixSearcher::GetBatchDocumentL");
     
+    OstTraceExt2( TRACE_NORMAL, DUP1_CCPIXSEARCHER_GETBATCHDOCUMENTL, "CCPixSearcher::GetBatchDocumentL::Async::;aIndex=%d;aCount=%d", aIndex, aCount );
     if ( !iIsDatabaseOpen ) 	User::Leave( KErrNotReady );
 	if ( IsActive() )
 		{
@@ -381,6 +394,7 @@
 		    TRAPD( err, document = iSubSession.GetBatchDocumentObjectL( retCount ) );
 		    if ( observer.iNextDocument )
 		        {
+		        OstTraceExt2( TRACE_NORMAL, CCPIXSEARCHER_RUNL, "CCPixSearcher::RunL::BatchgetDoc::;err=%d;retcount=%d", err, retCount );
 		        if ( err == KErrNone )
 		            {
 		            observer.iNextDocument->HandleBatchDocumentL(iStatus.Int(),retCount, document);
--- a/searcher/searchclient/src/csearchdocument.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/src/csearchdocument.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -246,3 +246,10 @@
 	return iBoost; 
 	}
 
+#ifdef USE_HIGHLIGHTER
+EXPORT_C void CSearchDocument::AddHLDisplayFieldL(const TDesC& aField)
+    {
+    // Needs to be tokenised to rewrite the query, but should not be searchable so EAggregateNo.
+    AddFieldL( _L( CPIX_HL_EXCERPT_FIELD ), aField, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized | CDocumentField::EAggregateNo );
+    }
+#endif
--- a/searcher/searchclient/src/rsearchserversession.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/src/rsearchserversession.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -28,12 +28,13 @@
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "rsearchserversessionTraces.h"
 #endif
-
+#include "cpixwatchdogcommon.h"
+#include <centralrepository.h>
 
 
 // FUNCTION PROTOTYPES
-static TInt StartServer();
-static TInt CreateServerProcess();
+static TInt StartServer( const TDesC& aServerName , TUid aServerUid );
+static TInt CreateServerProcess( const TDesC& aServerName , TUid aServerUid );
 
 // RsearchServerSession::RsearchServerSession()
 // C++ default constructor can NOT contain any code, that might leave.
@@ -48,12 +49,45 @@
 // -----------------------------------------------------------------------------
 EXPORT_C TInt RSearchServerSession::Connect()
 	{
-	TInt err = StartServer();
-
-	if ( KErrNone == err )
-		{
-		err = CreateSession(KSearchServerName, Version(), KDefaultMessageSlots);
-		}
+    //read the name and Uid of the search server
+    TInt err = KErrNotReady;
+    // get the watchdog repro 
+    //TRAP_IGNORE is used to avoid the code scanner error
+    CRepository* wdrepo = NULL;
+    TRAP_IGNORE(wdrepo = CRepository::NewL( KWDrepoUidMenu ));
+    if ( wdrepo )
+        {
+        HBufC* servername = NULL;
+        TUid serveruid = {0};
+        TBuf<KCenrepUidLength> temp;
+        TInt64 value;
+        TLex uidvalue;
+        //read the searchserver UId
+        if ( KErrNone == wdrepo->Get( KSearchServerUIDKey, temp ))
+            {
+            uidvalue.Assign(temp);
+            if (KErrNone == uidvalue.Val( value,EHex ))
+                serveruid.iUid = value;
+            }
+        //read the search server name
+        if ( KErrNone == wdrepo->Get( KSearchServerNAMEKey, temp ))
+            {
+            //TRAP_IGNORE is used to avoid the code scanner error
+            TRAP_IGNORE(servername = HBufC::NewL( temp.Length() ));
+            TPtr ssname = servername->Des(); 
+            ssname.Copy( temp );
+            }
+        // make sure the server is started before creating connection
+        if ( servername )
+           err = StartServer( *servername , serveruid );
+    
+        if ( KErrNone == err )
+            {
+            err = CreateSession(*servername, Version(), KDefaultMessageSlots);
+            }
+        delete servername;
+        }
+    delete wdrepo;
 	return err;
 	}
 
@@ -232,6 +266,7 @@
 	// descriptors as they will be out of scope by the time the server
 	// attempts to read or write
 	User::LeaveIfError( SendReceive(ESearchServerSearch, args) );
+	OstTrace1( TRACE_NORMAL, RSEARCHSERVERSUBSESSION_SEARCHL, "RSearchServerSubSession::SearchL::sync;iEstimatedResultsCount=%d", iEstimatedResultsCount );
 	OstTraceFunctionExit0( RSEARCHSERVERSUBSESSION_SEARCHL_EXIT );
 	}
 
@@ -352,7 +387,7 @@
         delete iSizeList;
         iSizeList = NULL;
         }
-    iSizeList = STATIC_CAST(TInt *, User::AllocZL(iReqCount * sizeof(TInt)));
+    TRAP_IGNORE(iSizeList = STATIC_CAST(TInt *, User::AllocZL(iReqCount * sizeof(TInt))));
     //iDocSizeArray
     TPtr8 blob((TUint8*)iSizeList, iReqCount * sizeof(TInt));
 	    
@@ -483,11 +518,11 @@
 
 // StartServer()
 // Starts the server if it is not already running
-static TInt StartServer()
+static TInt StartServer( const TDesC& aServerName , TUid aServerUid )
 	{
 	TInt result;
 
-	TFindServer findsearchServer(KSearchServerName);
+	TFindServer findsearchServer(aServerName);
 	TFullName name;
 
 	result = findsearchServer.Next(name);
@@ -504,7 +539,7 @@
 		return result;
 		}
 
-	result = CreateServerProcess();
+	result = CreateServerProcess( aServerName,aServerUid );
 	if (result != KErrNone)
 		{
 		return result;
@@ -518,15 +553,15 @@
 
 // CreateServerProcess()
 // Creates a server process
-static TInt CreateServerProcess()
+static TInt CreateServerProcess( const TDesC& aServerName , TUid aServerUid )
 	{
 	TInt result;
 
-	const TUidType serverUid( KNullUid, KNullUid, KServerUid3);
+	const TUidType serverUid( KNullUid, KNullUid, aServerUid);
 
 	RProcess server;
 
-	result = server.Create(KSearchServerFilename, KNullDesC, serverUid);
+	result = server.Create(aServerName, KNullDesC, serverUid);
 	if (result != KErrNone)
 		{
 		return result;
--- a/searcher/searchclient/traces/CCPixSearcherTraces.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/traces/CCPixSearcherTraces.h	Thu Sep 02 21:37:32 2010 +0300
@@ -12,6 +12,158 @@
 #define CCPIXSEARCHER_GETDOCUMENTL_ENTRY 0x8a0004
 #define DUP1_CCPIXSEARCHER_GETDOCUMENTL_ENTRY 0x8a0005
 #define CCPIXSEARCHER_GETDOCUMENTL_EXIT 0x8a0006
+#define CCPIXSEARCHER_OPENDATABASEL_ENTRY 0x8a0010
+#define CCPIXSEARCHER_OPENDATABASEL_EXIT 0x8a0011
+#define DUP1_CCPIXSEARCHER_OPENDATABASEL_ENTRY 0x8a0012
+#define DUP1_CCPIXSEARCHER_OPENDATABASEL_EXIT 0x8a0013
+#define CCPIXSEARCHER_SETANALYZERL_ENTRY 0x8a0014
+#define CCPIXSEARCHER_SETANALYZERL_EXIT 0x8a0015
+#define DUP1_CCPIXSEARCHER_SETANALYZERL_ENTRY 0x8a0016
+#define DUP1_CCPIXSEARCHER_SETANALYZERL_EXIT 0x8a0017
+#define CCPIXSEARCHER_SEARCHL 0x860003
+#define DUP1_CCPIXSEARCHER_SEARCHL 0x860004
+#define CCPIXSEARCHER_GETDOCUMENTL 0x860005
+#define DUP1_CCPIXSEARCHER_GETDOCUMENTL 0x860006
+#define CCPIXSEARCHER_GETBATCHDOCUMENTL 0x860007
+#define DUP1_CCPIXSEARCHER_GETBATCHDOCUMENTL 0x860008
+#define CCPIXSEARCHER_RUNL 0x860009
+
+
+#ifndef __KERNEL_MODE__
+#ifndef __OSTTRACEGEN2_TUINT32_CONST_TDESC16REF_CONST_TDESC16REF__
+#define __OSTTRACEGEN2_TUINT32_CONST_TDESC16REF_CONST_TDESC16REF__
+
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC16& aParam1, const TDesC16& aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        // Check that parameter lenght is not too long
+        TInt length2 = aParam2.Size();
+        if ((length + length2 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length2 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned2 = ( length2 + 3 ) & ~3;
+        if (lengthAligned2 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned2;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        if (length2 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length2 / (aParam2.Size() / aParam2.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam2.Ptr(), length2 );
+            ptr += length2;
+            // Fillers are written to get 32-bit alignment
+            while ( length2++ < lengthAligned2 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned2;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+
+#endif // __OSTTRACEGEN2_TUINT32_CONST_TDESC16REF_CONST_TDESC16REF__
+
+#endif
+
+
+#ifndef __OSTTRACEGEN2_TUINT32_TINT_TINT__
+#define __OSTTRACEGEN2_TUINT32_TINT_TINT__
+
+inline TBool OstTraceGen2( TUint32 aTraceID, TInt aParam1, TInt aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TUint8 data[ 8 ];
+        TUint8* ptr = data;
+        *( ( TInt* )ptr ) = aParam1;
+        ptr += sizeof ( TInt );
+        *( ( TInt* )ptr ) = aParam2;
+        ptr += sizeof ( TInt );
+        ptr -= 8;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, 8 );
+        }
+    return retval;
+    }
+
+#endif // __OSTTRACEGEN2_TUINT32_TINT_TINT__
+
+
+#ifndef __OSTTRACEGEN2_TUINT32_TINT32_TINT32__
+#define __OSTTRACEGEN2_TUINT32_TINT32_TINT32__
+
+inline TBool OstTraceGen2( TUint32 aTraceID, TInt32 aParam1, TInt32 aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TUint8 data[ 8 ];
+        TUint8* ptr = data;
+        *( ( TInt* )ptr ) = aParam1;
+        ptr += sizeof ( TInt );
+        *( ( TInt* )ptr ) = aParam2;
+        ptr += sizeof ( TInt );
+        ptr -= 8;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, 8 );
+        }
+    return retval;
+    }
+
+#endif // __OSTTRACEGEN2_TUINT32_TINT32_TINT32__
+
 
 
 #endif
--- a/searcher/searchclient/traces/RSearchServerSessionTraces.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/traces/RSearchServerSessionTraces.h	Thu Sep 02 21:37:32 2010 +0300
@@ -17,6 +17,7 @@
 #define RSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT 0x8a000f
 #define RSEARCHSERVERSUBSESSION_UPDATEL 0x860001
 #define DUP1_RSEARCHSERVERSUBSESSION_UPDATEL 0x860002
+#define RSEARCHSERVERSUBSESSION_SEARCHL 0x86000a
 
 
 #endif
--- a/searcher/searchclient/traces/fixed_id.definitions	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchclient/traces/fixed_id.definitions	Thu Sep 02 21:37:32 2010 +0300
@@ -3,10 +3,18 @@
 [GROUP]TRACE_NORMAL=0x86
 [TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_GETDOCUMENTL_ENTRY=0x4
 [TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_GETDOCUMENTL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_OPENDATABASEL_ENTRY=0x10
+[TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_OPENDATABASEL_EXIT=0x11
 [TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_SEARCHL_ENTRY=0x1
 [TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_SEARCHL_EXIT=0x3
+[TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_SETANALYZERL_ENTRY=0x14
+[TRACE]TRACE_FLOW[0x8A]_CCPIXSEARCHER_SETANALYZERL_EXIT=0x15
 [TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_GETDOCUMENTL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_OPENDATABASEL_ENTRY=0x12
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_OPENDATABASEL_EXIT=0x13
 [TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_SEARCHL_ENTRY=0x2
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_SETANALYZERL_ENTRY=0x16
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CCPIXSEARCHER_SETANALYZERL_EXIT=0x17
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_GETDOCUMENTL_ENTRY=0xb
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_ENTRY=0xe
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT=0xf
@@ -16,5 +24,13 @@
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_SEARCHL_EXIT=0x8
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_SEARCH_ENTRY=0x9
 [TRACE]TRACE_FLOW[0x8A]_RSEARCHSERVERSUBSESSION_SEARCH_EXIT=0xa
+[TRACE]TRACE_NORMAL[0x86]_CCPIXSEARCHER_GETBATCHDOCUMENTL=0x7
+[TRACE]TRACE_NORMAL[0x86]_CCPIXSEARCHER_GETDOCUMENTL=0x5
+[TRACE]TRACE_NORMAL[0x86]_CCPIXSEARCHER_RUNL=0x9
+[TRACE]TRACE_NORMAL[0x86]_CCPIXSEARCHER_SEARCHL=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCPIXSEARCHER_GETBATCHDOCUMENTL=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCPIXSEARCHER_GETDOCUMENTL=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCPIXSEARCHER_SEARCHL=0x4
 [TRACE]TRACE_NORMAL[0x86]_DUP1_RSEARCHSERVERSUBSESSION_UPDATEL=0x2
+[TRACE]TRACE_NORMAL[0x86]_RSEARCHSERVERSUBSESSION_SEARCHL=0xa
 [TRACE]TRACE_NORMAL[0x86]_RSEARCHSERVERSUBSESSION_UPDATEL=0x1
--- a/searcher/searchserver/group/searchserver.mmp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/group/searchserver.mmp	Thu Sep 02 21:37:32 2010 +0300
@@ -94,4 +94,8 @@
 
 CAPABILITY        CAP_SERVER AllFiles 
 
+//Used to enable highlighter 
+//MACRO USE_HIGHLIGHTER
+
+
 // End of File
--- a/searcher/searchserver/inc/CCPixAbstractSearcher.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/inc/CCPixAbstractSearcher.h	Thu Sep 02 21:37:32 2010 +0300
@@ -25,8 +25,8 @@
 public: 
 	
 	enum TQueryParser {
-		EDatabaseQueryParser = 0,
-		EIncrementalQueryParser = 1
+		ECluceneQueryParser = 0,
+		EPrefixQueryParser = 1
 	};
 	
 	
@@ -111,7 +111,7 @@
 	
 	static CSearchDocument* ConvertDocumentL( cpix_Document* aDocument );
 	
-	static RPointerArray<CSearchDocument> ConvertBatchDocumentL( cpix_Document** aDocument, TInt count ); 
+	static RPointerArray<CSearchDocument> ConvertBatchDocumentL( cpix_Document**& aDocument, TInt count ); 
 	
 	static RArray<TInt> docSizeArray;
 
--- a/searcher/searchserver/src/CCPixAbstractSearcher.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/src/CCPixAbstractSearcher.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -103,7 +103,7 @@
 	return document;
 	}
 	
-RPointerArray<CSearchDocument> CCPixAbstractSearcher::ConvertBatchDocumentL( cpix_Document** aDocument, TInt aCount )
+RPointerArray<CSearchDocument> CCPixAbstractSearcher::ConvertBatchDocumentL( cpix_Document**& aDocument, TInt aCount )
 	{
 	// Read first the system fields that are passed as constructor parameters 
 	//
@@ -182,11 +182,10 @@
             CleanupStack::PopAndDestroy(docFieldEnum);	
             CleanupStack::Pop(document);
             docSizeArray.AppendL( document->Size());
-            docArray.AppendL( document );
-            delete nextDocument;
-            nextDocument = NULL;                      
+            docArray.AppendL( document );                                  
             }
-        else break;
+        delete nextDocument;
+        nextDocument = NULL;
         }
 	delete aDocument;
 	aDocument = NULL;
--- a/searcher/searchserver/src/ccpixsearch.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/src/ccpixsearch.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -45,7 +45,7 @@
 	}
 
 CCPixSearch::CCPixSearch()
-	: iQueryParserType(EIncrementalQueryParser),
+	: iQueryParserType(EPrefixQueryParser),
 	  iPendingTask(EPendingTaskNone)
 	  
 	{
@@ -134,6 +134,8 @@
 
 TBool CCPixSearch::SearchL(const TDesC& aSearchTerms, MCPixAsyncronizerObserver* aObserver, const RMessage2& aMessage)
     {
+    _LIT16(KPlain,"$plain");
+    _LIT16(KPrefix,"$prefix");
     OstTraceFunctionEntry0( CCPIXSEARCH_SEARCHL_ENTRY );
     PERFORMANCE_LOG_START("CCPixSearch::SearchL");
     
@@ -149,6 +151,15 @@
     TPtr searchTermsPtr = searchTerms->Des();
     searchTermsPtr.Copy(aSearchTerms);
     
+    if(aSearchTerms.Find(KPlain) == 0 && iQueryParserType == EPrefixQueryParser )
+        {
+            SetQueryParserL(ECluceneQueryParser);
+        }
+    else if (aSearchTerms.Find(KPrefix) == 0 && iQueryParserType == ECluceneQueryParser )
+        {
+            SetQueryParserL(EPrefixQueryParser);
+        }
+    
     // Destroy previous query
     cpix_Query_destroy( iQuery );
     iQuery = NULL;
@@ -379,7 +390,7 @@
 	iQueryParser = NULL; 
 	cpix_Result result; 
 	
-	if ( iQueryParserType == EDatabaseQueryParser ) 
+	if ( iQueryParserType == ECluceneQueryParser ) 
 		{
 		iQueryParser = 
 			cpix_QueryParser_create( &result, 
@@ -387,7 +398,7 @@
 									      iDefaultSearchFieldZ->Des().PtrZ()), 
 									  iAnalyzer );
 		} 
-	else if ( iQueryParserType == EIncrementalQueryParser ) 
+	else if ( iQueryParserType == EPrefixQueryParser ) 
 		{
 		iQueryParser = 
 			cpix_CreatePrefixQueryParser( &result, 
--- a/searcher/searchserver/src/csearchserversubsession.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/src/csearchserversubsession.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -269,6 +269,7 @@
 	// Sanity check
 	if (!iSearchDb->IsOpen())
 		{
+		OstTrace0( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_GETBATCHDOCUMENTL, "CSearchServerSubSession::GetBatchDocumentL: Panic as DB is not open" );
 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
 		return;
 		}
--- a/searcher/searchserver/traces/CSearchServerSubSessionTraces.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/traces/CSearchServerSubSessionTraces.h	Thu Sep 02 21:37:32 2010 +0300
@@ -10,6 +10,7 @@
 #define DUP1_CSEARCHSERVERSUBSESSION_CSEARCHSERVERSUBSESSION 0x86000c
 #define CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL 0x86000d
 #define DUP1_CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL 0x86000e
+#define CSEARCHSERVERSUBSESSION_GETBATCHDOCUMENTL 0x86000f
 #define CSEARCHSERVERSUBSESSION_SEARCHL_ENTRY 0x8a000c
 #define CSEARCHSERVERSUBSESSION_SEARCHL_EXIT 0x8a000d
 #define DUP1_CSEARCHSERVERSUBSESSION_SEARCHL_EXIT 0x8a000e
--- a/searcher/searchserver/traces/fixed_id.definitions	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/searchserver/traces/fixed_id.definitions	Thu Sep 02 21:37:32 2010 +0300
@@ -32,6 +32,7 @@
 [TRACE]TRACE_NORMAL[0x86]_CPIXIDXDB_DUMPDOCUMENT=0x1
 [TRACE]TRACE_NORMAL[0x86]_CSEARCHSERVERSESSION_CSEARCHSERVERSESSION=0x9
 [TRACE]TRACE_NORMAL[0x86]_CSEARCHSERVERSUBSESSION_CSEARCHSERVERSUBSESSION=0xb
+[TRACE]TRACE_NORMAL[0x86]_CSEARCHSERVERSUBSESSION_GETBATCHDOCUMENTL=0xf
 [TRACE]TRACE_NORMAL[0x86]_CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL=0xd
 [TRACE]TRACE_NORMAL[0x86]_CSEARCHSERVER_CSEARCHSERVER=0x8
 [TRACE]TRACE_NORMAL[0x86]_DUP1_CPIXIDXDB_DUMPDOCUMENT=0x2
--- a/searcher/tsrc/cpixsearchertest/group/cpixsearchertest.mmp	Wed Aug 18 10:53:26 2010 +0300
+++ b/searcher/tsrc/cpixsearchertest/group/cpixsearchertest.mmp	Thu Sep 02 21:37:32 2010 +0300
@@ -95,6 +95,7 @@
 LIBRARY   FLOGGER.lib
 LIBRARY   estor.lib
 LIBRARY   efsrv.lib
+LIBRARY      centralrepository.lib
 
 EPOCALLOWDLLDATA
 // End of File
--- a/searchsrv_plat/cpix_framework_api/inc/csearchdocument.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchsrv_plat/cpix_framework_api/inc/csearchdocument.h	Thu Sep 02 21:37:32 2010 +0300
@@ -181,6 +181,17 @@
 	 * ranked higher in the search results. 
 	 */
 	IMPORT_C TReal32 Boost() const; 
+	
+#ifdef USE_HIGHLIGHTER	
+	/**
+     * Adds the contents to field which will be 
+     * shown in the first line of searchUI.
+     * The fields included here in this field should 
+     * not be included in excerpt field(second line in seachUI)
+     * @param aExcerpt Excerpt text to add to the document.
+     */ 
+    IMPORT_C void AddHLDisplayFieldL(const TDesC& aField);
+#endif
 
 private: // Constructors
 	
--- a/searchsrv_plat/cpix_utility_api/group/bld.inf	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchsrv_plat/cpix_utility_api/group/bld.inf	Thu Sep 02 21:37:32 2010 +0300
@@ -28,4 +28,5 @@
 ../inc/indevicecfg.h 		      MW_LAYER_PLATFORM_EXPORT_PATH(indevicecfg.h)
 ../inc/messageharvesterdefs.h MW_LAYER_PLATFORM_EXPORT_PATH(messageharvesterdefs.h)
 ../inc/searchserverdefs.h     MW_LAYER_PLATFORM_EXPORT_PATH(searchserverdefs.h)
-../inc/cpixcontentinfocommon.h    MW_LAYER_PLATFORM_EXPORT_PATH(cpixcontentinfocommon.h)
\ No newline at end of file
+../inc/cpixcontentinfocommon.h    MW_LAYER_PLATFORM_EXPORT_PATH(cpixcontentinfocommon.h)
+../inc/cpixwatchdogcommon.h       MW_LAYER_PLATFORM_EXPORT_PATH(cpixwatchdogcommon.h)
\ No newline at end of file
--- a/searchsrv_plat/cpix_utility_api/inc/cpixmaindefs.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/searchsrv_plat/cpix_utility_api/inc/cpixmaindefs.h	Thu Sep 02 21:37:32 2010 +0300
@@ -100,6 +100,13 @@
     */
 #define LCPIX_EXCERPT_FIELD   L"_excerpt"
 
+/*
+ * The name of the optional field that will store the first line
+ * text shown in result of searchUI, used for highlighting
+ */
+
+#define LCPIX_HL_EXCERPT_FIELD  L"_hlexcerpt"
+
    /**
     * The name of the optional field that will store the application
     * ID of the document.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchsrv_plat/cpix_utility_api/inc/cpixwatchdogcommon.h	Thu Sep 02 21:37:32 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* 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 CPIXWATCHDOGCOMMON_H_
+#define CPIXWATCHDOGCOMMON_H_
+
+//Length of uid string in cenrep
+const TInt KCenrepUidLength = 20;
+//Uid of watchdog cetral repository database
+const TUid KWDrepoUidMenu = {0x20029ab8};
+const TUint32 KHarvesterServerKey = 0x1;
+const TUint32 KSearchServerKey = 0x2;
+const TUint32 KHarvesterServerUIDKey = 0x3;
+const TUint32 KHarvesterServerNAMEKey = 0x4;
+const TUint32 KSearchServerUIDKey = 0x5;
+const TUint32 KSearchServerNAMEKey = 0x6;
+const TUint32 KSearchUiUIDKey = 0x7;
+
+
+#endif /*CPIXWATCHDOGCOMMON_H_*/
--- a/sis/centrep.pkg	Wed Aug 18 10:53:26 2010 +0300
+++ b/sis/centrep.pkg	Thu Sep 02 21:37:32 2010 +0300
@@ -2,7 +2,7 @@
 &EN
 
 ; Header
-#{ "CenRep INI file"}, (0x10202BE9), 1, 2, 3, TYPE=SP
+#{ "CenRep INI file"}, (0x10202BE9), 1, 2, 3, TYPE=SP, RU;
 
 ; Localised Vendor name
 %{"Nokia"}
--- a/sis/cpixsearch.pkg.source	Wed Aug 18 10:53:26 2010 +0300
+++ b/sis/cpixsearch.pkg.source	Thu Sep 02 21:37:32 2010 +0300
@@ -13,10 +13,14 @@
 ;
 ; UID is the app's UID
 ;
-#{"CPix Search"},(0x2001F6FB),1,0,0, TYPE=SA;$(SVN)
+#{"CPix Search"},(0x2001F6FB),1,1,0, TYPE=SA, RU;$(SVN)
 
 ; Supports Series 60 v 3.0
-[0x101F7961], 0, 0, 0, {"S60ProductID"}
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+[0x20022e6d],0,0,0,{"S60ProductID"}
 
 ; Vendor names
 %{"Nokia-EN"}
@@ -28,6 +32,11 @@
 ;@"cpix_cert_installer.sis", (0x101FB665)
 ;@"..\WidgetInstaller\sis\WidgetInstaller.sisx", (0x2001F709)
 
+; CPiX Harvester Server
+
+"$(EPOCROOT)epoc32\release\armv5\$(TARGET)\CPixHarvesterServer.exe"
+-"c:\sys\bin\CPixHarvesterServer.exe"
+
 ; CPiX Search Server
 
 "$(EPOCROOT)epoc32\release\armv5\$(TARGET)\CPixSearchServer.exe"
@@ -48,11 +57,6 @@
 ;"$(EPOCROOT)epoc32\release\armv5\$(TARGET)\qtcpixapplauncher.dll"
 ;-"c:\sys\bin\qtcpixapplauncher.dll"
 
-; CPiX Harvester Server
-
-"$(EPOCROOT)epoc32\release\armv5\$(TARGET)\CPixHarvesterServer.exe"
--"c:\sys\bin\CPixHarvesterServer.exe"
-
 ; HarvesterServer is started at boot time - copy resource file
 ; must be hardcoded 'c' drive for this file
 "$(EPOCROOT)epoc32\data\z\private\101f875a\import\2001F6FB.rsc"
@@ -130,4 +134,7 @@
 
 ;Qt Email fetcher
 "\epoc32\release\armv5\$(TARGET)\qtemailfetcher.dll"
--"c:\sys\bin\qtemailfetcher.dll"
\ No newline at end of file
+-"c:\sys\bin\qtemailfetcher.dll"
+
+@"..\watchdog\sis\WatchDog.sisx", (0x20029AB8)
+
Binary file watchdog/cenrep/20029AB8.cre has changed
Binary file watchdog/cenrep/20029AB8.txt has changed
--- a/watchdog/group/bld.inf	Wed Aug 18 10:53:26 2010 +0300
+++ b/watchdog/group/bld.inf	Thu Sep 02 21:37:32 2010 +0300
@@ -21,3 +21,7 @@
 
 PRJ_MMPFILES
 WatchDog.mmp
+
+PRJ_EXPORTS
+../cenrep/20029AB8.cre                         /epoc32/winscw/c/private/10202be9/20029AB8.cre
+../cenrep/20029AB8.cre                         /epoc32/data/z/private/10202be9/20029AB8.cre
--- a/watchdog/group/watchdog.mmp	Wed Aug 18 10:53:26 2010 +0300
+++ b/watchdog/group/watchdog.mmp	Thu Sep 02 21:37:32 2010 +0300
@@ -30,9 +30,10 @@
 MW_LAYER_SYSTEMINCLUDE
 
 SOURCEPATH	  ../src
-SOURCE		  WatchDog.cpp CWDMonitor.cpp CWDTimer.cpp
+SOURCE		  WatchDog.cpp CWDMonitor.cpp CWDTimer.cpp centrepmonitor.cpp
 
 LIBRARY		 euser.lib
+LIBRARY      centralrepository.lib
 
 // For logging
 LIBRARY 	  flogger.lib 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/watchdog/inc/centrepmonitor.h	Thu Sep 02 21:37:32 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* 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 CENTREPMONITOR_H_
+#define CENTREPMONITOR_H_
+
+#include <e32base.h>
+#include "mcentrephandler.h"
+
+class CRepository;
+
+class CentrepMonitor : public CActive
+    {
+public:
+    /*
+     * Construction
+     * @return instance of CentrepMonitor
+     */
+    static CentrepMonitor* NewL( MCentrepHandler* aCentrepHandler, TUint32 aKey ); //For callback
+    /*
+     * Construction
+     * @return instance of CentrepMonitor
+     */
+    static CentrepMonitor* NewLC( MCentrepHandler* aCentrepHandler, TUint32 aKey );
+    /*
+     * Destructor
+     */
+    virtual ~CentrepMonitor();
+public:
+    /*
+     * Srats the notifier to monitor the changes done for HS and SS centrep key
+     */
+    void StartNotifier();
+    
+    //From CActive
+    void RunL();
+    void DoCancel();
+    TInt RunError( TInt aError );
+private:    
+    /*
+     * Constructor
+     */
+    CentrepMonitor();
+    
+    /*
+     * Second phase constructor
+     */
+    void ConstructL( MCentrepHandler* aCentrepHandler, TUint32 aKey );    
+
+private:
+
+    TUint32 iKey;
+    //centrep handler.Not owned
+    MCentrepHandler* iCentrepHandler;
+    //repository db for watchdog.owned
+    CRepository* aWDrepo;
+    };
+
+
+#endif //CENTREPMONITOR_H_
--- a/watchdog/inc/cwdmonitor.h	Wed Aug 18 10:53:26 2010 +0300
+++ b/watchdog/inc/cwdmonitor.h	Thu Sep 02 21:37:32 2010 +0300
@@ -21,11 +21,13 @@
 
 #include <e32base.h>
 #include "MWDTimerHandler.h"
+#include "mcentrephandler.h"
 
 //Forward declaration
 class CWDTimer;
+class CentrepMonitor;
 
-class CWDMonitor : public CBase , public MWDTimerHandler
+class CWDMonitor : public CBase , public MWDTimerHandler, public MCentrepHandler
     {
 public:
     /*
@@ -52,6 +54,9 @@
     // From MWDTimerHandler
     void HandleWDTimerL();
     
+    //From MCentrepHandler
+    void HandlecentrepL( TUint32 aKey );
+    
 private:
     /*
      * @description Starts the specified server.
@@ -82,7 +87,16 @@
 private:
     
     // Timer which is used to delay server monitoring
-    CWDTimer* iWDTimer; 
+    CWDTimer* iWDTimer;
+    TBool iAllowHS;
+    TBool iAllowSS;
+    TUid iHSUid;
+    TUid iSSUid;
+    HBufC* iHSName;
+    HBufC* iSSName;
+    
+    CentrepMonitor* aHSMonitor;
+    CentrepMonitor* aSSMonitor;
     };
 
 #endif /* CWDMONITOR_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/watchdog/inc/mcentrephandler.h	Thu Sep 02 21:37:32 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* 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:  This application is to monitor Harvester and Search Server
+*
+*/
+
+#ifndef MCENTREPHANDLER_H
+#define MCENTREPHANDLER_H
+
+
+class MCentrepHandler
+    {
+public :
+    /*
+    * HandleWDTimerL signal when the watchdog timer expires 
+    */
+    virtual void HandlecentrepL( TUint32 aKey ) = 0;
+    };
+
+
+#endif /* MCENTREPHANDLER_H */
--- a/watchdog/sis/watchdog.pkg.source	Wed Aug 18 10:53:26 2010 +0300
+++ b/watchdog/sis/watchdog.pkg.source	Thu Sep 02 21:37:32 2010 +0300
@@ -10,7 +10,7 @@
 &EN
 
 ; standard SIS file header
-#{"WatchDog"},(0x20029AB8),1,0,0, TYPE=SA;$(SVN)
+#{"WatchDog"},(0x20029AB8),1,0,0, TYPE=SA,RU;$(SVN)
 
 ;Localised Vendor name
 %{"Nokia-EN"}
@@ -25,7 +25,7 @@
 ;You should change the source paths to match that of your environment
 ;<source> <destination>
 
-"$(EPOCROOT)epoc32\release\armv5\$(TARGET)\cpixwatchdog.exe"   -"c:\sys\bin\cpixwatchdog.exe"
+"$(EPOCROOT)epoc32\release\armv5\$(TARGET)\cpixwatchdog.exe"   -"c:\sys\bin\cpixwatchdog.exe",FR,RI
 
 ; Watchdog is started at boot time - copy resource file
 ; must be hardcoded 'c' drive for this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/watchdog/src/centrepmonitor.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -0,0 +1,116 @@
+/*
+* 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:  This application is to monitor Harvester and Search Server
+ *
+*/
+
+
+//  Include Files  
+#include "WatchDogCommon.h"
+#include "centrepmonitor.h"
+#include <centralrepository.h>
+#include <cpixwatchdogcommon.h>
+
+// -----------------------------------------------------------------------------
+// CentrepMonitor::NewL
+// -----------------------------------------------------------------------------
+//
+CentrepMonitor* CentrepMonitor::NewL( MCentrepHandler* aCentrepHandler, TUint32 aKey )
+    {
+    CentrepMonitor* self = CentrepMonitor::NewLC( aCentrepHandler, aKey );
+    CleanupStack::Pop();
+    return self;
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::NewLC
+// -----------------------------------------------------------------------------
+//
+CentrepMonitor* CentrepMonitor::NewLC( MCentrepHandler* aCentrepHandler, TUint32 aKey )
+    {
+    CentrepMonitor* self = new ( ELeave ) CentrepMonitor( );
+    CleanupStack::PushL( self );
+    self->ConstructL( aCentrepHandler, aKey );
+    return self;
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::~CentrepMonitor()
+// -----------------------------------------------------------------------------
+//
+CentrepMonitor::~CentrepMonitor()
+    {
+    Cancel();
+    delete aWDrepo;
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::CentrepMonitor()
+// -----------------------------------------------------------------------------
+//
+CentrepMonitor::CentrepMonitor( ): CActive( CActive::EPriorityStandard )                        
+    {
+    
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CentrepMonitor::ConstructL( MCentrepHandler* aCentrepHandler, TUint32 aKey )
+    {
+    CActiveScheduler::Add( this );
+    iCentrepHandler = aCentrepHandler;
+    iKey = aKey;
+    aWDrepo = CRepository::NewL( KWDrepoUidMenu );
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::RunL()
+// -----------------------------------------------------------------------------
+//
+void CentrepMonitor::RunL()
+    {   
+    if ( iCentrepHandler )
+       iCentrepHandler->HandlecentrepL( iKey );
+    aWDrepo->NotifyRequest( iKey , iStatus );
+    SetActive();
+    }
+	
+// -----------------------------------------------------------------------------
+// CentrepMonitor::DoCancel()
+// -----------------------------------------------------------------------------
+//
+void CentrepMonitor::DoCancel()
+    {  
+    }
+
+// -----------------------------------------------------------------------------
+// CentrepMonitor::RunError()
+// -----------------------------------------------------------------------------
+//
+TInt CentrepMonitor::RunError( TInt )
+    {                   
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CentrepMonitor::RunError()
+// -----------------------------------------------------------------------------
+//
+void CentrepMonitor::StartNotifier()
+    {
+    aWDrepo->NotifyRequest( iKey , iStatus );
+       SetActive();
+    }
--- a/watchdog/src/cwdmonitor.cpp	Wed Aug 18 10:53:26 2010 +0300
+++ b/watchdog/src/cwdmonitor.cpp	Thu Sep 02 21:37:32 2010 +0300
@@ -19,6 +19,9 @@
 #include "WatchDogCommon.h"
 #include "CWDTimer.h"
 #include <HarvesterServerLogger.h>
+#include <centralrepository.h>
+#include <cpixwatchdogcommon.h>
+#include "centrepmonitor.h"
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
 #include "cwdmonitorTraces.h"
@@ -52,6 +55,8 @@
 //
 CWDMonitor::~CWDMonitor()
     {
+    delete iHSName;
+    delete iSSName;
     delete iWDTimer;
     }
 
@@ -68,8 +73,52 @@
 // -----------------------------------------------------------------------------
 //
 void CWDMonitor::ConstructL()
-    {
-    iWDTimer = CWDTimer::NewL( this );
+    {    
+    CRepository* wdrepo = CRepository::NewL( KWDrepoUidMenu );
+    wdrepo->Get( KHarvesterServerKey , iAllowHS );
+    wdrepo->Get( KSearchServerKey , iAllowSS );
+    
+    //get the UID's of the servers
+    TBuf<KCenrepUidLength> temp;
+    TInt64 value;
+    TLex uidvalue;
+    //Read Harvester server UId value
+    if ( KErrNone == wdrepo->Get( KHarvesterServerUIDKey, temp ) )
+        {
+        uidvalue.Assign(temp);        
+        if (KErrNone == uidvalue.Val( value,EHex ))
+            iHSUid.iUid = value;
+        }
+    //Read Search server Uid value
+    if ( KErrNone == wdrepo->Get( KSearchServerUIDKey, temp ))
+        {
+        uidvalue.Assign(temp);
+        if (KErrNone == uidvalue.Val( value,EHex ))
+          iSSUid.iUid = value;
+        }
+    
+    //Read Harvester server Name
+    if ( KErrNone == wdrepo->Get( KHarvesterServerNAMEKey, temp ))
+        {
+        iHSName = HBufC::NewL( temp.Length() );
+        TPtr hsname = iHSName->Des();
+        hsname.Copy( temp );
+        }
+    //Read Search server Name
+    if ( KErrNone == wdrepo->Get( KSearchServerNAMEKey, temp ))
+        {
+        iSSName = HBufC::NewL( temp.Length() );
+        TPtr ssname = iSSName->Des(); 
+        ssname.Copy( temp );
+        }
+    delete wdrepo;
+    if ( iAllowHS || iAllowSS )
+        iWDTimer = CWDTimer::NewL( this );
+    
+    aHSMonitor = CentrepMonitor::NewL( this, KHarvesterServerKey);
+    aHSMonitor->StartNotifier();
+    aSSMonitor = CentrepMonitor::NewL( this, KSearchServerKey);
+    aSSMonitor->StartNotifier();
     }
 
 // -----------------------------------------------------------------------------
@@ -80,26 +129,26 @@
     {
     OstTrace0( TRACE_NORMAL, CWDMONITOR_HANDLEWDTIMERL, "CWDMonitor::HandleWDTimerL(): Check the servers" );
     CPIXLOGSTRING("CWDMonitor::HandleWDTimerL(): Check the servers");
-    TFindServer harvesterServer(KHarvesterServer);
-    TFindServer searchServer(KSearchServer);
+    TFindServer harvesterServer(*iHSName);
+    TFindServer searchServer(*iSSName);
     
     TFullName name;
     
-    if ( harvesterServer.Next(name) != KErrNone)
+    if ( iAllowHS && (harvesterServer.Next(name) != KErrNone) )
         {
         OstTrace0( TRACE_NORMAL, DUP1_CWDMONITOR_HANDLEWDTIMERL, "Harvester Server is down, Starting Harvester Server" );
         CPIXLOGSTRING("Harvester Server is down, Starting Harvester Server");
         //Harvester server is not running. 
         //Start Harvester server
-        StartServer( KHarvesterServer , KHServerUid3 ,KHarvesterServerSemaphoreName);        
+        StartServer( *iHSName , iHSUid ,KHarvesterServerSemaphoreName);        
         }
-    else if ( searchServer.Next( name ) != KErrNone)
+    else if ( iAllowSS && (searchServer.Next( name ) != KErrNone) )
         {
         OstTrace0( TRACE_NORMAL, DUP2_CWDMONITOR_HANDLEWDTIMERL, "Search Server is down, Starting Search Server" );
         CPIXLOGSTRING("Search Server is down, Starting Search Server");
         //Search server is not running.
         //Start search server
-        StartServer( KSearchServer , KSServerUid3 ,KSearchServerSemaphoreName);
+        StartServer( *iSSName , iSSUid ,KSearchServerSemaphoreName);
         }
     return;
     }
@@ -163,4 +212,23 @@
     return KErrNone;
     }
 
+// -----------------------------------------------------------------------------
+// CWDMonitor::HandlecentrepL()
+// -----------------------------------------------------------------------------
+//
+void CWDMonitor::HandlecentrepL( TUint32 aKey )
+    {
+    CRepository* wdrepo = CRepository::NewL( KWDrepoUidMenu );        
+    if ( KHarvesterServerKey == aKey )
+        {
+        // get the harvester server status
+        wdrepo->Get( KHarvesterServerKey , iAllowHS );        
+        }
+    else if ( KSearchServerKey == aKey )
+        {
+        // get the Search server status
+        wdrepo->Get( KSearchServerKey , iAllowSS );        
+        }
+    delete wdrepo;
+    }
 //End of file