meetingrequest/mrdb/inc/cesmrcaldbmgr.h
changeset 0 8466d47a6819
child 12 4ce476e64c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrdb/inc/cesmrcaldbmgr.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,389 @@
+/*
+* 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 <e32base.h>
+//<cmail>
+#include "mesmrutilstombsext.h"
+//</cmail>
+#include <calprogresscallback.h>
+#include "cesmrcaldbbase.h"
+
+class MMRUtilsObserver;
+class CCalSession;
+class CCalEntry;
+class CESMREntryCmdIteratorAO;
+class CESMRGraveyardCleaner;
+
+/**
+* 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;
+
+    /**
+     * 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<CCalEntry>& 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 ) = 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 ) = 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;
+    };
+
+/**
+ * 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();
+    void FetchEntriesL(
+            RPointerArray<CCalEntry>& 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 DeleteEntryL(
+            const TCalLocalUid& aLocalUid );
+    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();
+
+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<CCalEntry>& 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<CCalEntry>& 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();
+
+protected: // data
+
+    /**
+    * Currently ongoing asynchronous utils operation
+    */
+    TInt iCurrentAsyncOp;
+
+    /**
+    * Calendar session reference
+    * Not own.
+    */
+    CCalSession& iCalSession;
+
+    /**
+    * Reference to cal db observer
+    *
+    */
+    MMRUtilsObserver& iObserver;
+    /**
+    * Normal agenda database
+    * Own.
+    */
+    CESMRCalDbBase* iNormalDb;
+
+    /**
+    * Handles asynchronous operation iteration
+    * Own.
+    */
+    CESMREntryCmdIteratorAO* iCmdIterator;
+    };
+
+#endif // CESMRCALDBMGR_H