meetingrequest/mrentry/src/cesmrmeetingrequestentry.cpp
branchRCL_3
changeset 33 da5135c61bad
parent 1 12c456ceeff2
child 19 b13141f05c3d
--- a/meetingrequest/mrentry/src/cesmrmeetingrequestentry.cpp	Mon Mar 15 12:39:10 2010 +0200
+++ b/meetingrequest/mrentry/src/cesmrmeetingrequestentry.cpp	Wed Mar 31 21:08:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* 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"
@@ -17,14 +17,6 @@
 
 
 // INCLUDE FILES
-//<cmail>
-#include "emailtrace.h"
-#include "cesmralarminfohandler.h"
-#include "cesmrrecurrenceinfohandler.h"
-//</cmail>
-#include <centralrepository.h>
-#include <calalarm.h>
-
 #include "cesmrmeetingrequestentry.h"
 #include "cesmrfsmailboxutils.h"
 #include "cesmrcaldbmgr.h"
@@ -32,25 +24,37 @@
 #include "esmrentryhelper.h"
 #include "cesmrconflictchecker.h"
 #include "cesmrcaluserutil.h"
+#include "cesmralarminfohandler.h"
+#include "cesmrrecurrenceinfohandler.h"
+#include "mmrinfoobject.h"
+#include "mmrattendee.h"
+
+#include "CFSMailMessage.h"
+
 #include "esmrconfig.hrh"
+#include "cesmrfeaturesettings.h"
+
+#include "emailtrace.h"
 
 #include <esmralarminfo.rsg>
 #include <calentry.h>
 #include <calinstance.h>
 #include <calinstanceview.h>
 #include <caluser.h>
-#include <CalenInterimUtils2.h>
+#include <calattachment.h>
+#include <caleninterimutils2.h>
 #include <cmrmailboxutils.h>
 #include <calrrule.h>
-//<cmail>
-#include "mmrinfoobject.h"
-#include "mmrattendee.h"
-//</cmail>
-#include <CalendarInternalCRKeys.h>
+#include <centralrepository.h>
+#include <calalarm.h>
+#include <calendarinternalcrkeys.h>
 #include <data_caging_path_literals.hrh>
 #include <coemain.h>
 #include <calentryview.h>
 #include <ct/rcpointerarray.h>
