radioengine/utils/inc/cradiorepositorymanagerimp.h
changeset 24 6df133bd92e1
parent 13 46974bebc798
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioengine/utils/inc/cradiorepositorymanagerimp.h	Fri Jun 04 10:21:36 2010 +0100
@@ -0,0 +1,218 @@
+/*
+* 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:
+*
+*/
+
+
+#ifndef C_RADIOREPOSITORYMANAGERIMP_H
+#define C_RADIOREPOSITORYMANAGERIMP_H
+
+// System includes
+#include <centralrepository.h>
+
+// User includes
+#include "mradiorepositoryentityobserver.h"
+
+// Forward declarations
+class CRadioRepositoryEntityBase;
+
+/**
+ *  Central repository entity manager.
+ *
+ *  Manages central repository entities that listen to specific repository and a key within it, notifying the observer
+ *  whenever the key's value changes.
+ *
+ *  Also a set of static methods are provided that wrap the common use case of central repository where the user
+ *  is only interested to read or write the value of a key and then discard the repository object.
+ */
+NONSHARABLE_CLASS( CRadioRepositoryManagerImp ) : public CRadioRepositoryManager
+                                                , public MRadioRepositoryEntityObserver
+    {
+
+public:
+
+    static CRadioRepositoryManagerImp* NewL( TInt aGranularity );
+
+    ~CRadioRepositoryManagerImp();
+
+    /**
+     * Sets the value of an integer key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      The value to set.
+     */
+    static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt aValue );
+
+    /**
+     * Sets the value of a floating point key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      The value to set.
+     */
+    static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TReal& aValue );
+
+    /**
+     * Sets the value of a binary key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      The value to set.
+     */
+    static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue );
+
+    /**
+     * Sets the value of a string key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      The value to set.
+     */
+    static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue );
+
+    /**
+     * Gets the value of an integer key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      On return, the value of the key within the repository.
+     */
+    static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt& aValue );
+
+    /**
+     * Gets the value of a floating point key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      On return, the value of the key within the repository.
+     */
+    static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TReal& aValue );
+
+    /**
+     * Gets the value of a binary key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      On return, the value of the key within the repository.
+     */
+    static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes8& aValue );
+
+    /**
+     * Gets the value of a string key in the repository.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      On return, the value of the key within the repository.
+     */
+    static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes16& aValue );
+
+private:
+
+    CRadioRepositoryManagerImp( TInt aGranularity );
+
+    void ConstructL();
+
+// from base class CRadioRepositoryManager
+
+    void AddObserverL( MRadioRepositoryEntityObserver* aObserver );
+    void RemoveObserver( MRadioRepositoryEntityObserver* aObserver );
+    void EnableSave( TBool aEnable );
+    void AddEntityL( const TUid& aUid, TUint32 aKey, TRadioEntityType aType );
+    void RemoveEntity( const TUid& aUid, TUint32 aKey );
+    TInt SetEntityValue( const TUid& aUid, TUint32 aKey, TInt aValue );
+    TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TReal& aValue );
+    TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC8& aValue );
+    TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC16& aValue );
+    TInt EntityValueInt( const TUid& aUid, TUint32 aKey ) const;
+    const TReal& EntityValueReal( const TUid& aUid, TUint32 aKey ) const;
+    const TDesC8& EntityValueDes8( const TUid& aUid, TUint32 aKey ) const;
+    const TDesC16& EntityValueDes16( const TUid& aUid, TUint32 aKey ) const;
+
+    /**
+     * Sets the value of an entity.
+     *
+     * @param   aUid        The UID of the entity.
+     * @param   aKey        The key of the entity.
+     * @param   aValue      The value to set.
+     */
+    template <typename T>
+    TInt DoSetEntityValue( const TUid& aUid, TUint32 aKey, const T& aValue );
+
+    /**
+     * Returns an entity's cached value.
+     *
+     * @param   aUid        The UID of the entity.
+     * @param   aKey        The key of the entity.
+     * @return  The cached value of the entity.
+     */
+    template <typename T>
+    const T& DoEntityValue( const TUid& aUid, TUint32 aKey ) const;
+
+    /**
+     * Sets the value of a key.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @param   aValue      The value to set.
+     */
+    template <typename T>
+    static void DoSetRepositoryValueL( const TUid& aUid, TUint32 aKey, const T& aValue );
+
+    /**
+     * Returns a key's value.
+     *
+     * @param   aUid        The UID of the repository.
+     * @param   aKey        The key within the repository.
+     * @return  The key's value.
+     */
+    template <typename T>
+    static void DoGetRepositoryValueL( const TUid& aUid, TUint32 aKey, T& aValue );
+
+    /**
+     * Returns the entity's index by its UID and key.
+     *
+     * @param   aUid        The UID of the entity.
+     * @param   aKey        The key of the entity.
+     * @param   The entity's index or <code>KErrNotFound</code> if no such entity could be found.
+     */
+    TInt EntityIndex( const TUid& aUid, TUint32 aKey ) const;
+
+    /**
+     * SIS installation does not update central repository, this checks that the new keys are in the repository.
+     */
+    void CheckRepositoryKeysL();
+
+// from base class MRadioRepositoryEntityObserver
+
+    void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, TInt aValue, TInt aError );
+    void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TReal& aValue, TInt aError );
+    void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue, TInt aError );
+    void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue, TInt aError );
+
+private: // data
+
+    /** The observers that are notified of changes in the entities' values. */
+    RPointerArray<MRadioRepositoryEntityObserver> iObservers;
+
+    /** The entities registered. */
+    RPointerArray<CRadioRepositoryEntityBase> iEntities;
+
+    /** Indicates whether or not the entities are allowed to write to the repository. */
+    TBool iEnableSave;
+
+    };
+
+#endif // C_RADIOREPOSITORYMANAGERIMP_H