diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrdb/inc/cesmrcaldbmgr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrdb/inc/cesmrcaldbmgr.h Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,573 @@ +/* +* Copyright (c) 2007-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: Interface for calendar DB operations +* +*/ + + +#ifndef CESMRCALDBMGR_H +#define CESMRCALDBMGR_H + +#include +#include +// +#include "mesmrutilstombsext.h" +// +#include +#include "cesmrcaldbbase.h" + + +class MMRUtilsObserver; +class CCalSession; +class CCalEntry; +class CESMREntryCmdIteratorAO; +class CESMRGraveyardCleaner; +class MESMRCalEntry; +class CCalEntryView; +class CCalInstanceView; +class CCalCalendarInfo; + + +/** +* MESMRServicesCalDbMgr defines interface for calendar DB +* operations. +* +* @lib esmrservices.lib +*/ +class MESMRCalDbMgr : public MCalProgressCallBack + { +public: // Constructors and destructors + + /** + * Destructor. + */ + virtual ~MESMRCalDbMgr() {}; + + /** + * Accessor for Agenda Model CCalEntryView owned by utility. + * Returns a valid pointer if status is EAvailable or + * EAvailableWithoutTombs, otherwise NULL. + * @return entry view pointer, ownership not transferred + */ + virtual CCalEntryView* NormalDbEntryView() = 0; + + /** + * Accessor for Agenda Model CCalInstanceView owned by this utility. + * Returns a valid pointer if status is EAvailable or + * EAvailableWithoutTombs, otherwise NULL. + * @return instance view pointer, ownership not transferred + */ + virtual CCalInstanceView* NormalDbInstanceView() = 0; + + /** + * Accessor for Agenda Model CCalInstanceView owned by this utility. + * Returns a valid array of pointer if status is EAvailable or + * EAvailableWithoutTombs, otherwise NULL. + * @return instance view pointer, ownership not transferred + */ + virtual RPointerArray NormalDbAllCalenInstanceView() = 0; + + /** + * Fetches entries from the Agenda Model based on time range. + * In case of repeating entries the entire sequence must + * be within range (but modifying entries are considered separately). + * Ownership of entries is transferred to caller. + * See CCalEntryView documentation for other fetch variants. + * @param aCalEntryArray will contain fetched entries + * @param aTimeRange criteria + */ + virtual void FetchEntriesL( + RPointerArray& aCalEntryArray, + const CalCommon::TCalTimeRange& aTimeRange ) = 0; + + /** + * Fetches entry from the Agenda Model based on Uid and recurrence id. + * See CCalEntryView documentation for other fetch variants. For fetching + * originating entry use TCalTime set to Time::NullTTime(). + * Returns NULL if no matching entry was found. + * @param aUid criteria + * @param aRecurrenceId criteria + * @return entry, ownership is transferred to caller + */ + virtual CCalEntry* FetchEntryL( + const TDesC8& aUid, + const TCalTime& aRecurrenceId ) = 0; + + /** + * Stores the given entry in the Agenda Model. Entry is either + * stored to normal calendar DB or to tombstone calendar DB depending + * from input parameters. + * @param aCalEntry entry to be stored. + * @parma aToNormalDb ETrue --> stored to normal DB. + * EFalse --> stored to tombstone calendar DB. + * @return KErrNone or a system wide error code. + */ + virtual TInt StoreEntryL( + CCalEntry& aCalEntry, + TBool aToNormalDb = ETrue ) = 0; + + /** + * Updates the given entry in the Agenda Model. + * @param aCalEntry entry to update + * @return KErrNone or a system wide error code + */ + virtual TInt UpdateEntryL( + const CCalEntry& aCalEntry ) = 0; + + /** + * Deletes the given entry from the Agenda Model. + * @param aUid Entry uid to be deleted + * @return KErrNone or a system wide error code + */ + virtual TInt DeleteEntryL( + const TDesC8& aUid, TInt aCalenIndex ) = 0; + + /** + * Deletes the given entry from the Agenda Model. + * @param aLocalUid Entry uid to be deleted + * @return KErrNone or a system wide error code + */ + virtual TInt DeleteEntryL( + const TCalLocalUid& aLocalUid, TInt aCalenIndex ) = 0; + + /** + * Check entry: GUID, sequence number, existence in Agenda Model and + * tombstone database. Same as CMRUtilsTombsExt::StoreL() but doesn't + * actually store. + * @param aCalEntry entry to be stored + * @param aResurrectif ETrue then entry stored even if it has been + * previously deleted + * @param aCheckOnly + * @return result code + */ + virtual MESMRUtilsTombsExt::TESMRUtilsDbResult StoreEntryCondL( + CCalEntry& aCalEntry, + TBool aResurrect, + TBool aCheckOnly = EFalse ) = 0; + + /** + * Delete entry from Agenda Model if found + * This method causes deletion of all entries with given GUID. + * @param aUid determines entry to be deleted + */ + virtual void DeleteEntryCondL( + const TDesC8& aUid ) = 0; + + /** + * Delete entry from Agenda Model if found. + * This method causes deletion of a modifying entry, or entire + * recurring event if aLocalUid corresponds to an originating entry. + * @param aLocalUid determines entry to be deleted + */ + virtual void DeleteEntryCondL( + const TCalLocalUid& aLocalUid ) = 0; + + /** + * Delete entry from Agenda Model if found. + * This method causes deletion of a modifying entry, or entire + * recurring event if aCalEntry is an originating entry. + * @param aCalEntry entry to be deleted + */ + virtual void DeleteEntryCondL( + const CCalEntry& aCalEntry ) = 0; + + /** + * Delete entries from Agenda Model if found. + * This is asynchronous, user gets notified with + * MMRUtilsObserver::HandleOperation( EDeleteEntries,... ) + * @param aCalTimeRange determines entries to be deleted + */ + virtual void DeleteEntryCondL( + const CalCommon::TCalTimeRange& aCalTimeRange ) = 0; + + /** + * Fetches the calendar session associated with this + * cal db manager. + * @return Reference to calendar server session. + */ + virtual CCalSession& CalSession() = 0; + + /** + * Finds matching calendar instance from calendar db. Ownership is + * transferred to caller. + * If instance cannot be found, NULL is returned. + * + * @param aCalDb Reference to cal db manager. + * @param aEntry Reference to calendar entry + * @return Pointer to calendar entry instance. + */ + virtual CCalInstance* FindInstanceL( + const CCalEntry& aEntry ) = 0; + + /** + * Get calendar's color by entry + * @param aEntry Reference to calendar entry + * @return calendar's color rgb value + */ + virtual TRgb GetCalendarColorByEntryL( MESMRCalEntry& aEntry ) = 0; + + /** + * Get multi-calendar name list + * @param aCalendarNameList Reference to name string array + */ + virtual void GetMultiCalendarNameListL( RArray& aCalendarNameList ) = 0; + + /** + * Get calendar's name by entry + * @param aEntry Reference to calendar entry + * @return calendar's name + */ + virtual TPtrC GetCalendarNameByEntryL( MESMRCalEntry& aEntry ) = 0; + + /** + * Get calendar's color by calendar name + * @param aCalendarName Reference to calendar name + * @return calendar's color rgb value + */ + virtual TRgb GetCalendarColorByNameL( const TDesC& aCalendarName ) = 0; + + /** + * Set current calendar by pass calendar index to it + * @param aIndex current calendar index + */ + virtual void SetCurCalendarByIndex( TInt aIndex ) = 0; + + /** + * Set current calendar by pass calendar name to it + * @param aCalendarName current calendar name + */ + virtual void SetCurCalendarByNameL( const TDesC& aCalendarName ) = 0; + + /** + * Set current calendar by pass entry + * @param aColId current calendar collectionID + */ + virtual void SetCurCalendarByColIdL( TInt aColId ) = 0; + + /** + * Set current calendar by pass entry + * @param aEntry entry which belongs current calendar + */ + virtual void SetCurCalendarByEntryL( MESMRCalEntry& aEntry ) = 0; + + /** + * Sets current calendar by calendar database file id. + * @param aDbId calendar database file id to use + */ + virtual void SetCurCalendarByDbIdL( TCalFileId aDbId ) = 0; + + /* + * Get color of current calendar + * @return current calendar's color(rgb value) + */ + virtual TRgb GetCurCalendarColor() = 0; + + /* + * Get colId of current calendar + * @return current calendar's colId + */ + virtual TInt GetCurCalendarColIdL() = 0; + + /* + * Get index of current calendar + * @return current calendar's index + */ + virtual TInt GetCurCalendarIndex() = 0; + + /* + * Get entryview by CCalEntry + * @param aCalEntry use to get calendar which aCalEntry belongs + * @return CCalEntryView aCalEntry belongs + */ + virtual CCalEntryView* EntryViewL(const CCalEntry& aCalEntry ) = 0; + + /* + * Get instanceview by CCalEntry + * @param aCalEntry use to get calendar which aCalEntry belongs + * @return a CCalInstanceView that aCalEntry belongs + */ + virtual CCalInstanceView* InstanceViewL(const CCalEntry& aCalEntry ) = 0; + + /* + * Get current entryview + * @return current entryView + */ + virtual CCalEntryView* EntryView() = 0; + }; + +/** + * Manages two databases: normal Agenda db and tombstone db, and + * handles command logic related to these databases. This class is + * also responsible for collecting both database status information + * and async command progress, and to notify aObserver. + * + * @lib esmrdb.lib + */ +NONSHARABLE_CLASS(CESMRCalDbMgr) : + public CBase, + public MESMRCalDbMgr, + public MESMRCalDbObserver + { +public: // Constructors and destructors + /** + * Symbian two-phased constructor. + * @aCalSession calendar session reference + * @aObserver utility observer reference + */ + IMPORT_C static CESMRCalDbMgr* NewL( + CCalSession& aCalSession, + MMRUtilsObserver& aObserver ); + + /** + * Destructor. + */ + ~CESMRCalDbMgr(); + +protected: // From MESMRUtilsCalDbObserver + + void HandleCalDbStatus( + const CESMRCalDbBase* aNotifier, + MESMRCalDbObserver::TDbStatus aStatus ); + +protected: // From MCalProgressCallBack + + void Progress( + TInt aPercentageCompleted ); + TBool NotifyProgress(); + void Completed( + TInt aError ); + +protected: // From MESMRUtilsCalDbMgr + + CCalEntryView* NormalDbEntryView(); + CCalInstanceView* NormalDbInstanceView(); + RPointerArray NormalDbAllCalenInstanceView(); + void FetchEntriesL( + RPointerArray& aCalEntryArray, + const CalCommon::TCalTimeRange& aTimeRange ); + CCalEntry* FetchEntryL( + const TDesC8& aUid, + const TCalTime& aRecurrenceId ); + TInt StoreEntryL( + CCalEntry& aCalEntry, + TBool aToNormalDb = ETrue ); + TInt UpdateEntryL( + const CCalEntry& aCalEntry ); + TInt DeleteEntryL( + const TDesC8& aUid, TInt aCalenIndex ); + TInt DeleteEntryL( + const TCalLocalUid& aLocalUid, TInt aCalenIndex ); + MESMRUtilsTombsExt::TESMRUtilsDbResult StoreEntryCondL( + CCalEntry& aCalEntry, + TBool aResurrect, + TBool aCheckOnly = EFalse ); + MESMRUtilsTombsExt::TESMRUtilsDbResult CheckEntryCondL( + const CCalEntry& aCalEntry ); + void DeleteEntryCondL( + const TDesC8& aUid ); + void DeleteEntryCondL( + const TCalLocalUid& aLocalUid ); + void DeleteEntryCondL( + const CCalEntry& aCalEntry ); + void DeleteEntryCondL( + const CalCommon::TCalTimeRange& aCalTimeRange ); + CCalSession& CalSession(); + CCalInstance* FindInstanceL( + const CCalEntry& aEntry ); + + TRgb GetCalendarColorByEntryL( + MESMRCalEntry& aEntry); + void GetMultiCalendarNameListL( + RArray& aCalendarNameList); + TPtrC GetCalendarNameByEntryL( + MESMRCalEntry& aEntry); + TRgb GetCalendarColorByNameL( + const TDesC& aCalendarName); + void SetCurCalendarByNameL( + const TDesC& aCalendarName ); + void SetCurCalendarByIndex( + TInt aIndex ); + void SetCurCalendarByColIdL( + TInt aColId ); + void SetCurCalendarByEntryL( + MESMRCalEntry& aEntry ); + void SetCurCalendarByDbIdL( TCalFileId aDbId ); + TRgb GetCurCalendarColor(); + TInt GetCurCalendarColIdL(); + TInt GetCurCalendarIndex(); + CCalEntryView* EntryViewL(const CCalEntry& aCalEntry ); + CCalInstanceView* InstanceViewL(const CCalEntry& aCalEntry ); + CCalEntryView* EntryView(); + +protected: // New functions + /** + * Tests whether entry with same GUID and RECURRENCE-ID exists + * in aDb. If yes, then aIndex will tell it's position in aCalEntryArray + * which contains all entries with the same GUID. + * @param aUid first identity criterion + * @param aRecurrenceId second identity criterion + * @param aDb database where to look + * @param aCalEntryArray contains all entries with same GUID + * @param aIndex tells position of entry, if method returned ETrue + * @return ETrue if entry exists in aDb + */ + TBool EntryExistsInDbL( + const TDesC8& aUid, + const TCalTime& aRecurrenceId, + const CESMRCalDbBase& aDb, + RPointerArray& aCalEntryArray, + TInt& aIndex ) const; + /** + * Tests whether entry with same GUID and RECURRENCE-ID exists + * in aDb. If yes, then aIndex will tell it's position in aCalEntryArray + * which contains all entries with the same GUID. + * @param aEntry, whose GUID and RECURRENCE-ID are compared + * @param aDb database where to look + * @param aCalEntryArray contains all entries with same GUID + * @param aIndex tells position of entry, if method returned ETrue + * @return ETrue if entry exists in aDb + */ + TBool EntryExistsInDbL( + const CCalEntry& aEntry, + const CESMRCalDbBase& aDb, + RPointerArray& aCalEntryArray, + TInt& aIndex ) const; + + /** + * Helper method for evaluating validity and status of entry + * in relation to an another entry which exists in a database. + * @param aEntry entry to be evaluated + * @param aDbEntry corresponding entry existing in a database + * @return entry evaluation result + */ + MESMRUtilsTombsExt::TESMRUtilsDbResult EvaluateExistingEntryL( + const CCalEntry& aEntry, + const CCalEntry& aDbEntry ) const; + + /** + * Helper method for evaluating validity and status of a new entry. + * @aEntry entry to be evaluated + * @return entry evaluation result + */ + MESMRUtilsTombsExt::TESMRUtilsDbResult EvaluateNewEntryL( + const CCalEntry& aEntry ) const; + + /** + * Helper method which checks if given child entry would be a + * valid new modifying entry, i.e. if it has a recurrence id + * which matches to an existing instance. + * @param aEntry entry to be evaluated + * @return ETrue if valid + */ + TBool IsValidNewModL( + const CCalEntry& aEntry ) const; + + /** + * Evaluates if corresponding originating entry exists in database. + * @param aEntry + * @return ETrue if originating entry exists in database + */ + TBool OriginatingExistInDbL( + const CCalEntry& aModEntry ); + + /** + * Helper method for deleting a tombstone entry. + * @param aEntry entry to be deleted + */ + void DeleteTombstoneL( + const CCalEntry& aEntry ); + +protected: // Constructors and destructors + + /** + * C++ default constructor. + * @param aCalSession calendar session reference + * @param aObserver utility observer reference + */ + CESMRCalDbMgr( + CCalSession& aCalSession, + MMRUtilsObserver& aObserver ); + + /** + * Constructor, second phase. + */ + void ConstructL(); + +private: + TBool CheckSpaceBelowCriticalLevelL(); + /** + * Load multi calendar info to dbmgr + */ + void LoadMultiCalenInfoL(); + +protected: // data + + /** + * Currently ongoing asynchronous utils operation + */ + TInt iCurrentAsyncOp; + + /** + * Calendar session reference + * Not own. + */ + CCalSession& iCalSession; + + /** + * Calendar session array, support multi calendar + * Own. + */ + RPointerArray iCalSessionArray; + + /** + * CCalEntryView array, support multi calendar + * Own. + */ + RPointerArray iCalEntryViewArray; + + /** + * CCalInstanceView array, support multi calendar + * Own. + */ + RPointerArray iCalInstanceViewArray; + + /** + * CCalCalendarInfo array, support multi calendar + * Own. + */ + RPointerArray iCalendarInfoArray; + + /** + * Reference to cal db observer + * + */ + MMRUtilsObserver& iObserver; + + /** + * Normal agenda database + * Own. + */ + CESMRCalDbBase* iNormalDb; + + /** + * Handles asynchronous operation iteration + * Own. + */ + CESMREntryCmdIteratorAO* iCmdIterator; + +private: + TInt iCurCalenIndex; + }; + +#endif // CESMRCALDBMGR_H