+#include <apmstd.h>
+#include <apgcli.h>
+#include <apmrec.h>
 
 /// Unnamed namespace for local definitions
 namespace {
@@ -58,18 +62,6 @@
 // Alarm resource file location
 _LIT( KAlarmInfoResource, "esmralarminfo.rsc" );
 
-// Definition for first index
-const TInt KFirstIndex = 0;
-
-// Definition for 0
-const TInt KZero = 0;
-
-// Definition for 1
-const TInt KOne = 1;
-
-// Definition for number of hours within day
-const TInt KHoursInDay = 24;
-
 // Definition for default alarm time for meeting
 const TInt KDefaultMeetingAlarmMinutes( 15 );
 
@@ -77,63 +69,41 @@
 _LIT( KLineFeed, "\x2029");
 
 /**
- * Finds matching calendar instance from calendar db. Ownership is
- * transferred, 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.
+ * Sets phone owner to entry.
+ * @param aMbUtils Reference to mailbox utils.
+ * @param aEntry Reference to calendar entry.
  */
-CCalInstance* FindInstanceL(
-        MESMRCalDbMgr& aCalDb,
+void SetPhoneOwnerL(
+        CMRMailboxUtils& aMbUtils,
         CCalEntry& aEntry )
     {
-    CCalInstance* instance = NULL;
-    RCPointerArray<CCalInstance> calInstances;
-    CleanupClosePushL( calInstances );
-
-    CCalInstanceView* instanceView =
-            aCalDb.NormalDbInstanceView();
-
-    CalCommon::TCalViewFilter instanceFilter =
-            CalCommon::EIncludeAppts |
-            CalCommon::EIncludeEvents;
-
-    // Removing one seconds from start time and adding one second to stop
-    // time. Otherwise wanted entry is not included into results.
-    TCalTime startTime;
-    startTime.SetTimeLocalL(
-        aEntry.StartTimeL().TimeLocalL() - TTimeIntervalSeconds(KOne) );
-    TCalTime endTime;
-    endTime.SetTimeLocalL(
-        aEntry.EndTimeL().TimeLocalL() + TTimeIntervalSeconds(KOne) );
-
-    TDateTime start = startTime.TimeLocalL().DateTime();
-    TDateTime end   = endTime.TimeLocalL().DateTime();
-
-    CalCommon::TCalTimeRange timeRange(
-            startTime,
-            endTime );
-
-    instanceView->FindInstanceL(
-            calInstances,
-            instanceFilter,
-            timeRange);
-
-    TInt instanceCount( calInstances.Count() );
-    for (TInt i = 0; (i < instanceCount && !instance); ++i)
-        {
-        CCalEntry& entry = calInstances[i]->Entry();
-
-        // Finding the entry we are intrested for
-        if ( !entry.UidL().Compare( aEntry.UidL() ) )
-            {
-            instance = calInstances[i];
-            calInstances.Remove( i );
-            }
-        }
-    CleanupStack::PopAndDestroy(); // arrayCleanup
-    return instance;
+    CESMRFsMailboxUtils* fsMbUtils =
+            CESMRFsMailboxUtils::NewL( aMbUtils );
+    CleanupStack::PushL( fsMbUtils );
+
+    fsMbUtils->SetPhoneOwnerL( aEntry );
+    CleanupStack::PopAndDestroy( fsMbUtils );
+    fsMbUtils = NULL;
+    }
+
+/**
+ * Makes copy of the entry and sets phone owner accordingly
+ * @param aMbUtils Reference to mailbox utils.
+ * @param aEntry Reference to calendar entry.
+ */
+CCalEntry* CopyEntryL(
+        CMRMailboxUtils& aMbUtils,
+        const CCalEntry& aEntry )
+    {
+    CCalEntry* entry = ESMRHelper::CopyEntryL(
+                            aEntry,
+                            aEntry.MethodL(),
+                            ESMRHelper::ECopyFull,
+                            EESMREventTypeMeetingRequest );
+
+    SetPhoneOwnerL( aMbUtils, *entry );
+
+    return entry;
     }
 
 #ifdef _DEBUG
@@ -183,7 +153,8 @@
 :   iMRMailboxUtils( aMRMailboxUtils ),
     iConflictsExists( aConflictsExists),
     iCalDb( aCalDb ),
-    iESMRInputParams( aESMRInputParams )
+    iESMRInputParams( aESMRInputParams ),
+    iSendCanellation( ETrue )
     {
     FUNC_LOG;
     // Not yet implementation
@@ -193,21 +164,20 @@
 // CESMRMeetingRequestEntry::~CESMRMeetingRequestEntry
 // ---------------------------------------------------------------------------
 //
-CESMRMeetingRequestEntry::~CESMRMeetingRequestEntry()
+EXPORT_C CESMRMeetingRequestEntry::~CESMRMeetingRequestEntry()
     {
     FUNC_LOG;
     delete iEntry;
     delete iForwardEntry;
     delete iOrginalEntry;
     delete iParameterEntry;
-    delete iBackupEntry;
     }
 
 // ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::NewL
 // ---------------------------------------------------------------------------
 //
-CESMRMeetingRequestEntry* CESMRMeetingRequestEntry::NewL(
+EXPORT_C CESMRMeetingRequestEntry* CESMRMeetingRequestEntry::NewL(
         const CCalEntry& aEntry,
         CMRMailboxUtils& aMRMailboxUtils,
         MESMRCalDbMgr& aCalDb,
@@ -238,31 +208,12 @@
         const CCalEntry& aEntry )
     {
     FUNC_LOG;
-    
-    iParameterEntry = ESMRHelper::CopyEntryL(
-        aEntry,
-        aEntry.MethodL(),
-        ESMRHelper::ECopyFull );    
-    iBackupEntry=ESMRHelper::CopyEntryL(
-            aEntry,
-            aEntry.MethodL(),
-            ESMRHelper::ECopyFull ); 
-    iEntry = ESMRHelper::CopyEntryL(
-        aEntry,
-        aEntry.MethodL(),
-        ESMRHelper::ECopyFull );
-
-    if ( !IsStoredL() && !IsOpenedFromMail() )
-        {
-        // by default when creating a meeting the priority value is normal
-        SetPriorityL( EFSCalenMRPriorityNormal );
-        }
-
-    iOrginalEntry  = ESMRHelper::CopyEntryL(
-        aEntry,
-        aEntry.MethodL(),
-        ESMRHelper::ECopyFull );
-    
+
+    iParameterEntry = CopyEntryL( iMRMailboxUtils, aEntry );
+    iEntry = CopyEntryL( iMRMailboxUtils, aEntry );
+
+    iOrginalEntry  = CopyEntryL( iMRMailboxUtils, aEntry );
+
     if ( EESMRRoleOrganizer == RoleL() && IsStoredL() )
         {
         // Increase sequence number
@@ -281,39 +232,52 @@
         }
 
     HBufC* newDescription = ReplaceCharactersFromBufferLC(
-                                    iEntry->DescriptionL(),       
+                                    iEntry->DescriptionL(),
                                     KReplaceLineFeedChar(),
                                     KLineFeed() );
     iEntry->SetDescriptionL( *newDescription );
+    iOrginalEntry->SetDescriptionL( *newDescription );
+
     CleanupStack::PopAndDestroy( newDescription );
-        
+
+    __ASSERT_DEBUG( iEntry->PhoneOwnerL(), Panic( EESMRPhoneOwnerNotSet) );
+    
+    CESMRFeatureSettings* settings = CESMRFeatureSettings::NewL();
+    if ( settings->FeatureSupported(
+            CESMRFeatureSettings::EMRUIMeetingRequestViewerCmailOnly ) )
+        {
+        // Meeting request viewer available only from email.
+        // Remove attachments from entry.  
+        iRemoveAttachments = ETrue;
+        }
+    delete settings;
     }
 
 // ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::ReplaceCharactersFromBufferL
 // ---------------------------------------------------------------------------
 //
-HBufC* CESMRMeetingRequestEntry::ReplaceCharactersFromBufferLC( const TDesC& aTarget, 
-                              const TDesC& aFindString, 
+HBufC* CESMRMeetingRequestEntry::ReplaceCharactersFromBufferLC( const TDesC& aTarget,
+                              const TDesC& aFindString,
                               const TDesC& aReplacement )
     {
     FUNC_LOG;
     HBufC* newBuffer = aTarget.AllocLC();
     TPtr16 ptr = newBuffer->Des();
-    
+
     // find next occurance:
     TInt offset = ptr.Find(aFindString);
     while ( offset != KErrNotFound )
         {
         // replace the data:
         ptr.Replace( offset, aFindString.Length(), aReplacement);
-        
+
         // find next occurance:
         offset = ptr.Find(aFindString);
         }
-    
+
     return newBuffer;
-    }         
+    }
 
 // ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::Type
@@ -390,24 +354,21 @@
 
     CCalInstance* instance = NULL;
 
-    instance = FindInstanceL( iCalDb, *iEntry );
+    instance = iCalDb.FindInstanceL( *iEntry );
     if ( !instance )
         {
         // Instance not found by using the edited entry
         // Trying with orginal.
-        instance = FindInstanceL( iCalDb, *iOrginalEntry );
+        instance = iCalDb.FindInstanceL( *iOrginalEntry );
         }
 
     if ( !instance )
         {
         // Instance not found by using edited or orginal entry.
         // --> Leave
-
-
         User::Leave( KErrNotFound );
         }
 
-
     return instance;
     }
 
@@ -422,7 +383,7 @@
     __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
 
     TBool canSetRecurrence( ETrue );
-
+    
     if ( iEntry->EntryTypeL() == CCalEntry::EAppt &&
             ESMREntryHelper::IsRepeatingMeetingL(*iEntry) &&
         (!ESMREntryHelper::IsModifyingEntryL(*iEntry) &&
@@ -454,7 +415,7 @@
         // Ownership is transferred
         CCalInstance* instance = NULL;
         TRAPD(err, instance = InstanceL() );
-        if ( KErrNotFound != err&&err!=KErrNone )
+        if ( KErrNotFound != err )
             {
             User::LeaveIfError( err );
             }
@@ -540,11 +501,10 @@
     __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
 
     CESMRRecurrenceInfoHandler* recurrenceHandler =
-            CESMRRecurrenceInfoHandler::NewLC( *iEntry );
+            CESMRRecurrenceInfoHandler::NewLC( *iEntry, &iCalDb );
 
     recurrenceHandler->GetRecurrenceL( aRecurrence, aUntil );
     CleanupStack::PopAndDestroy( recurrenceHandler );
-
     }
 
 // ---------------------------------------------------------------------------
@@ -562,7 +522,7 @@
 // ---------------------------------------------------------------------------
 //
 void CESMRMeetingRequestEntry::SetModifyingRuleL(
-        TESMRRecurrenceModifyingRule aRule )
+        TESMRRecurrenceModifyingRule aRule, const TBool aTypeChanging )
     {
     FUNC_LOG;
 
@@ -578,18 +538,16 @@
     recHandler->GetRecurrenceL(
             orginalRecurrence,
             orginalUntil);
-
     CleanupStack::PopAndDestroy( recHandler );
     recHandler = NULL;
 
+    TBool modifyingEntry( ESMREntryHelper::IsModifyingEntryL( *iEntry ) );
 
     if ( MESMRCalEntry::EESMRAllInSeries == aRule &&
-         IsStoredL() && !IsForwardedL() && !IsOpenedFromMail() )
+         IsStoredL() && !IsForwardedL() && !IsOpenedFromMail() && !aTypeChanging )
         {
         // When we want to modify series of recurrence entries -->
         // Parent entry is modified
-
-        TBool modifyingEntry( ESMREntryHelper::IsModifyingEntryL( *iEntry ) );        
         if ( ERecurrenceNot == orginalRecurrence && !modifyingEntry )
             {
             // Orginal entry was not recurrent event
@@ -611,27 +569,24 @@
             CleanupStack::PushL( instance );
 
             CCalEntry::TMethod entryMethod( iEntry->MethodL() );
-            CCalEntry* iBackupEntry=ESMRHelper::CopyEntryL(
-                    *iEntry,
-                    entryMethod,
-                    ESMRHelper::ECopyFull);
-            delete iEntry; 
+
+            delete iEntry;
             iEntry = NULL;
-            
-            delete iForwardEntry; 
+
+            delete iForwardEntry;
             iForwardEntry = NULL;
-            
-            delete iOrginalEntry; 
+
+            delete iOrginalEntry;
             iOrginalEntry = NULL;
 
             RCPointerArray<CCalEntry> entries;
             CleanupClosePushL( entries );
 
-            iCalDb.NormalDbEntryView()->FetchL(
+            iCalDb.EntryViewL( instance->Entry() )->FetchL(
                     instance->Entry().UidL(), entries );
 
             TInt parentIndex( KErrNotFound );
-            TInt entryCount( entries.Count() );            
+            TInt entryCount( entries.Count() );
             for ( TInt i(0); i < entryCount && KErrNotFound == parentIndex; ++i )
                 {
                 TBool modifyingEntry( ESMREntryHelper::IsModifyingEntryL( *entries[i]) );
@@ -642,24 +597,13 @@
                 }
 
             __ASSERT_DEBUG( KErrNotFound != parentIndex, Panic(EESMRParentNotFound) );
-            
+
             CCalEntry& parent = *entries[parentIndex];
 
             TPtrC description( parent.DescriptionL() );
-            
-            iEntry = ESMRHelper::CopyEntryL(
-                            parent,
-                            parent.MethodL(),
-                            ESMRHelper::ECopyFull );
-            
-            CESMRFsMailboxUtils* fsMbUtils = 
-                    CESMRFsMailboxUtils::NewL( iMRMailboxUtils );
-            CleanupStack::PushL( fsMbUtils );
-            
-            fsMbUtils->SetPhoneOwnerL( *iBackupEntry );
-            CleanupStack::PopAndDestroy( fsMbUtils );
-            fsMbUtils = NULL;
-            
+
+            iEntry = CopyEntryL( iMRMailboxUtils, parent );
+
             // Adjust parent entry's start and end time to entry
             TCalTime start;
             TCalTime end;
@@ -673,10 +617,7 @@
 
             iEntry->SetStartAndEndTimeL( start, end );
 
-            iOrginalEntry = ESMRHelper::CopyEntryL(
-                                    *iEntry,
-                                    iEntry->MethodL(),
-                                    ESMRHelper::ECopyFull );
+            iOrginalEntry = CopyEntryL( iMRMailboxUtils, *iEntry );
 
             if ( iEntry->MethodL() != entryMethod )
                 {
@@ -686,8 +627,7 @@
 
             iEntry->SetDescriptionL( description );
             iOrginalEntry->SetDescriptionL( description );
-            iEntry=ESMRHelper::CopyEntryL(*iBackupEntry,iBackupEntry->MethodL(),ESMRHelper::ECopyFull);
-            
+
             CleanupStack::PopAndDestroy(); // entries
             CleanupStack::PopAndDestroy( instance );
 
@@ -700,7 +640,15 @@
                 }
             }
         }
-
+    else if ( ERecurrenceNot != orginalRecurrence && 
+    		aTypeChanging && !modifyingEntry )
+    	{
+		// if entry( in the memory) is a recurrent event 
+		// ,and if entry type is changing, and not in modifying status then EESMRAllInSeries
+		iRecurrenceModRule = EESMRAllInSeries ;
+		return;
+    	}
+    
     iRecurrenceModRule = aRule;
 
     }
@@ -728,10 +676,10 @@
     start.Set( aStartDate.DateTime().Year(),
                aStartDate.DateTime().Month(),
                aStartDate.DateTime().Day(),
-               KZero,
-               KZero,
-               KZero,
-               KZero);
+               0,
+               0,
+               0,
+               0);
 
     // set the end date to next day from given end date since
     // all day event should last 24 hours.
@@ -739,10 +687,10 @@
     end.Set( endDate.DateTime().Year(),
              endDate.DateTime().Month(),
              endDate.DateTime().Day(),
-             KZero,
-             KZero,
-             KZero,
-             KZero );
+             0,
+             0,
+             0,
+             0 );
 
     startTime.SetTimeLocalL( start );
     stopTime.SetTimeLocalL( end );
@@ -762,34 +710,11 @@
 
     __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
 
-    TBool allDayEvent(EFalse);
-
-    TCalTime startTime = iEntry->StartTimeL();
-    TCalTime stopTime  = iEntry->EndTimeL();
-
-    TTimeIntervalHours hoursBetweenStartAndEnd;
-    stopTime.TimeLocalL().HoursFrom(
-            startTime.TimeLocalL(),
-            hoursBetweenStartAndEnd );
-
-    TCalTime::TTimeMode mode = startTime.TimeMode();
-
-    TInt hoursBetweenStartAndEndAsInt(  hoursBetweenStartAndEnd.Int() );
-    TInt alldayDivident(  hoursBetweenStartAndEndAsInt % KHoursInDay );
-
-    if ( hoursBetweenStartAndEndAsInt&& KZero == alldayDivident )
-        {
-        TDateTime startTimeLocal = startTime.TimeLocalL().DateTime();
-        TDateTime stopTimeLocal =  stopTime.TimeLocalL().DateTime();
-
-        if ( startTimeLocal.Hour() == stopTimeLocal.Hour() &&
-             startTimeLocal.Minute() == stopTimeLocal.Minute() &&
-             startTimeLocal.Second() == stopTimeLocal.Second() )
-            {
-            allDayEvent = ETrue;
-            }
-        }
-
+    CESMRCalUserUtil* entryUtil = CESMRCalUserUtil::NewLC( *iEntry );
+
+    TBool allDayEvent( entryUtil->IsAlldayEventL() );
+
+    CleanupStack::PopAndDestroy( entryUtil );
 
     return allDayEvent;
     }
