searcher/searchserver/src/CCPixAbstractSearcher.cpp
author hgs
Mon, 28 Jun 2010 10:34:53 +0530
changeset 8 6547bf8ca13a
child 14 8bd192d47aaa
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * CCPixAbstractSearcher.cpp
hgs
parents:
diff changeset
     3
 *
hgs
parents:
diff changeset
     4
 *  Created on: Oct 8, 2009
hgs
parents:
diff changeset
     5
 *      Author: admin
hgs
parents:
diff changeset
     6
 */
hgs
parents:
diff changeset
     7
#include "CCpixAbstractSearcher.h"
hgs
parents:
diff changeset
     8
hgs
parents:
diff changeset
     9
#include "Common.h"
hgs
parents:
diff changeset
    10
#include "SearchServerHelper.h"
hgs
parents:
diff changeset
    11
#include "CSearchDocument.h"
hgs
parents:
diff changeset
    12
hgs
parents:
diff changeset
    13
CCPixAbstractSearcher::~CCPixAbstractSearcher() {} 
hgs
parents:
diff changeset
    14
hgs
parents:
diff changeset
    15
hgs
parents:
diff changeset
    16
namespace {
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/**
hgs
parents:
diff changeset
    19
 * cpix_DocFieldEnum destroyer for TCleanupItem
hgs
parents:
diff changeset
    20
 * @param aCpixDocFieldEnum CPix document
hgs
parents:
diff changeset
    21
 */
hgs
parents:
diff changeset
    22
void CpixDocFieldEnumDestroyer(TAny* aCpixDocFieldEnum)
hgs
parents:
diff changeset
    23
	{
hgs
parents:
diff changeset
    24
	cpix_DocFieldEnum_destroy( static_cast<cpix_DocFieldEnum*>( aCpixDocFieldEnum ) );
hgs
parents:
diff changeset
    25
	}
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
} // namespace
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
CSearchDocument* CCPixAbstractSearcher::ConvertDocumentL( cpix_Document* aDocument )
hgs
parents:
diff changeset
    30
	{
hgs
parents:
diff changeset
    31
	// Read first the system fields that are passed as constructor parameters 
hgs
parents:
diff changeset
    32
	// 
hgs
parents:
diff changeset
    33
	const wchar_t* documentId = cpix_Document_getFieldValue( aDocument, LCPIX_DOCUID_FIELD);
hgs
parents:
diff changeset
    34
	SearchServerHelper::CheckCpixErrorL(aDocument, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    35
	
hgs
parents:
diff changeset
    36
	TPtrC documentIdPtr(KNullDesC);
hgs
parents:
diff changeset
    37
	if (documentId)
hgs
parents:
diff changeset
    38
		documentIdPtr.Set(reinterpret_cast<const TUint16*>(documentId));
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
	const wchar_t* documentAppClass = cpix_Document_getFieldValue(aDocument, LCPIX_APPCLASS_FIELD);
hgs
parents:
diff changeset
    41
	SearchServerHelper::CheckCpixErrorL(aDocument, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    42
	
hgs
parents:
diff changeset
    43
	TPtrC documentAppClassPtr(KNullDesC);
hgs
parents:
diff changeset
    44
	if (documentAppClass)
hgs
parents:
diff changeset
    45
		documentAppClassPtr.Set(reinterpret_cast<const TUint16*>(documentAppClass));
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
	const wchar_t* documentExcerpt = cpix_Document_getFieldValue(aDocument, LCPIX_EXCERPT_FIELD);
hgs
parents:
diff changeset
    48
	SearchServerHelper::CheckCpixErrorL(aDocument, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    49
	
hgs
parents:
diff changeset
    50
	TPtrC documentExcerptPtr(KNullDesC);
hgs
parents:
diff changeset
    51
	if (documentExcerpt)
hgs
parents:
diff changeset
    52
		documentExcerptPtr.Set(reinterpret_cast<const TUint16*>(documentExcerpt));
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
	// Setup the document
hgs
parents:
diff changeset
    55
	// 
hgs
parents:
diff changeset
    56
	
hgs
parents:
diff changeset
    57
	CSearchDocument* document = CSearchDocument::NewLC(documentIdPtr, documentAppClassPtr, documentExcerptPtr);
hgs
parents:
diff changeset
    58
	
hgs
parents:
diff changeset
    59
	// Enumerate the field of cpix_Document and add each of them 
hgs
parents:
diff changeset
    60
	// into the CSearchDocument object. 
hgs
parents:
diff changeset
    61
	// 
hgs
parents:
diff changeset
    62
	
hgs
parents:
diff changeset
    63
	cpix_DocFieldEnum* docFieldEnum = cpix_Document_fields(aDocument);
hgs
parents:
diff changeset
    64
	SearchServerHelper::CheckCpixErrorL(aDocument, KErrDocumentAccessFailed);
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
	CleanupStack::PushL( TCleanupItem(CpixDocFieldEnumDestroyer, docFieldEnum) ); 
hgs
parents:
diff changeset
    67
	
hgs
parents:
diff changeset
    68
	cpix_Field field;
hgs
parents:
diff changeset
    69
	while (cpix_DocFieldEnum_hasMore(docFieldEnum))
hgs
parents:
diff changeset
    70
		{
hgs
parents:
diff changeset
    71
		cpix_DocFieldEnum_next(docFieldEnum, &field);
hgs
parents:
diff changeset
    72
		SearchServerHelper::CheckCpixErrorL(docFieldEnum, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    73
		
hgs
parents:
diff changeset
    74
		const wchar_t* name = cpix_Field_name(&field);
hgs
parents:
diff changeset
    75
		SearchServerHelper::CheckCpixErrorL(&field, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
		TPtrC namePtr( reinterpret_cast<const TUint16*>( name ) );
hgs
parents:
diff changeset
    78
		if (    namePtr == TPtrC( (TUint16*)LCPIX_DOCUID_FIELD )
hgs
parents:
diff changeset
    79
			 || namePtr == TPtrC( (TUint16*)LCPIX_APPCLASS_FIELD )
hgs
parents:
diff changeset
    80
			 || namePtr == TPtrC( (TUint16*)LCPIX_EXCERPT_FIELD ) )
hgs
parents:
diff changeset
    81
			{
hgs
parents:
diff changeset
    82
			continue;  // These fields have already been added
hgs
parents:
diff changeset
    83
			}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
		const wchar_t* value = cpix_Field_stringValue(&field);
hgs
parents:
diff changeset
    86
		SearchServerHelper::CheckCpixErrorL(&field, KErrDatabaseQueryFailed);
hgs
parents:
diff changeset
    87
		
hgs
parents:
diff changeset
    88
		TPtrC stringvalue( reinterpret_cast<const TUint16*>( value ) );
hgs
parents:
diff changeset
    89
		
hgs
parents:
diff changeset
    90
		// NOTE: Also system fields will be iterated. Because  
hgs
parents:
diff changeset
    91
		//       the field name is not checked, all _appclass,
hgs
parents:
diff changeset
    92
		//       _excerpt etc. fields  will be overwritten. 
hgs
parents:
diff changeset
    93
		document->AddFieldL(namePtr, stringvalue);
hgs
parents:
diff changeset
    94
		}
hgs
parents:
diff changeset
    95
	
hgs
parents:
diff changeset
    96
	CleanupStack::PopAndDestroy(docFieldEnum);
hgs
parents:
diff changeset
    97
	
hgs
parents:
diff changeset
    98
	CleanupStack::Pop(document);
hgs
parents:
diff changeset
    99
	
hgs
parents:
diff changeset
   100
	return document;
hgs
parents:
diff changeset
   101
	}