harvester/harvesterserver/src/ccontentinfodb.cpp
changeset 1 6f2c1c46032b
child 16 2729d20a0010
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/harvesterserver/src/ccontentinfodb.cpp	Mon May 03 13:33:22 2010 +0300
@@ -0,0 +1,334 @@
+/*
+* 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: 
+*
+*/
+
+#include "ccotentinfodb.h"
+#include "ccontentinfo.h"
+#include <cpixcontentinfocommon.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ccontentinfodbTraces.h"
+#endif
+
+
+// The max length for creating sql query for KCISqlFormatSeek format
+const TInt KCISqlStringMaxLength(100);
+//SQL query to fetch the records with given Plugin name
+_LIT(KCISqlFormatSeek , "SELECT * FROM table1 WHERE NAME='%S'");
+//SQL query to delete the records with given plugin name
+_LIT(KCISqlDelete, "DELETE FROM table1 WHERE NAME='%S'");
+//Syntax for adding a row to sql database
+_LIT(KInsertRowFormat,"INSERT INTO table1(NAME,INS,BLS) values('%S',%d,%d)");
+//syntax to retrieve all the rows from the sql database
+_LIT(KSelectAllRowsFormat,"SELECT * FROM table1");
+//syntax to update Index status for a given plugin
+_LIT(KUpdateISFormat,"UPDATE table1 SET INS=%d WHERE NAME = '%S'");
+//syntax to update Blacklist status for a given plugin
+_LIT(KUpdateBSFormat,"UPDATE table1 SET BLS=%d WHERE NAME = '%S'");
+_LIT(KDriveC, "c:");
+//syntax for removing all the records in the table
+_LIT(KRemoveAll, "DELETE FROM table1" );
+//syntax for creating table with plugin name, indexing status and blacklist status as the columns
+_LIT(KCreateTableFormat,"CREATE TABLE table1(NAME TEXT NOT NULL, INS INTEGER, BLS INTEGER, PRIMARY KEY(NAME))");
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::NewL()
+// -----------------------------------------------------------------------------
+//
+CContentInfoDb* CContentInfoDb::NewL()
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_NEWL_ENTRY );
+    CContentInfoDb* instance = CContentInfoDb::NewLC();
+    CleanupStack::Pop( instance );
+    OstTraceFunctionExit0( CCONTENTINFODB_NEWL_EXIT );
+    return instance;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::NewLC()
+// -----------------------------------------------------------------------------
+//
+CContentInfoDb* CContentInfoDb::NewLC()
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_NEWLC_ENTRY );
+    CContentInfoDb* instance = new (ELeave) CContentInfoDb();
+    CleanupStack::PushL( instance );
+    instance->ConstructL();
+    OstTraceFunctionExit0( CCONTENTINFODB_NEWLC_EXIT );
+    return instance;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::CContentInfoDb()
+// -----------------------------------------------------------------------------
+//
+CContentInfoDb::CContentInfoDb()
+    {
+    //Do the necessary initialisation
+    iOpened = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::~CContentInfoDb
+// -----------------------------------------------------------------------------
+//
+CContentInfoDb::~CContentInfoDb()
+    {
+    iDatabase.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CBlacklistDb::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CContentInfoDb::ConstructL()
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_CONSTRUCTL_ENTRY );
+    //Open the sql database.If doesn't exist,create the sql database and open it  
+    RFs fssession;
+    User::LeaveIfError( fssession.Connect() );
+    TFileName privatePath;
+    TFileName datafile;    
+    fssession.CreatePrivatePath(EDriveC);
+    fssession.PrivatePath(privatePath);//data caged path of loading process
+    fssession.Close();
+    datafile.Copy(KDriveC);
+    datafile.Append(privatePath);    
+    datafile.Append( KContentInfoFileName );
+    
+    TInt err = iDatabase.Open( datafile );
+    
+    switch ( err )
+        {
+        case KErrNone:
+            iOpened = ETrue;
+            break;
+            
+        case KErrNotFound:
+        case KErrPathNotFound:
+            {
+            //Create the database
+            TRAPD( error , CreateDBL() );
+            
+            if ( error == KErrNone )
+                {                
+                iOpened = ETrue;
+                }
+            }
+            break;
+            
+        default:
+            break;
+        }
+    
+    OstTraceFunctionExit0( CCONTENTINFODB_CONSTRUCTL_EXIT );
+    return;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::AddL()
+// -----------------------------------------------------------------------------
+//
+TInt CContentInfoDb::AddL( CContentInfo* aContentInfo )
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_ADDL_ENTRY );
+    //Add the item record to database
+    
+    if ( !iOpened )
+        return KErrNotReady;
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    HBufC* contentname = aContentInfo->GetNameL();
+    
+    TInt indexstatus = aContentInfo->GetIndexStatus();
+    TBool blstatus = aContentInfo->GetBlacklistStatus();
+    sql.Format( KInsertRowFormat , contentname , indexstatus , blstatus );
+    
+    TInt err = iDatabase.Exec(sql) ;
+    
+    delete contentname;
+    OstTraceFunctionExit0( CCONTENTINFODB_ADDL_EXIT );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::UpdateBlacklistStatusL
+// -----------------------------------------------------------------------------
+//
+TInt  CContentInfoDb::UpdateBlacklistStatusL( const TDesC& aContentName , TInt aBlacklistStatus )
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_UPDATEBLACKLISTSTATUSL_ENTRY );
+    //Update the item record to database    
+    if ( !iOpened )
+        return KErrNotReady;
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Format( KUpdateBSFormat , aBlacklistStatus, &aContentName );
+    
+    TInt err = iDatabase.Exec(sql) ;
+    
+    OstTraceFunctionExit0( CCONTENTINFODB_UPDATEBLACKLISTSTATUSL_EXIT );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::UpdatePluginIndexStatusL
+// -----------------------------------------------------------------------------
+//
+TInt  CContentInfoDb::UpdatePluginIndexStatusL( const TDesC& aContentName , TInt aIndexStatus )
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_UPDATEPLUGININDEXSTATUSL_ENTRY );
+    //Update the item record to database
+    
+    if ( !iOpened )
+        return KErrNotReady;
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Format( KUpdateISFormat , aIndexStatus, &aContentName );
+    
+    TInt err = iDatabase.Exec(sql) ;
+    
+    OstTraceFunctionExit0( CCONTENTINFODB_UPDATEPLUGININDEXSTATUSL_EXIT );
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::RemoveL
+// -----------------------------------------------------------------------------
+//
+void CContentInfoDb::RemoveL( const TDesC& aContentName )
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_REMOVEL_ENTRY );
+    //remove the item record to database
+        
+    if ( !iOpened )
+        User::Leave( KErrNotReady );
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Format( KCISqlDelete , &aContentName );
+    
+    User::LeaveIfError( iDatabase.Exec(sql) );
+    OstTraceFunctionExit0( CCONTENTINFODB_REMOVEL_EXIT );
+    return ;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::ResetDatabaseL
+// -----------------------------------------------------------------------------
+//
+void CContentInfoDb::ResetDatabaseL( )
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_RESETDATABASEL_ENTRY );
+    //remove all the item record to database
+    
+    if ( !iOpened )
+        User::Leave( KErrNotReady );
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Copy( KRemoveAll );
+    
+    User::LeaveIfError( iDatabase.Exec(sql) );
+    
+    OstTraceFunctionExit0( CCONTENTINFODB_RESETDATABASEL_EXIT );
+    return ;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::FindL
+// -----------------------------------------------------------------------------
+//
+TBool CContentInfoDb::FindL(const TDesC& aContentName)
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_FINDL_ENTRY );
+    if ( !iOpened )
+       User::Leave( KErrNotReady );
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Format( KCISqlFormatSeek, &aContentName );
+    
+    RSqlStatement stmt;
+    stmt.Prepare( iDatabase , sql );
+    
+    TBool isfound = ( KSqlAtRow == stmt.Next() )?ETrue:EFalse; 
+    OstTraceFunctionExit0( CCONTENTINFODB_FINDL_EXIT );
+    return isfound;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::GetContentCountL
+// -----------------------------------------------------------------------------
+//
+TInt CContentInfoDb::GetContentCountL()
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_GETCONTENTCOUNTL_ENTRY );
+    if ( !iOpened )
+       User::Leave( KErrNotReady );
+    
+    TInt count = 0;
+    
+    //Prepare the sql
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Copy( KSelectAllRowsFormat );
+    
+    RSqlStatement stmt;
+    stmt.Prepare( iDatabase , sql );
+    
+    while ( KSqlAtEnd != stmt.Next() )
+        ++count;
+        
+    OstTraceFunctionExit0( CCONTENTINFODB_GETCONTENTCOUNTL_EXIT );
+    return count;
+    }
+
+// -----------------------------------------------------------------------------
+// CContentInfoDb::CreateDBL
+// -----------------------------------------------------------------------------
+//
+void CContentInfoDb::CreateDBL()
+    {
+    OstTraceFunctionEntry0( CCONTENTINFODB_CREATEDBL_ENTRY );
+    
+    iDatabase.Close();
+    
+    TFileName privatePath;
+    TFileName datafile;
+    RFs fssession;
+    User::LeaveIfError( fssession.Connect() );
+    fssession.CreatePrivatePath(EDriveC);
+    fssession.PrivatePath(privatePath);//data caged path of loading process
+    fssession.Close();
+    datafile.Copy(KDriveC);
+    datafile.Append(privatePath);    
+    datafile.Append( KContentInfoFileName );
+    
+    //create the database
+    User::LeaveIfError( iDatabase.Create( datafile ) );
+    
+    //Add table
+    TBuf<KCISqlStringMaxLength> sql;
+    sql.Copy( KCreateTableFormat );
+    
+    User::LeaveIfError( iDatabase.Exec( sql ) );
+    
+    OstTraceFunctionExit0( CCONTENTINFODB_CREATEDBL_EXIT );
+    }
+//EOF