calendarui/globaldata/inc/calenglobaldata.h
changeset 0 f979ecb2b13e
child 14 21239b3bcd78
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/globaldata/inc/calenglobaldata.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,492 @@
+/*
+* Copyright (c) 2002-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:   Global Data for Calendar application
+*
+*/
+
+
+#ifndef CALENGLOBALDATA_H
+#define CALENGLOBALDATA_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <w32std.h>
+#include <CMRUtils.h>                   // MMRUtilsObserver
+#include <cmrmailboxutils.h>
+#include <calennotificationhandler.h>   // MCalenNotificationHandler
+#include <calsession.h>             // Calendar database session
+#include <calinstanceview.h>        // Calendar Instance view
+#include <calentryview.h>           // Calendar Entry view
+#include <e32hashtab.h>                 //RHashSet
+
+#include <calenmulticaluids.hrh>
+
+
+// FORWARD DECLARATIONS
+class CMRMailboxUtils;                  // Mailbox utilities
+class CCalSession;                      // Calendar session
+class CCalEntryView;                    // Calendar entry view
+class CCalInstanceView;                 // Calendar instance view
+class CCalenInterimUtils2;              // Provides helper functions to CalInterimApi
+class CCalenSend;                       // Sending interface
+class CCalenDbChangeNotifier;           // Issues notifications of database changes
+class MCalenContextChangeObserver;      // Context changes
+struct TKeyEvent;
+class CCalenContextImpl;                // context implementation
+class MCalenContext;
+class CCalenFileMapping;
+class CCalenInfo;
+class CCalCalendarInfo;
+
+// CLASS DECLARATION
+
+/**
+*  CCalenGlobalData is a singleton using Thread local storage
+*  It provides easy access to instances of the following classes:
+*       CMRMailboxUtils
+*       CMRUtils
+*       CCalSession
+*       CCalInstanceView
+*       CCalEntryView
+*       CCalenInterimUtils2
+*       CCalenSend
+*       CCalenDbChangeNotifier
+*       CCalenContext
+*/
+NONSHARABLE_CLASS(CCalenGlobalData) : public CBase,
+                                      public MMRUtilsObserver,
+                                      public MCalenNotificationHandler
+    {
+    public:  // Constructors and destructor
+        /**
+         * The only classes that should call NewL are the controller
+         * and server classes. Otherwise use InstanceL.
+         * Doesn't take ownership of aNotifier.
+         */
+        IMPORT_C static CCalenGlobalData*
+                            NewL( MCalProgressCallBack& aCalCallBack,
+                                  MCalenContextChangeObserver* aNotifier=NULL );
+
+        /**
+        * Constructor.  Returns a new instance of CCalenGlobalData if
+        * none exists, or returns the existing instance.
+        * @return CCalenGlobalData pointer
+        */
+        IMPORT_C static CCalenGlobalData* InstanceL();
+
+        /**
+        * Constructs CCalenGlobalData with an existing CCalSession.  It
+        * is the responsibility of the caller to ensure that the session
+        * remains open until ALL references to the CCalenGlobalData have been
+        * released.  If the CCalenGlobalData already has created a different
+        * CCalSessionthis call will leave with KErrAlreadyExists.  If the
+        * CCalenGlobalData has previously been initialised with the same
+        * external CCalSession, the  existing instance will be returned.
+        * @param aSession initialised calendar session
+        * @return CCalenGlobalData pointer
+        */
+        IMPORT_C static CCalenGlobalData* InstanceL(CCalSession& aSession);
+
+        /**
+        * Non-leaving version of constructor. Returns an instance of
+        * CCalenGlobalData if one exists or NULL otherwise
+        */
+        IMPORT_C static CCalenGlobalData* Instance();
+
+        /**
+        * CCalenGlobalData is a reference counting singleton.  Call Release()
+        * when you are done with it, it will clean itself up when it needs to
+        */
+        IMPORT_C void Release();
+
+    public: // New functions
+
+        /**
+        * Returns a reference to the mailbox utils
+        * @return reference to a CMRMailboxUtils
+        */
+        IMPORT_C CMRMailboxUtils& MRMailboxUtilsL();
+
+        /**
+        * Returns a reference to the mr utils
+        * @return reference to a CMRUtils
+        */
+        IMPORT_C CMRUtils& MeetingRequestUtilsL();
+
+        /**
+        * Returns a reference to the calendar session
+        * @return reference to a CCalSession
+        */
+        IMPORT_C CCalSession& CalSessionL();
+        
+        /**
+        * Returns a reference to the calendar session
+        * @param aCalendar filename for which session to be returned
+        * @return reference to a CCalSession from array of sessions
+        */
+        IMPORT_C CCalSession& CalSessionL(const TDesC& aCalendar);
+
+        /**
+        * Returns a pointer to the calendar instance view
+        * if it has been constructed otherwise it
+        * returns NULL and constructs the instance view
+        * asynchronously.
+        * @return pointer to a CCalInstanceView
+        */
+        IMPORT_C CCalInstanceView* InstanceViewL();
+
+        /**
+        * Returns a pointer to the calendar instance view
+        * if it has been constructed otherwise it
+        * returns NULL and constructs the instance view
+        * asynchronously.
+        * @param aCollectionIds array of collection ids for which we need to 
+        * create the instanceview
+        * @return pointer to a CCalInstanceView
+        */
+        IMPORT_C CCalInstanceView* InstanceViewL(
+                                    const RArray<TInt>& aCollectionIds );
+        
+        /**
+        * Returns a pointer to the calendar entry view
+        * if it has been constructed otherwise it
+        * returns NULL and constructs the entry view
+        * asynchronously.
+        * @return pointer to a CCalEntryView
+        */
+        IMPORT_C CCalEntryView* EntryViewL();
+        
+        /**
+        * Returns a pointer to the calendar entry view
+        * if it has been constructed otherwise it
+        * returns NULL and constructs the entry view
+        * asynchronously.
+        * @param aCollectionId collection id to which we need to create entryview
+        * @return pointer to a CCalEntryView
+        */
+        IMPORT_C CCalEntryView* EntryViewL(const TCalCollectionId aCollectionId );
+
+
+        /**
+        * Returns information does complete entry view exist
+        * @return ETrue if exists EFalse if does not exist.
+        */
+        IMPORT_C TBool EntryViewExists();
+
+        /**
+        * Returns a reference to the interim utils
+        * @return reference to a CCalenInterimUtils2
+        */
+        IMPORT_C CCalenInterimUtils2& InterimUtilsL();
+
+        /**
+        * Returns a reference to the CCalenSend
+        * @return reference to a CCalenSend
+        */
+        IMPORT_C CCalenSend& CalenSendL();
+
+        /**
+        * Returns information whether the default mailbox if retrieved
+        * @return ETrue if successful EFalse if not
+        */
+        IMPORT_C TBool AttemptToRetrieveDefaultMailboxL( CMRMailboxUtils::TMailboxInfo& aDefaultMailbox);
+
+        /**
+        * Returns information whether events if queued successfully
+        * @return ETrue if event is queued EFalse if it doesn't
+        */
+        IMPORT_C TBool QueueKeyEvent(const TKeyEvent& aEvent, TEventCode aType);
+
+        /**
+        * Returns information whether a keyevent is fetched successfully
+        * @return ETrue if a keyevent is retieved EFalse if no more queued events
+        */
+        IMPORT_C TBool GetQueuedKeyEvent(TKeyEvent& aEvent, TEventCode& aType);
+
+        /**
+        * Reset events queue
+        * @return void
+        */
+        IMPORT_C void ResetKeyEventQueue();
+
+        /**
+        * Returns a reference to the calendar context
+        * @return reference to a CCalenContext
+        */
+        IMPORT_C MCalenContext& Context();
+
+        
+        /*
+         * Initializes multiple db related objects
+         * @return void
+         */
+        IMPORT_C void InitializeGlobalDataL();
+        
+        /*
+		* Gets meta db id from collection id 
+		* @param  cColId collection id for which db id has to be returned
+		* @return TInt Db id for callection id
+		*/
+        IMPORT_C TInt GetDbIdFromCollectionIdL(const TCalCollectionId aColId );
+        
+		/**
+		* @brief adds new calendar file and sets calendar info to it
+		*	 
+		* @param aCalendarInfo pointer to the calendar info which is being
+		* set to calsession
+		*/
+        IMPORT_C void AddCalendarL(CCalCalendarInfo* aCalendarInfo);
+			
+		/**
+		* @brief removes dead calendar files from the file system
+		*/
+        IMPORT_C void RemoveDeadCalendarsL();
+        
+        /**
+        * @brief removes calendar file from the file system
+        * 
+        *  @param aCalendarFileName Name of the calendar file to be deleted.
+        */
+        IMPORT_C void RemoveCalendarL(const TDesC& aCalendarFileName);
+		
+		/**
+		* @brief updated calendar info for the calendar file
+		* 
+		* @param aCalendarInfo pointer to the calendar info which is being
+		* set to calsession
+		*/
+        IMPORT_C void UpdateCalendarL(CCalCalendarInfo* aCalendarInfo);
+		
+		/**
+		* @brief  Get Calendar file name for the given collectionid
+		* 
+		* @param cColId collection id for which db id has to be returned
+		* @param aCalendarFileName calendar file name
+		*/
+        IMPORT_C const TDesC& GetCalFileNameForCollectionId( 
+                const TCalCollectionId aColId);
+		
+		/**
+		* @brief Get all available calendar info
+		*
+		* @param  returns the list of available calendar info iterating 
+		* through all calendars
+		*/
+        IMPORT_C void GetAllCalendarInfoL(RPointerArray<CCalCalendarInfo>& aCalendarInfoList);
+		
+    public:    // from MMRUtilsObserver
+        void HandleCalEngStatus( TMRUtilsCalEngStatus aStatus );
+
+    public: // MCalenNotificationHandler
+        void HandleNotification( const TCalenNotification aNotification );
+
+
+    private: // methods
+        /**
+        * Prompt the user to select their default meeting request mailbox. If the user cancels,
+        * the function returns KErrCancel, otherwise it returns the index of the newly
+        * selected mailbox. This function does not set the default mailbox, but rather returns
+        * the index of the given array to which the default should be set.
+        * @param aMailboxes array of all the mailboxes currently available.
+        * @return KErrCancel if the user declined to set a default, otherwise the index
+        * in aMailboxes to which the default should be set
+        */
+        TInt PromptToSelectDefaultMailboxL(RArray<CMRMailboxUtils::TMailboxInfo>& aMailboxes);
+
+    private:
+        /**
+        * C++ constructor.
+        *
+        */
+        CCalenGlobalData( MCalProgressCallBack& aCalCallBack);
+
+        /**
+        * By default Symbian 2nd phase constructor is private. 
+        * Doesn't take ownership of aNotifier.
+        */
+        void ConstructL( MCalenContextChangeObserver* aNotifier );
+
+        /**
+        * Private Destructor.  Users of this class should call Release() instead
+        */
+        ~CCalenGlobalData();
+
+        /**
+        * Sets the CCalenGlobalData to use an externally created CCalSession.
+        * Leaves with KErrAlreadyExists if a different session has already been
+        * created by the CCalenGlobalData
+        */
+        void SetSessionL(CCalSession* aSession);
+
+        /**
+        * Create entr yview
+        * @return void 
+        */
+        void CreateEntryViewL();
+        
+        /**
+        * Create instanceview
+        * @return void 
+        */
+        void CreateInstanceViewL();
+
+        /**
+        * Create instanceview
+        * @param aCollectionIds array of collection ids instance view
+        * @return void
+        */
+        void CreateInstanceViewL(const RArray<TInt>& aCollectionIds);
+        
+        /**
+        * Handle clean up after entryview/ instanceview being created
+        * @param aSuccess status of completion of instamce/entry view
+        * @return void
+        */
+        void ViewCreationCompleted( TBool aSuccess );
+        
+        /*
+         * Create new session for calendar name
+         * @param aCalendar calendar filename 
+         * @return referance to CCalSession 
+         */
+        CCalSession& CreateNewSessionL( const TDesC& aCalendar );
+        
+        /*
+         * Create entry view for session
+         * @param session referance to CCalSession
+         * @return void 
+         */
+        void  CreateEntryViewL(CCalSession& session);
+        
+        /*
+         * Constructs mapping between symbian calendar file and metabd info
+         * @return TBool status of construction
+         */
+        TBool ConstructFileMappingL();
+        
+        /*
+         * Find filemapping object based on calendar name
+         * @param aName calendar filename
+         * @param aFileMapping referance for RPointerArray find method.
+         * @return TBool find status
+         */
+        static TBool CalenInfoIdentifierL( const HBufC* aName,
+                                                const CCalenFileMapping& aFileMapping);
+        
+        
+        /*
+         * Find CCalCalendarInfo object based on calendar filename
+         * @param aFileName pointer to filename.
+         * @param CCalCalendarInfo referance for RPointerArray find method.
+         * @return TBool find status 
+         */
+        static TBool CalenCalendarInfoIdentiferL(const HBufC* aFileName,
+                                                        const CCalCalendarInfo& aCalendarInfo);
+        
+        /*
+         * @brief create new session for calendar name
+         * 
+         * @param aCalendar calendar filename 
+         * @return referance to CCalSession 
+         */
+        CCalSession& CreateNewSessionL( const TDesC& aCalendar,
+                const CCalCalendarInfo& aCalendarInfo );
+        
+        /*
+         * @brief Find filemapping object based on collection id
+         * 
+         * @param aCollectionId collection id 
+         * @param aFileMapping referance for RPointerArray find method.
+         * @return TBool find status
+         */
+        static TBool CalenFileMapIdentifierForColId(const TCalCollectionId* aId,
+                             const CCalenFileMapping& aFileMapping );
+
+		/**
+		* @brief Construct calendarlist using calendar iterator  
+		*/
+		void ConstructCalendarsListL();
+		
+		/**
+		* @brief gets default calendar information
+		* 
+		* @return CCalCalendarInfo returns pointer to default calendar info
+		*/
+		CCalCalendarInfo* GetDefaultCalendarInfoL();
+		
+		/**
+		* @brief Handles the notification ECalenNotifyCalendarInfoCreated
+		* Adds a new calendar to the available calendar list in calendar app
+		*/
+		void HandleCalendarInfoCreatedL();
+		
+		/**
+		* @brief Handles the notification ECalenNotifyCalendarInfoUpdated
+		* Updates a new calendar in the available calendar list in calendar app
+		*/
+		void HandleCalendarInfoUpdatedL();
+		
+		/**
+		* @brief Handles the notification ECalenNotifyCalendarFileDeleted
+		* Deletes a calendar from the calendar list
+		*/
+		void HandleCalendarFileDeletedL();
+
+	private:
+        // Member data owned by this class.  Member data is only initialised on first use
+        CActiveSchedulerWait* iUtilsAs;
+        CCalSession* iCalSession;
+        CCalEntryView* iEntryView;
+        CCalEntryView* iEntryViewCreation;
+        CCalInstanceView* iInstanceView;
+        CCalInstanceView* iInstanceViewCreation;
+        CCalSession* iNewCalSession;
+        CCalEntryView* iNewEntryView;
+        CCalEntryView* iNewEntryViewCreation;
+        CCalInstanceView* iNewInstanceView;
+        CCalInstanceView* iNewInstanceViewCreation;
+        CCalenInterimUtils2* iInterimUtils;
+        CCalenSend* iSend;
+        CCalenContextImpl* iContext;
+        CMRUtils* iMRUtils;
+        TInt iRefCount;
+        TInt iCreateError;
+        TBool iGlobalDataOwnsCalSession;
+        TBool iGlobalDataOwnsEntryView;
+        RPointerArray<CCalenFileMapping > iFileMappingArray;
+        RHashMap<TInt, TInt> iHashDbidIndexMap;
+
+        //Only used if meeting request solution exists on device, otherwise NULL
+        CMRMailboxUtils* iMailboxUtils;
+
+        struct TQueuedKeyEvent {
+            TKeyEvent iEvent;
+            TEventCode iType;
+        };
+
+        typedef void (CCalenGlobalData::*QueuedFunction)();
+        QueuedFunction iQueued;
+
+        // Not owned by class. Needed for entry and instance view
+        // creation.
+        MCalProgressCallBack& iCalCallBack;
+        RArray< TQueuedKeyEvent > iKeyQueue;
+        TBool iCalendarForcedExit;
+        CCalSession* iCalendarsSession;
+        RPointerArray<CCalCalendarInfo> iCalendarInfoList;
+    };
+
+#endif  // CALENGLOBALDATA_H
+
+// End of File