pimappservices/calendar/shared/src/agmgsentry.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/shared/src/agmgsentry.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,362 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "agmgsentry.h"
+#include "agmpanic.h"
+
+#include <s32stor.h>
+
+// TGsChildRefData
+EXPORT_C TGsChildRefData::TGsChildRefData(TCalLocalUid aChildId, const TAgnCalendarTime& aRecurId)
+	: iChildId(aChildId), iRecurrenceId(aRecurId)
+	{
+	}
+	
+EXPORT_C TCalLocalUid TGsChildRefData::ChildId() const
+	{
+	return iChildId;
+	}
+	
+EXPORT_C const TAgnCalendarTime& TGsChildRefData::RecurrenceId() const
+	{
+	return iRecurrenceId;
+	}
+
+
+// CGsData
+CGsData::CGsData()
+	{
+	}
+	
+CGsData::CGsData(TInt aSeq, CCalEntry::TMethod aMethod)
+	{
+	iSeqNum = aSeq;
+	iMethod = aMethod;
+	}
+	
+CGsData::~CGsData()
+	{
+	delete iGuid;
+	}
+
+void CGsData::SetSequenceNumber(TInt aNum)
+	{
+	iSeqNum = aNum;
+	}
+
+TInt CGsData::SequenceNumber() const
+	{
+	return iSeqNum;
+	}
+
+void CGsData::SetMethod(CCalEntry::TMethod aMethod)
+	{
+	iMethod = aMethod;
+	}
+
+CCalEntry::TMethod CGsData::Method() const
+	{
+	return iMethod;
+	}
+
+const TDesC8& CGsData::Guid() const
+	{
+	if(iGuid)
+		{
+		return *iGuid;
+		}
+	return KNullDesC8;
+	}
+	
+void CGsData::SetGuid(HBufC8* aGuid)
+	{
+	delete iGuid;
+	iGuid = aGuid;
+	}
+
+void CGsData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iSeqNum);
+	aStream.WriteInt8L(iMethod);	
+	ExternalizeTypeSpecificDataL(aStream, EFalse);
+	}
+
+void CGsData::ExternalizeToBufferL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iSeqNum);
+	aStream.WriteInt8L(iMethod);	
+	ExternalizeTypeSpecificDataL(aStream, ETrue);
+	}
+
+void CGsData::InternalizeL(RReadStream& aStream)
+	{
+	iSeqNum = aStream.ReadInt32L();
+	iMethod = static_cast<CCalEntry::TMethod> (aStream.ReadInt8L());
+	InternalizeTypeSpecificDataL(aStream, EFalse); 
+	}
+
+void CGsData::InternalizeFromBufferL(RReadStream& aStream)
+	{
+	iSeqNum = aStream.ReadInt32L();
+	iMethod = static_cast<CCalEntry::TMethod> (aStream.ReadInt8L());
+	InternalizeTypeSpecificDataL(aStream, ETrue); 
+	}
+	
+// CGsParentEntryData  
+void CGsParentData::RemoveChildId(TCalLocalUid aId)
+	{
+	TInt pos = FindChildId(aId);
+	if (pos != KErrNotFound)
+		{
+		iChildIds->Remove(pos);
+		}
+	}
+	
+void CGsParentData::AddChildIdL(const TGsChildRefData& aChildData)
+	{
+	TInt pos = FindChildId(aChildData.ChildId());
+	if (pos == KErrNotFound)
+		{
+		User::LeaveIfError(iChildIds->Append(aChildData));
+		}
+	}	
+
+CGsParentData::~CGsParentData()
+	{
+	if (iChildIds)
+		{
+		iChildIds->Close();
+		}
+	delete iChildIds;
+	}
+
+CGsParentData* CGsParentData::NewL()
+	{
+	return new (ELeave) CGsParentData();
+	}
+
+CGsParentData* CGsParentData::NewL(HBufC8* aUid, TInt aSeqNum, CCalEntry::TMethod aMethod)
+	{
+	CGsParentData* self = new (ELeave) CGsParentData(aSeqNum, aMethod);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	self->SetGuid(aUid); // set GUID last because ownership taken
+	CleanupStack::Pop(self);
+	return self;	
+	}
+
+CGsParentData::CGsParentData(TInt aSeqNum, CCalEntry::TMethod aMethod)
+	:CGsData(aSeqNum, aMethod)
+	{
+	}
+
+void CGsParentData::ConstructL()
+	{
+	iChildIds = new (ELeave) RArray<TGsChildRefData>();
+	}
+
+CGsParentData::CGsParentData()
+	{
+	}
+	
+void CGsParentData::ExternalizeTypeSpecificDataL(RWriteStream& aStream, TBool /*aToBuffer*/) const
+	{
+	aStream.WriteUint16L(Guid().Length());
+	aStream << Guid();
+
+	const TInt KCount = iChildIds->Count();
+	aStream.WriteInt32L(KCount);
+		
+	for (TInt i = 0; i < KCount; ++i)
+		{
+		aStream << (*iChildIds)[i].ChildId();
+		aStream << (*iChildIds)[i].RecurrenceId();
+		}
+	}
+
+void CGsParentData::InternalizeTypeSpecificDataL(RReadStream& aStream, TBool /*aFromBuffer*/)
+	{
+	TUint16 length = aStream.ReadUint16L();
+	HBufC8* guid = HBufC8::NewL(aStream,length);
+	SetGuid(guid);
+
+	iChildIds = new (ELeave) RArray<TGsChildRefData>();
+
+	TAgnCalendarTime recurId;
+    const TInt KCount = aStream.ReadInt32L(); 
+    
+    for (TInt i = 0; i < KCount; ++i)
+		{
+		TCalLocalUid childId = aStream.ReadUint32L();	
+		aStream >> recurId;
+		
+		TGsChildRefData childData(childId, recurId);
+		iChildIds->AppendL(childData);
+		}
+ 	}
+	
+TInt CGsParentData::FindChildId(TCalLocalUid aChildId) const
+	{
+	const TInt KCount = iChildIds->Count();
+	for (TInt i = 0; i < KCount; ++i)
+		{
+		if ((*iChildIds)[i].ChildId() == aChildId)
+			{
+			return i;
+			}
+		}
+	return KErrNotFound;
+	}
+	
+const RArray<TGsChildRefData>& CGsParentData::ChildIds() const
+	{
+	return *iChildIds;
+	}
+	
+CGsData::TGsDataType CGsParentData::GsDataType() const
+	{
+	return CGsData::EParent;
+	}
+	
+void CGsParentData::CopyDataL(const CGsData& aSource)
+	{
+	if (aSource.GsDataType() == CGsData::EParent)
+		{
+		iChildIds->Reset();
+		
+		const RArray<TGsChildRefData>& sourceChild = static_cast <const CGsParentData&> (aSource).ChildIds();
+		
+		const TInt KCount = sourceChild.Count();
+		for (TInt ii = 0; ii<KCount; ++ii)
+			{
+			iChildIds->AppendL((sourceChild)[ii]);
+			}
+		}
+	}
+	
+TAgnCalendarTime CGsParentData::RecurrenceId() const
+	{
+	return TAgnCalendarTime();
+	}
+
+CalCommon::TRecurrenceRange CGsParentData::RecurrenceRange() const
+	{
+	return CalCommon::EThisOnly;
+	}
+	
+// CGsChildEntryData
+CGsData::TGsDataType CGsChildData::GsDataType() const
+	{
+	return CGsData::EChild;
+	}
+	
+void CGsChildData::CopyDataL(const CGsData& aSource)
+	{
+	if (aSource.GsDataType() == CGsData::EChild)
+		{
+		iParentId = static_cast <const CGsChildData&>(aSource).ParentId();
+		}
+	}
+	
+void CGsChildData::ExternalizeTypeSpecificDataL(RWriteStream& aStream, TBool aToBuffer) const
+	{
+	aStream << iParentId;
+	if(aToBuffer)
+		{
+		if (Guid().Length() > 0)
+			{
+			aStream.WriteUint16L(Guid().Length());
+			aStream << Guid();
+			}
+		else
+			{
+			aStream.WriteUint16L(0);
+			}
+		aStream << iRecurrenceId;
+		aStream.WriteUint8L(iRecurrenceRange);
+		}
+	
+	}
+
+void CGsChildData::InternalizeTypeSpecificDataL(RReadStream& aStream, TBool aFromBuffer)
+	{
+	aStream >> iParentId; 
+	if(aFromBuffer)
+		{
+		TUint16 length = aStream.ReadUint16L();
+		HBufC8* guid = NULL;
+		if(length>0)
+			{
+			guid = HBufC8::NewL(aStream,length);
+			}
+		SetGuid(guid);
+		aStream >> iRecurrenceId;
+		iRecurrenceRange = static_cast<CalCommon::TRecurrenceRange>(aStream.ReadUint8L());
+		}
+	}
+
+CGsChildData* CGsChildData::NewL()
+	{
+	return new (ELeave) CGsChildData();;
+	}
+
+CGsChildData* CGsChildData::NewL(HBufC8* aUid, TInt aSeq, CCalEntry::TMethod aMethod, const TAgnCalendarTime& aRecurrenceId, CalCommon::TRecurrenceRange aRecurrenceRange)
+	{
+	CGsChildData* self = new (ELeave) CGsChildData(aSeq, aMethod, aRecurrenceId, aRecurrenceRange );
+	self->SetGuid(aUid); // set GUID last because ownership taken
+	return self;
+	}
+
+CGsChildData::CGsChildData(TInt aSeq, CCalEntry::TMethod aMethod, const TAgnCalendarTime& aRecurrenceId, CalCommon::TRecurrenceRange aRecurrenceRange)
+	:CGsData(aSeq, aMethod)
+	{
+	iRecurrenceId = aRecurrenceId;
+	iRecurrenceRange = aRecurrenceRange;
+	}
+
+CGsChildData::CGsChildData()
+	{
+	}
+
+void CGsChildData::SetParentId(TCalLocalUid aParentId)
+	{
+	iParentId = aParentId;
+	}
+	
+TCalLocalUid CGsChildData::ParentId() const
+	{
+	return iParentId;
+	}
+	
+TAgnCalendarTime CGsChildData::RecurrenceId() const
+	{
+	return iRecurrenceId;
+	}
+
+void CGsChildData::SetRecurrenceId(const TAgnCalendarTime& aRecurrenceId)
+	{
+	iRecurrenceId = aRecurrenceId;
+	}
+	
+CalCommon::TRecurrenceRange CGsChildData::RecurrenceRange() const
+	{
+	return iRecurrenceRange;
+	}
+
+void CGsChildData::SetRecurrenceRange(CalCommon::TRecurrenceRange aRecurrenceRange)
+	{
+	iRecurrenceRange = aRecurrenceRange;
+	}
+