pimappservices/calendar/shared/inc/agmgsentry.h
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/shared/inc/agmgsentry.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,175 @@
+// 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:
+//
+
+#ifndef __AGMGSENTRY_H__
+#define __AGMGSENTRY_H__
+
+#include "agmcalendartime.h"
+#include "calentry.h"
+
+class CAgnEntry;
+
+/**
+Class representing a child entry's unique id and its recurrence id. Held by parent classes.
+@internalComponent
+@released
+*/	
+NONSHARABLE_CLASS(TGsChildRefData)
+	{
+public:
+
+	IMPORT_C TGsChildRefData(TCalLocalUid aChildId, const TAgnCalendarTime& aRecurId);
+	IMPORT_C TCalLocalUid ChildId() const;
+	IMPORT_C const TAgnCalendarTime& RecurrenceId() const;
+	
+private:
+	TCalLocalUid 	 	iChildId;        
+	TAgnCalendarTime	iRecurrenceId;    	
+	};
+	
+
+/**
+Abstract base class for storing group scheduling data.
+Parent entries contain data about all their child entries (modifying entries) - this is a list of local IDs.
+Child entries contain data about how they modiy their parent entry - their recurrence ID and range.
+Both types of entries contain a GUID, sequence number and method.
+
+@internalComponent
+@released
+*/
+NONSHARABLE_CLASS (CGsData) : public CBase  
+	{
+public:
+
+	enum TGsDataType
+		{
+		EParent,
+		EChild
+		};
+		
+	virtual ~CGsData();
+
+	// These methods are common to child and parent entries - parent entries have a default (NULL) recurrence ID
+	// and default recurrence range of 'this only'
+	virtual TGsDataType GsDataType() const = 0;
+	virtual void CopyDataL(const CGsData& aSource) = 0;
+	virtual TAgnCalendarTime RecurrenceId() const = 0;
+	virtual CalCommon::TRecurrenceRange RecurrenceRange() const = 0;
+
+	void SetSequenceNumber(TInt aNum);
+	TInt SequenceNumber() const;
+
+	void SetMethod(CCalEntry::TMethod aMethod);
+	CCalEntry::TMethod Method() const;
+
+	void ExternalizeL(RWriteStream& aStream) const;
+	void InternalizeL(RReadStream& aStream);
+
+	void ExternalizeToBufferL(RWriteStream& aStream) const;
+	void InternalizeFromBufferL(RReadStream& aStream);
+	
+	const TDesC8& Guid() const;
+ 	void SetGuid(HBufC8* aGuid); // takes ownership
+	
+protected:
+	CGsData(TInt aSeq, CCalEntry::TMethod aMethod); 
+	CGsData();
+
+private:
+	virtual void InternalizeTypeSpecificDataL(RReadStream& aStream, TBool aFromBuffer)  = 0;
+	virtual void ExternalizeTypeSpecificDataL(RWriteStream& aStream, TBool aToBuffer) const = 0;
+
+private:
+	HBufC8* 				iGuid; 
+	TInt					iSeqNum;
+	CCalEntry::TMethod  	iMethod; 
+	};
+ 
+/**
+Class representing a child entry's group scheduling data.
+@internalComponent
+@released
+*/ 
+NONSHARABLE_CLASS (CGsChildData) : public CGsData
+	{
+public:	
+    
+    // GsChild methods
+    static CGsChildData* NewL(); //Used by CAgnEntry before internalise the object from the stream
+  	static CGsChildData* NewL(HBufC8* aUid, TInt aSeq, CCalEntry::TMethod aMethod, const TAgnCalendarTime& aRecurrenceId, CalCommon::TRecurrenceRange aRecurrenceRange);
+  	
+	TCalLocalUid ParentId() const;
+	void SetParentId(TCalLocalUid aParentId);
+	void SetRecurrenceId(const TAgnCalendarTime& aRecId);
+	void SetRecurrenceRange(CalCommon::TRecurrenceRange aRecurrenceRange);
+
+	// From CGsEntryData
+	CGsData::TGsDataType GsDataType() const;
+	void CopyDataL(const CGsData& aSource);
+	TAgnCalendarTime RecurrenceId() const;
+	CalCommon::TRecurrenceRange RecurrenceRange() const;
+	
+private:
+	CGsChildData();
+	CGsChildData(TInt aSeq, CCalEntry::TMethod aMethod, const TAgnCalendarTime& aRecurrenceId, CalCommon::TRecurrenceRange aRecurrenceRange);
+
+	// From CGsEntryData
+	void ExternalizeTypeSpecificDataL(RWriteStream& aStream, TBool aToBuffer) const;
+	void InternalizeTypeSpecificDataL(RReadStream& aStream, TBool aFromBuffer);
+
+private:
+	TAgnCalendarTime			iRecurrenceId;
+	CalCommon::TRecurrenceRange iRecurrenceRange;	
+	TCalLocalUid 	 			iParentId;    		
+	};
+	
+/**
+Class representing a parent entry's group scheduling data.
+@internalComponent
+@released
+*/ 
+NONSHARABLE_CLASS (CGsParentData) : public CGsData  
+	{
+public:
+ 	static CGsParentData* NewL();
+ 	static CGsParentData* NewL(HBufC8* aUid, TInt aSeqNum, CCalEntry::TMethod aMethod);   
+    ~CGsParentData();
+    
+	const RArray<TGsChildRefData>& ChildIds() const;
+ 	void RemoveChildId(TCalLocalUid aId);
+	void AddChildIdL(const TGsChildRefData& aChildData);
+
+	// From CGsEntryData
+	CGsData::TGsDataType GsDataType() const;
+	void CopyDataL(const CGsData& aSource);
+	TAgnCalendarTime RecurrenceId() const;
+	CalCommon::TRecurrenceRange RecurrenceRange() const;
+
+private:
+	CGsParentData(TInt aSeqNum, CCalEntry::TMethod aMethod);
+	CGsParentData();
+	void ConstructL();
+    TInt FindChildId(TCalLocalUid aChildId) const;
+
+	// From CGsEntryData
+	void ExternalizeTypeSpecificDataL(RWriteStream& aStream, TBool aToBuffer) const;
+	void InternalizeTypeSpecificDataL(RReadStream& aStream, TBool aFromBuffer);
+  
+private:
+	RArray<TGsChildRefData>* iChildIds;
+	}; 	
+
+#endif // __AGMGSENTRY_H__
+