diff -r 000000000000 -r 4e1aa6a622a0 mediator/inc/Server/MediatorServerObjectHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediator/inc/Server/MediatorServerObjectHandler.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,375 @@ +/* +* Copyright (c) 2005 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: Handler Mediator objects (domains, categories and +* commands/events) +* +*/ + +#ifndef MEDIATORSERVEROBJECTHANDLER_H +#define MEDIATORSERVEROBJECTHANDLER_H + +// INCLUDES +#include +#include "MediatorCommon.h" +#include "MediatorServerObjects.h" +#include "MediatorServiceDefs.h" + +// FORWARD DECLARATIONS +class CDomain; +class CCategory; +class MMediatorCommandObserver; +class MMediatorServerEventObserver; + +// NAMESPACE +using namespace MediatorService; + + +// CLASS DECLARATION + +/** +* An observer interface for receiving Mediator Service notifications. +* +* @since S60 3.1 +*/ +class MMediatorServerNotificationObserver + { + public: + + /** + * Events have been registered. The events can now be subscribed. + * The list can contain 1-n new events into the category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events that have been registered. + * @return None. + */ + virtual void MediatorEventsAddedL( TUid aDomain, + TUid aCategory, + const REventList& aEvents ) = 0; + + /** + * New commands have been registered. The commands can now be subscribed. + * The list can contain 1-n new commands into the category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands List of commands that have been registered. + * @return None. + */ + virtual void MediatorCommandsAddedL( TUid aDomain, + TUid aCategory, + const RCommandList& aCommands ) = 0; + + /** + * A category has been removed. All subscriptions are cancelled. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @return None. + */ + virtual void MediatorCategoryRemovedL( TUid aDomain, TUid aCategory ) = 0; + + /** + * List of events has been removed. All subscriptions are cancelled. + * List can contain 1-n events from the specified category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events removed. + * @return None. + */ + virtual void MediatorEventsRemovedL( TUid aDomain, + TUid aCategory, + const REventList& aEvents ) = 0; + + /** + * List of commands have been removed. All subscriptions are cancelled. + * List can contain 1-n commands from the specified category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands The list of commands removed + * @return None. + */ + virtual void MediatorCommandsRemovedL( TUid aDomain, + TUid aCategory, + const RCommandList& aCommands ) = 0; + }; + + +/** +* Object handler class for Mediator Server. +* +* @lib MediatorServer +* @since S60 3.1 +*/ +class CMediatorServerObjectHandler : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMediatorServerObjectHandler* NewL(); + + /** + * Destructor. + */ + virtual ~CMediatorServerObjectHandler(); + + public: // New functions + + /** + * Adds new observer to get events about registration changes + * + * @since S60 3.1 + * @param aObserver pointer to observer instance + * @return None. + */ + void AddObserverL( MMediatorServerNotificationObserver* aObserver ); + + /** + * Removes observer. + * + * @since S60 3.1 + * @param aObserver pointer to observer instance + * @return None. + */ + void RemoveObserverL( MMediatorServerNotificationObserver* aObserver ); + + /** + * Finds domain from the domain list + * @since S60 3.1 + * @param aDomain identifying the domain + * @return CDomain pointer to found domain. Null if not found + */ + CDomain* FindDomain( const TUid aDomain ); + + /** + * Adds new domain to domain list + * @since S60 3.1 + * @param aDomain identifying the domain + * @return CDomain pointer to new domain. + */ + CDomain* AddDomainL( const TUid aDomain ); + + /** + * Returns pointer to category specified + * @since S60 3.1 + * @param aCategory structure defining domain and category + * @return CCategory pointer to category + */ + CCategory* CategoryL( TMediatorCategory aCategory ); + + + /** + * Gets all domains + * @since S60 3.1 + * @param aDomains Array where list of registered domains is written + * @return none. + */ + void GetDomainsL( RDomainList& aDomains ); + + /** + * Gets all categories from the domains + * @since S60 3.1 + * @param aCategory Information for the domain + * @param aCategories Array for the registered categories + * @return none. + */ + void GetCategoriesL( TMediatorCategory aCategory, + RCategoryList& aCategories ); + + /** + * Gets registered commands from the category + * @since S60 3.1 + * @param aCategory Information for the domain & category + * @param aCommands Array where list of registered commands is written + * @return none. + */ + + void GetCommandsL( TMediatorCategory aCategory, + RCommandList& aCommands ); + + /** + * Gets registered events from the category + * @since S60 3.1 + * @param aCategory Information for the domain & category + * @param aEvents Array where list of registered events is written + * @return none. + */ + + void GetEventsL( TMediatorCategory aCategory, + REventList& aEvents ); + + + /** + * Events have been registered. The events can now be subscribed. + * The list can contain 1-n new events into the category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events that have been registered. + * @return None. + */ + void EventsAdded( TUid aDomain, + TUid aCategory, + const REventList& aEvents ); + + /** + * New commands have been registered. The commands can now be subscribed. + * The list can contain 1-n new commands into the category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands List of commands that have been registered. + * @return None. + */ + void CommandsAdded( TUid aDomain, + TUid aCategory, + const RCommandList& aCommands ); + + /** + * List of events has been removed. All subscriptions are cancelled. + * List can contain 1-n events from the specified category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events removed. + * @return None. + */ + void EventsRemoved( TUid aDomain, + TUid aCategory, + const REventList& aEvents ); + + /** + * List of commands have been removed. All subscriptions are cancelled. + * List can contain 1-n commands from the specified category. + * + * @since S60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands The list of commands removed + * @return None. + */ + void CommandsRemoved( TUid aDomain, + TUid aCategory, + const RCommandList& aCommands ); + + /** + * Clears all registrations made by this observer + * + * @since S60 3.1 + * @param aEventObserver Pointer to event observer. + * @param aCommandObserver Pointer to command observer. + * @param aNotifObserver Pointer to notifications observer. + * @return None. + */ + void ClearRegistrations( MMediatorServerEventObserver* aEventObserver, + MMediatorCommandObserver* aCommandObserver, + MMediatorServerNotificationObserver* aNotifObserver ); + + + /** + * Gets statistical information about owned objects.. + * + * @since S60 3.1 + * @param aDomainCount domain count (OUT) + * @param aCategoryCount category count (OUT) + * @param aEventCount count of events in all categories (OUT) + * @param aCommandCount count of commands in all categories (OUT) + * @param aObserverCount observer count (OUT) + * @return None. + */ + void GetStatistics(TInt& aDomainCount, + TInt& aCategoryCount, + TInt& aEventCount, + TInt& aCommandCount, + TInt& aObserverCount); + + private: + + /** + * Compares two domains according to their UIDs. User in array finds. + * @since S60 3.1 + * @param aLeftDomain reference to left domain + * @param aRightdomain reference to right domain + * @return TBool indicating if items are same or not. + */ + static TBool CompareDomains( const CDomain& aLeftDomain, + const CDomain& aRightDomain ); + + /** + * Checks whether category has any events and commands + * @since S60 3.1 + * @param aDomain UID for the domain + * @param aCategory UID for the category + * @return TBool ETrue if empty, EFalse if not + */ + TBool IsCategoryEmptyL( TUid aDomain, TUid aCategory); + + /** + * Removes category if it was empty + * @since S60 3.1 + * @param aDomain UID for the domain + * @param aCategory UID for the category + * @return TBool ETrue if removed, EFalse if not + */ + TBool RemoveCategoryIfEmptyL( TUid aDomain, TUid aCategory); + + private: + + /** + * C++ default constructor. + */ + CMediatorServerObjectHandler(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + /** + * List of domains (includes categories and then commands and events + */ + + RPointerArray iDomainList; + + /** + * List of registration change observers + */ + RPointerArray iObserverList; + + /** + * A helper object for searches. Does not manage any other data than UID. + * Own. + */ + CDomain* iSearchDomain; + + }; + +#endif // MEDIATORSERVEROBJECTHANDLER_H + +// End of File