diff -r 000000000000 -r 1bce908db942 natfw/tsrc/natfwtestconsoles/natfwtestconsole/src/datadepository.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/natfw/tsrc/natfwtestconsoles/natfwtestconsole/src/datadepository.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 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: +* +*/ + + + + +#include + +#include "datadepository.h" + + +CDataDepository::CDataDepository( CRepository* aRepository ) + { + iRepository = aRepository; + } + +CDataDepository::~CDataDepository( ) + { + } + +CDataDepository* CDataDepository::NewL( CRepository* aRepository ) + { + CDataDepository* self = CDataDepository::NewLC( aRepository ); + CleanupStack::Pop(self); + return self; + } + +CDataDepository* CDataDepository::NewLC( CRepository* aRepository ) + { + CDataDepository* self = new( ELeave ) CDataDepository( aRepository ); + CleanupStack::PushL( self ); + //self->ConstructL( ); + return self; + } + + +TUint32 CDataDepository::CreateNewTableKeyL( TUint aTableMask, TUint32 aFieldMask ) const + { + const TInt KReserved = 1; + TUint32 newKey = 0; + RArray< TUint32 > keys; + CleanupClosePushL( keys ); + TInt err = iRepository->FindL( aTableMask, + aFieldMask, + keys ); + TInt keyCount = keys.Count( ); + + if ( err == KErrNotFound ) + { + newKey = aFieldMask + 1; + } + else + { + User::LeaveIfError( err ); + if ( keyCount == 0 ) + { + newKey = aFieldMask + 1; + } + else + { + // Find the biggest key and increment it by one + keys.SortUnsigned( ); + TUint32 maxKey = aTableMask ^ keys[ keyCount - 1 ]; + newKey = aFieldMask + 1 + maxKey; + } + } + newKey |= aFieldMask; + newKey ^= aFieldMask; + + User::LeaveIfError( iRepository->Create( aTableMask | newKey, KReserved ) ); + CleanupStack::PopAndDestroy( &keys ); + return newKey; + } + +void CDataDepository::StoreL( const TUint32 aKey, const TInt aData ) + { + User::LeaveIfError( + iRepository->StartTransaction( + CRepository::EConcurrentReadWriteTransaction ) ); + iRepository->CleanupCancelTransactionPushL( ); + + TInt tmp = 0; + if ( iRepository->Get( aKey,tmp ) == KErrNone ) + { + // Update existing value + User::LeaveIfError( iRepository->Set( aKey, aData ) ); + } + else + { + // Create new value + User::LeaveIfError( iRepository->Create( aKey, aData ) ); + } + TUint32 dummy; + User::LeaveIfError( iRepository->CommitTransaction( dummy ) ); + CleanupStack::Pop( ); // transaction + } + +void CDataDepository::StoreL( const TUint32 aKey, const TDesC8& aData ) + { + User::LeaveIfError( + iRepository->StartTransaction( + CRepository::EConcurrentReadWriteTransaction ) ); + + iRepository->CleanupCancelTransactionPushL( ); + + TBuf8< 1 > tmp; + TInt err = iRepository->Get( aKey,tmp ); + if ( err == KErrNone || err == KErrOverflow ) + { + // Update existing value + User::LeaveIfError( iRepository->Set( aKey, aData ) ); + } + else + { + // Create new value + User::LeaveIfError( iRepository->Create( aKey, aData ) ); + } + TUint32 dummy; + User::LeaveIfError( iRepository->CommitTransaction( dummy ) ); + CleanupStack::Pop( ); // transaction + } + +TInt CDataDepository::Read( const TUint32 aKey, TInt& aData ) + { + TInt err = KErrNotFound; + if ( iRepository->Get( aKey, aData ) == KErrNone ) + { + err = KErrNone; + } + return err; + } + +TInt CDataDepository::ReadL( const TUint32 aKey, HBufC8** aData ) + { + TInt err = KErrNotFound; + TBuf8< 1 > tmp; + TInt actualLength = 0; + TInt status = iRepository->Get( aKey,tmp,actualLength ); + + if ( ( status == KErrNone || status == KErrOverflow) && ( actualLength > 0 ) ) + { + err = KErrNone; + HBufC8* buf = HBufC8::NewL( actualLength ); + CleanupStack::PushL( buf ); + TPtr8 ptr( buf->Des( ) ); + User::LeaveIfError( iRepository->Get( aKey,ptr ) ); + *aData = buf; + CleanupStack::Pop( buf ); + } + else + { + *aData = KNullDesC8( ).AllocL( ); + } + return err; + } + +TInt CDataDepository::EraseL( TUint32 aTableMask, TUint32 aFieldTypeMask ) + { + //find KDomain names + RArray< TUint32 > keys; + CleanupClosePushL( keys ); + + TInt err = iRepository->FindL( aTableMask, + aFieldTypeMask, + keys ); + if( err == KErrNone ) + { + TInt count = keys.Count( ); + for ( TInt i = 0; i < count; i++ ) + { + //delete setting + iRepository->Delete( keys[ i ] ); + } + } + CleanupStack::PopAndDestroy( &keys ); + return err; + }