emailservices/emailstore/base_plugin/src/BaseMrInfoObject.cpp
changeset 0 8466d47a6819
child 2 5253a20d2a1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/base_plugin/src/BaseMrInfoObject.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,1136 @@
+/*
+* Copyright (c) 2006 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:   Meeting request support implementation.
+*
+*/
+
+
+
+
+#include "BaseMrInfoObject.h"
+#include "BasePlugin.h"
+
+
+/**
+ * Defaults: Method of EMRMethodRequest.
+ */
+EXPORT_C CBaseMrInfoObject* CBaseMrInfoObject::NewL()
+    {
+    CBaseMrInfoObject* self = new(ELeave) CBaseMrInfoObject();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ * Copy construction.
+ */
+EXPORT_C CBaseMrInfoObject* CBaseMrInfoObject::NewL(
+    MMRInfoObject& aMrInfo )
+    {
+    CBaseMrInfoObject* self = new(ELeave) CBaseMrInfoObject();
+    CleanupStack::PushL( self );
+    self->ConstructL( aMrInfo );
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+    
+/**
+ *
+ */
+CBaseMrInfoObject::CBaseMrInfoObject()
+    : iCreationTime( Time::NullTTime() ), iStartTime( Time::NullTTime() ),
+    iEndTime( Time::NullTTime() ), iAlarmTime( Time::NullTTime() ),
+    iRecurrenceId( Time::NullTTime() ), iPriority( KIcalNormalPriority ), iMethod( EMRMethodRequest ),
+    iResponse( EMrCmdResponseTentative )
+    {
+    }
+
+
+/**
+ * Copy construction
+ */
+void CBaseMrInfoObject::ConstructL(
+    MMRInfoObject& aMrInfo )
+    {    
+    iSubject = aMrInfo.SubjectL().AllocL();
+    iDescription = aMrInfo.DescriptionL().AllocL();
+    iLocation = aMrInfo.LocationL().AllocL();
+    iUid = aMrInfo.UidL().AllocL();
+    
+    iCreationTime = aMrInfo.CreationTimeInUtcL();
+    iStartTime = aMrInfo.StartTimeInUtcL();
+    iEndTime = aMrInfo.EndTimeInUtcL();
+    iAlarmTime = aMrInfo.AlarmInUtcL();
+    iMethod = aMrInfo.MRMethodL();
+    iResponse = aMrInfo.MRResponse();
+    iRecurrenceId = aMrInfo.MRRecurrenceId();
+    
+    iSequenceNumber = aMrInfo.MRSequenceNumberL();
+    iPriority = aMrInfo.PriorityL();
+
+    iOrganizer = CBaseMrAttendee::NewL();
+    /*iOrganizer = CBaseMrAttendee::NewL( aMrInfo.MROrganizerL() );
+    
+    RPointerArray<MMRAttendee>& attendees = aMrInfo.AttendeesL();
+    TInt count = attendees.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        MMRAttendee* attendee = CBaseMrAttendee::NewL( *(attendees[i]) );
+        CleanupStack::PushL( attendee );
+        iAttendees.AppendL( attendee );
+        CleanupStack::Pop( attendee );
+        }*/
+    
+    iRrule = CBaseMrRecurrenceRule::NewL( aMrInfo.RecurrenceRuleL() );
+    /**@ copy construction for iExceptions, iAttachments.*/
+    }
+
+
+/**
+ *
+ */
+void CBaseMrInfoObject::ConstructL()
+    {    
+    iSubject = KNullDesC().AllocL();
+    iDescription = KNullDesC().AllocL();
+    iLocation = KNullDesC().AllocL();
+    iUid = KNullDesC().AllocL();
+    
+    iOrganizer = CBaseMrAttendee::NewL();
+    }
+
+    
+/**
+ *
+ */
+EXPORT_C CBaseMrInfoObject::~CBaseMrInfoObject()
+    {
+    delete iSubject;
+    delete iDescription;
+    delete iLocation;
+    delete iUid;
+
+    delete iOrganizer;
+
+    iExceptions.ResetAndDestroy();
+    iAttachments.ResetAndDestroy();
+    iAttendees.ResetAndDestroy();
+
+    delete iRrule;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetMRRecurrenceIdL( TTime aRecId )
+    {
+    iRecurrenceId = aRecId;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrInfoObject::MRRecurrenceId() const
+    {
+    return iRecurrenceId;
+    }
+
+/**
+ * 
+ */
+EXPORT_C void CBaseMrInfoObject::SetMRSequenceNumber( TInt aSeqNo )
+	{
+	iSequenceNumber = aSeqNo;
+	}
+
+/**
+ *
+ */
+EXPORT_C TInt CBaseMrInfoObject::SupportedFields(
+    RArray<TESMRInfoField>& aFields ) const
+    
+    {
+    /**@ have more fields to add.*/
+    TESMRInfoField fields[] = 
+        {
+        EESMRInfoFieldId,
+        EESMRInfoFieldSeqNo,
+        EESMRInfoFieldMethod,
+        EESMRInfoFieldMStatus,
+        EESMRInfoFieldCreationDateTime,
+        EESMRInfoFieldOrganizer,
+        EESMRInfoFieldAttendee,
+        EESMRInfoFieldOptAttendee,
+        EESMRInfoFieldStartDateTime,
+        EESMRInfoFieldStopDateTime,
+        EESMRInfoFieldLocation,
+        EESMRInfoFieldAlarm,
+        EESMRInfoFieldSubject,
+        EESMRInfoFieldDescription,
+        EESMRInfoFieldRecurrence,
+        EESMRInfoFieldPriority
+        };
+    
+    TInt result = KErrNone;
+    for ( TInt i = 0;
+        i < sizeof( fields ) / sizeof( TESMRInfoField ) && result == KErrNone;
+        i++ )
+        {
+        result = aFields.Append( fields[i] );
+        }
+    
+    return result;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetUidL(
+    const TDesC& aUid )
+    {
+    delete iUid;
+    iUid = NULL;
+    
+    iUid = aUid.AllocL();
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetUidL(
+    HBufC* aUid )
+    {
+    delete iUid;
+    iUid = NULL;
+
+    iUid = aUid;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrInfoObject::UidL() const
+    {
+    return *iUid;
+    }
+    
+    
+/**
+ *
+ */
+EXPORT_C TInt CBaseMrInfoObject::MRSequenceNumberL() const
+    {
+    return iSequenceNumber;
+    }
+    
+    
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetMethod(
+    TMRMethod aMethod )
+    {
+    iMethod = aMethod;
+    }
+    
+        
+/**
+ *
+ */
+EXPORT_C MMRInfoObject::TMRMethod CBaseMrInfoObject::MRMethodL() const
+    {
+    return iMethod;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C MMROrganizer& CBaseMrInfoObject::MROrganizerL()
+    {
+    return *iOrganizer;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::AddAttendeeL(
+    MMRAttendee* aAttendee )
+    {
+    iAttendees.AppendL( aAttendee );
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C RPointerArray<MMRAttendee>& CBaseMrInfoObject::AttendeesL()
+    {
+    return iAttendees;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetCreationTimeInUtcL(
+    TTime aTime )
+    {
+    iCreationTime = aTime;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrInfoObject::CreationTimeInUtcL() const
+    {
+    return iCreationTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetStartTimeInUtcL(
+    TTime aTime )
+    {
+    iStartTime = aTime;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrInfoObject::StartTimeInUtcL() const
+    {
+    return iStartTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetEndTimeInUtcL(
+    TTime aTime )
+    {
+    iEndTime = aTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrInfoObject::EndTimeInUtcL() const
+    {
+    return iEndTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetAlarmInUtcL(
+    TTime aTime )
+    {
+    iAlarmTime = aTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrInfoObject::AlarmInUtcL() const
+    {
+    return iAlarmTime;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetLocationL(
+    const TDesC& aLocation )
+    {
+    delete iLocation;
+    iLocation = NULL;
+    
+    iLocation = aLocation.AllocL();
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrInfoObject::LocationL() const
+    {
+    return *iLocation;
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetDescriptionL(
+    const TDesC& aDescription )
+    {
+    delete iDescription;
+    iDescription = NULL;
+    
+    iDescription = aDescription.AllocL();
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrInfoObject::DescriptionL() const
+    {
+    return *iDescription;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetSubjectL(
+    const TDesC& aSubject )
+    {
+    delete iSubject;
+    iSubject = NULL;
+    
+    iSubject = aSubject.AllocL();
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrInfoObject::SubjectL() const
+    {
+    return *iSubject;
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetRecurrenceRuleL(
+    const MRRecurrenceRule& aRRule )
+    {
+    iRrule = &aRRule;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C const MRRecurrenceRule& CBaseMrInfoObject::RecurrenceRuleL() const
+    {
+    return *iRrule;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::AddRecurrenceExceptionL(
+    MMRInfoObject* aException )
+    {
+    iExceptions.AppendL( aException );
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C const RPointerArray<MMRInfoObject>&
+    CBaseMrInfoObject::RecurrenceExceptionsL() const
+    {
+    return iExceptions;
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetPriorityL(
+    TUint aPriority )
+    {
+    iPriority = aPriority;
+    }
+            
+
+/**
+ *
+ */
+EXPORT_C TUint CBaseMrInfoObject::PriorityL() const
+    {
+    return iPriority;
+    }
+        
+
+/**
+ *
+ */
+EXPORT_C const RPointerArray<MMRAttachment>& CBaseMrInfoObject::AttachmentsL() const
+    {
+    return iAttachments;
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::AddAttachmentsL(
+    MMRAttachment* aAttachment )
+    {
+    iAttachments.AppendL( aAttachment );
+    }
+        
+        
+/**
+ *
+ */
+EXPORT_C TAny* CBaseMrInfoObject::ExtensionL(
+    TUid /*aExtensionUid*/ )
+    {
+    return NULL;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrInfoObject::SetMRResponseL(
+    TResponse aResponse )
+    {
+    iResponse = aResponse;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C MMRInfoObject::TResponse CBaseMrInfoObject::MRResponse() const
+    {
+    return iResponse;
+    }
+
+
+#pragma mark -
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrAttendee* CBaseMrAttendee::NewL()
+    {
+    CBaseMrAttendee* self = new (ELeave) CBaseMrAttendee();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrAttendee* CBaseMrAttendee::NewL(
+    const MMRAttendee& aAttendee )
+    {
+    CBaseMrAttendee* self = new (ELeave) CBaseMrAttendee();
+    CleanupStack::PushL( self );
+    self->ConstructL( aAttendee );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrAttendee* CBaseMrAttendee::NewL(
+    const MMROrganizer& aOrganizer )
+    {
+    CBaseMrAttendee* self = new (ELeave) CBaseMrAttendee();
+    CleanupStack::PushL( self );
+    self->ConstructL( aOrganizer );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+CBaseMrAttendee::CBaseMrAttendee()
+    : iRole( MMRAttendee::EMRAttendeeNotSet ),
+    iStatus( MMRAttendee::EMRAttendeeActionNotSet ), iRsvp( EFalse )
+    {
+    }
+
+
+/**
+ *
+ */
+void CBaseMrAttendee::ConstructL()
+    {
+    iAddress = KNullDesC().AllocL();
+    iCommonName = KNullDesC().AllocL();
+    }
+
+
+/**
+ *
+ */
+void CBaseMrAttendee::ConstructL(
+    const MMRAttendee& aAttendee )
+    {
+    iAddress = aAttendee.Address().AllocL();
+    iCommonName = aAttendee.CommonName().AllocL();
+    
+    iRole = aAttendee.AttendeeRole();
+    iStatus = aAttendee.AttendeeStatus();
+    iRsvp = aAttendee.ResponseRequested();
+    }
+
+
+/**
+ *
+ */
+void CBaseMrAttendee::ConstructL(
+    const MMROrganizer& aOrganizer )
+    {
+    iAddress = aOrganizer.Address().AllocL();
+    iCommonName = aOrganizer.CommonName().AllocL();
+    }
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrAttendee::~CBaseMrAttendee()
+    {
+    delete iCommonName;
+    delete iAddress;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrAttendee::SetAttendeeRoleL(
+    TAttendeeRole aRole )
+    {
+    iRole = aRole;
+    }
+
+     
+/**
+ *
+ */
+EXPORT_C MMRAttendee::TAttendeeRole CBaseMrAttendee::AttendeeRole() const
+    {
+    return iRole;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrAttendee::SetAddressL(  
+    const TDesC& aAddress )
+    {
+    delete iAddress;
+    iAddress = NULL;
+    
+    iAddress = aAddress.AllocL();
+    }
+
+
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrAttendee::Address() const
+    {
+    return *iAddress;    
+    }
+    
+    
+/**
+ *
+ */
+EXPORT_C void CBaseMrAttendee::SetCommonNameL(
+    const TDesC& aCommonName )
+    {
+    delete iCommonName;
+    iCommonName = NULL;
+    
+    iCommonName = aCommonName.AllocL();
+    }
+    
+    
+/**
+ *
+ */
+EXPORT_C const TDesC& CBaseMrAttendee::CommonName() const
+    {
+    return *iCommonName;
+    }
+    
+    
+/**
+ *
+ */
+EXPORT_C void CBaseMrAttendee::SetAttendeeStatusL(
+    TAttendeeStatus& aStatus )
+    {
+    iStatus = aStatus;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C MMRAttendee::TAttendeeStatus CBaseMrAttendee::AttendeeStatus() const
+    {
+    return iStatus;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrAttendee::SetResponseRequestedL(
+    TBool aRsvp )
+    {
+    iRsvp = aRsvp;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C TBool CBaseMrAttendee::ResponseRequested() const
+    {
+    return iRsvp;
+    }
+
+
+#pragma mark -
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrRecurrenceRule* CBaseMrRecurrenceRule::NewL()
+    {
+    CBaseMrRecurrenceRule* self = new(ELeave) CBaseMrRecurrenceRule();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrRecurrenceRule* CBaseMrRecurrenceRule::NewL(
+    const MRRecurrenceRule& aRrule )
+    {
+    CBaseMrRecurrenceRule* self = new(ELeave) CBaseMrRecurrenceRule( aRrule );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRrule );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+CBaseMrRecurrenceRule::CBaseMrRecurrenceRule()
+    : iStartTime( Time::NullTTime() ), iUntilTime( Time::NullTTime() )
+    {
+    }
+    
+    
+/**
+ *
+ */
+CBaseMrRecurrenceRule::CBaseMrRecurrenceRule(
+    const MRRecurrenceRule& aRrule )
+    : iStartTime( aRrule.RecurrenceStartTime() ), iUntilTime( aRrule.RecurrentUntil() ), iType( aRrule.Type() ),
+    iInterval( aRrule.RecurrentInterval() ), iCount( aRrule.RecurrentCount() )
+    {
+
+    }
+
+
+/**
+ *
+ */
+void CBaseMrRecurrenceRule::ConstructL()
+    {    
+    }
+
+
+/**
+ *
+ */
+void CBaseMrRecurrenceRule::ConstructL(
+    const MRRecurrenceRule& aRrule )
+    {
+    
+    const RArray<TMRRecurrentDay>& weekDays = aRrule.RecurrentWeekDays();
+    TInt count = weekDays.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iWeekDays.AppendL( weekDays[i] );
+        }
+    
+    const RArray<TInt>& monthDays = aRrule.RecurrentMonthDays();
+    count = monthDays.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iMonthDays.AppendL( monthDays[i] );
+        }
+    
+    const RArray<TMRRecurrenceMonth>& months = aRrule.RecurrentMonths();
+    count = months.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iMonths.AppendL( months[i] );
+        }
+    
+    const RArray<TRecurrentDaysofMonth>& daysofMonth = aRrule.RecurrentDaysofMonth();
+    count = daysofMonth.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iDaysofMonth.AppendL( daysofMonth[i] );
+        }
+    }
+
+    
+/**
+ *
+ */
+EXPORT_C CBaseMrRecurrenceRule::~CBaseMrRecurrenceRule()
+    {
+    iDaysofMonth.Close();
+    iWeekDays.Close();
+    iMonthDays.Close();
+    iMonths.Close();
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrenceTypeL(
+    MRRecurrenceRule::TMRRecurrenceType aType )
+    {
+    iType = aType;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C MRRecurrenceRule::TMRRecurrenceType CBaseMrRecurrenceRule::Type() const
+    {
+    return iType;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrenceStartTimeL(
+    TTime aStartTime )
+    {
+    iStartTime = aStartTime;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrRecurrenceRule::RecurrenceStartTime() const
+    {
+    return iStartTime;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrenceUntilL(
+    TTime aUntilTime )
+    {
+    iUntilTime = aUntilTime;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C TTime CBaseMrRecurrenceRule::RecurrentUntil() const
+    {
+    return iUntilTime;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentInterval(
+    TInt aInterval )
+    {
+    iInterval = aInterval;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C TInt CBaseMrRecurrenceRule::RecurrentInterval() const
+    {
+    return iInterval;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentCountL(
+    TInt aCount )
+    {
+    iCount = aCount;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C TUint CBaseMrRecurrenceRule::RecurrentCount() const
+    {
+    return iCount;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentWeekDaysL(
+    RArray<TMRRecurrentDay>& aDays )
+    {
+    TInt count = aDays.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iWeekDays.AppendL( aDays[i] );
+        }
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C const RArray<MRRecurrenceRule::TMRRecurrentDay>&
+    CBaseMrRecurrenceRule::RecurrentWeekDays() const
+    {
+    return iWeekDays;
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentMonthDaysL(
+    RArray<TInt>& aDays )
+    {
+    TInt count = aDays.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iMonthDays.AppendL( aDays[i] );
+        }    
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C const RArray<TInt>& CBaseMrRecurrenceRule::RecurrentMonthDays() const
+    {
+    return iMonthDays;    
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentDaysofMonthL(
+    RArray<TRecurrentDaysofMonth>& aDaysofMonth )
+    {
+    TInt count = aDaysofMonth.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iDaysofMonth.AppendL( aDaysofMonth[i] );
+        }
+    }
+
+
+/**
+ *
+ */
+EXPORT_C const RArray<MRRecurrenceRule::TRecurrentDaysofMonth>&
+    CBaseMrRecurrenceRule::RecurrentDaysofMonth() const
+    {
+    return iDaysofMonth;
+    }
+
+
+/**
+ *
+ */
+EXPORT_C void CBaseMrRecurrenceRule::SetRecurrentMonthsL(
+    RArray<TMRRecurrenceMonth>& aMonths )
+    {
+    TInt count = aMonths.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        iMonths.AppendL( aMonths[i] );
+        }
+    }
+    
+
+/**
+ *
+ */
+EXPORT_C const RArray<MRRecurrenceRule::TMRRecurrenceMonth>&
+    CBaseMrRecurrenceRule::RecurrentMonths() const
+    {
+    return iMonths;    
+    }
+
+
+#pragma mark -
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrInfoProcessor* CBaseMrInfoProcessor::NewL(
+    CBasePlugin& aPlugin )
+    {
+    CBaseMrInfoProcessor* self = new (ELeave) CBaseMrInfoProcessor( aPlugin );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+/**
+ *
+ */
+CBaseMrInfoProcessor::CBaseMrInfoProcessor( CBasePlugin& aPlugin )
+    : iPlugin( aPlugin )
+    {
+    }
+
+
+/**
+ *
+ */
+void CBaseMrInfoProcessor::ConstructL()
+    {
+    }
+
+
+/**
+ *
+ */
+EXPORT_C CBaseMrInfoProcessor::~CBaseMrInfoProcessor()
+    {
+    }
+
+
+/**
+ * Create and send a MR response email.
+ */
+EXPORT_C void CBaseMrInfoProcessor::ReplyToMeetingRequestL(
+    const TFSMailMsgId& aMailBoxId,
+    const TFSMailMsgId& aMessageId,
+    MMRInfoObject& aMeetingRequest,
+    TMRInfoResponseMode& aResponseMode,
+    const TDesC& aResponseText /*= KNullDesC()*/ )
+
+    {
+    if ( MMRInfoProcessor::EMRInfoResponseSync != aResponseMode )
+        {
+        CFSMailMessage* reply = iPlugin.CreateMrReplyMessageL(
+            aMailBoxId, aMeetingRequest, aMessageId );
+        CleanupStack::PushL( reply );
+        
+        //body.
+        if ( aResponseText != KNullDesC )
+            {
+            CFSMailMessagePart* body = reply->PlainTextBodyPartL();
+            if ( NULL != body )
+                {
+                CleanupStack::PushL( body );
+                
+                /**@ completely unnecessary but the fw needs to accept a TDesC in
+                SetContent instead.*/
+                HBufC* descCopy = aResponseText.AllocLC();
+                TPtr ptr = descCopy->Des();
+                body->SetContent( ptr );
+                
+                CleanupStack::PopAndDestroy( descCopy );
+                CleanupStack::PopAndDestroy( body );
+                }
+            }
+        
+        CBaseMrInfoObject* mrInfo = CBaseMrInfoObject::NewL( aMeetingRequest );
+    
+        if ( MMRInfoProcessor::EMRInfoRemoveFromCal == aResponseMode )
+        	{
+        	mrInfo->SetMethod( MMRInfoObject::EMRMethodCancel );
+        	}
+        else
+        	{
+        	mrInfo->SetMethod( MMRInfoObject::EMRMethodResponse );
+        	}
+    
+        reply->SetMRInfo( mrInfo );
+        iPlugin.SendMessageL( *reply );
+    
+        CleanupStack::PopAndDestroy( reply );
+        }
+    	
+    } //ReplyToMeetingRequestL.