locationdataharvester/maptileservice/src/maptiledblookuptable.cpp
branchRCL_3
changeset 36 1fc85118c3ae
--- /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
+