--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/engine/src/clmkdbsearchutils.cpp Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2006 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 file contains search utilities to query the landmarks Db.
+* For example getting all landmarks under a category, Name of a
+* particular category etc.
+*
+*/
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include "mlmkdbsearchutilsobserver.h"
+#include "MLmkAOOperationObserver.h"
+#include "CLmkAOOperation.h"
+#include "clmkdbsearchutils.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::CLmkDbSearchUtils
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLmkDbSearchUtils::CLmkDbSearchUtils():
+ CActive(EPriorityStandard)
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::~CLmkDbSearchUtils
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CLmkDbSearchUtils::~CLmkDbSearchUtils()
+ {
+ delete iSearch;
+ delete iDb;
+ if (iSearchAO)
+ {
+ iSearchAO->StopOperation();
+ }
+ delete iSearchAO;
+ delete iCriteria;
+ if ( IsActive() )
+ {
+ Cancel();
+ }
+ iLmItemId.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CLmkDbSearchUtils* CLmkDbSearchUtils::NewL()
+ {
+ CLmkDbSearchUtils* self = new (ELeave) CLmkDbSearchUtils();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();// self
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CLmkDbSearchUtils::ConstructL()
+ {
+ iDb = CPosLandmarkDatabase::OpenL();
+ iSearch = CPosLandmarkSearch::NewL( *iDb );
+ iCriteria = CPosLmCategoryCriteria::NewLC();
+ CleanupStack::Pop( iCriteria );
+ iSearchAO = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::GetLandmarksUnderCategoryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CLmkDbSearchUtils::GetLandmarksUnderCategoryL(MLmkDbSearchUtilsObserver* aObserver,
+ TPosLmItemId aCategoryId)
+ {
+ iObserver = aObserver;
+ iCriteria->SetCategoryItemId(aCategoryId);
+ TPosLmSortPref sortOrder( CPosLandmark::ELandmarkName,
+ TPosLmSortPref::EAscending );
+
+ CPosLmOperation* operation =
+ iSearch->StartLandmarkSearchL( *iCriteria , sortOrder );
+
+ CleanupStack::PushL( operation );
+ if (iSearchAO)
+ {
+ iSearchAO->StopOperation();
+ }
+ delete iSearchAO; // Cancel if any pending requests
+ iSearchAO = NULL;
+ iSearchAO = CLmkAOOperation::NewL( operation,
+ *this,
+ MLmkAOOperationObserver::ESearch,
+ EFalse );
+
+ CleanupStack::Pop( operation ); // ownership transferred
+ iSearchAO->StartOperation();
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::GetCategoryNameL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CLmkDbSearchUtils::GetCategoryNameL(TPosLmItemId aCategoryId)
+ {
+ CPosLmCategoryManager* mgr = CPosLmCategoryManager::NewL( *iDb );
+ CleanupStack::PushL( mgr );
+ // Leaves with KErrNotFound if category doesn't exist
+ CPosLandmarkCategory* category = mgr->ReadCategoryLC( aCategoryId );
+ TPtrC categoryName;
+ User::LeaveIfError(category->GetCategoryName(categoryName));
+ // The caller will take ownership of the buffer
+ HBufC* retCategoryName = HBufC::NewL(categoryName.Length());
+ TPtr ptr = retCategoryName->Des();
+ ptr.Copy(categoryName);
+ CleanupStack::PopAndDestroy( 2 ); // category and mgr
+ return retCategoryName;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::GetLandmarkForIdL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPosLandmark* CLmkDbSearchUtils::GetLandmarkForIdL(TPosLmItemId aLandmarkId)
+ {
+ CPosLandmark* lmk = iDb->ReadLandmarkLC(aLandmarkId);
+ CleanupStack::Pop(); // ReadLandmarkLC
+ return lmk;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::GetLandmarksL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CLmkDbSearchUtils::GetLandmarksL(MLmkDbSearchUtilsObserver* aObserver,
+ RArray<TPosLmItemId> aLmItemId,
+ RPointerArray<CPosLandmark>* aArray)
+ {
+ iLmkArray = aArray;
+ iLmItemId = aLmItemId;
+ iSearchIndex = 0;
+ iObserver = aObserver;
+ SetActive();
+ TRequestStatus *status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::RunL
+// -----------------------------------------------------------------------------
+//
+void CLmkDbSearchUtils::RunL()
+ {
+ if(iSearchIndex >= iLmItemId.Count())
+ {
+ iLmItemId.Close();
+ iObserver->HandleLmkSearchNotifyL();
+ }
+ else
+ {
+ TPosLmItemId itemId = iLmItemId[iSearchIndex];
+ CPosLandmark* landmark = iDb->ReadLandmarkLC(itemId);
+ iLmkArray->Append(landmark);
+ CleanupStack::Pop(); // ReadLandmarkLC
+ ++iSearchIndex;
+ SetActive();
+ TRequestStatus *status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CLmkDbSearchUtils::DoCancel()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDbSearchUtils::HandleOperationL
+// -----------------------------------------------------------------------------
+//
+void CLmkDbSearchUtils::HandleOperationL(TOperationTypes /*aType*/,
+ TReal32 /*aProgress*/,
+ TInt /*aStatus*/ )
+ {
+ CPosLmItemIterator* iterator = iSearch->MatchIteratorL();
+ CleanupStack::PushL( iterator );
+ RArray<TPosLmItemId> itemIdArray;
+ CleanupClosePushL( itemIdArray );
+ iterator->GetItemIdsL( itemIdArray, 0, iterator->NumOfItemsL() );
+ if ( iObserver )
+ {
+ iObserver->HandleCategorySearchNotifyL( itemIdArray );
+ }
+ CleanupStack::PopAndDestroy(); //itemIdArray
+ CleanupStack::PopAndDestroy( iterator );
+ }
+
+