meetingrequest/mrdb/inc/cesmrcaldbbase.h
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrdb/inc/cesmrcaldbbase.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,233 @@
+/*
+* 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:  Implementation for calendar database accessor
+*
+*/
+
+
+#ifndef CESMRCALDBBASE_H
+#define CESMRCALDBBASE_H
+
+#include <e32base.h>
+#include <calprogresscallback.h>
+#include <calcommon.h>
+
+class CESMRCalDbBase;
+class CCalEntryView;
+class CCalInstanceView;
+class CCalEntry;
+class CCalInstance;
+class CCalSession;
+
+/**
+* Observer interface for handling calendar database status.
+*
+* @lib esmrdb.lib
+*/
+class MESMRCalDbObserver
+    {
+public: // Data types
+    /**
+     * Enumeration for database status.
+     */
+    enum TDbStatus
+        {
+        EUninitialized       = 0x0000, // nothing done yet
+        EReseting            = 0x0002, // db reset ongoing
+        EInitEntryView       = 0x0004, // init entry view
+        EInitInstanceView    = 0x0008, // init instance view
+        EFinishedOk          = 0x0010, // init succeeded
+        EFinishedError       = 0x0020  // init failed
+        };
+
+public: // Interface
+    /**
+     * Callback method for handling database status.
+     * @param aNotifier for identifying the notifying database
+     * @param aStatus new current status of the database
+     */
+    virtual void HandleCalDbStatus(
+            const CESMRCalDbBase* aNotifier,
+            TDbStatus aStatus ) = 0;
+
+    };
+
+/**
+* Base class representing a calendar database.
+*
+* @lib esmrdb.lib
+*/
+class CESMRCalDbBase : public CBase,
+                       public MCalProgressCallBack
+    {
+public: // Constructors and destructors
+    /**
+    * Destructor.
+    */
+    ~CESMRCalDbBase();
+
+    /**
+     * Entry view accessor. Ownership not transferred.
+     * @return entry view, may be NULL
+     */
+    const CCalEntryView* EntryView() const;
+
+    /**
+     * Instance view accessor. Ownership not transferred.
+     * @return instance view, may be NULL
+     */
+    const CCalInstanceView* InstanceView() const;
+
+    /**
+     * Session accessor. Ownership not transferred.
+     * @return session, may be NULL
+     */
+    const CCalSession* Session() const;
+
+    /**
+     * Entry view accessor. Ownership not transferred.
+     * @return entry view, may be NULL
+     */
+    CCalEntryView* EntryView();
+
+    /**
+     * Instance view accessor. Ownership not transferred.
+     * @return instance view, may be NULL
+     */
+    CCalInstanceView* InstanceView();
+
+    /**
+     * Session accessor. Ownership not transferred.
+     * @return session, may be NULL
+     */
+    CCalSession* Session();
+
+    /**
+     * Database status getter.
+     * @return current database status
+     */
+    MESMRCalDbObserver::TDbStatus DbStatus();
+
+    /**
+     * CCalEntryView lacks fetch with time range. This method provides such
+     * functionality. In case of repeating entries the entire sequence must
+     * be within range (but modifying entries are considered separately).
+     * If database doesn't have both instance and entry view then this
+     * method leaves with KErrNotSupported.
+     * @param aCalEntryArray fetched entries, caller owns array items
+     * @param aCalTimeRange time range
+     * @param aFetchFullCopy copy type of calendar entry
+     */
+    void FetchWithRangeL(
+            RPointerArray<CCalEntry>& aCalEntryArray,
+            const CalCommon::TCalTimeRange& aCalTimeRange,
+            TBool aFetchFullCopy = ETrue );
+
+    /**
+     * Reset database, causes asynchronous db initialization
+     * which is notified through MMRUtilsCalDbObserver interface.
+     * Calling this method requires that there are no external
+     * open references for the session.
+     * The default implementation leaves with KErrNotSupported.
+     */
+    virtual void ResetDbL();
+
+    /**
+     * Tests whether given entry fits completely within given time range.
+     * @param aEntry entry to test
+     * @param aCalTimeRange criterion
+     * @return ETrue if fits, EFalse if exceeds from either end
+     */
+    static TBool IsCompletelyWithinRangeL(
+            const CCalEntry& aEntry,
+            const CalCommon::TCalTimeRange& aCalTimeRange );
+
+    /**
+     * Wrapper which traps leaving CompareL(), and in leave situation
+     * returns that objects are equal since that is a safer interpretation
+     * and avoids duplicates in database.
+     * In real life CompareL() is not expected to ever leave.
+     * @param aFirst entry
+     * @param aSecond entry
+     * @return zero if the objects are equal, a negative value if aFirst is
+     *         less than aSecond and a positive value otherwise
+     */
+    static TInt Compare(
+            const CCalEntry& aFirst,
+            const CCalEntry& aSecond );
+
+    /**
+     * Helper which allows ordering entries in an array. That is implemented
+     * by evaluating GUID and RECURRENCE-ID of the two entries.
+     * @param aFirst entry
+     * @param aSecond entry
+     * @return zero if the objects are equal, a negative value if aFirst is
+     *         less than aSecond and a positive value otherwise
+     */
+    static TInt CompareL(
+            const CCalEntry& aFirst,
+            const CCalEntry& aSecond );
+
+protected: // From MCalProgressCallBack
+    void Progress(
+            TInt aPercentageCompleted );
+    TBool NotifyProgress();
+
+protected: // Constructors and destructors
+   /**
+    * C++ default constructor.
+    * @param aDbObserver database observer reference
+    * @param aCmdObserver asynchronous command observer reference
+    */
+    CESMRCalDbBase(
+            MESMRCalDbObserver& aDbObserver,
+            MCalProgressCallBack& aCmdObserver );
+
+protected: // data
+    /**
+    * Current database status
+    * Own.
+    */
+    MESMRCalDbObserver::TDbStatus iDbStatus;
+    /**
+    * Used for notifying about database status
+    * Not own.
+    */
+    MESMRCalDbObserver& iDbObserver;
+    /**
+    * This callback is used for notifying about asynchronous
+    * command progress, Note: currently not used for anything!
+    * Not own.
+    */
+    MCalProgressCallBack& iCmdObserver;
+
+    /**
+    * Calender DB view. Managed by the subclass
+    * Own.
+    */
+    CCalEntryView* iCalEntryView;
+
+    /**
+    * Caledar DB instance view. Managed by the subclass
+    * Own.
+    */
+    CCalInstanceView* iCalInstanceView;
+    /**
+    * Calendar DB session. Managed by the subclass
+    * Own.
+    */
+    CCalSession* iCalSession;
+    };
+
+#endif // CESMRCALDBBASE_H