--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationdataharvester/maptileservice/src/maptiledblookuptable.cpp Tue Aug 31 15:09:25 2010 +0300
@@ -0,0 +1,228 @@
+/*
+* 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:
+* Retrieving maptile path from lookup db implementation
+*
+*/
+
+#include <bautils.h>
+#include <maptileservice.h>
+#include "maptiledblookuptable.h"
+
+// select all from
+_LIT( KSelectAllFrom, "SELECT * FROM " );
+
+// string 'where'
+_LIT( KStringWhere, " WHERE " );
+
+// string ' = '
+_LIT( KStringEqual, " = " );
+
+// string 'And'
+_LIT( KStringAnd, " AND " );
+
+
+_LIT(KQueryByMaptileState,"SELECT * FROM cntmaptilelookuptable WHERE cntuid = %d AND ( fetchingstatus = %d OR fetchingstatus = %d )");
+
+// -----------------------------------------------------------------------------
+// CLookupMapTileDatabase::CLookupMapTileDatabase()
+// Default constructor.
+// -----------------------------------------------------------------------------
+//
+CLookupMapTileDatabase::CLookupMapTileDatabase()
+{
+}
+
+// -----------------------------------------------------------------------------
+// CLookupMapTileDatabase::~CLookupMapTileDatabase()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CLookupMapTileDatabase::~CLookupMapTileDatabase()
+{
+
+ // 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 )
+{
+
+ User::LeaveIfError( iFsSession.Connect() );
+
+ iDbFileName.Copy( KLookupDbPath );
+ iDbFileName.Append( aLookupTableName );
+
+ iDatabaseExists = EFalse;
+
+ if( BaflUtils::FileExists( iFsSession, iDbFileName ) )
+ {
+ // database exists
+ iDatabaseExists = ETrue;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CLookupMapTileDatabase::FindNumberOfAddressL()
+// find the number of address associated with the aId.
+// -----------------------------------------------------------------------------
+//
+int CLookupMapTileDatabase::FindNumberOfAddressL( int& aId )
+{
+ int count = 0;
+
+ // Create a query to find the item.
+ TFileName queryBuffer;
+ queryBuffer.Format( KQueryByMaptileState,aId,
+ MapTileService::MapTileFetchingInProgress,
+ MapTileService::MapTileFetchingNetworkError );
+
+ TInt ret = iItemsDatabase.Open( iFsSession, iDbFileName );
+
+ if( ret != KErrNone )
+ {
+ //if already opened , close and open again
+ iItemsDatabase.Close();
+ User::LeaveIfError( iItemsDatabase.Open( iFsSession, iDbFileName ) );
+ }
+
+ User::LeaveIfError( 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())
+ {
+ count++;
+ myView.NextL();
+ }
+
+ CleanupStack::PopAndDestroy( &myView ); // myView
+
+ //Close the database
+ iItemsDatabase.Close();
+
+ return count;
+}
+
+// -----------------------------------------------------------------------------
+// CLookupMapTileDatabase::FindEntryL()
+// Finds an entry in the lookup table.
+// -----------------------------------------------------------------------------
+//
+void CLookupMapTileDatabase::FindEntryL( TLookupItem& aLookupItem )
+{
+
+ // used to check whether entry available or not
+ TBool entryAvailable = EFalse;
+
+ if ( iDatabaseExists )
+ {
+
+ // Create a query to find the item.
+ TFileName queryBuffer;
+ queryBuffer.Copy( KSelectAllFrom );
+ queryBuffer.Append( KMapTileLookupTable );
+ queryBuffer.Append( KStringWhere );
+ queryBuffer.Append( NCntColUid );
+ queryBuffer.Append( KStringEqual );
+ queryBuffer.AppendNum( aLookupItem.iUid );
+ queryBuffer.Append( KStringAnd );
+ queryBuffer.Append( NColSource );
+ queryBuffer.Append( KStringEqual );
+ queryBuffer.AppendNum( aLookupItem.iSource );
+
+ TInt ret = iItemsDatabase.Open( iFsSession, iDbFileName );
+
+ if( ret != KErrNone )
+ {
+ //if already opened , close and open again
+ iItemsDatabase.Close();
+ User::LeaveIfError( iItemsDatabase.Open( iFsSession, iDbFileName ) );
+ }
+ User::LeaveIfError( 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();
+ if( aLookupItem.iUid == myView.ColUint( KColumnUid ) )
+ {
+ aLookupItem.iFilePath.Copy( myView.ColDes16( KColumnFilePath ) );
+ aLookupItem.iFetchingStatus = myView.ColUint( KColumnMapTileFetchingStatus );
+ entryAvailable = ETrue;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( &myView ); // myView
+
+ //Close the database
+ iItemsDatabase.Close();
+ }
+
+ //No entry found
+ if( !entryAvailable )
+ {
+ User::Leave( KErrNotFound );
+ }
+}
+
+// End of file
+