@@ -806,16 +731,16 @@
 
     TBool ret(EFalse);
     CCalEntry* dbEntry = NULL;
-    
+
     TRAPD( err, dbEntry = iCalDb.FetchEntryL(
                                 iEntry->UidL(),
                                 iEntry->RecurrenceIdL() ) );
-    
+
     if ( KErrNotFound == err )
         {
-        // Error has occured while retrieving an entry        
+        // Error has occured while retrieving an entry
         ret = EFalse;
-        }    
+        }
     else if ( dbEntry)
         {
         // Entry was found from the calendar db --> it is stored for sure.
@@ -844,7 +769,7 @@
         {
         CCalEntry::TStatus status( iOrginalEntry->StatusL() );
         if ( CCalEntry::ENullStatus != status )
-            { // When we send a request for the first time we set 
+            { // When we send a request for the first time we set
               // it's status to some other value than ENullStatus
             retVal = ETrue;
             }
@@ -852,10 +777,12 @@
     else
         {
         // In attendee mode, we have sent the entry, if it is stored to
-        // calendar db and status is not declined. Declined entries are
-        // not stored to calendar db.
+        // calendar db and status is known and not declined.
+        // Declined entries are not stored to calendar db.
         TESMRAttendeeStatus currentStatus( AttendeeStatusL() );
-        if ( IsStoredL() && EESMRAttendeeStatusDecline != currentStatus)
+        if ( IsStoredL()
+             && EESMRAttendeeStatusUnknown != currentStatus
+             && EESMRAttendeeStatusDecline != currentStatus )
             {
             retVal = ETrue;
             }
@@ -924,6 +851,13 @@
             edited = ETrue;
             }
 
+        if( IsStoredL() )
+            {
+            if ( iCalDb.EntryViewL( *iEntry ) != iCalDb.EntryView() )
+                {
+                edited = ETrue;
+                }
+            }
         }
 
 
@@ -932,6 +866,17 @@
     }
 
 // ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::IsEntryTypeChangedL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRMeetingRequestEntry::IsEntryTypeChangedL() const
+    {
+    FUNC_LOG;
+    
+    return iTypeChanged;
+    }
+
+// ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::GetAlarmL
 // ---------------------------------------------------------------------------
 //
@@ -967,7 +912,7 @@
         {
         aAlarmType = MESMRCalEntry::EESMRAlarmAbsolute;
 
-        // only meeting request that is not allday event can have 
+        // only meeting request that is not allday event can have
         // relative alarm:
         if ( !IsAllDayEventL() )
             {
@@ -978,7 +923,7 @@
             if ( KErrNone == err )
                 {
                 aAlarmType = MESMRCalEntry::EESMRAlarmRelative;
-                if( alarmInfo.iRelativeAlarmInSeconds < KZero )
+                if( alarmInfo.iRelativeAlarmInSeconds < 0 )
                     {
                     aAlarmType = MESMRCalEntry::EESMRAlarmNotFound;
                     }
@@ -1003,6 +948,192 @@
 
 
 // ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::UpdateEntryAfterStoringL
+// ---------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::UpdateEntryAfterStoringL()
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
+
+    CCalEntry* storedEntry = NULL;
+
+
+    if ( IsRecurrentEventL() &&
+         EESMRThisOnly == iRecurrenceModRule &&
+         !IsForwardedL() && IsStoredL() &&
+         !ESMREntryHelper::IsModifyingEntryL(*iEntry) )
+        {
+        // We have stored one instance of series.
+        storedEntry = iCalDb.FetchEntryL(
+                    iEntry->UidL(),
+                    iOrginalEntry->StartTimeL() );
+        }
+    else
+        {
+        // We are dealing with single instance or with the series
+        storedEntry = iCalDb.FetchEntryL(
+                    iEntry->UidL(),
+                    iEntry->RecurrenceIdL() );
+        }
+
+
+    __ASSERT_DEBUG( storedEntry, Panic( EESMREntryNotExist ) );
+    CleanupStack::PushL( storedEntry );
+
+    // Description needs to be fecthed explicitly into memory
+    TPtrC description( storedEntry->DescriptionL() );
+
+
+    delete iEntry;
+    iEntry = NULL;
+    iEntry = CopyEntryL( iMRMailboxUtils, *storedEntry );
+
+    if ( MESMRCalEntry::EESMRAllInSeries == iRecurrenceModRule &&
+         IsRecurrentEventL() )
+        {
+        // Adjust parent entry's start and end time to entry
+        TCalTime start;
+        TCalTime end;
+
+        CESMRRecurrenceInfoHandler* recurrenceHandler =
+                CESMRRecurrenceInfoHandler::NewLC( *iEntry );
+
+        recurrenceHandler->GetFirstInstanceTimeL( start, end );
+        CleanupStack::PopAndDestroy( recurrenceHandler );
+        recurrenceHandler = NULL;
+
+        iEntry->SetStartAndEndTimeL( start, end );
+        iEntry->SetDescriptionL( description );
+        }
+
+    CCalEntry* temp  = CopyEntryL( iMRMailboxUtils, *iEntry );
+
+    delete iOrginalEntry;
+    iOrginalEntry = temp;
+
+    CleanupStack::PopAndDestroy( storedEntry );
+    }
+
+// ----------------------------------------------------------------------------
+// CMRCalEntry::UpdateComparativeEntry
+// ----------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::UpdateComparativeEntry(
+        CCalEntry* aNewComparativeEntry )
+    {
+    FUNC_LOG;
+
+    if( iOrginalEntry ) // Update comparative entry
+        {
+        delete iOrginalEntry;
+        iOrginalEntry = NULL;
+
+        iOrginalEntry = aNewComparativeEntry;
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::SetDefaultValuesToEntryL
+// ---------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::SetDefaultValuesToEntryL()
+    {
+    FUNC_LOG;
+
+    if ( !IsStoredL() )
+        {
+        SetPriorityL( EFSCalenMRPriorityNormal );
+
+        // Get default alarm time from central repository
+        TInt defaultAlarmTime=0;
+        CRepository* repository = CRepository::NewLC( KCRUidCalendar );
+
+        TInt err = KErrNotFound;
+
+        if ( repository )
+            {
+            err = repository->Get(
+                    KCalendarDefaultAlarmTime,
+                    defaultAlarmTime );
+            CleanupStack::PopAndDestroy( repository );
+            }
+
+        if ( err != KErrNone )
+            {
+            // By default 15 minutes if not found from central repository
+            defaultAlarmTime = KDefaultMeetingAlarmMinutes;
+            }
+
+        // Getting current time
+        TTime currentTime;
+        currentTime.HomeTime();
+
+        // Getting meeting start time
+        TTime start = iEntry->StartTimeL().TimeLocalL();
+
+        // Create default alarm
+        CCalAlarm* alarm = CCalAlarm::NewL();
+        CleanupStack::PushL( alarm );
+
+        TTimeIntervalMinutes alarmOffset( defaultAlarmTime );
+
+        // If alarm time is in past
+        if ( ( start - alarmOffset ) < currentTime )
+            {
+            // Setting alarm off
+            iEntry->SetAlarmL( NULL );
+            }
+        else
+            {
+            // Set default alarm time
+            alarm->SetTimeOffset( alarmOffset );
+            iEntry->SetAlarmL( alarm );
+            }
+        CleanupStack::PopAndDestroy( alarm );
+        }
+
+    // Set the default end time if not set by client
+    if ( iEntry->StartTimeL().TimeUtcL() == iEntry->EndTimeL().TimeUtcL() )
+        {
+        // This value might also be read from cenrep
+        TTimeIntervalHours KDefaultMeetingDuration(1);
+
+        TCalTime newEndTime;
+        newEndTime.SetTimeUtcL(
+                iEntry->StartTimeL().TimeUtcL() + KDefaultMeetingDuration );
+        iEntry->SetStartAndEndTimeL(iEntry->StartTimeL(), newEndTime);
+        }
+
+    iEntry->SetReplicationStatusL( CCalEntry::EOpen );
+
+    //Original entry must be stored after the default values are set.
+    //Otherwise it looks like settings are changed even though they haven't
+    CCalEntry* temp = CopyEntryL( iMRMailboxUtils, *iEntry );
+
+    delete iOrginalEntry;
+    iOrginalEntry = temp;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::CloneEntryLC
+// ---------------------------------------------------------------------------
+//
+CCalEntry* CESMRMeetingRequestEntry::CloneEntryLC(
+        TESMRCalEntryType aType ) const
+    {
+    CCalEntry* entry =
+        ESMRHelper::CopyEntryLC( *iEntry,
+                                 iEntry->MethodL(),
+                                 ESMRHelper::ECopyFull,
+                                 TESMRCalendarEventType( aType ) );
+
+    return entry;
+    }
+
+// ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::RoleL
 // ---------------------------------------------------------------------------
 //
@@ -1108,7 +1239,7 @@
 
     attendee->SetStatusL(status);
     iEntry->SetStatusL(entryStatus);
-    
+
     iEntry->SetMethodL( CCalEntry::EMethodReply );
 
     }
@@ -1127,11 +1258,11 @@
     TBool outOfDate( EFalse );
 
     CCalEntry::TMethod method( iEntry->MethodL() );
-    if ( IsOpenedFromMail() && 
+    if ( IsOpenedFromMail() &&
          CCalEntry::EMethodCancel != method )
         {
         CCalEntry* dbEntry = NULL;
-        
+
         TRAP_IGNORE( dbEntry = iCalDb.FetchEntryL( iEntry->UidL(),
                                                  iEntry->RecurrenceIdL() ) );
 
@@ -1205,6 +1336,10 @@
     CCalAttendee::TCalStatus attendeeStatus( attendee->StatusL() );
     switch ( attendeeStatus )
         {
+        case CCalAttendee::ENeedsAction:
+            status = EESMRAttendeeStatusUnknown;
+            break;
+
         case CCalAttendee::EAccepted:
             status = EESMRAttendeeStatusAccept;
             break;
@@ -1254,13 +1389,10 @@
     FUNC_LOG;
 
     __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
-    
-    CCalEntry* temp = ESMRHelper::CopyEntryL(
-        *iEntry,
-        iEntry->MethodL(),
-        ESMRHelper::ECopyFull );
-    
-    delete iForwardEntry; 
+
+    CCalEntry* temp = CopyEntryL( iMRMailboxUtils, *iEntry );
+
+    delete iForwardEntry;
     iForwardEntry = temp;
 
     RPointerArray<CCalAttendee>& attendeeList =
@@ -1269,7 +1401,7 @@
     while ( attendeeList.Count() )
         {
         //remove attendees from entry that is to be forwarded
-        iForwardEntry->DeleteAttendeeL( KFirstIndex );
+        iForwardEntry->DeleteAttendeeL( 0 );
         }
 
     }
@@ -1308,11 +1440,11 @@
         iForwardEntry->SetStatusL( CCalEntry::EConfirmed );
         }
     else if ( RoleL() == EESMRRoleOrganizer ||
-    		iEntry->StatusL() == CCalEntry::ENullStatus )
+            iEntry->StatusL() == CCalEntry::ENullStatus )
         {
         iEntry->SetStatusL( CCalEntry::EConfirmed );
         }
- 
+
     }
 
 // ---------------------------------------------------------------------------
@@ -1364,8 +1496,6 @@
     MESMRMeetingRequestEntry::TESMREntryInfo info =
             EESMREntryInfoNormal;
 
-    TBool isSent( IsSentL() );
-
     if ( IsEntryOutOfDateL() )
         {
         info = EESMREntryInfoOutOfDate;
@@ -1374,7 +1504,7 @@
         {
         info = EESMREntryInfoCancelled;
         }
-    else if ( isSent )
+    else if ( IsSentL() )
         {
         info = EESMREntryInfoAccepted;
         if ( EESMRAttendeeStatusTentative == attendeeStatus )
@@ -1386,10 +1516,6 @@
         {
         info = EESMREntryInfoOccursInPast;
         }
-    else if ( iConflictsExists )
-        {
-        info = EESMREntryInfoConflicts;
-        }
 
 
     return info;
@@ -1466,10 +1592,7 @@
 
     if ( iForwardEntry )
         {
-        entry = ESMRHelper::CopyEntryL(
-                *iForwardEntry,
-                iForwardEntry->MethodL(),
-                ESMRHelper::ECopyFull );
+        entry = CopyEntryL( iMRMailboxUtils, *iForwardEntry );
         }
 
     if ( !entry && IsRecurrentEventL() &&
@@ -1506,15 +1629,15 @@
                                 parent.EntryTypeL(),
                                 guid,
                                 parent.MethodL(),
-                                KZero,
+                                0,
                                 iOrginalEntry->StartTimeL(),
                                 CalCommon::EThisOnly );
 
-                CleanupStack::Pop( guid ); 
+                CleanupStack::Pop( guid );
                 guid = NULL; // ownership transferred
                 }
 
-            CleanupStack::PopAndDestroy( instance );  
+            CleanupStack::PopAndDestroy( instance );
             instance = NULL; // instance
             CleanupStack::PushL( entry );
 
@@ -1522,11 +1645,12 @@
             CCalEntry::TMethod method( iEntry->MethodL() );
 
             entry->CopyFromL( *iEntry, CCalEntry::EDontCopyId );
-            entry->SetSequenceNumberL( KZero );
+            entry->SetSequenceNumberL( 0 );
             entry->SetMethodL( method );
             entry->SetSummaryL( iEntry->SummaryL() );
             entry->SetLocalUidL( TCalLocalUid( 0 ) );
             entry->ClearRepeatingPropertiesL();
+            iMRMailboxUtils.SetPhoneOwnerL( *entry );
 
             CleanupStack::Pop( entry );
             }
@@ -1534,14 +1658,20 @@
 
     if ( !entry )
         {
-
-        entry = ESMRHelper::CopyEntryL(
-                *iEntry,
-                iEntry->MethodL(),
-                ESMRHelper::ECopyFull );
-
+        entry = CopyEntryL( iMRMailboxUtils, *iEntry );
         }
 
+    if ( iRemoveAttachments )
+        {
+        // Remove attachments from the entry
+        TInt count( entry->AttachmentCountL() );
+        
+        for ( TInt i = 0; i < count; ++i )
+            {
+            CCalAttachment* attachment = entry->AttachmentL( i );
+            entry->DeleteAttachmentL( *attachment );
+            }
+        }
 
     return entry;
     }
@@ -1635,7 +1765,7 @@
 
         TPtrC calEntryAddress( thisAttendee->Address() );
         TPtrC infoAddress( attendee->Address() );
-        if ( KZero == infoAddress.Compare(calEntryAddress ) )
+        if ( 0 == infoAddress.Compare(calEntryAddress ) )
             {
             found = ETrue;
 
@@ -1687,8 +1817,7 @@
         aStartupParams.iCalEntry       = iESMRInputParams->iCalEntry;
         aStartupParams.iMRInfoObject   = iESMRInputParams->iMRInfoObject;
         aStartupParams.iMailMessage    = iESMRInputParams->iMailMessage;
-        aStartupParams.iMailClient     = iESMRInputParams->iMailClient;
-        aStartupParams.iAttachmentInfo = iESMRInputParams->iAttachmentInfo;
+        aStartupParams.iMailClient     = iESMRInputParams->iMailClient;        
         aStartupParams.iSpare          = iESMRInputParams->iSpare;
         }
     return retValue;
@@ -1779,94 +1908,6 @@
     }
 
 // ---------------------------------------------------------------------------
-// CESMRMeetingRequestEntry::SetDefaultValuesToEntryL
-// ---------------------------------------------------------------------------
-//
-void CESMRMeetingRequestEntry::SetDefaultValuesToEntryL()
-    {
-    FUNC_LOG;
-
-    if ( !IsStoredL() )
-        {
-        SetPriorityL( EFSCalenMRPriorityNormal );
-
-        // Get default alarm time from central repository
-        TInt defaultAlarmTime=0;
-        CRepository* repository = CRepository::NewLC( KCRUidCalendar );
-        
-        TInt err = KErrNotFound; 
-        
-        if ( repository )
-            {
-            err = repository->Get(
-                    KCalendarDefaultAlarmTime,
-                    defaultAlarmTime );
-            CleanupStack::PopAndDestroy( repository );
-            }
-
-        if ( err != KErrNone )
-            {
-            // By default 15 minutes if not found from central repository
-            defaultAlarmTime = KDefaultMeetingAlarmMinutes;
-            }
-
-        // Getting current time
-        TTime currentTime;
-        currentTime.HomeTime();
-
-        // Getting meeting start time
-        TTime start = iEntry->StartTimeL().TimeLocalL();
-
-        // Create default alarm
-        CCalAlarm* alarm = CCalAlarm::NewL();
-        CleanupStack::PushL( alarm );
-
-        TTimeIntervalMinutes alarmOffset( defaultAlarmTime );
-
-        // If alarm time is in past
-        if ( ( start - alarmOffset ) < currentTime )
-            {
-            // Setting alarm off
-            iEntry->SetAlarmL( NULL );
-            }
-        else
-            {
-            // Set default alarm time
-            alarm->SetTimeOffset( alarmOffset );
-            iEntry->SetAlarmL( alarm );
-            }
-        CleanupStack::PopAndDestroy( alarm );
-        }
-
-    // Set the default end time if not set by client
-    if ( iEntry->StartTimeL().TimeUtcL() == iEntry->EndTimeL().TimeUtcL() )
-        {
-        // This value might also be read from cenrep
-        TTimeIntervalHours KDefaultMeetingDuration(1);
-
-        TCalTime newEndTime;
-        newEndTime.SetTimeUtcL(
-                iEntry->StartTimeL().TimeUtcL() + KDefaultMeetingDuration );
-        iEntry->SetStartAndEndTimeL(iEntry->StartTimeL(), newEndTime);
-        }
-
-    iEntry->SetReplicationStatusL( CCalEntry::EOpen );
-
-    //Original entry must be stored after the default values are set.
-    //Otherwise it looks like settings are changed even though they haven't    
-
-    CCalEntry* temp = ESMRHelper::CopyEntryL(
-                                        *iEntry,
-                                        iEntry->MethodL(),
-                                        ESMRHelper::ECopyFull );
-    
-    delete iOrginalEntry;
-    iOrginalEntry = temp;
-
-    }
-
-
-// ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::IsOpenedFromMail
 // ---------------------------------------------------------------------------
 //
@@ -2000,78 +2041,58 @@
     }
 
 // ---------------------------------------------------------------------------
