landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp57.cpp
author hgs
Fri, 09 Jul 2010 20:18:03 +0530
changeset 35 1a92308afc46
parent 33 834e27cad510
permissions -rw-r--r--
201027

/*
* Copyright (c) 2004 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_CPosTp57.h"
#include <EPos_CPosLandmarkDatabase.h>
#include <EPos_CPosLmTextCriteria.h>
#include <EPos_CPosLmAreaCriteria.h>

// CONSTANTS  

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CPosTp57::GetName
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::GetName(TDes& aName) const
    {
    _LIT(KTestName, "TP57 - Multiple db search");
    aName = KTestName;
    }

// ---------------------------------------------------------
// CPosTp57::CloseTest
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::CloseTest()
    { 
    iSearchResults.ResetAndDestroy();
    }
    
// ---------------------------------------------------------
// CPosTp57::StartL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::StartL()
    {
    
    iDatabase = UseGeneratedDbFileL();
    
    CPosLandmark* lm = NULL;
    TRAPD(err, 
        {    
        lm = iDatabase->ReadLandmarkLC(1);
        CleanupStack::PopAndDestroy(lm);
        }
    );
    
/*    if (!err)
        {
        delete lm;
        }
  */      
    
    
    /*
    CreateDatabasesL();
  
    SearchWithTextCriteriaL();
    
    SearchWithAreaCriteriaL();
    */
	}



// ---------------------------------------------------------
// CPosTp57::SearchWithTextCriteria
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::SearchWithTextCriteriaL()
    {
    AppendSearchResultsL();
    
    for(TInt i=0; i<iSearchResults.Count(); i++)
        {   
        CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
        
        textCriteria->SetTextL(iSearchResults[i]->TextCriteria());
        textCriteria->SetAttributesToSearch(iSearchResults[i]->Attributes());
        
        textCriteria->SetPositionFieldsToSearchL(iSearchResults[i]->PositionFields()); 
        
        
        
        }
        
    }

// ---------------------------------------------------------
// CPosTp57::SearchWithAreaCriteriaL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::SearchWithAreaCriteriaL()
    {
    AppendAreaSearchResultsL();	
    
    
    TBuf<255> info;
    for (TInt i=0; i<iAreaSearchResults.Count(); i++)
        {
        CPosLmAreaCriteria* areaCriteria=NULL;
        TRAPD(err, areaCriteria = CPosTp57::NewLmAreaCriteriaL(iAreaSearchResults[i]->SouthLat(),
                                                               iAreaSearchResults[i]->NorthLat(),
                                                               iAreaSearchResults[i]->WestLong(),
                                                               iAreaSearchResults[i]->EastLong()
                                                               ));
        CleanupStack::PushL(areaCriteria);
    
        if (err != iAreaSearchResults[i]->ErrorCode())
            {
            iLog->Put(_L("Unexpected error code returned"));    
            iLog->Put(_L("Area Search result read from file:"));
            
            iAreaSearchResults[i]->Print(info);
            iLog->Put(info);

            _LIT(KReturned, "NewLmAreaCriteriaL error = %d");
            info.Format(KReturned, err);
            iLog->Put(info);
            User::Leave(KErrGeneral);
            } 
            
        if (!err)
            {
            
            
            
            }     
         }   
               
    }

// ---------------------------------------------------------
// CPosTp57::NewLmAreaCriteriaL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
CPosLmAreaCriteria* CPosTp57::NewLmAreaCriteriaL(const TReal64 &aSouthLat, 
                                                 const TReal64 &aNorthLat,
                                                 const TReal64 &aWestLong, 
                                                 const TReal64 &aEastLong) 
    {
    CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(aSouthLat, 
                                                                aNorthLat, 
                                                                aWestLong, 
                                                                aEastLong
                                                                );
    CleanupStack::Pop();
    
    return areaCriteria;
    }    
// ---------------------------------------------------------
// CPosTp57::CreateDatabasesL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp57::CreateDatabasesL()
    {
    /* 
    Very inefficient and time consuming method, maybe better to execute once and store the 
    created databases as testdata
    
    Db name:            Landmarks id: 
    eposlm1.ldb         1-10                
    eposlm2.ldb         11-20
    eposlm3.ldb         21-30
    eposlm4.ldb         31-40
    eposlm5.ldb         41-50    
    eposlm6.ldb         51-60
    eposlm7.ldb         61-70
    eposlm8.ldb         71-80
    eposlm9.ldb         81-90
    eposlm10.ldb        91-100
    eposlm11.ldb        101-105
    */
    
    // Paths will need to be changed to the secure dbms path when security is implemented
    _LIT(KDefaultDbPath, "c:\\system\\data\\eposlm.ldb"); // Contains now no landmarks but the global categories
    _LIT(KDbNamePath, "c:\\system\\data\\eposlm%d.ldb");
    
    const TInt KLastId=105;
    const TInt KNoDatabases=11;
     
    RemoveDefaultDbL();
    
    CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
    CleanupStack::PushL(lmd);

    if (lmd->IsInitializingNeeded())
        {
        ExecuteAndDeleteLD(lmd->InitializeL()); 
        }
    CleanupStack::PopAndDestroy(lmd); 
        
    RFs fs;
    User::LeaveIfError(fs.Connect());
    CleanupClosePushL(fs);
   
    CFileMan* fileMan = CFileMan::NewL(fs);
    CleanupStack::PushL(fileMan);

    // Create 11 databases
    TInt i=0;
    for (i=1; i <= KNoDatabases; i++)
        {
        TBuf<100> db;
        db.Format(KDbNamePath, i);
        
        fs.Delete(db);
        User::LeaveIfError(fileMan->Copy(KDefaultDbPath, db, CFileMan::EOverWrite));    
        }
    CleanupStack::PopAndDestroy(2, &fs);  
     
    iDatabase = UseGeneratedDbFileL();
    
    if (iDatabase->IsInitializingNeeded())
       {
       ExecuteAndDeleteLD(iDatabase->InitializeL());
       }
        
    _LIT(KDbName, "eposlm%d.ldb");   
   
    TInt databaseNumber=1;
    for (i=1; i <= KLastId; i++)
        {
        CPosLandmark* lm = iDatabase->ReadLandmarkLC(i);
        
        TBuf<100> name;
        name.Format(KDbName, databaseNumber);
            
        iLog->Put(name);
        CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(name);
        CleanupStack::PushL(lmd);
        
        lmd->AddLandmarkL(*lm);
        CleanupStack::PopAndDestroy(2, lm); 
        
        if (i % 10 == 0)
            {
            ++databaseNumber;
            }       
        }   
         
    // DEBUG 
    for (i=1; i <= KNoDatabases; i++)
        {
        TBuf<100> dbNo;
        dbNo.Format(_L(" -------- Printing Db %d --------------"), i);
        iLog->Put(dbNo);
        
        TBuf<100> db;
        db.Format(KDbName, i);
        iLog->Put(db);
        
        CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(db);
        CleanupStack::PushL(lmd);
        
        CPosLmItemIterator* iter = lmd->LandmarkIteratorL();
        CleanupStack::PushL(iter);

        TPosLmItemId id = iter->NextL();
        
        while (id != KPosLmNullItemId)
            {
            CPosLandmark* lm = lmd->ReadLandmarkLC(id);
        
            TBuf<255> info;
            PrintLandmark(*lm, info);
            iLog->Put(info);
            CleanupStack::PopAndDestroy(lm); 
            
            id = iter->NextL();
            }    
       
        CleanupStack::PopAndDestroy(2, lmd);
        }
    }

//  End of File