mediator/inc/Server/MediatorServerObjectHandler.h
changeset 0 4e1aa6a622a0
--- /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 <e32base.h>
+#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<CDomain>  iDomainList;
+        
+        /**
+        * List of registration change observers
+        */
+        RPointerArray<MMediatorServerNotificationObserver> iObserverList;
+        
+        /**
+        * A helper object for searches. Does not manage any other data than UID.
+        * Own.
+        */
+        CDomain* iSearchDomain;
+         
+    };
+
+#endif      // MEDIATORSERVEROBJECTHANDLER_H  
+            
+// End of File