messagingfw/msgsrvnstore/server/src/CMsvAttributeManager.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/CMsvAttributeManager.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,208 @@
+// 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 "CMsvAttributeManager.h"
+#include <cmsvattachment.h>
+
+CDesC8Attribute::CDesC8Attribute()
+	{
+	}
+	
+CDesC8Attribute::~CDesC8Attribute()
+	{
+	delete iAttribute;
+	}
+
+CMsvAttributeManager* CMsvAttributeManager::NewL(CMsvAttachment& aAttachment)
+	{
+	CMsvAttributeManager* self = new(ELeave) CMsvAttributeManager(aAttachment);
+	return self;
+	}
+
+CMsvAttributeManager::CMsvAttributeManager(CMsvAttachment& aAttachment)
+	: iAttachment(aAttachment)
+	{
+	}	
+
+CMsvAttributeManager::~CMsvAttributeManager()
+	{
+	iDesC8Attributes.ResetAndDestroy();
+	iIntAttributes.Reset();
+	}
+
+void CMsvAttributeManager::CloneL(CMsvAttributeManager& aAttributeManager)
+	{
+	iDesC8Attributes.ResetAndDestroy();
+	for( TInt ii=0; ii<aAttributeManager.iDesC8Attributes.Count(); ++ii )
+		{
+		CDesC8Attribute* attrib = new(ELeave) CDesC8Attribute();
+		CleanupStack::PushL(attrib);
+		CDesC8Attribute* attribToCopy = aAttributeManager.iDesC8Attributes[ii];
+		attrib->iUid = attribToCopy->iUid;
+		attrib->iAttribute = attribToCopy->iAttribute->AllocL();
+		User::LeaveIfError(iDesC8Attributes.Append(attrib));
+		CleanupStack::Pop(attrib);
+		}
+		
+	iIntAttributes.Reset();
+	for( TInt ii=0; ii<aAttributeManager.iIntAttributes.Count(); ++ii )
+		{
+		TIntAttribute attrib = aAttributeManager.iIntAttributes[ii];
+		User::LeaveIfError(iIntAttributes.Append(attrib));
+		}
+	}
+
+void CMsvAttributeManager::InternalizeL(RReadStream& aStream)
+	{
+	// DesC8 attributes
+	iDesC8Attributes.ResetAndDestroy();
+	TInt attributeCount = aStream.ReadInt32L();
+	for( TInt ii=0; ii<attributeCount; ++ii )
+		{
+		CDesC8Attribute* attrib = new(ELeave) CDesC8Attribute();
+		CleanupStack::PushL(attrib);
+		attrib->iUid = TUid::Uid(aStream.ReadInt32L());
+		attrib->iAttribute = HBufC8::NewL(aStream, KMaxTInt);
+		User::LeaveIfError(iDesC8Attributes.Append(attrib));
+		CleanupStack::Pop(attrib);
+		}
+		
+	// Int attributes
+	iIntAttributes.Reset();
+	attributeCount = aStream.ReadInt32L();
+	for( TInt ii=0; ii<attributeCount; ++ii )
+		{
+		TIntAttribute attrib;
+		attrib.iUid = TUid::Uid(aStream.ReadInt32L());
+		attrib.iAttribute = aStream.ReadInt32L();
+		User::LeaveIfError(iIntAttributes.Append(attrib));
+		}
+	}
+	
+void CMsvAttributeManager::ExternalizeL(RWriteStream& aStream) const
+	{
+	// DesC8 attributes
+	TInt attributeCount = iDesC8Attributes.Count();
+	aStream.WriteInt32L(attributeCount);
+	for( TInt ii=0; ii<attributeCount; ++ii )
+		{
+		CDesC8Attribute* attrib = iDesC8Attributes[ii];
+		aStream.WriteInt32L(attrib->iUid.iUid);
+		aStream << *(attrib->iAttribute);
+		}
+		
+	// Int attributes
+	attributeCount = iIntAttributes.Count();
+	aStream.WriteInt32L(attributeCount);
+	for( TInt ii=0; ii<attributeCount; ++ii )
+		{
+		TIntAttribute attrib = iIntAttributes[ii];
+		aStream.WriteInt32L(attrib.iUid.iUid);
+		aStream.WriteInt32L(attrib.iAttribute);
+		}
+	}
+	
+void CMsvAttributeManager::SetDesC8AttributeL(TUid aAttributeId, const TDesC8& aAttribute)
+	{
+	TInt attribIndex = FindDesC8Attribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		{
+		delete iDesC8Attributes[attribIndex];
+		iDesC8Attributes.Remove(attribIndex);
+		}
+	
+	CDesC8Attribute* attrib = new(ELeave) CDesC8Attribute();
+	CleanupStack::PushL(attrib);
+	User::LeaveIfError(iDesC8Attributes.Append(attrib));
+	attrib->iUid = aAttributeId;
+	attrib->iAttribute = aAttribute.AllocL();
+	CleanupStack::Pop(attrib);
+	}
+	
+TInt CMsvAttributeManager::GetDesC8Attribute(TUid aAttributeId, TPtrC8& aAttribute) const
+	{
+	TInt attribIndex = FindDesC8Attribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		{
+		aAttribute.Set(*(iDesC8Attributes[attribIndex]->iAttribute));
+		return KErrNone;
+		}
+	
+	return KErrNotFound;
+	}
+	
+void CMsvAttributeManager::RemoveDesC8Attribute(TUid aAttributeId)
+	{
+	TInt attribIndex = FindDesC8Attribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		{
+		delete iDesC8Attributes[attribIndex];
+		iDesC8Attributes.Remove(attribIndex);
+		}
+	}
+	
+TInt CMsvAttributeManager::FindDesC8Attribute(TUid aUid) const
+	{
+	for( TInt ii=0; ii<iDesC8Attributes.Count(); ++ii )
+		{
+		if( iDesC8Attributes[ii]->iUid == aUid )
+			return ii;
+		}
+	
+	return KErrNotFound;
+	}
+	
+void CMsvAttributeManager::SetIntAttributeL(TUid aAttributeId, TInt aAttribute)
+	{
+	TInt attribIndex = FindIntAttribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		iIntAttributes.Remove(attribIndex);
+	
+	TIntAttribute attrib;
+	attrib.iUid = aAttributeId;
+	attrib.iAttribute = aAttribute;
+	User::LeaveIfError(iIntAttributes.Append(attrib));
+	}
+	
+TInt CMsvAttributeManager::GetIntAttribute(TUid aAttributeId, TInt& aAttribute) const
+	{
+	TInt attribIndex = FindIntAttribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		{
+		aAttribute = iIntAttributes[attribIndex].iAttribute;
+		return KErrNone;
+		}
+	
+	return KErrNotFound;
+	}
+	
+void CMsvAttributeManager::RemoveIntAttribute(TUid aAttributeId)
+	{
+	TInt attribIndex = FindIntAttribute(aAttributeId);
+	if( attribIndex != KErrNotFound )
+		iIntAttributes.Remove(attribIndex);
+	}
+	
+TInt CMsvAttributeManager::FindIntAttribute(TUid aUid) const
+	{
+	for( TInt ii=0; ii<iIntAttributes.Count(); ++ii )
+		{
+		if( iIntAttributes[ii].iUid == aUid )
+			return ii;
+		}
+	
+	return KErrNotFound;
+	}
+