diff -r 6df133bd92e1 -r 075425b8d9a4 radioengine/utils/src/cradiorepositorymanagerimp.cpp --- a/radioengine/utils/src/cradiorepositorymanagerimp.cpp Fri Jun 04 10:21:36 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/* -* Copyright (c) 2009 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 "cradiorepositoryentity.h" -#include "cradiorepositorymanager.h" -#include "cradiorepositorymanagerimp.h" -#include "radioengineutils.h" - -const TInt KVRRepositoryObserverArrayGranularity = 2; - -// ======== LOCAL FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Panics the application. -// --------------------------------------------------------------------------- -// -void Panic( TInt aReason ) - { - _LIT( category, "CRadioRepositoryManagerImp" ); - User::Panic( category, aReason ); - } - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp* CRadioRepositoryManagerImp::NewL( TInt aGranularity ) - { - CRadioRepositoryManagerImp* self = new ( ELeave ) CRadioRepositoryManagerImp( aGranularity ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::ConstructL() - { - RadioEngineUtils::InitializeL(); - CheckRepositoryKeysL(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp::CRadioRepositoryManagerImp( TInt aGranularity ) - : iObservers( KVRRepositoryObserverArrayGranularity ) - , iEntities( aGranularity ) - , iEnableSave( ETrue ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp::~CRadioRepositoryManagerImp() - { - iObservers.Close(); - iEntities.ResetAndDestroy(); - RadioEngineUtils::Release(); - } - -// --------------------------------------------------------------------------- -// Adds observer -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::AddObserverL( MRadioRepositoryEntityObserver* aObserver ) - { - iObservers.AppendL( aObserver ); - } - -// --------------------------------------------------------------------------- -// Removes observer -// --------------------------------------------------------------------------- -// - void CRadioRepositoryManagerImp::RemoveObserver( MRadioRepositoryEntityObserver* aObserver ) - { - TInt objectIndex = iObservers.Find( aObserver ); - - if ( objectIndex != KErrNotFound ) - { - iObservers.Remove( objectIndex ); - } - } - -// --------------------------------------------------------------------------- -// Enables or disables the saving of entities. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::EnableSave( TBool aEnable ) - { - iEnableSave = aEnable; - } - -// --------------------------------------------------------------------------- -// Adds an entity. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::AddEntityL( const TUid& aUid, TUint32 aKey, TRadioEntityType aType ) - { - CRadioRepositoryEntityBase* entity = NULL; - - switch ( aType ) - { - case ERadioEntityInt: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityReal: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityDes8: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityDes16: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - default: - User::Leave( KErrNotSupported ); - break; - } - - CleanupStack::PushL( entity ); - iEntities.AppendL( entity ); - CleanupStack::Pop( entity ); - } - -// --------------------------------------------------------------------------- -// Removes an entity. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::RemoveEntity( const TUid& aUid, TUint32 aKey ) - { - TInt idx = EntityIndex( aUid, aKey ); - - if ( idx >= 0 ) - { - CRadioRepositoryEntityBase* entity = iEntities[idx]; - iEntities.Remove( idx ); - iEntities.GranularCompress(); - delete entity; - } - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, TInt aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TReal& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::EntityValueInt( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TReal& CRadioRepositoryManagerImp::EntityValueReal( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TDesC8& CRadioRepositoryManagerImp::EntityValueDes8( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TDesC16& CRadioRepositoryManagerImp::EntityValueDes16( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TReal& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TReal& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes8& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes16& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -template -TInt CRadioRepositoryManagerImp::DoSetEntityValue( const TUid& aUid, TUint32 aKey, const T& aValue ) - { - TInt idx = EntityIndex( aUid, aKey ); - - // If the entity could not be found, panic the application. - __ASSERT_ALWAYS( idx >= 0, ::Panic( KErrArgument ) ); - - return static_cast*>( iEntities[idx] )->SetValue( aValue, iEnableSave ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -template -const T& CRadioRepositoryManagerImp::DoEntityValue( const TUid& aUid, TUint32 aKey ) const - { - TInt idx = EntityIndex( aUid, aKey ); - - // If the entity could not be found, panic the application. - __ASSERT_ALWAYS( idx >= 0, ::Panic( KErrArgument ) ); - - return static_cast*>( iEntities[idx] )->Value(); - } - -// --------------------------------------------------------------------------- -// Sets a key's value in the repository. -// --------------------------------------------------------------------------- -// -template -void CRadioRepositoryManagerImp::DoSetRepositoryValueL( const TUid& aUid, TUint32 aKey, const T& aValue ) - { - CRepository* repository = CRepository::NewLC( aUid ); - User::LeaveIfError( repository->Set( aKey, aValue ) ); - CleanupStack::PopAndDestroy( repository ); - } - -// --------------------------------------------------------------------------- -// Returns a key's value in the repository. -// --------------------------------------------------------------------------- -// -template -void CRadioRepositoryManagerImp::DoGetRepositoryValueL( const TUid& aUid, TUint32 aKey, T& aValue ) - { - CRepository* repository = CRepository::NewLC( aUid ); - User::LeaveIfError( repository->Get( aKey, aValue ) ); - CleanupStack::PopAndDestroy( repository ); - } - -// --------------------------------------------------------------------------- -// Returns the entity's index that matches the supplied arguments. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::EntityIndex( const TUid& aUid, TUint32 aKey ) const - { - TInt idx = KErrNotFound; - - for ( TInt i = 0; i < iEntities.Count(); i++ ) - { - CRadioRepositoryEntityBase* entity = iEntities[i]; - if ( entity->Uid() == aUid && entity->Key() == aKey ) - { - idx = i; - break; - } - } - - return idx; - } - -// --------------------------------------------------------------------------- -// SIS installation does not update central repository, this checks that the new keys are in the repository. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::CheckRepositoryKeysL() - { - // After adding a new cenrep key to radiointernalcrkeys.h, add it also here with a default value - /* - CRepository* repository = CRepository::NewLC( KVRCRUid ); - - TInt ret = repository->Create( KVRCRNewValue, TInt( 123 ) ); - if ( ret != KErrAlreadyExists ) - { - User::LeaveIfError( ret ); - } - - CleanupStack::PopAndDestroy( repository ); - */ - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, TInt aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TReal& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TDesC8& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TDesC16& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - }