diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdconfigurationmanagerimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdconfigurationmanagerimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,333 @@ +/* +* Copyright (c) 2006 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: CNcdConfigurationManager declaration +* +*/ + + +#ifndef C_NCDCONFIGURATIONMANAGER_H +#define C_NCDCONFIGURATIONMANAGER_H + +#include +#include + +#include "ncdconfigurationmanager.h" +#include "ncdstoragedataitem.h" +#include "ncdproviderdefines.h" +#include "ncdserverdetails.h" + +class MNcdStorageManager; +class CNcdKeyValueMap; +class CNcdServerAddress; +class CNcdServerDetails; +class CNcdGeneralManager; + +/** + * Implements configuration management for NCD provider + */ +class CNcdConfigurationManager : public CBase, + public MNcdConfigurationManager + { +public: + + /** + * Creates a new configuration manager + * + * @param aAppUid Application UID for the CentralRepository + * @param aProviderUid Provider UID used for common provider data + * @return A new configuration manager + */ + static CNcdConfigurationManager* NewL( CNcdGeneralManager& aGeneralManager ); + + ~CNcdConfigurationManager(); + +public: // MNcdConfigurationManager + + /** + * @see MNcdConfigurationManager::AddObserverL() + */ + virtual void AddObserverL( + MNcdConfigurationObserver& aObserver, + const MCatalogsContext& aContext ); + + /** + * @see MNcdConfigurationManager::RemoveObserver() + */ + virtual void RemoveObserver( + MNcdConfigurationObserver& aObserver); + + /** + * @see MNcdConfigurationManager::MasterServerAddress() + */ + const TDesC& MasterServerAddressL( const MCatalogsContext& aContext ) const; + + + /** + * @see MNcdConfigurationManager::IsMasterServerAddressValidL() + */ + TBool IsMasterServerAddressValidL( const MCatalogsContext& aContext ) const; + + /** + * @see MNcdConfigurationManager::SetMasterServerAddressL() + */ + void SetMasterServerAddressL( + const MCatalogsContext& aContext, + const TDesC& aAddress, + const TInt64& aValidity ); + + /** + * @param aAddress Server address. Ownership is transferred after a + * successful operation + */ + void SetMasterServerAddressL( + const MCatalogsContext& aContext, + CNcdServerAddress* aAddress ); + + /** + * @see MNcdConfigurationManager::ResetMasterServerAddressL() + */ + void ResetMasterServerAddressL( const MCatalogsContext& aContext ); + + + /** + * @see MNcdConfigurationManager::ClientIdL() + */ + const TDesC& ClientIdL( const MCatalogsContext& aContext ); + + + /** + * @see MNcdConfigurationManager::SetSsidL() + */ + void SetSsidL( const MCatalogsContext& aContext, + HBufC8* aSsid ); + + /** + * @see MNcdConfigurationManager::Ssid() + */ + const TDesC8& SsidL( const MCatalogsContext& aContext ); + + + /** + * @see MNcdConfigurationManager::ServerDetailsL() + */ + MNcdServerDetails& ServerDetailsL( + const MCatalogsContext& aContext, + const TDesC& aServerUri, + const TDesC& aNamespace ); + + /** + * @see MNcdConfigurationManager::ServerDetails() + */ + const MNcdServerDetails* ServerDetails( + const MCatalogsContext& aContext, + const TDesC& aServerUri, + const TDesC& aNamespace ) const; + + /** + * @see MNcdConfigurationManager::SaveConfigurationToDbL() + */ + void SaveConfigurationToDbL( + const MCatalogsContext& aContext ); + + /** + * @see MNcdConfigurationManager::ClearServerCapabilitiesL() + */ + virtual void ClearServerCapabilitiesL( + const MCatalogsContext& aContext ); + + +public: // From MNcdUserConfiguration + + /** + * @see MNcdUserConfiguration::AddConfigurationL() + */ + void AddConfigurationL( const MCatalogsContext& aContext, + CNcdKeyValuePair* aConfig ); + + /** + * @see MNcdUserConfiguration::RemoveConfigurationL() + */ + TInt RemoveConfigurationL( const MCatalogsContext& aContext, + const TDesC& aKey ); + + /** + * @see MNcdUserConfiguration::ConfigurationsL() + */ + CNcdKeyValueMap* ConfigurationsLC( + const MCatalogsContext& aContext ); + + + /** + * @see MNcdUserConfiguration::ConfigurationsL() + */ + CNcdKeyValueMap& ConfigurationsL( + const MCatalogsContext& aContext, + TNcdConfigurationCategory aCategory ); + + + +private: + + // Constructor + CNcdConfigurationManager( CNcdGeneralManager& aGeneralManager ); + + // 2nd phase constructor + void ConstructL(); + +private: + + // Generates a new client ID + HBufC* GenerateClientIdLC() const; + + + class CContextConfiguration; + + // Compares contexts + static TBool MatchContexts( const CContextConfiguration& aFirst, + const CContextConfiguration& aSecond ); + + TInt FindConfigurationL( const MCatalogsContext& aContext ) const; + + // Determines key's configuration category + TNcdConfigurationCategory DetermineCategory( const TDesC& aKey ) const; + + + CNcdKeyValueMap& ConfigurationByCategory( TInt aIndex, + const TDesC& aKey ); + + CNcdKeyValueMap& ConfigurationByCategory( TInt aIndex, + TNcdConfigurationCategory aCategory ); + + + // Create a new context configuration for the context unless it exists + // Returns index for the configuration in iConfigurations + TInt CreateContextConfigurationL( + const MCatalogsContext& aContext ); + + + void SaveDataL( const TDesC& aId, + NcdProviderDefines::TNcdDatabaseDataType aType, + MNcdStorageDataItem& aDataItem ); + + void LoadDataL( const TDesC& aId, + NcdProviderDefines::TNcdDatabaseDataType aType, + MNcdStorageDataItem& aDataItem ); + +private: + + + // Cached Context-specific data + class CContextConfiguration : public CBase, public MNcdStorageDataItem + { + public: + + static CContextConfiguration* NewLC( + const MCatalogsContext& aContext, + const TDesC& aId ); + + // Only to be used with RPointerArray::Find + static CContextConfiguration* FindNewL( + const MCatalogsContext& aContext ); + + + // Destructor + ~CContextConfiguration(); + + // Returns details for the server. If the details have not been + // set, creates new empty details + MNcdServerDetails& ServerDetailsL( const TDesC& aServerUri, + const TDesC& aNamespace ); + + // Returns details for the server. + // Return NULL if details are not found + CNcdServerDetails* ServerDetails( const TDesC& aServerUri, + const TDesC& aNamespace ); + + + // Clears the server details. + void ClearServerDetails(); + + // Notifies the observers. + void NotifyObserversL() const; + + /** + * Adds an observer. + * + * @param aObserver The observer. + */ + void AddObserverL( MNcdConfigurationObserver& aObserver ); + + /** + * Removes an observer. + * + * @param aObserver The observer. + */ + void RemoveObserver( MNcdConfigurationObserver& aObserver ); + + + public: // MNcdStorageDataItem + + void ExternalizeL( RWriteStream& aStream ); + void InternalizeL( RReadStream& aStream ); + + protected: + + // Constructor + CContextConfiguration( const MCatalogsContext& aContext ); + + void ConstructL( const TDesC& aId ); + + public: + + // Context's family id + TUid iFamilyId; + + // Client's ID + HBufC* iId; + + // General configuration keys: master server address, etc. + CNcdKeyValueMap* iConfigurationGeneral; + + // Client info configuration + CNcdKeyValueMap* iConfigurationClientInfo; + + // Client's SSID + HBufC8* iSsid; + + // Master server override received from the protocol + CNcdServerAddress* iMasterServer; + + // Flag used to override MSA set by the client through + // AddConfiguration + TBool iUseHardcodedMasterServer; + + private: + RPointerArray iServerDetails; + + // Configuration observers. + RPointerArray iObservers; + }; + + +private: // data + + CNcdGeneralManager& iGeneralManager; + MNcdStorageManager& iStorageManager; + + // Cached configurations + RPointerArray iConfigurations; + }; + + +#endif // M_NCDCONFIGURATIONMANAGER_H