diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/sessionlogsrc/irnmslogdb.cpp --- a/internetradio2.0/sessionlogsrc/irnmslogdb.cpp Tue Jul 06 14:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,449 +0,0 @@ -/* -* Copyright (c) 2006-2007 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 -* -*/ - - -#include - -#include "irdebug.h" -#include "irnmslogdb.h" -#include "irnmslogger.h" - -_LIT(KNmsLogTable,"NmsLog"); -_LIT(KID,"id"); -_LIT(KNmsLogCol, "NmsLogData"); -_LIT(KNmsLogIndex,"NmsLogIndex"); - -const TInt KMaxNoNmsLog = 15; - - -// ======== LOCAL FUNCTIONS ======== - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Function : NewL() -// two phased construction -// --------------------------------------------------------------------------- -// - CIRNmsLogDb* CIRNmsLogDb::NewL() - { - IRLOG_DEBUG( "CIRNmsLogDb::NewL" ); - CIRNmsLogDb* self; - self=CIRNmsLogDb::NewLC(); - CleanupStack::Pop(self); - IRLOG_DEBUG( "CIRNmsLogDb::NewL - Exiting." ); - return self; - } - - -// --------------------------------------------------------------------------- -// Function : NewLC() -// Two phased construction -// --------------------------------------------------------------------------- -// - CIRNmsLogDb* CIRNmsLogDb::NewLC() - { - IRLOG_DEBUG( "CIRNmsLogDb::NewLC" ); - CIRNmsLogDb *self; - self=new(ELeave)CIRNmsLogDb; - CleanupStack::PushL(self); - self->ConstructL(); - IRLOG_DEBUG( "CIRNmsLogDb::NewLC - Exiting." ); - return self; - } - - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::~CIRNmsLogDb() -// default destructor -// --------------------------------------------------------------------------- -// -CIRNmsLogDb::~CIRNmsLogDb() - { - IRLOG_DEBUG( "CIRNmsLogDb::~CIRNmsLogDb" ); - CloseDb(); - iFsSession.Close(); - IRLOG_DEBUG( "CIRNmsLogDb::~CIRNmsLogDb - Exiting." ); - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::CreateDbConditional() -// Creates both the dbms files conditionally(only if not yet created) -// calls CreateDbL() -// --------------------------------------------------------------------------- -// - TInt CIRNmsLogDb::CreateDbConditional(TFileName &aNmsLog) - { - IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional" ); - iDbFile.Copy(aNmsLog); - if( !BaflUtils::FileExists(iFsSession, iDbFile) ) - { - TRAPD(error,CreateDbL(iDbFile)); - if( error ) - { - IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional - Exiting (1)." ); - return error; - } - } - IRLOG_DEBUG( "CIRNmsLogDb::CreateDbConditional - Exiting (2)." ); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb:AddNmsLogStartL() -// adds the NmsLog log entry into data base -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::AddNmsLogStartL(CIRNmsLogger& aNmsLog) - { - IRLOG_DEBUG( "CIRNmsLogDb::AddNmsLogStartL" ); - OpenDbL(); - RDbTable nmsLogtable; - TInt error=nmsLogtable.Open(iNmsLogDb,KNmsLogTable,nmsLogtable. - EUpdatable); - CleanupClosePushL(nmsLogtable); - if( error ) - { - CloseDb(); - User::LeaveIfError(error); - } - - //! arrange the presets in incresing order of index - nmsLogtable.SetIndex(KNmsLogIndex); - nmsLogtable.Reset(); - - //if NmsLog log is greater or equal to than 5 - if( nmsLogtable.CountL() >= KMaxNoNmsLog ) - { - //first row is selected - nmsLogtable.FirstL(); - //the current row is selected - nmsLogtable.GetL(); - //delete that entry - nmsLogtable.DeleteL(); - } - CleanupStack::PopAndDestroy(&nmsLogtable); - //Algorithm : else condition need not handle seperatly - //Algorithm : add NmsLogid and informations like - //starttime,connectedfrom,NmsLogid,connectiontype,channelid - //currentnetwork,homenetwork,NmsLogtable - //Algorithm: if no. of NmsLog is greater than 5 - - _LIT(query,"SELECT * FROM %S"); - HBufC* sqlStr=HBufC::NewLC(query().Length() + KNmsLogTable().Length()); - sqlStr->Des().Format(query,&KNmsLogTable); - - // Create a view on the database - RDbView view; - error = view.Prepare(iNmsLogDb,*sqlStr); - if( error ) - { - CloseDb(); - User::LeaveIfError(error); - } - CleanupStack::PopAndDestroy(sqlStr); - CleanupClosePushL(view); - error = view.EvaluateAll(); - if( error ) - { - CloseDb(); - User::LeaveIfError(error); - } - CDbColSet* columns = view.ColSetL(); - CleanupStack::PushL(columns); - - RDbColWriteStream writeStream; - TRAP(error,//trap start - // Insert a row. Column order matches sql select statement - view.InsertL(); - //get index - view.SetColL(columns->ColNo(KID), aNmsLog.NmsLogId()); - //!open stream - writeStream.OpenLC(view,columns->ColNo(KNmsLogCol)); - aNmsLog.ExternalizeL(writeStream); - writeStream.CommitL(); - CleanupStack::PopAndDestroy(&writeStream); - ); - - CleanupStack::PopAndDestroy(columns); - if( error!=KErrNone ) - { - CloseDb(); - User::LeaveIfError(error); - } - view.PutL(); - CleanupStack::PopAndDestroy(&view); - CloseDb(); - IRLOG_DEBUG( "CIRNmsLogDb::AddNmsLogStartL - Exiting." ); - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::GetAllNmsLogL() -// gets all the preset into an array -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::GetAllNmsLogL( - CArrayPtrFlat& aNmsLogDataList) - { - IRLOG_DEBUG( "CIRNmsLogDb::GetAllNmsLogL" ); - OpenDbL(); - //not sure about this resetanddestroy - //! Open for preset master - aNmsLogDataList.ResetAndDestroy(); - //! temp item for holding the retrived data - CIRNmsLogger *item; - RDbColReadStream instream; - RDbTable table; - TInt error = table.Open(iNmsLogDb, KNmsLogTable, table.EReadOnly); - CleanupClosePushL(table); - if( error!=KErrNone ) - { - //if open fails function leaves - CloseDb(); - User::LeaveIfError(error); - } - - CDbColSet* colSet = table.ColSetL(); - CleanupStack::PushL(colSet); - - //! arrange the presets in incresing order of index - table.SetIndex(KNmsLogIndex); - table.Reset(); - //! recursively retrive the preset data from the master table - for (table.FirstL(); table.AtRow(); table.NextL()) - { - item=CIRNmsLogger::NewL(); - CleanupStack::PushL(item); - table.GetL(); - instream.OpenLC( table, colSet->ColNo( KNmsLogCol ) ); - item->InternalizeL(instream); - //update NmsLogid - aNmsLogDataList.AppendL(item); - CleanupStack::PopAndDestroy(&instream); - CleanupStack::Pop(item); - } - - CleanupStack::PopAndDestroy(colSet); - //!close the master table - CleanupStack::PopAndDestroy(&table); - CloseDb(); - IRLOG_DEBUG( "CIRNmsLogDb::GetAllNmsLogL - Exiting." ); - } - -// --------------------------------------------------------------------------- -// Function : DeleteAllNmsLog -// delete all the NmsLog from NmsLog log entry -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::DeleteAllNmsLogL() - { - IRLOG_DEBUG( "CIRNmsLogDb::DeleteAllNmsLogL" ); - //opening a data base - OpenDbL(); - RDbTable nmsLogtable; - //data base table opened - TInt error=nmsLogtable.Open(iNmsLogDb,KNmsLogTable,nmsLogtable. - EUpdatable); - CleanupClosePushL(nmsLogtable); - if( error!=KErrNone ) - { - //if error we leave - CloseDb(); - User::LeaveIfError(error); - } - //data base begin - error = iNmsLogDb.Begin(); - if( error!=KErrNone ) - { - //if open fails function leaves - CloseDb(); - User::LeaveIfError(error); - } - - //! arrange the presets in incresing order of index - nmsLogtable.SetIndex(KNmsLogIndex); - nmsLogtable.Reset(); - nmsLogtable.FirstL(); - while(nmsLogtable.AtRow()) - { - //deleting all the rows in the table - nmsLogtable.GetL(); - nmsLogtable.DeleteL(); - nmsLogtable.FirstL(); - } - //saving the change - CleanupStack::PopAndDestroy(&nmsLogtable); - iNmsLogDb.Commit(); - CloseDb(); - IRLOG_DEBUG( "CIRNmsLogDb::DeleteAllNmsLogL - Exiting." ); - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::ConstructL() -// Standard 2nd phase construction -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::ConstructL() - { - IRLOG_DEBUG( "CIRNmsLogDb::ConstructL" ); - User::LeaveIfError(iFsSession.Connect()); - IRLOG_DEBUG( "CIRNmsLogDb::ConstructL- Exiting." ); - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::CloseDb() -// Closes the database -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::CloseDb() - { - IRLOG_DEBUG( "CIRNmsLogDb::CloseDb" ); - iNmsLogDb.Close(); - IRLOG_DEBUG( "CIRNmsLogDb::CloseDb - Exiting." ); - } - - -// --------------------------------------------------------------------------- -// Function : CreateNmsLogTableL -// creates NmsLogtable with two column one is NmsLogid and rest of NmsLog -// log data -// --------------------------------------------------------------------------- -//NmsLogTable -//--------------------------- -//| KID | KNmsLogCol | -//--------------------------- -//|TInt32 | EDbColLongText8 | -//--------------------------- -// -void CIRNmsLogDb::CreateNmsLogTableL() - { - IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogTableL" ); - //start time of NmsLog - TDbCol nmsLogid(KID, EDbColInt32); - nmsLogid.iAttributes = TDbCol::ENotNull; - - //!this column is used to store preset data - //!The column stores a potentially large amount of non-Unicode text data. - TDbCol nmsLogcol(KNmsLogCol, EDbColLongText8); - nmsLogcol.iAttributes = TDbCol::ENotNull; - - CDbColSet* nmsLogcolset = CDbColSet::NewLC(); - nmsLogcolset->AddL(nmsLogid); - nmsLogcolset->AddL(nmsLogcol); - - // Create the NmsLoglog table with two columns - - User::LeaveIfError(iNmsLogDb.CreateTable(KNmsLogTable, - *nmsLogcolset)); - - //Create the KeyIndex for the table - CreateNmsLogIndexL(); - CleanupStack::PopAndDestroy(nmsLogcolset); - IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogTableL - Exiting." ); - } - -// --------------------------------------------------------------------------- -// Function : CreateNmsLogIndexL -// sets NmsLogid as the primary key -// --------------------------------------------------------------------------- -// -void CIRNmsLogDb::CreateNmsLogIndexL() - { - IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogIndexL" ); - TDbKeyCol nmsLogid(KID); - CDbKey* index = CDbKey::NewLC(); - index->AddL(nmsLogid); - User::LeaveIfError(iNmsLogDb.CreateIndex( KNmsLogIndex, KNmsLogTable, - *index)); - CleanupStack::PopAndDestroy(index); - IRLOG_DEBUG( "CIRNmsLogDb::CreateNmsLogIndexL - Exiting." ); - } - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::OpenDbL() -// opening the data base -// --------------------------------------------------------------------------- -// - void CIRNmsLogDb::OpenDbL() - { - IRLOG_DEBUG( "CIRNmsLogDb::OpenDbL" ); - CloseDb(); - TInt error = KErrNone; - if( !BaflUtils::FileExists(iFsSession, iDbFile) ) - { - //if file doesn't exist function leaves with error code - //KErrNotFound - error = KErrNotFound; - User::LeaveIfError(error); - } - - error = iNmsLogDb.Open(iFsSession,iDbFile); - if( error!=KErrNone ) - { - //if database is failed to open then - //function leaves - IRLOG_ERROR2( "CIRNmsLogDb::OpenDbL - Opening NmsLog database failed (%d)", error ); - User::LeaveIfError(error); - } - if( iNmsLogDb.IsDamaged() || !iNmsLogDb.InTransaction() ) - { - //if data base is damaged then - //it tried to recover - //if recovery is not possible function leaves - error = iNmsLogDb.Recover(); - if ( KErrNone == error) - { - //if recovered data base is compacted - error = iNmsLogDb.Compact(); - } - User::LeaveIfError(error); - } - IRLOG_DEBUG( "CIRNmsLogDb::OpenDbL - Exiting." ); - } - - -// --------------------------------------------------------------------------- -// CIRNmsLogDb::CreateDbL() -// Creates both the dbms files -// calls CreateFavMasterTableL(),CreateFavUrlTableL -// database filename -// --------------------------------------------------------------------------- -// - void CIRNmsLogDb::CreateDbL(TFileName& aNmsLog) - { - IRLOG_DEBUG( "CIRNmsLogDb::CreateDbL" ); - CloseDb(); - TInt error = iNmsLogDb.Replace(iFsSession,aNmsLog); - if ( error != KErrNone ) - { - IRLOG_ERROR2( "CIRNmsLogDb::CreateDbL - Creating NmsLog database failed (%d)", error ); - } - User::LeaveIfError(error); - CreateNmsLogTableL(); - IRLOG_DEBUG( "CIRNmsLogDb::CreateDbL - Exiting." ); - } - - - - - - - - - -