--- /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