-// CESMRMeetingRequestEntry::UpdateEntryAfterStoringL
-// ---------------------------------------------------------------------------
-//
-void CESMRMeetingRequestEntry::UpdateEntryAfterStoringL()
-    {
-    FUNC_LOG;
-
-    __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
-
-     CCalEntry* temp  = ESMRHelper::CopyEntryL(
-        *iEntry,
-        iEntry->MethodL(),
-        ESMRHelper::ECopyFull );
-     
-     delete iOrginalEntry;
-     iOrginalEntry = temp;
-
-    }
-
-// ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::UpdateChildEntriesSeqNumbersL
 // ---------------------------------------------------------------------------
 //
 void CESMRMeetingRequestEntry::UpdateChildEntriesSeqNumbersL()
-	{
+    {
     FUNC_LOG;
 
-    if ( MESMRCalEntry::EESMRAllInSeries == iRecurrenceModRule && 
-    	 IsStoredL() )
-    	{
-		RCPointerArray<CCalEntry> childEntries;    	
-		CleanupClosePushL( childEntries );
-		
-    	// Fetch all entries (this and child entries
-		iCalDb.NormalDbEntryView()->FetchL(
-				iEntry->UidL(),
-				childEntries );    	
-    	
-    	// Next: Remove parent entry from the array		
-		TBool removed( EFalse );
-		TInt entryCount( childEntries.Count() );
-		for ( TInt i(0); (i < entryCount) && !removed; ++i  )
-			{
-			CCalEntry* entry = childEntries[i];
-			
-			if ( !ESMREntryHelper::IsModifyingEntryL( *entry) )
-				{
-				removed = ETrue;
-				childEntries.Remove( i );
-				delete entry;
-				}
-			entry = NULL;
-			}
-    
-		TInt childCount( childEntries.Count() );
-		if ( childCount )
-			{
-			for (TInt i(0); i < childCount; ++i )
-				{
-				CCalEntry* child = childEntries[i];
-				TInt childSeqNo( child->SequenceNumberL() );
-				child->SetSequenceNumberL( childSeqNo + 1);
-				}		
-			
-			TInt updatedChilds;
-			iCalDb.NormalDbEntryView()->StoreL(childEntries, updatedChilds);
-			}
-		
-    	CleanupStack::PopAndDestroy(); // childEntries
-    	}
-    
-	}
+    if ( MESMRCalEntry::EESMRAllInSeries == iRecurrenceModRule &&
+         IsStoredL() )
+        {
+        RCPointerArray<CCalEntry> childEntries;
+        CleanupClosePushL( childEntries );
+
+        // Fetch all entries (this and child entries
+        iCalDb.EntryView()->FetchL(
+                iEntry->UidL(),
+                childEntries );
+
+        // Next: Remove parent entry from the array
+        TBool removed( EFalse );
+        TInt entryCount( childEntries.Count() );
+        for ( TInt i(0); (i < entryCount) && !removed; ++i  )
+            {
+            CCalEntry* entry = childEntries[i];
+
+            if ( !ESMREntryHelper::IsModifyingEntryL( *entry) )
+                {
+                removed = ETrue;
+                childEntries.Remove( i );
+                delete entry;
+                }
+            entry = NULL;
+            }
+
+        TInt childCount( childEntries.Count() );
+        if ( childCount )
+            {
+            for (TInt i(0); i < childCount; ++i )
+                {
+                CCalEntry* child = childEntries[i];
+                TInt childSeqNo( child->SequenceNumberL() );
+                child->SetSequenceNumberL( childSeqNo + 1);
+                }
+
+            TInt updatedChilds;
+            iCalDb.EntryView()->StoreL(childEntries, updatedChilds);
+            }
+
+        CleanupStack::PopAndDestroy(); // childEntries
+        }
+
+    }
 
 // ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::CurrentPluginL
