--- /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;
+ }
+