--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp38.cpp Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,1452 @@
+/*
+* Copyright (c) 2005 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:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp38.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include "FT_LandmarkConstants.h"
+
+#include "FT_CCompositeSearchResult.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp38::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::StartL()
+ {
+ TTime startTime;
+ TTime stopTime;
+ startTime.UniversalTime();
+
+ iDatabase = UseCompositeLandmarksDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ StartLandmarksCompositeTestL();
+
+ TestCompositeInCompositeL();
+
+ TestSeveralTextArgumentsL();
+
+ TestSeveralTextArgumentsWithORL();
+
+ TestSortOrderWithORL();
+
+ TestWithSortOrderLandmarksL();
+
+ TestWithSortOrderNearestL();
+
+ TestTwoLmCategoryCriteriaL();
+
+ TestAddAndRemoveL();
+
+ TInt err = KErrNone;
+ TRAP(err, TestWithNoPreviousResultL(0));
+ if (err != KErrArgument)
+
+ {
+ iLog->Log(_L("Searching with no previous result should cause StartLandmarkL to leave with KErrArgument"));
+ User::Leave(err);
+ }
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ SearchAndCancelL(EFalse);
+ SearchAndCancelL(ETrue);
+
+ // Since category and composite is no longer allowed, no need to test this
+ //TestWithSortOrderCategoriesL();
+ //TestCategoryCompositeSearchL();
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ TBuf<100> buf;
+ buf.Format(_L("TP38 took %d seconds"), resse);
+ iLog->Log(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderCategoriesL()
+ {
+ iLog->Log(_L("TestWithSortOrderCategoriesL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria)"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ CPosLmCategoryManager::TCategorySortPref sortPref;
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ TInt i=0;
+ TInt j=0;
+ for (j=0;j<2;j++)
+ {
+ if (j==0)
+ {
+ iLog->Log(_L("Sorting Ascending"));
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ }
+ else
+ {
+ iLog->Log(_L("Sorting Descending"));
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+ }
+
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, sortPref);
+
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ for (i=1;i<27;i++) {searchResults.Append(i);}
+
+ CategoriesSortL(searchResults, sortPref);
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+ while (id != KPosLmNullItemId)
+ {
+ // Check that sort order is correct
+ AssertTrueSecL(searchResults[counter] == id, _L("Error in sorting"));
+ id = iter->NextL();
+ counter++;
+ }
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(iter);
+ }
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderNearestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderNearestL()
+ {
+
+ iLog->Log(_L("TestWithSortOrderNearestL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria same coordinate as landmark itemid=3 God
+ TCoordinate coord(45, 45);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ // Then add an IdList
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ // Use these four landmarks
+ list.Append(6);
+ list.Append(7);
+ list.Append(3);
+ list.Append(10);
+
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ if (err != KErrNone)
+
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(&list);
+ CleanupStack::Pop(idList);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+ // This is the correct distance sorted array
+ searchResults.Append(3);
+ searchResults.Append(7);
+ searchResults.Append(6);
+ searchResults.Append(10);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ if (id != (searchResults)[ii])
+ {
+ // Check if same name then don't leave, there are three landmarks with same name, Mölndal
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ TInt sourceId = source->LandmarkId();
+ target->GetLandmarkName(targetName);
+ TInt targetId = target->LandmarkId();
+
+
+ AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id);
+ CleanupStack::PopAndDestroy(2, source);
+ }
+
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestTwoLmCategoryCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestTwoLmCategoryCriteriaL()
+ {
+ iLog->Log(_L("TestTwoLmCategoryCriteriaL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Create a cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryItemId"));
+ catSearchCriteria->SetCategoryItemId(14);
+ composite->AddArgument(catSearchCriteria);
+ CleanupStack::Pop(catSearchCriteria);
+
+ // Create another cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria2 = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryNameL"));
+ catSearchCriteria2->SetCategoryNameL(_L("McDonalds"));
+ composite->AddArgument(catSearchCriteria2);
+ CleanupStack::Pop(catSearchCriteria2);
+
+ // Should find id7=Billigt and id27=LOG9
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // This is the correct result list
+ searchResults.Append(27);
+ searchResults.Append(7);
+
+ TInt size = iter->NumOfItemsL();
+ if (size != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator"));
+ User::Leave(-1);
+
+ }
+
+ TInt found = 0;
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ for (ii=0;ii<size;ii++)
+ {
+ if (id == (searchResults)[ii])
+ {
+ found++;
+ }
+ }
+ id = iter->NextL();
+ }
+
+ if (found != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator1"));
+ User::Leave(-1);
+
+ }
+
+ // Now refine search with another CPosLmCategoryCriteria
+ // Create another cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria3 = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryItemId"));
+ catSearchCriteria3->SetCategoryItemId(11);
+ composite->AddArgument(catSearchCriteria3);
+ CleanupStack::Pop(catSearchCriteria3);
+
+ // Should find id27=LOG9
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ searchResults.Reset();
+ searchResults.Append(27);
+ found=0;
+ size = iter->NumOfItemsL();
+ id = iter->NextL();
+ if (size != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator"));
+ User::Leave(-1);
+
+ }
+
+ while (id != KPosLmNullItemId)
+ {
+ for (ii=0;ii<size;ii++)
+ {
+ if (id == (searchResults)[ii])
+ {
+ found++;
+ }
+ }
+ id = iter->NextL();
+ }
+
+ if (found != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong items returned from iterator2"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderLandmarksL()
+ {
+ iLog->Log(_L("TestWithSortOrderLandmarksL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ TInt i=0;
+ TInt j=0;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria
+ TCoordinate coord(12.123, -20,123);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ // Then add an IdList
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+ for (i=1;i<106;i++) {list.Append(i);}
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(&list);
+ CleanupStack::Pop(idList);
+
+ // Create search result of all landmark ids: 1-105
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+ for (i=1;i<106;i++) {searchResults.Append(i);}
+
+ for (j=0;j<2;j++)
+ {
+ if (j==0)
+ {
+ iLog->Log(_L("Sorting Ascending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ }
+ else
+ {
+ iLog->Log(_L("Sorting Descending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ }
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, sortPref, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt size = iter->NumOfItemsL();
+
+ LandmarksSortL(searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ if (id != (searchResults)[ii])
+ {
+ // Check if same name then don't leave, there are three landmarks with same name, Mölndal
+
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ TInt sourceId = source->LandmarkId();
+ target->GetLandmarkName(targetName);
+ TInt targetId = target->LandmarkId();
+
+ AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id);
+
+ CleanupStack::PopAndDestroy(2, source);
+ }
+
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestCompositeInCompositeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestCompositeInCompositeL()
+ {
+ iLog->Log(_L("TestCompositeInCompositeL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-48, 5, -5, 20);
+
+ err = composite->AddArgument(areaCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(areaCriteria);
+
+ //Create composite object that should be used as argument to the first composite object
+ CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+
+ textCriteria2->SetTextL(_L("TE,*"));
+
+ err = composite2->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Add a IdList
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+
+ for (TInt i=0;i<100;i++)
+ {
+ list.Append(i);
+ }
+ idList->SetLandmarkIdsL(list);
+
+ err = composite2->AddArgument(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument4"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(idList);
+ CleanupStack::PopAndDestroy(&list);
+
+ // Nested composite is not allowed
+ err = composite->AddArgument(composite2);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("Wrong error code when adding composite to a composite"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(composite2);
+
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::StartLandmarksCompositeTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::StartLandmarksCompositeTestL()
+ {
+ iLog->Log(_L("StartTestL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog);
+ CleanupStack::PushL(res);
+
+ TInt index=0;
+ TInt errorsFound = KErrNone;
+
+ TBuf<100> buf;
+ buf.Format(_L(">>>>>>>Test round %d <<<<<<<"), index);
+
+ while (!res->GetCompositeSearchResultsL(*composite))
+ {
+ PrintCompositeInfo(composite);
+
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, res->Redefined());
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ TInt expMatches = res->iResultIds.Count();
+
+ buf.Format(_L("nr of matches: %d nr of exp matches: %d"), matches, expMatches);
+ iLog->Log(buf);
+
+ while (id != KPosLmNullItemId)
+ {
+ buf.Format(_L("Result from iterator id: %d"), id);
+ iLog->Log(buf);
+ TInt idde = res->iResultIds.Find(id);
+ if (idde == KErrNotFound)
+ {
+ iLog->Log(_L("MyError: Could not find id!!!"));
+ errorsFound++;
+ }
+ else
+ {
+ // Remove so that we dont find the same id again
+ res->iResultIds.Remove(idde);
+ }
+ id = iter->NextL();
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ if (expMatches != matches)
+ {
+ iLog->Log(_L("MyError: Wrong number of matches"));
+ errorsFound++;
+ }
+ }
+
+ if (errorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP38"));
+ User::Leave(-1);
+
+ }
+ iLog->Log(_L("----Done---"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp38::TestSeveralTextArgumentsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSeveralTextArgumentsL()
+ {
+ iLog->Log(_L("TestSeveralTextArgumentsL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Stockholm"));
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Should find landmark id: 63 name: "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 1)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+ if (id != 63)
+ {
+
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 63"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestSeveralTextArgumentsWithORL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSeveralTextArgumentsWithORL()
+ {
+ iLog->Log(_L("TestSeveralTextArgumentsWithORL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Eriksberg"));
+ textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ //Create nearest criteria instance and try adding it to composite criteria,should leave with KErrNotSupported since ORcomposition
+ // is supported only for text criteria
+ TCoordinate coord(45, 45);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNotSupported)
+
+ {
+ iLog->Log(_L("Error,should not support any other criteria except Text criteria"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+
+
+
+
+ // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> idArray;
+ iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL());
+
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 4)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+ for(int i=0; i<idArray.Count(); i++ )
+ {
+ if(idArray[i] != 48 && idArray[i] != 55 && idArray[i] != 62 && idArray[i] != 63)
+ {
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63"));
+ User::Leave(-1);
+ }
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp38::TestSortOrderWithORL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSortOrderWithORL()
+ {
+
+
+
+ iLog->Log(_L("TestSeveralTextArgumentsWithORL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR);
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Eriksberg"));
+ textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite,sortPref, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> idArray;
+ iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL());
+
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 4)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+//Check if the landmarks are in ascending order i.e "Nokia","Nokia Copenhagen","Nokia Stockholm","TE Eriksberg"
+
+
+ if(idArray[0] != 48 || idArray[1] != 62 || idArray[2] != 63 || idArray[3] != 55)
+ {
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63"));
+ User::Leave(-1);
+ }
+
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestCategoryCompositeSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestCategoryCompositeSearchL()
+ {
+ iLog->Log(_L("TestCategoryCompositeSearchL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // Use differen text pattern
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ CPosLmCatNameCriteria* nameCriteria2 = CPosLmCatNameCriteria::NewLC();
+ nameCriteria2->SetSearchPatternL(_L("*kontor"));
+ err = composite->AddArgument(nameCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria2);
+
+ // Should find category id: 13 name "Nokia Kontor" and id: 14 name: "TietoEnator kontor"
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 2)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+ else iLog->Log(_L("Found 2 nr of matches"));
+
+ TPosLmItemId id1 = iter->NextL();
+ TPosLmItemId id2 = iter->NextL();
+
+ if ((id1 == 13 && id2 != 14) || (id1 == 14 && id2 != 13)
+ || (id2 == 13 && id1 != 14) || (id2 == 14 && id1 != 13))
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ // Use same text pattern
+ nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("TietoEnator*"));
+ err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ nameCriteria2 = CPosLmCatNameCriteria::NewLC();
+ nameCriteria2->SetSearchPatternL(_L("TietoEnator*"));
+ err = composite->AddArgument(nameCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nameCriteria2);
+
+ // Should find category id: 14 name "TietoEnator Kontor"
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ ExecuteAndDeleteLD(iOperation);
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 1)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+
+ }
+ else iLog->Log(_L("Found 1 nr of matches"));
+
+ id1 = iter->NextL();
+
+ if (id1 != 14)
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestAddAndRemoveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestAddAndRemoveL()
+ {
+ iLog->Log(_L("TestAddAndRemoveL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // 1) Add a text criteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // 2) Add a text criteria
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Natur*"));
+ err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // 3) Add an area criteria
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-12.23, 34.4, -2.05, 45.5);
+ err = composite->AddArgument(areaCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(areaCriteria);
+
+ // 4) Add a category criteria
+ CPosLmCategoryCriteria* catCriteria = CPosLmCategoryCriteria::NewLC();
+ catCriteria->SetCategoryNameL(_L("Museum"));
+ err = composite->AddArgument(catCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(catCriteria);
+
+ // 5) Add a nearest criteria
+ TCoordinate cord(12.23, 12);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(cord, ETrue);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ if (composite->NumOfArguments() != 5)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(-1);
+
+ }
+
+ // Remove (3) area criteria
+ CPosLmSearchCriteria* obj1 = composite->RemoveArgument(2);
+ delete obj1;
+ obj1 = NULL;
+
+ // Remove (5) nearest criteria (after 3 removed it has id 4)
+ CPosLmSearchCriteria* obj2 = composite->RemoveArgument(3);
+ delete obj2;
+ obj2 = NULL;
+
+ // Should find landmark with id: 87 name: "Naturhistoriska"
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt nr = iter->NumOfItemsL();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of landmarks after removing two arguments "), nr);
+ iLog->Log(buf);
+
+ TPosLmItemId id = iter->NextL();
+ if (id != 87)
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+
+ }
+ iter->Reset();
+
+ // Remove (1) first text criteria
+ CPosLmSearchCriteria* obj4 = composite->RemoveArgument(0);
+ delete obj4;
+ obj4 = NULL;
+
+ // Remove (2) the second text criteria
+ CPosLmSearchCriteria* obj3 = composite->RemoveArgument(0);
+ delete obj3;
+ obj3 = NULL;
+
+ CleanupStack::PopAndDestroy(iter);
+
+ // Should find six landmarks belonging to category "museum",
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite);
+ ExecuteAndDeleteLD(iOperation);
+
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ nr = iter->NumOfItemsL();
+ if (nr != 6)
+ {
+ iLog->Log(_L("Wrong number of landmarks returned"));
+ User::Leave(-1);
+ }
+ buf.Format(_L("Found %d nr of landmarks after removing two more arguments"), nr);
+ iLog->Log(buf);
+
+ iter->Reset();
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::SearchAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("SearchAndCancelL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(
+ *composite, EFalse));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL(
+ *composite, EFalse));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+
+ }
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithNoPreviousResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithNoPreviousResultL(TInt aTestNr)
+ {
+ iLog->Log(_L("TestWithNoPreviousResultL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ if (aTestNr == 0)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(textCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+ iLog->Log(_L("ERROR: Should leave here"));
+
+ iLog->Log(_L("Should never come here in the code"));
+ User::Leave(-1);
+
+ }
+ else if (aTestNr == 1)
+ {
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*kontor"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+ iLog->Log(_L("ERROR: Should leave here"));
+
+ iLog->Log(_L("Should never come here in the code"));
+ User::Leave(-1);
+
+ }
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::PrintCompositeInfo
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::PrintCompositeInfo(CPosLmCompositeCriteria* aComposite)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("PrintCompositeInfo() NrOfArg %d"), aComposite->NumOfArguments());
+ iLog->Log(buf);
+
+ for (TUint i=0;i<aComposite->NumOfArguments();i++)
+ {
+
+ CPosLmSearchCriteria& comp = aComposite->Argument(i);
+ TInt type = comp.CriteriaType();
+
+ if (type == CPosLmSearchCriteria::ECriteriaArea)
+ {
+ iLog->Log(_L("Arg Area found"));
+
+ CPosLmAreaCriteria& tt = static_cast<CPosLmAreaCriteria&>(comp);
+
+ TReal64 southLat;
+ TReal64 northLat;
+ TReal64 westLong;
+ TReal64 eastLong;
+
+ tt.GetSearchArea(southLat, northLat, westLong, eastLong);
+
+ buf.Format(_L("SouthL %f NorthL: %f WestL :%f EastL: %f"), (TReal)southLat, (TReal)northLat, (TReal)westLong, (TReal)eastLong);
+ iLog->Log(buf);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaText)
+ {
+ iLog->Log(_L("Arg Text found:"));
+ CPosLmTextCriteria& tt = static_cast<CPosLmTextCriteria&>(comp);
+ iLog->Log(tt.Text());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaComposite)
+ {
+ iLog->Log(_L("Arg Composite found"));
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategory)
+ {
+ iLog->Log(_L("Arg Category found"));
+
+ CPosLmCategoryCriteria& tt = static_cast<CPosLmCategoryCriteria&>(comp);
+ iLog->Log(tt.CategoryName());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaFindNearest)
+ {
+ CPosLmNearestCriteria& tt = static_cast<CPosLmNearestCriteria&>(comp);
+ TCoordinate cord;
+ tt.GetCoordinate(cord);
+ iLog->Log(_L("Arg Nearest found"));
+ buf.Format(_L("Latitude %f Longitude: %f MaxDist:%f"), (TReal)cord.Latitude(), (TReal)cord.Longitude(), (TReal)tt.MaxDistance());
+ iLog->Log(buf);
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaIdList)
+ {
+ iLog->Log(_L("Arg Idlist found"));
+ CPosLmIdListCriteria& tt = static_cast<CPosLmIdListCriteria&>(comp);
+
+ RArray<TPosLmItemId> result;
+ CleanupClosePushL(result);
+ tt.GetLandmarkIdsL(result);
+
+ buf.Format(_L("Nr of Ids: %d"), result.Count());
+ iLog->Log(buf);
+
+ for (TInt i=0;i<result.Count();i++)
+ {
+ buf.Format(_L("ID%d: %d"), i, result[i]);
+
+ }
+ CleanupStack::PopAndDestroy(&result);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategoryByName)
+ {
+ // Should never come here, ECriteriaCategoryByName not supported in composite objects
+ iLog->Log(_L("Arg Categorybyname found"));
+ }
+ }
+ }
+
+// End of File