@@ -2083,35 +2104,19 @@
 
     if ( EESMRUnknownPlugin == iCurrentFSEmailPlugin)
         {
-        CESMRFsMailboxUtils* fsMbUtils = 
+        CESMRFsMailboxUtils* fsMbUtils =
                 CESMRFsMailboxUtils::NewL( iMRMailboxUtils );
         CleanupStack::PushL( fsMbUtils );
-        
+
         iCurrentFSEmailPlugin = fsMbUtils->FSEmailPluginForEntryL( *iEntry );
         CleanupStack::PopAndDestroy( fsMbUtils );
-        fsMbUtils = NULL;        
+        fsMbUtils = NULL;
         }
 
-
     return iCurrentFSEmailPlugin;
     }
 
 // ---------------------------------------------------------------------------
-// CESMRMeetingRequestEntry::CurrentMailBoxIdL
-// ---------------------------------------------------------------------------
-//
-TFSMailMsgId CESMRMeetingRequestEntry::CurrentMailBoxIdL()
-    {
-    FUNC_LOG;
-    CESMRFsMailboxUtils* fsMbUtils = 
-        CESMRFsMailboxUtils::NewL( iMRMailboxUtils );
-    CleanupStack::PushL( fsMbUtils );
-    TFSMailMsgId retVal = fsMbUtils->FSEmailMailBoxForEntryL( *iEntry );
-    CleanupStack::PopAndDestroy( fsMbUtils );
-    return retVal;
-    }
-
-// ---------------------------------------------------------------------------
 // CESMRMeetingRequestEntry::UpdateTimeStampL
 // ---------------------------------------------------------------------------
 //
