diff -r 1fc85118c3ae -r 870918037e16 locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp --- a/locationdataharvester/mylocationsengine/src/lookupmaptiledb.cpp Tue Aug 31 15:09:25 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,607 +0,0 @@ -/* -* 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: Maptile database lookup table source implementation. -* -*/ -#include -#include - -#include -#include -#include "mylocationlogger.h" -#include "lookupmaptiledb.h" - -_LIT( KSelectAllFrom, "SELECT * FROM " ); -_LIT(KQueryToDB,"SELECT * FROM cntmaptilelookuptable WHERE cntuid = %d AND source = %d"); -_LIT(KQueryGetCalendaIds,"SELECT cntuid FROM cntmaptilelookuptable WHERE source = %d"); -_LIT( KSelectfilepathFrom, "SELECT filepath FROM " ); -_LIT(KQueryMaptile, "SELECT filepath FROM cntmaptilelookuptable WHERE filepath = '%S'"); -// string 'where' -_LIT( KStringWhere, " WHERE " ); -// string ' = ' -_LIT( KStringEqual, " = " ); - -_LIT(KQueryByMaptileFetchingState,"SELECT * FROM cntmaptilelookuptable WHERE fetchingstatus = %d"); - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::CLookupMapTileDatabase() -// Default constructor. -// ----------------------------------------------------------------------------- -// -CLookupMapTileDatabase::CLookupMapTileDatabase() -{ -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::~CLookupMapTileDatabase() -// Destructor. -// ----------------------------------------------------------------------------- -// -CLookupMapTileDatabase::~CLookupMapTileDatabase() -{ - __TRACE_CALLSTACK;// close the database - iItemsDatabase.Close(); - // close the file session - iFsSession.Close(); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::~CLookupMapTileDatabase() -// Creates an object of this class and pushes to cleanup stack. -// ----------------------------------------------------------------------------- -// -CLookupMapTileDatabase* CLookupMapTileDatabase::NewLC( - const TDesC& aLookupTableName) -{ - CLookupMapTileDatabase* self = new (ELeave) CLookupMapTileDatabase; - CleanupStack::PushL(self); - self->ConstructL(aLookupTableName); - return self; -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::NewL() -// Creates an object of this class. -// ----------------------------------------------------------------------------- -// -CLookupMapTileDatabase* CLookupMapTileDatabase::NewL( - const TDesC& aLookupTableName) -{ - CLookupMapTileDatabase* self = CLookupMapTileDatabase::NewLC( - aLookupTableName); - CleanupStack::Pop(self); - return self; -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::ConstructL() -// 2nd phase contructor. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::ConstructL(const TDesC& aLookupTableName) -{ - __TRACE_CALLSTACK; - User::LeaveIfError(iFsSession.Connect()); - - //create private path - User::LeaveIfError(iFsSession.CreatePrivatePath(RFs::GetSystemDrive())); - // private path with no drive on it - iFsSession.PrivatePath(iDbFileName); - - TFindFile PrivFolder(iFsSession); - // find out the drive - if (KErrNone == PrivFolder.FindByDir(iDbFileName, KNullDesC)) - { - iFsSession.MkDir(KLookupDbPath); - iDbFileName.Copy(KLookupDbPath); - iDbFileName.Append(aLookupTableName); - - if (!BaflUtils::FileExists(iFsSession, iDbFileName)) - { // no database exists so we make one - User::LeaveIfError(iItemsDatabase.Create(iFsSession, iDbFileName)); - // and will create the only table needed for it - CreateTableL(iItemsDatabase); - - //close the database - iItemsDatabase.Close(); - } - } -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::Open() -// Opens the lookup database. -// ----------------------------------------------------------------------------- -// -TInt CLookupMapTileDatabase::Open() -{ - __TRACE_CALLSTACK; - return iItemsDatabase.Open(iFsSession, iDbFileName); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::Close() -// Closes the lookup database. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::Close() -{ - __TRACE_CALLSTACK; - iItemsDatabase.Close(); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::CreateTableL() -// Creates a lookup table. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::CreateTableL(RDbDatabase& aDatabase) -{ - __TRACE_CALLSTACK;// Create a table definition - CDbColSet* columns = CDbColSet::NewLC(); - - // Add Columns - - // Add uid column - columns->AddL(TDbCol(NCntColUid, EDbColUint32)); - - columns->AddL(TDbCol(NColSource, EDbColUint32)); - - // add file path type column - columns->AddL(TDbCol(NCntColFilePath, EDbColText16)); - - //MK - // add map tile fetching status to the db - columns->AddL(TDbCol(MapTileFetchingStatus, EDbColUint32)); - - - // Create a table - User::LeaveIfError(aDatabase.CreateTable(KMapTileLookupTable, *columns)); - - // cleanup the column set - CleanupStack::PopAndDestroy(columns); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::CreateEntryL() -// Creates an entry in the lookup table. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::CreateEntryL(const TLookupItem& aLookupItem) -{ - __TRACE_CALLSTACK;// create a query for the view - TFileName queryBuffer; - queryBuffer.Copy(KSelectAllFrom); - queryBuffer.Append(KMapTileLookupTable); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - - } - iItemsDatabase.Begin(); - - RDbView myView; - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - - // Inert the item - myView.InsertL(); - // set the fields - myView.SetColL(KColumncntUid, aLookupItem.iUid); - myView.SetColL(KColumnSource, aLookupItem.iSource); - myView.SetColL(KColumnFilePath, aLookupItem.iFilePath); - myView.SetColL(KColumnMapTileFetchingStatus, aLookupItem.iFetchingStatus); //MK - - myView.PutL(); - - CleanupStack::PopAndDestroy(&myView); // myView - iItemsDatabase.Commit(); - Close(); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::ReSetEntryL() -// Reset the entry with null value and get the used maptile path as part of aLookupItem. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::ReSetEntryL(TLookupItem &aLookupItem) -{ - TFileName queryBuffer; - queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - iItemsDatabase.Begin(); - - // Create a view of the table based on the query created. - RDbView myView; - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - - myView.EvaluateAll(); - myView.FirstL(); - - if (myView.AtRow()) - { - myView.GetL(); - aLookupItem.iFilePath.Copy(myView.ColDes16(KColumnFilePath)); - // found the entry. update it. - myView.UpdateL(); - myView.SetColL(KColumnFilePath, KNullDesC); - myView.SetColL(KColumnMapTileFetchingStatus, - aLookupItem.iFetchingStatus); //MK - myView.PutL(); - } - - CleanupStack::PopAndDestroy(&myView); // myView - iItemsDatabase.Commit(); - - Close(); -} -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::UpdateEntryL() -// Updates an entry in the lookup table. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::UpdateEntryL(const TLookupItem& aLookupItem) -{ - __TRACE_CALLSTACK;// Create the query to find the row to be updated. - TFileName queryBuffer; - queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - iItemsDatabase.Begin(); - - // Create a view of the table based on the query created. - RDbView myView; - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - - myView.EvaluateAll(); - myView.FirstL(); - - if (myView.AtRow()) - { - // found the entry. update it. - myView.UpdateL(); - myView.SetColL(KColumnFilePath, aLookupItem.iFilePath); - myView.SetColL(KColumnMapTileFetchingStatus, aLookupItem.iFetchingStatus); //MK - myView.PutL(); - } - - CleanupStack::PopAndDestroy(&myView); // myView - iItemsDatabase.Commit(); - - Close(); - -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::DeleteEntryL() -// Deletes an entry from the lookup table. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::DeleteEntryL(TLookupItem& aLookupItem) -{ - __TRACE_CALLSTACK;// Create the query to find the row to be deleted. - - TFileName queryBuffer; - queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - iItemsDatabase.Begin(); - - RDbView myView; - // query buffer finds only the selected item row. - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - - myView.EvaluateAll(); - - // positions the cursor on the first row of the rowset - myView.FirstL(); - - // Delete the entry found. - if (myView.AtRow()) - { - myView.GetL(); - if (aLookupItem.iUid == myView.ColUint(KColumncntUid)) - { - aLookupItem.iFilePath.Copy(myView.ColDes16(KColumnFilePath)); - - } - myView.DeleteL(); - } - - CleanupStack::PopAndDestroy(&myView); // myView - iItemsDatabase.Commit(); - // compacts the databse, by physicaly removing deleted data. - iItemsDatabase.Compact(); - - Close(); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::DeleteMapTileL() -// Deletes an maptile if there's no reference to maptile in lookupdb -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::DeleteMapTileL( const TLookupItem& aLookupItem) -{ - __TRACE_CALLSTACK;// Create the query to find the row to be deleted. - - TFileName queryBuffer; - queryBuffer.Format(KQueryMaptile, &aLookupItem.iFilePath); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - - iItemsDatabase.Begin(); - - RDbView myView; - // query buffer finds only the selected item row. - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - - myView.EvaluateAll(); - - // positions the cursor on the first row of the rowset - myView.FirstL(); - - // Delete if no reference to maptile - if (!myView.AtRow()) - { - QString filePath = QString::fromUtf16( aLookupItem.iFilePath.Ptr(), aLookupItem.iFilePath.Length() ); - //delete all releted maptile - QString temp=filePath; - temp.append(MAPTILE_IMAGE_PORTRAIT); - QFile file; - file.remove(temp); - - temp=filePath; - temp.append(MAPTILE_IMAGE_CONTACT); - temp.append(MAPTILE_IMAGE_LANDSCAPE); - file.remove(temp); - - temp=filePath; - temp.append(MAPTILE_IMAGE_CALENDAR); - temp.append(MAPTILE_IMAGE_LANDSCAPE); - file.remove(temp); - - temp=filePath; - temp.append(MAPTILE_IMAGE_HURRIGANES); - file.remove(temp); - - // ret = iFsSession.Delete(aLookupItem.iFilePath); - } - - CleanupStack::PopAndDestroy(&myView); // myView - - Close(); -} - - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::FindEntriesByMapTileFetchingStatusL() -// Finds a list of lookup items given a landmark uid. -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::FindEntriesByMapTileFetchingStateL(const TUint32 aFetchingState, - RArray& aLookupItemArray) -{ - __TRACE_CALLSTACK;// Create a query to find the item. - TFileName queryBuffer; - queryBuffer.Format(KQueryByMaptileFetchingState,aFetchingState); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - iItemsDatabase.Begin(); - - - // Create a view of the table with the above query. - RDbView myView; - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - myView.EvaluateAll(); - myView.FirstL(); - - while (myView.AtRow()) - { - // Item found. get the details. - myView.GetL(); - TLookupItem newItem; - newItem.iUid = myView.ColUint(KColumnUid); - newItem.iSource = myView.ColUint(KColumnSource); - aLookupItemArray.Append(newItem); - myView.NextL(); - } - - CleanupStack::PopAndDestroy(&myView); // myView -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::GetAllCalendarIdsL() -// Gets the list of calendar ids . -// ----------------------------------------------------------------------------- -// -void CLookupMapTileDatabase::GetAllCalendarIdsL( RArray& aIdArray ) -{ - __TRACE_CALLSTACK;// Create a query to find the item. - TFileName queryBuffer; - queryBuffer.Format( KQueryGetCalendaIds, ESourceCalendar ); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return; - } - iItemsDatabase.Begin(); - - - // Create a view of the table with the above query. - RDbView myView; - myView.Prepare( iItemsDatabase, TDbQuery( queryBuffer ) ); - CleanupClosePushL( myView ); - myView.EvaluateAll(); - myView.FirstL(); - - while( myView.AtRow() ) - { - // Item found. get the details. - myView.GetL(); - TUint32 id; - id = myView.ColUint( KColumnUid ); - aIdArray.Append( id ); - myView.NextL(); - } - - CleanupStack::PopAndDestroy( &myView ); // myView - Close(); -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::FindEntryL() -// Finds an entry in the lookup table. -// ----------------------------------------------------------------------------- -// -TBool CLookupMapTileDatabase::FindEntryL(TLookupItem& aLookupItem) -{ - __TRACE_CALLSTACK;// used to store return value - TBool retVal = EFalse; - // Create a query to find the item. - TFileName queryBuffer; - queryBuffer.Format(KQueryToDB, aLookupItem.iUid, aLookupItem.iSource); - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return EFalse; - - } - iItemsDatabase.Begin(); - - // Create a view of the table with the above query. - RDbView myView; - myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - myView.EvaluateAll(); - myView.FirstL(); - - if (myView.AtRow()) - { - // Item found. get the details. - myView.GetL(); - retVal = ETrue; - } - - CleanupStack::PopAndDestroy(&myView); // myView - Close(); - return retVal; -} - -// ----------------------------------------------------------------------------- -// CLookupMapTileDatabase::FindEntryByFIlePathLL() -// Finds an entry in the lookup table for maptile image file -// ----------------------------------------------------------------------------- -// -TBool CLookupMapTileDatabase::FindEntryByFilePathL(const TDesC& aFilePath) -{ - __TRACE_CALLSTACK;// used to store return value - TBool retVal = EFalse; - - TInt ret = Open(); - if (ret != KErrNone) - { - Close(); - ret = Open(); - if( ret != KErrNone ) - return EFalse; - } - - iItemsDatabase.Begin(); - - // Create a query to find the item. - TFileName queryBuffer; - _LIT(KFormatSpec, "%S%S%S%S%S'%S'"); - - queryBuffer.Format(KFormatSpec, - &KSelectfilepathFrom(), - &KMapTileLookupTable(), - &KStringWhere(), - &NCntColFilePath(), - &KStringEqual(), - &aFilePath); - - // Create a view of the table with the above query. - RDbView myView; - TInt retPrep = myView.Prepare(iItemsDatabase, TDbQuery(queryBuffer)); - CleanupClosePushL(myView); - myView.EvaluateAll(); - myView.FirstL(); - - if (myView.AtRow()) - { - // Item found, return true - retVal = ETrue; - } - - CleanupStack::PopAndDestroy(&myView); // myView - Close(); - - return retVal; -} - -// End of file -