diff -r 000000000000 -r 8466d47a6819 meetingrequest/mrdb/inc/cesmrcaldbbase.h --- /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 +#include +#include + +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& 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