@@ -2119,49 +2124,204 @@
     {
     FUNC_LOG;
     __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
-    
+
     TTime currentUTCTime;
     currentUTCTime.UniversalTime();
 
     TCalTime currentTime;
     currentTime.SetTimeUtcL( currentUTCTime );
 
-    iEntry->SetDTStampL( currentTime );    
+    iEntry->SetDTStampL( currentTime );
     }
 
 // ---------------------------------------------------------------------------
-// CESMRMeetingRequestEntry::UpdateTimeStampL
+// CESMRMeetingRequestEntry::AnyInstancesBetweenTimePeriodL
 // ---------------------------------------------------------------------------
 //
-TBool CESMRMeetingRequestEntry::AnyInstanceOnDayL(
+TBool CESMRMeetingRequestEntry::AnyInstancesBetweenTimePeriodL(
+            TTime& aStart,
+            TTime& aEnd )
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
+    __ASSERT_DEBUG( iOrginalEntry, Panic(EESMREntryNotExist ) );
+
+    TBool retValue( EFalse );
+
+    RCPointerArray<CCalEntry> entries;
+    CleanupClosePushL( entries );
+
+    CESMRConflictChecker* conflictCheckker =
+        CESMRConflictChecker::NewL( iCalDb );
+    CleanupStack::PushL( conflictCheckker );
+
+    CCalInstance* instance = InstanceL();
+    CleanupStack::PushL( instance );
+    
+    TCalCollectionId colId = instance->InstanceIdL().iCollectionId;
+    CleanupStack::PopAndDestroy( instance );
+    
+    conflictCheckker->FindInstancesForEntryL( aStart,
+                                              aEnd,
+                                              *iEntry,
+                                              colId, 
+                                              entries );
+
+    if ( entries.Count() )
+        {
+        retValue = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy( conflictCheckker );
+    CleanupStack::PopAndDestroy(); // entries
+
+    return retValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::GetFirstInstanceStartAndEndTimeL
+// ---------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::GetFirstInstanceStartAndEndTimeL(
             TTime& aStart,
             TTime& aEnd )
     {
     FUNC_LOG;
+
+    __ASSERT_DEBUG( iEntry, Panic(EESMREntryNotExist ) );
+
+    // This fetches the parent entry
+    TCalTime recurrenceId;
+    recurrenceId.SetTimeLocalL( Time::NullTTime() );
+    CCalEntry* parent = iCalDb.FetchEntryL(
+                iEntry->UidL(),
+                recurrenceId );
+
+    CleanupStack::PushL( parent );
+
+    aStart = parent->StartTimeL().TimeLocalL();
+    aEnd = parent->EndTimeL().TimeLocalL();
+
+    CleanupStack::PopAndDestroy( parent );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::CalendarOwnerAddressL
+// ---------------------------------------------------------------------------
+//
+const TDesC& CESMRMeetingRequestEntry::CalendarOwnerAddressL() const
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( iEntry, Panic( EESMREntryNotExist ) );
+
+    CCalUser* po = iEntry->PhoneOwnerL();
+
+    __ASSERT_DEBUG( po, Panic( EESMRPhoneOwnerNotSet ) );
+
+    return po->Address();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::MailboxUtils
+// ---------------------------------------------------------------------------
+//
+CMRMailboxUtils& CESMRMeetingRequestEntry::MailboxUtils() const
+    {
+    return iMRMailboxUtils;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::GetDBMgr
+// ---------------------------------------------------------------------------
+//
+MESMRCalDbMgr& CESMRMeetingRequestEntry::GetDBMgr()
+    {
+    return iCalDb;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::SupportsCapabilityL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRMeetingRequestEntry::SupportsCapabilityL( 
+        MESMRCalEntry::TMREntryCapability aCapability ) const
+    {
     TBool retValue( EFalse );
     
-    RCPointerArray<CCalEntry> entries;
-    CleanupClosePushL( entries );
-    
-    CESMRConflictChecker* conflictCheckker = 
-        CESMRConflictChecker::NewL( iCalDb );
-    CleanupStack::PushL( conflictCheckker );    
-    
-    conflictCheckker->FindInstancesForEntryL( aStart, 
-                                              aEnd,
-                                              *iEntry,
-                                              entries );
-    
-    if ( entries.Count() )
+    switch( aCapability )
         {
-        retValue = ETrue;
-        }    
-    
-    CleanupStack::PopAndDestroy( conflictCheckker );
-    CleanupStack::PopAndDestroy(); // entries
+        case MESMRCalEntry::EMRCapabilityAttachments:
+            {
+            CESMRFsMailboxUtils* fsMbUtils =
+                    CESMRFsMailboxUtils::NewL( iMRMailboxUtils );
+            CleanupStack::PushL( fsMbUtils );
+
+            retValue = fsMbUtils->DefaultMailboxSupportCapabilityL(
+                    CESMRFsMailboxUtils::EMRCapabilityAttachment );
+            CleanupStack::PopAndDestroy( fsMbUtils );        
+            }
+            break;
+        }
     
     return retValue;
     }
 
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::ContainsRemoteAttachmentsL
+// ---------------------------------------------------------------------------
+//
+TBool CESMRMeetingRequestEntry::ContainsRemoteAttachmentsL()
+    {
+    FUNC_LOG;
+    
+    TBool retValue( EFalse );
+    
+    TInt attachmentCount( iEntry->AttachmentCountL() );
+    
+    for ( TInt i(0); i < attachmentCount && !retValue; ++i )
+        {
+        CCalAttachment* attachment = iEntry->AttachmentL(i);        
+        CCalAttachment::TType type( attachment->Type() );
+        
+        if ( CCalAttachment::EFile != type )
+            {
+            retValue = ETrue;
+            }        
+        }
+    
+    return retValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::SendCanellationAvailable
+// ---------------------------------------------------------------------------
+//
+TBool CESMRMeetingRequestEntry::SendCanellationAvailable ()
+	{
+	return iSendCanellation;
+	}
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::SetSendCanellationAvailable
+// ---------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::SetSendCanellationAvailable (
+        TBool aSendCanellation )
+	{
+	iSendCanellation = aSendCanellation;
+	}
+
+// ---------------------------------------------------------------------------
+// CESMRMeetingRequestEntry::SetTypeChanged
+// ---------------------------------------------------------------------------
+//
+void CESMRMeetingRequestEntry::SetTypeChanged( TBool aTypeChanged )
+    {
+    FUNC_LOG;
+    
+    iTypeChanged = aTypeChanged;
+    }
+
 // EOF
-