serviceproviders/sapi_calendar/calendarservice/src/entryattributes.cpp
changeset 19 989d2f495d90
child 22 fc9cf246af83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_calendar/calendarservice/src/entryattributes.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,1087 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  
+*
+*/
+
+#include <calentry.h>
+#include <calrrule.h>
+#include <caluser.h>
+
+#include "entryattributes.h"
+#include "calendarconstants.h"
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAttendeeInfo* CAttendeeInfo::NewL( const TDesC& aAddress )
+	{
+	CAttendeeInfo* self = new (ELeave) CAttendeeInfo;
+	CleanupStack::PushL( self );
+	self->ConstructL( aAddress );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAttendeeInfo::CAttendeeInfo()
+	{
+	iResponse = EFalse;
+	}	
+
+// ---------------------------------------------------------------------------
+// 2nd-phased constructor of two phase construction
+// ---------------------------------------------------------------------------
+//
+void CAttendeeInfo::ConstructL( const TDesC& aAddress )
+	{
+	if( aAddress.Length() )
+		{
+		iAddress = aAddress.AllocL();
+		}
+	else
+		User::Leave(KErrArgument);
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//	
+CAttendeeInfo::~CAttendeeInfo()
+	{
+	delete iAddress;
+	delete iCommonName;
+	delete iRole;
+	delete iStatus;
+	}	
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::SetCommonNameL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAttendeeInfo::SetCommonNameL( const TDesC& aName )
+	{
+	if( aName.Length() )
+		{
+		iCommonName = aName.AllocL();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::SetRoleL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAttendeeInfo::SetRoleL( const TDesC& aRole )
+	{
+	if( aRole.Length() )
+		{
+		iRole = aRole.AllocL();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::SetStatusL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAttendeeInfo::SetStatusL( const TDesC& aStatus )
+	{
+	if( aStatus.Length() )
+		{
+		iStatus = aStatus.AllocL();
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::SetRsvp
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAttendeeInfo::SetRsvp( const TBool aResponse )
+	{
+	iResponse = aResponse;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::Address
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CAttendeeInfo::Address()
+	{
+	return iAddress ? TPtrC( *iAddress ) : TPtrC();		
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::CommonName
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CAttendeeInfo::CommonName()
+	{
+	return iCommonName ? TPtrC( *iCommonName ) : TPtrC();		
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::Role
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CAttendeeInfo::Role()
+	{
+	return iRole ? TPtrC( *iRole ) : TPtrC();		
+	}
+
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::Statuse
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CAttendeeInfo::Status()
+	{
+	return iStatus ? TPtrC( *iStatus ) : TPtrC();
+	}
+
+// ---------------------------------------------------------------------------
+// CAttendeeInfo::ResponseRequested
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAttendeeInfo::ResponseRequested()
+	{
+	return iResponse;	
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CRepeatInfo* CRepeatInfo::NewL( const TInt aType )
+	{
+	CRepeatInfo* self = new (ELeave) CRepeatInfo;
+	CleanupStack::PushL( self );
+	self->ConstructL( aType );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CRepeatInfo::CRepeatInfo()
+	{
+	iInterval = 1;
+	iType = TCalRRule::EInvalid;
+	}	
+
+// ---------------------------------------------------------------------------
+// 2nd-phased constructor of two phase construction
+// ---------------------------------------------------------------------------
+//
+void CRepeatInfo::ConstructL( const TInt aType )
+	{
+	if ( aType == KRRTypeDaily )
+		iType = TCalRRule::EDaily;
+	
+	else if ( aType == KRRTypeWeekly )
+		iType = TCalRRule::EWeekly;
+	
+	else if ( aType == KRRTypeMonthly )
+		iType = TCalRRule::EMonthly;
+	
+	else if ( aType == KRRTypeYearly )
+		iType = TCalRRule::EYearly;
+	
+	else
+		User::Leave(KErrArgument);	
+	
+	iRule.SetType( iType );
+	}
+	
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CRepeatInfo::~CRepeatInfo()
+	{
+	iMonthDays.Close();
+	iMonthDates.Close();
+	iWeekDays.Close();
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetCount
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetCount( const TUint aCount )
+	{
+	iRule.SetCount( aCount );
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetUntilTimeL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetUntilTimeL( const TTime& aUntilTime )
+	{
+	if( aUntilTime < TCalTime::MinTime() || aUntilTime > TCalTime::MaxTime() )
+		User::Leave( KErrArgument );
+
+	iUntilTime.SetTimeUtcL( aUntilTime );	
+	iRule.SetUntil( iUntilTime );
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetStartTimeL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetStartTimeL( const TTime& aStartTime )
+	{
+	if( aStartTime < TCalTime::MinTime() || aStartTime > TCalTime::MaxTime() )
+		User::Leave( KErrArgument );
+
+	iStartTime.SetTimeUtcL( aStartTime );	
+	iRule.SetDtStart( iStartTime );
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetInterval
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C void CRepeatInfo::SetInterval( const TInt aInterval )
+	{
+	iInterval = aInterval;	
+	iRule.SetInterval( iInterval );
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetDaysInWeek
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetDaysInWeek( const RArray<TDay>& aDays )
+	{
+	if( iType == TCalRRule::EWeekly )
+		{
+		for( int i=0 ; i<aDays.Count() ; i++)
+			iWeekDays.Append( aDays[i] );
+		iRule.SetByDay( iWeekDays );
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetMonthDates
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetMonthDates( const RArray<TInt>& aMonthDates  )
+	{
+	if( iType == TCalRRule::EMonthly )
+		{
+		// sets the month dates for the monthly repeat
+		for( int i=0 ; i<aMonthDates.Count() ; i++)
+			iMonthDates.Append( aMonthDates[i] );
+		iRule.SetByMonthDay( iMonthDates );
+		}
+		
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetMonthDays
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetMonthDays( const RArray<TCalRRule::TDayOfMonth>& aDays )
+	{
+	if( iType == TCalRRule::EMonthly || iType == TCalRRule::EYearly )
+		{
+		TInt count = aDays.Count();
+		// sets the days of the month for monthly and yearly repeats
+		for( TInt i=0 ; i < count ; i++)
+			{
+			iMonthDays.Append( aDays[i] );
+			}
+		iRule.SetByDay( iMonthDays );	
+		}
+		
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetMonth
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetMonth( const TInt aMonth)
+	{
+	// sets the month for a yearly repeat
+	if( iType == TCalRRule::EYearly )
+		{
+		iMonth = TMonth( aMonth );
+    		RArray<TMonth> monthList;
+		monthList.Append( iMonth );
+		iRule.SetByMonth( monthList );
+		}	
+    	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::SetWeekStart
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CRepeatInfo::SetWeekStart( const TInt aDay )
+	{
+	iWkSt = TDay( aDay );
+	iRule.SetWkSt( iWkSt );	
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::WeekStart
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TDay CRepeatInfo::WeekStart()
+	{
+	return iWkSt;
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::Month
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TMonth CRepeatInfo::Month()
+	{
+	return iMonth;	
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::DaysInWeek
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C RArray<TDay>& CRepeatInfo::DaysInWeek()
+	{
+	return iWeekDays;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::DaysInMonth
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RArray<TCalRRule::TDayOfMonth>& CRepeatInfo::DaysInMonth()
+	{
+	return iMonthDays;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::DatesInMonth
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RArray<TInt>& CRepeatInfo::DatesInMonth()
+	{
+	return iMonthDates;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::Interval
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CRepeatInfo::Interval()
+	{
+	return iInterval;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::UntilDate
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCalTime& CRepeatInfo::UntilDate()
+	{
+	return iUntilTime;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CRepeatInfo::Type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCalRRule::TType CRepeatInfo::Type()
+	{
+	return iType;	
+	}
+
+// ---------------------------------------------------------------------------
+// CRepeatInfo::GetRepeatRule
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TCalRRule& CRepeatInfo::GetRepeatRule()	
+	{
+	return iRule;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::NewL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CEntryAttributes* CEntryAttributes::NewL( const TDesC& aType )
+	{
+	CEntryAttributes* self = new (ELeave) CEntryAttributes;
+	CleanupStack::PushL( self );
+	self->ConstructL( aType );
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// CEntryAttributes::NewL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CEntryAttributes* CEntryAttributes::NewL()
+	{
+	return new (ELeave) CEntryAttributes;
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//	
+CEntryAttributes::~CEntryAttributes()
+	{
+	delete iSummary;
+	delete iDescription;
+	delete iLocation;
+	delete iPhoneOwner;
+    delete iOrganizer;
+    iRepeatDates.Close();
+	iExDates.Close();
+
+	iAttendees.ResetAndDestroy();
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CEntryAttributes::ConstructL( const TDesC& aType )
+	{
+	SetTypeL( aType );
+	iStartTime.SetTimeUtcL( Time::NullTTime() );
+	iEndTime.SetTimeUtcL( Time::NullTTime() );
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetTypeL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetTypeL( const TDesC& aType )
+	{
+	if ( aType.CompareF(KEntryAppt) == 0 )
+		iType = CCalEntry::EAppt; // apointment entry
+	
+	else if ( aType.CompareF(KEntryTodo) == 0 )
+		iType = CCalEntry::ETodo; // todo entry
+	
+	else if ( aType.CompareF(KEntryEvent) == 0 )
+		iType = CCalEntry::EEvent; // event entry
+	
+	else if ( aType.CompareF(KEntryReminder) == 0 )
+		iType = CCalEntry::EReminder; // reminder entry
+	
+	else if ( aType.CompareF(KEntryAnniv) == 0 )
+		iType = CCalEntry::EAnniv; // anniversary entry
+	
+	else
+		User::Leave(KErrArgument);
+	
+	iSetAttributes |= EEntryType;
+	}
+		
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetStartTimeL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetStartTimeL( const TTime& aStartTime )
+	{
+	if ( aStartTime != Time::NullTTime())
+		{
+		if( aStartTime < TCalTime::MinTime() || aStartTime > TCalTime::MaxTime() )
+			User::Leave( KErrArgument );
+		
+		iSetAttributes |= EStartTime;
+		iStartTime.SetTimeUtcL( aStartTime );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetEndTimeL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetEndTimeL( const TTime& aEndTime )
+	{
+	if ( aEndTime != Time::NullTTime() )
+		{
+		if( aEndTime < TCalTime::MinTime() || aEndTime > TCalTime::MaxTime() )
+			User::Leave( KErrArgument );
+		
+		iEndTime.SetTimeUtcL( aEndTime );
+		iSetAttributes |= EEndTime;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetInstanceStartTimeL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetInstanceStartTimeL( const TTime& aInsTime )
+	{
+	if ( aInsTime != Time::NullTTime() )
+		{
+		if( aInsTime < TCalTime::MinTime() || aInsTime > TCalTime::MaxTime() )
+			User::Leave( KErrArgument );
+
+		iInstanceStartTime.SetTimeUtcL( aInsTime );
+		iSetAttributes |= EInsStartTime;
+		
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetAlarm
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetAlarm( const TTime& aAlarmTime)
+	{
+	if( aAlarmTime < TCalTime::MinTime() || aAlarmTime > TCalTime::MaxTime() )
+		User::Leave( KErrArgument );
+
+	iAlarmTime = aAlarmTime;
+	iSetAttributes |= EAlarmTime;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetSequenceNumber
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetSequenceNumber( TInt aSeqNum )
+	{
+	iSequenceNum = aSeqNum;
+	iSetAttributes |= ESeqNum;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetEntryStatusL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetEntryStatusL( const TDesC& aStatus )
+	{
+	if ( aStatus.CompareF(KNullStatus) == 0 )
+		iEntryStatus = CCalEntry::ENullStatus; // null status
+	
+	else if ( aStatus.CompareF(KStatusTentative) == 0 )
+		iEntryStatus = CCalEntry::ETentative; // status is tentative
+	
+	else if ( aStatus.CompareF(KStatusConfirmed) == 0 )
+		iEntryStatus = CCalEntry::EConfirmed; // status is confirmed
+	
+	else if ( aStatus.CompareF(KStatusCancelled) == 0 )
+		iEntryStatus = CCalEntry::ECancelled; // status is cancelled
+	
+	else if ( aStatus.CompareF(KStatusTodoNeedsAction) == 0 )
+		iEntryStatus = CCalEntry::ETodoNeedsAction; //status of todo is needs action
+	
+	else if ( aStatus.CompareF(KStatusTodoCompleted) == 0 )
+		iEntryStatus = CCalEntry::ETodoCompleted;//status of todo is completed
+	
+	else if ( aStatus.CompareF(KStatusTodoInProcess) == 0 )
+		iEntryStatus = CCalEntry::ETodoInProcess; // status of todo is in process
+	
+	else
+		User::Leave(KErrArgument);
+	
+	iSetAttributes |= EStatus;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetPhoneOwnerDataL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetPhoneOwnerDataL( const TDesC& aPhoneOwner )
+	{
+    if( aPhoneOwner.Length() ) 
+	    {
+	    iPhoneOwner = aPhoneOwner.AllocL();
+    	iSetAttributes |= EPhoneOwner;	
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetOrganizerDataL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetOrganizerDataL( CAttendeeInfo* aOrganizer )
+	{
+	if( aOrganizer ) 
+	    {
+	    iOrganizer = CCalUser::NewL( aOrganizer->Address() );
+
+		if( aOrganizer->CommonName().Length() )
+			iOrganizer->SetCommonNameL( aOrganizer->CommonName() ); 
+		
+    	iSetAttributes |= EOrganizer;
+        }
+	}
+	
+// ---------------------------------------------------------------------------
+// CEntryAttributes::AddAttendeeL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::AddAttendeeL( CAttendeeInfo* aAttendee )
+	{
+	if( aAttendee )	
+		{
+		CCalAttendee* attendee = CCalAttendee::NewL( aAttendee->Address() );
+		if( aAttendee->CommonName().Length() )
+			attendee->SetCommonNameL( aAttendee->CommonName() );
+		TPtrC role = aAttendee->Role();
+		if( role.Length() )
+			{
+			CCalAttendee::TCalRole attRole = CCalAttendee::EReqParticipant;
+			
+			if ( role.CompareF(KAttRoleReqParticipant) == 0 )
+				attRole = CCalAttendee::EReqParticipant; // required participant
+			
+			else if ( role.CompareF(KAttRoleOptParticipant) == 0 )
+				attRole = CCalAttendee::EOptParticipant; // optional participant
+			
+			else if ( role.CompareF(KAttRoleNonParticipant) == 0 )
+				attRole = CCalAttendee::ENonParticipant; // non - participant
+			
+			else if ( role.CompareF(KAttRoleChair) == 0 )
+				attRole = CCalAttendee::EChair; // chair
+			
+			else 
+				User::Leave(KErrArgument);
+		    
+			attendee->SetRoleL( attRole );
+			}
+			
+		TPtrC status = aAttendee->Status();
+		if( status.Length() )
+			{
+			CCalAttendee::TCalStatus attStatus = CCalAttendee::ENeedsAction;
+			
+			if ( status.CompareF(KAttStatusTentative) == 0 )
+				attStatus = CCalAttendee::ETentative; // attendee's status is tentative
+			
+			else if ( status.CompareF(KAttStatusConfirmed) == 0 )
+				attStatus = CCalAttendee::EConfirmed; // attendee has confirmed participation
+			
+			else if ( status.CompareF(KAttStatusAccepted) == 0 )
+				attStatus = CCalAttendee::EAccepted; // attendee has accepted
+			
+			else if ( status.CompareF(KAttStatusNeedsAction) == 0 )
+				attStatus = CCalAttendee::ENeedsAction; // status needs action
+			
+			else if ( status.CompareF(KAttStatusDeclined) == 0 )
+				attStatus = CCalAttendee::EDeclined;// attendee has declined
+			
+			else if ( status.CompareF(KAttStatusInProcess) == 0 )
+				attStatus = CCalAttendee::EInProcess;// status in process
+			
+			else if ( status.CompareF(KAttStatusCompleted) == 0 )
+				attStatus = CCalAttendee::ECompleted; // status is completed
+			
+			else if ( status.CompareF(KAttStatusDelegated) == 0 )
+				attStatus = CCalAttendee::EDelegated;// attendee has delegated request
+			
+			else
+				User::Leave(KErrArgument);
+			
+			attendee->SetStatusL( attStatus );
+			}
+		attendee->SetResponseRequested( aAttendee->ResponseRequested() );	
+		iAttendees.AppendL( attendee );
+		iSetAttributes |= EAttendees;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::AddRepeatDateL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::AddRepeatDateL( const TTime& aRepeatDate )
+	{
+	if ( aRepeatDate != Time::NullTTime())
+		{
+		TCalTime caltime;
+		caltime.SetTimeUtcL( aRepeatDate );
+		iRepeatDates.Append( caltime );
+		iSetAttributes |= ERepeatDates;
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::AddExceptionDateL
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C void CEntryAttributes::AddExceptionDateL( const TTime& aExDate )
+	{
+	if ( aExDate != Time::NullTTime())
+		{
+		TCalTime caltime;
+		caltime.SetTimeUtcL( aExDate );
+		iExDates.Append( caltime );
+		iSetAttributes |= EExDates;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetReplicationL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetReplicationL( const TDesC& aRepStatus )
+	{
+	if ( aRepStatus.CompareF( KReplOpen ) == 0 )
+		iRepStatus = CCalEntry::EOpen; // open
+	else if ( aRepStatus.CompareF( KReplPrivate ) == 0 )
+		iRepStatus = CCalEntry::EPrivate; //private
+	else if ( aRepStatus.CompareF( KReplRest ) == 0 )
+		iRepStatus = CCalEntry::ERestricted;//restricted
+	else
+		User::Leave(KErrArgument);
+	
+	iSetAttributes |= EReplication;	
+	}    
+				
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetSummaryL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetSummaryL( const TDesC& aSummary )
+	{
+	if( aSummary.Length() )
+		{
+		iSummary = aSummary.AllocL();
+		iSetAttributes |= ESummary;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetDescriptionL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetDescriptionL( const TDesC& aDescription )
+	{
+	if( aDescription.Length() )
+		{
+		iDescription = aDescription.AllocL();
+		iSetAttributes |= EDescription;
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetLocationL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CEntryAttributes::SetLocationL( const TDesC& aLocation )
+	{
+	if( aLocation.Length() )
+		{
+		iLocation = aLocation.AllocL();
+		iSetAttributes |= ELocation;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetMethodL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetMethodL( const TDesC& aMethod )
+	{
+	//Sets the entry's method property for group scheduling
+	if ( aMethod.CompareF(KMethodNone) == 0 )
+		iMethod = CCalEntry::EMethodNone; 
+	
+	else if ( aMethod.CompareF(KMethodPublish) == 0 )
+		iMethod = CCalEntry::EMethodPublish;
+	
+	else if ( aMethod.CompareF(KMethodRequest) == 0 )
+		iMethod = CCalEntry::EMethodRequest;
+	
+	else if ( aMethod.CompareF(KMethodReply) == 0 )
+		iMethod = CCalEntry::EMethodReply;
+	
+	else if ( aMethod.CompareF(KMethodAdd) == 0 )
+		iMethod = CCalEntry::EMethodAdd;
+	
+	else if ( aMethod.CompareF(KMethodCancel) == 0 )
+		iMethod = CCalEntry::EMethodCancel;
+	
+	else if ( aMethod.CompareF(KMethodRefresh) == 0 )
+		iMethod = CCalEntry::EMethodRefresh;
+	
+	else if ( aMethod.CompareF(KMethodCounter) == 0 )
+		iMethod = CCalEntry::EMethodCounter;
+	
+	else if ( aMethod.CompareF(KMethodDecCounter) == 0 )
+		iMethod = CCalEntry::EMethodDeclineCounter;
+	
+	else
+		User::Leave(KErrArgument);
+	
+	iSetAttributes |= EMethod;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetPriority
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C int CEntryAttributes::SetPriority( TInt aPriority )
+	{
+	if( aPriority < 0 || aPriority > 255 )
+		return KErrArgument;	
+	iPriority = aPriority;	
+	iSetAttributes |= EPriority;
+	return KErrNone;
+	}
+	
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetLocalUid
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C void CEntryAttributes::SetLocalUid( const TCalLocalUid aLUid)
+	{
+	iLocal = aLUid;	
+	iSetAttributes |= ELocalUid;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SetRepeatRule
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C void CEntryAttributes::SetRepeatRule( CRepeatInfo* aRptInfo)
+	{
+	if ( aRptInfo )
+		iRepeatRule = aRptInfo->GetRepeatRule();
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::StartTime
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C TCalTime& CEntryAttributes::StartTime()
+	{
+	return iStartTime;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::EndTime
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C TCalTime& CEntryAttributes::EndTime()
+	{
+	return iEndTime;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::InstanceStartTime
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TCalTime& CEntryAttributes::InstanceStartTime()
+	{
+	return iInstanceStartTime;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::ReplicationStatus
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C CCalEntry::TReplicationStatus CEntryAttributes::ReplicationStatus()
+	{
+	return iRepStatus;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Summary
+// ---------------------------------------------------------------------------
+//				
+EXPORT_C TPtrC CEntryAttributes::Summary()
+	{
+	return iSummary ? TPtrC( *iSummary ) : TPtrC();
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Description
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C TPtrC CEntryAttributes::Description()
+	{
+	return iDescription ? TPtrC( *iDescription ) : TPtrC();
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Location
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TPtrC CEntryAttributes::Location()
+	{
+	return iLocation ? TPtrC( *iLocation ) : TPtrC();
+	}
+	
+// ---------------------------------------------------------------------------
+// CEntryAttributes::EntryType
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCalEntry::TType CEntryAttributes::EntryType()
+	{
+	return iType;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::SequenceNumber
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CEntryAttributes::SequenceNumber()
+	{
+	return iSequenceNum;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::AlarmTime
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TTime CEntryAttributes::AlarmTime()
+	{
+	return iAlarmTime;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::EntryStatus
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCalEntry::TStatus CEntryAttributes::EntryStatus()
+	{
+	return iEntryStatus;
+	}		
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::PhoneOwner
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TPtrC CEntryAttributes::PhoneOwner()
+	{
+	return iPhoneOwner ? *iPhoneOwner : TPtrC();
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Organizer
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CCalUser* CEntryAttributes::Organizer()
+	{
+	return iOrganizer;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::AttendeeList
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RPointerArray<CCalAttendee>& CEntryAttributes::AttendeeList()
+	{
+	return iAttendees;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::RepeatDates
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C RArray<TCalTime>& CEntryAttributes::RepeatDates()
+	{
+	return iRepeatDates;
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::ExceptionDates
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C RArray<TCalTime>& CEntryAttributes::ExceptionDates()
+	{
+	return iExDates;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::RepeatRuleL
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TCalRRule& CEntryAttributes::RepeatRuleL()
+	{
+	if ( iType == CCalEntry::EAnniv )
+	// explicitly set repeat rule for anniversary type entries
+		{
+		TTime stTime = iStartTime.TimeLocalL();
+		TTime zero(TInt64(0));
+        stTime = zero + stTime.DaysFrom(zero);
+        iStartTime.SetTimeLocalFloatingL( stTime );
+        TCalRRule rrule( TCalRRule::EYearly );
+        rrule.SetDtStart( iStartTime );
+        rrule.SetInterval( 1 ); // once a year
+		iRepeatRule = rrule	;
+		}
+	return iRepeatRule;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Method
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CCalEntry::TMethod CEntryAttributes::Method()
+	{
+	return iMethod;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::Priority
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TInt CEntryAttributes::Priority()
+	{
+	return iPriority;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::LocalUid
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TCalLocalUid CEntryAttributes::LocalUid()
+	{
+	return iLocal;	
+	}
+
+// ---------------------------------------------------------------------------
+// CEntryAttributes::ModifiedAttributes
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TInt32 CEntryAttributes::ModifiedAttributes()
+	{ 
+	return iSetAttributes;
+	}
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//	
+CEntryAttributes::CEntryAttributes()
+	{
+	iMethod = CCalEntry::EMethodNone;
+	iSequenceNum = 0;
+	iRepStatus = CCalEntry::EOpen;
+	iPriority = 0;
+	iPhoneOwner = NULL;
+	iOrganizer = NULL;
+	iLocation = NULL;
+	iAlarmTime = NULL;
+	iEntryStatus = CCalEntry::ENullStatus;
+	}
+