metadataengine/client/src/mdeevent.cpp
changeset 0 c53acadfccc6
child 40 910a23996aa0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/client/src/mdeevent.cpp	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 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:  Representation of single event
+*
+*/
+
+#include "mdeevent.h"
+#include "mdcitem.h"
+#include "mdcserializationbuffer.h"
+#include "mdeeventdef.h"
+#include "mdenamespacedef.h"
+
+CMdEEvent* CMdEEvent::NewL(CMdEEventDef& aDef, TItemId aObjectId, TTime aTime,
+			const TDesC* aSource, const TDesC* aParticipant)
+	{
+	CMdEEvent* self = CMdEEvent::NewLC( aDef, aObjectId, aTime, aSource, aParticipant );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+CMdEEvent* CMdEEvent::NewLC(CMdEEventDef& aDef, TItemId aObjectId, TTime aTime,
+		const TDesC* aSource, const TDesC* aParticipant )
+	{
+	CMdEEvent* self = new (ELeave) CMdEEvent( NULL, KNoId, aDef, aObjectId, aTime );
+	CleanupStack::PushL( self );
+	self->ConstructL( aSource, aParticipant );
+	return self;
+	}
+
+
+CMdEEvent::CMdEEvent(CMdESession* aSession, TItemId aId, CMdEEventDef& aDef, TItemId aObjectId, TTime aTime)
+		: CMdEInstanceItem(aSession, aId), iDef(aDef), iObjectId(aObjectId), iTime(aTime)
+	{
+	}
+
+void CMdEEvent::ConstructL(const TDesC* aSource, const TDesC* aParticipant)
+	{
+	InstanceItemBaseConstruct();
+
+	if( aSource )
+		{		
+		iSource = aSource->AllocL();
+		}
+	else
+		{
+		iSource = NULL;
+		}
+
+	if( aParticipant )
+		{		
+		iParticipant = aParticipant->AllocL();
+		}
+	else
+		{
+		iParticipant = NULL;
+		}
+	}
+
+CMdEEvent::~CMdEEvent()
+	{
+	delete iSource;
+	delete iParticipant;
+	}
+
+CMdEEvent* CMdEEvent::NewL(CMdESession* aSession, CMdCSerializationBuffer& aBuffer, CMdENamespaceDef& aNamespaceDef )
+	{
+	CMdEEvent* ret = CMdEEvent::NewLC( aSession, aBuffer, aNamespaceDef );
+	CleanupStack::Pop( ret );
+	return ret;
+	}
+
+CMdEEvent* CMdEEvent::NewLC(CMdESession* aSession, CMdCSerializationBuffer& aBuffer, CMdENamespaceDef& aNamespaceDef )
+	{
+	const TMdCEvent& serializedEvent = TMdCEvent::GetFromBufferL( aBuffer );
+	if (serializedEvent.iId == KNoId)
+		{
+		User::Leave( KErrNotFound );
+		}
+	if (serializedEvent.iDefId == KNoDefId)
+		{
+		User::Leave( KErrNotFound );
+		}
+
+	CMdEEventDef* eventDef = aNamespaceDef.GetEventDefL( serializedEvent.iDefId );
+	if ( !eventDef )
+		{
+		User::Leave( KErrNotFound );
+		}
+	if ( serializedEvent.iObjectId == KNoId )
+		{
+		User::Leave( KErrNotFound );
+		}
+
+	CMdEEvent* event = new(ELeave) CMdEEvent( aSession, serializedEvent.iId, *eventDef,
+			serializedEvent.iObjectId, serializedEvent.iTime );
+	CleanupStack::PushL( event );
+
+	TPtrC16 source; 
+	TPtrC16 participant;
+
+	TPtrC16* sourcePtr = NULL;
+	TPtrC16* participantPtr = NULL;
+
+	if( serializedEvent.iSourceText.iPtr.iCount > 0 )
+		{
+		aBuffer.PositionL( serializedEvent.iSourceText.iPtr.iOffset );
+		source.Set( aBuffer.ReceivePtr16L() );
+		sourcePtr = &source;
+		}
+
+	if( serializedEvent.iParticipantText.iPtr.iCount > 0 )
+		{
+		aBuffer.PositionL( serializedEvent.iParticipantText.iPtr.iOffset );
+		participant.Set( aBuffer.ReceivePtr16L() );
+		participantPtr = &participant;
+		}
+
+	event->ConstructL( sourcePtr, participantPtr );
+	return event;
+	}
+
+EXPORT_C CMdEEventDef& CMdEEvent::Def() const
+	{
+	return iDef;
+	}
+
+
+EXPORT_C TItemId CMdEEvent::ObjectId() const
+	{
+	return iObjectId;
+	}
+
+
+EXPORT_C TTime CMdEEvent::Time() const
+	{
+	return iTime;
+	}
+
+
+EXPORT_C const TDesC* CMdEEvent::Source() const
+	{
+	return iSource;
+	}
+
+
+EXPORT_C const TDesC* CMdEEvent::Participant() const
+	{
+	return iParticipant;
+	}
+
+TUint32 CMdEEvent::RequiredBufferSize() const
+	{
+	TUint32 requiredSize = sizeof(TMdCEvent);
+
+	if( iSource )
+		{
+		requiredSize += CMdCSerializationBuffer::RequiredSize(*iSource);
+		}
+		
+	if( iParticipant )
+		{
+		requiredSize += CMdCSerializationBuffer::RequiredSize(*iParticipant);
+		}
+
+	return requiredSize;
+	}
+
+TMdCOffset CMdEEvent::SerializeL(CMdCSerializationBuffer& aBuffer, TMdCOffset aFreespaceOffset) const
+	{
+	const TMdCOffset eventPosition = aBuffer.Position();
+	TMdCEvent event;
+	event.iId = Id();
+	event.iDefId = iDef.Id();
+	event.iObjectId = iObjectId;
+	event.iTime = iTime;
+
+	if( iSource )
+		{
+		event.iSourceText.iPtr.iCount = iSource->Length();
+		event.iSourceText.iPtr.iOffset = aFreespaceOffset;
+		aBuffer.PositionL( aFreespaceOffset );
+		aFreespaceOffset = aBuffer.InsertL( *iSource );
+		}
+	else
+		{
+		event.iSourceText.iPtr.iCount = 0;
+		event.iSourceText.iPtr.iOffset = KNoOffset;
+		}
+
+	if( iParticipant )
+		{
+		event.iParticipantText.iPtr.iCount = iParticipant->Length();
+		event.iParticipantText.iPtr.iOffset = aFreespaceOffset;
+		aBuffer.PositionL( aFreespaceOffset );
+		aFreespaceOffset = aBuffer.InsertL( *iParticipant );
+		}
+	else
+		{
+		event.iParticipantText.iPtr.iCount = 0;
+		event.iParticipantText.iPtr.iOffset = KNoOffset;
+		}
+
+	aBuffer.PositionL( eventPosition );
+	event.SerializeL( aBuffer );
+
+	return aFreespaceOffset;
+	}
+
+TMdEInstanceType CMdEEvent::InstanceType() const
+	{
+	return EMdETypeEvent;
+	}