phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/AddModifyDeleteContactFields.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/AddModifyDeleteContactFields.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,673 @@
+// Copyright (c) 2007-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 "AddModifyDeleteContactFields.h"
+
+/* The following set of functions are available for creating and updating desired contact items fields
+*  A contact item field has 3 important parts to it
+*  1) Field Type
+*  2) Storage Type
+*  3) Content
+*  Functions are available which construct the contact items fields with meet the above criteria
+*  In General, the contact item fields are set with random string as their content
+*  In specific case, the contact item field will be supplied withh desired content
+*  useful in case of find views and Sub Views
+*  In case of filtered views, it is required that the contact item possess fields that meet the
+*  contact item view filter. Functions are available to added contact item fields in order to meet
+*  the contact item view filter criteria
+*/
+
+/**
+* Retrieve the relevant contact field storage type for the specified contact field
+* @param aFieldType - Contact field information
+* @return TStorageType - The contact field storage type
+*/
+TStorageType TAddModifyDeleteContactFields::GetStorageType(const TFieldType& aFieldType)
+	{
+	if((aFieldType == KUidContactFieldAnniversary) || (aFieldType == KUidContactFieldBirthday))
+		{
+		return KStorageTypeDateTime ;
+		}
+	return KStorageTypeText;
+	}
+
+/**
+* Adds content to the specified field based on the available contact field type information
+* @param aFieldType - Contact field type information
+* @param aField - The contact field to be updated
+*/
+void TAddModifyDeleteContactFields::SetDataL(const TFieldType& aFieldType, CContactItemField& aField)
+	{
+	HBufC* buf = HBufC::NewLC(SharedConstants::KMaxBufferLength);
+	TPtr bufPtr = buf->Des();
+
+	if ((aFieldType == KUidContactFieldJobTitle) || (aFieldType == KUidContactFieldNote) ||
+
+	    (aFieldType == KUidContactFieldAssistant) || (aFieldType == KUidContactFieldSpouse) ||
+
+	    (aFieldType == KUidContactFieldChildren) || (aFieldType == KUidContactFieldRegion)  ||
+
+	    (aFieldType == KUidContactFieldCountry) || (aFieldType == KUidContactFieldCompanyName) ||
+
+	    (aFieldType == KUidContactFieldCompanyNamePronunciation) || (aFieldType == KUidContactFieldGivenName) ||
+
+	    (aFieldType == KUidContactFieldFamilyName) || (aFieldType == KUidContactFieldGivenNamePronunciation)  ||
+
+	    (aFieldType == KUidContactFieldFamilyNamePronunciation) || (aFieldType == KUidContactFieldAdditionalName) ||
+
+	    (aFieldType == KUidContactFieldSuffixName) || (aFieldType == KUidContactFieldPrefixName)  ||
+
+	    (aFieldType == KUidContactFieldDepartmentName) || (aFieldType == KUidContactFieldClass) || 
+	    
+	    (aFieldType == KUidContactFieldClass))
+	    	{
+			SetRandomAlphaString(bufPtr, SharedConstants::KMaxBufferLength);
+			aField.TextStorage()->SetTextL(bufPtr);
+	    	}
+
+	else if ((aFieldType == KUidContactFieldPostcode ) || (aFieldType == KUidContactFieldPhoneNumber) ||
+
+		 (aFieldType == KUidContactFieldAnniversary ) || (aFieldType == KUidContactFieldSms) ||
+
+		 (aFieldType == KUidContactFieldFax ) || (aFieldType == KUidContactFieldBirthday) ||
+
+		 (aFieldType == KUidContactFieldICCPhonebook ) || (aFieldType == KUidContactFieldDTMF) ||
+
+		 (aFieldType == KUidContactFieldICCSlot) ||  (aFieldType == KUidContactsVoiceDialField))
+		 	{
+		   	SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+			aField.TextStorage()->SetTextL(bufPtr);
+		 	}
+
+	else if ((aFieldType == KUidContactFieldAddress ) || (aFieldType == KUidContactFieldPostOffice) ||
+
+		(aFieldType == KUidContactFieldExtendedAddress ) ||  (aFieldType == KUidContactFieldLocality) ||
+
+		(aFieldType == KUidContactFieldEMail ) || (aFieldType == KUidContactFieldMsg) ||
+
+		(aFieldType == KUidContactFieldUrl ) || (aFieldType == KUidContactFieldPicture) ||
+
+		(aFieldType == KUidContactFieldRingTone) ||  (aFieldType == KUidContactFieldICCGroup) ||
+
+		(aFieldType == KUidContactFieldIMAddress ) || (aFieldType == KUidContactFieldSecondName) ||
+
+		(aFieldType == KUidContactFieldSIPID))
+			{
+			SetRandomAlphaNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+			aField.TextStorage()->SetTextL(bufPtr);
+			}
+	CleanupStack::PopAndDestroy(); // buf
+	}
+
+/**
+ * Update the specified buffer with random alpha content as per specified length
+ * @param aBuf - Buffer to be updated
+ * @param aLength - Length information
+ */
+void TAddModifyDeleteContactFields::SetRandomAlphaString(TDes& aBuf,TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+
+	for (TInt ii = 0; ii < aLength; ++ii)
+		{
+		aBuf[ii] = RandomAlphaCharCode();
+		}
+	}
+
+/**
+ * Update the specified buffer with random numeric content as per specified length
+ * @param aBuf - Buffer to be updated
+ * @param aLength - Length information
+ */
+void TAddModifyDeleteContactFields::SetRandomNumericString(TDes& aBuf,TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+
+	for (TInt ii = 0; ii < aLength; ++ii)
+		{
+		aBuf[ii] = RandomNumericCharCode();
+		}
+	}
+
+/**
+ * Update the specified buffer with random alpha and numeric content as per specified length
+ * @param aBuf - Buffer to be updated
+ * @param aLength - Length information
+ */
+void TAddModifyDeleteContactFields::SetRandomAlphaNumericString(TDes& aBuf,TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+	for (TInt ii = 0; ii < (aLength-1); ii = ii+2)
+		{
+		aBuf[ii] = RandomAlphaCharCode();
+		aBuf[ii+1] = RandomNumericCharCode();
+		}
+	}
+
+/**
+ * Returns any random character between A to Z
+ * @return TText - Random Character
+ */
+TText TAddModifyDeleteContactFields::RandomAlphaCharCode()
+	{
+	return RandomCharCode('A','Z',' ');
+	}
+
+/**
+ * Returns any random ascii character equivalent of number between 0 to 9
+ * @return TText - Random Number 
+ */
+TText TAddModifyDeleteContactFields::RandomNumericCharCode()
+	{
+	return RandomCharCode('0','9',' ');
+	}
+
+
+TText TAddModifyDeleteContactFields::RandomCharCode(TText aLowerBound,TText aUpperBound,TText aException)
+	{
+	TText charCode = 0;
+
+	do
+		{
+		charCode=RandomCharCode(aLowerBound,aUpperBound);
+		}
+		while (charCode == aException);
+
+	return charCode;
+	}
+
+TText TAddModifyDeleteContactFields::RandomCharCode(TText aLowerBound,TText aUpperBound)
+	{
+	TText charCode = STATIC_CAST(TText,(Math::Rand(iRandSeed) % (aUpperBound - aLowerBound)) + aLowerBound);
+	ASSERT(charCode >= aLowerBound && charCode <= aUpperBound);
+	return charCode;
+	}
+
+
+/**
+* Retrieve the contact field uid information based on the contact field information specified in string format
+* @param aContactFieldString - Contact field information in String format
+* @return TUid - The contact field information in uid format
+*/
+
+TUid TAddModifyDeleteContactFields::GetContactFieldType(const TPtrC& aContactFieldString)
+	{
+
+	_LIT(KAddress, 						"Address");
+	_LIT(KPostOffice,					"PostOffice");
+	_LIT(KExtendedAddress, 				"ExtendedAddress");
+	_LIT(KLocality,	 					"Locality");
+	_LIT(KRegion,	 					"Region");
+	_LIT(KPostCode,	 					"PostCode");
+	_LIT(KCountry,	 					"Country");
+	_LIT(KCompanyName, 					"CompanyName");
+	_LIT(KCompanyNamePronunciation, 	"CompanyNamePronunciation");
+	_LIT(KPhoneNumber,     				"PhoneNumber");
+	_LIT(KGivenName,       		        "GivenName");
+	_LIT(KFamilyName,                	"FamilyName");
+	_LIT(KGivenNamePronunciation,     	"GivenNamePronunciation");
+	_LIT(KFamilyNamePronunciation,    	"FamilyNamePronunciation");
+	_LIT(KAdditionalName,             	"AdditionalName");
+	_LIT(KSuffixName,                	"SuffixName");
+	_LIT(KPrefixName,                	"PrefixName");
+	_LIT(KHidden,                		"Hidden");
+	_LIT(KEMail,                		"EMail");
+	_LIT(KMsg,                			"Msg");
+	_LIT(KSms,                			"Sms");
+	_LIT(KFax,                			"Fax");
+	_LIT(KNote,			  				"Note");
+	_LIT(KBirthday,		          		"Birthday");
+	_LIT(KUrl,			  				"Url");
+	_LIT(KPicture,		          		"Picture");
+	_LIT(KRingTone,		          		"RingTone");
+	_LIT(KDTMF,			  				"DTMF");
+	_LIT(KVoiceDialField,		  		"VoiceDialField");
+	_LIT(KJobTitle,		          		"JobTitle");
+	_LIT(KICCSlot,		          		"ICCSlot");
+	_LIT(KICCPhonebook,	          		"ICCPhonebook");
+	_LIT(KICCGroup,		          		"ICCGroup");
+	_LIT(KIMAddress,		  			"IMAddress");
+	_LIT(KSecondName,		  			"SecondName");
+	_LIT(KSIPID,		          		"SIPID");
+	_LIT(KAssistant,		  			"Assistant");
+	_LIT(KAnniversary,	          		"Anniversary");
+	_LIT(KSpouse,		          		"Spouse");
+	_LIT(KChildren,		          		"Children");
+	_LIT(KClass,		          		"Class");
+	_LIT(KDepartmentName,	          	"DepartmentName");
+
+	TUid	uid;
+
+	if ( aContactFieldString.Compare(KAddress) == 0)
+		{
+		uid = KUidContactFieldAddress;
+		}
+	else if ( aContactFieldString.Compare(KPostOffice) == 0)
+		{
+		uid = KUidContactFieldPostOffice;
+		}
+	else if ( aContactFieldString.Compare(KExtendedAddress) == 0)
+		{
+		uid = KUidContactFieldExtendedAddress;
+		}
+	else if ( aContactFieldString.Compare(KLocality) == 0)
+		{
+		uid = KUidContactFieldLocality;
+		}
+	else if ( aContactFieldString.Compare(KRegion) == 0)
+		{
+		uid = KUidContactFieldRegion;
+		}
+	else if ( aContactFieldString.Compare(KPostCode) == 0)
+		{
+		uid = KUidContactFieldPostcode;
+		}
+	else if ( aContactFieldString.Compare(KCountry) == 0)
+		{
+		uid = KUidContactFieldCountry;
+		}
+	else if ( aContactFieldString.Compare(KCompanyName) == 0)
+		{
+		uid = KUidContactFieldCompanyName;
+		}
+	else if ( aContactFieldString.Compare(KCompanyNamePronunciation) == 0)
+		{
+		uid = KUidContactFieldCompanyNamePronunciation;
+		}
+	else if ( aContactFieldString.Compare(KPhoneNumber) == 0)
+		{
+		uid = KUidContactFieldPhoneNumber;
+		}
+	else if ( aContactFieldString.Compare(KGivenName) == 0)
+		{
+		uid = KUidContactFieldGivenName;
+		}
+	else if ( aContactFieldString.Compare(KFamilyName) == 0)
+		{
+		uid = KUidContactFieldFamilyName;
+		}
+	else if ( aContactFieldString.Compare(KGivenNamePronunciation) == 0)
+		{
+		uid = KUidContactFieldGivenNamePronunciation;
+		}
+	else if ( aContactFieldString.Compare(KFamilyNamePronunciation) == 0)
+		{
+		uid = KUidContactFieldFamilyNamePronunciation;
+		}
+	else if ( aContactFieldString.Compare(KAdditionalName) == 0)
+		{
+		uid = KUidContactFieldAdditionalName;
+		}
+	else if ( aContactFieldString.Compare(KSuffixName) == 0)
+		{
+		uid = KUidContactFieldSuffixName;
+		}
+	else if ( aContactFieldString.Compare(KPrefixName) == 0)
+		{
+		uid = KUidContactFieldPrefixName;
+		}
+	else if ( aContactFieldString.Compare(KHidden) == 0)
+		{
+		uid = KUidContactFieldHidden;
+		}
+	else if ( aContactFieldString.Compare(KEMail) == 0)
+		{
+		uid = KUidContactFieldEMail;
+		}
+	else if ( aContactFieldString.Compare(KMsg) == 0)
+		{
+		uid = KUidContactFieldMsg;
+		}
+	else if ( aContactFieldString.Compare(KSms) == 0)
+		{
+		uid = KUidContactFieldSms;
+		}
+	else if ( aContactFieldString.Compare(KFax) == 0)
+		{
+		uid = KUidContactFieldFax;
+		}
+	else if ( aContactFieldString.Compare(KNote) == 0)
+		{
+		uid = KUidContactFieldNote;
+		}
+	else if ( aContactFieldString.Compare(KBirthday) == 0)
+		{
+		uid = KUidContactFieldBirthday;
+		}
+	else if ( aContactFieldString.Compare(KUrl) == 0)
+		{
+		uid = KUidContactFieldUrl;
+		}
+	else if ( aContactFieldString.Compare(KPicture) == 0)
+		{
+		uid = KUidContactFieldPicture;
+		}
+	else if ( aContactFieldString.Compare(KRingTone) == 0)
+		{
+		uid = KUidContactFieldRingTone;
+		}
+	else if ( aContactFieldString.Compare(KDTMF) == 0)
+		{
+		uid = KUidContactFieldDTMF;
+		}
+	else if ( aContactFieldString.Compare(KVoiceDialField) == 0)
+		{
+		uid = KUidContactsVoiceDialField;
+		}
+	else if ( aContactFieldString.Compare(KJobTitle) == 0)
+		{
+		uid = KUidContactFieldJobTitle;
+		}
+	else if ( aContactFieldString.Compare(KICCSlot) == 0)
+		{
+		uid = KUidContactFieldICCSlot;
+		}
+	else if ( aContactFieldString.Compare(KICCPhonebook) == 0)
+		{
+		uid = KUidContactFieldICCPhonebook;
+		}
+	else if ( aContactFieldString.Compare(KICCGroup) == 0)
+		{
+		uid = KUidContactFieldICCGroup;
+		}
+	else if ( aContactFieldString.Compare(KIMAddress) == 0)
+		{
+		uid = KUidContactFieldIMAddress;
+		}
+	else if ( aContactFieldString.Compare(KSecondName) == 0)
+		{
+		uid = KUidContactFieldSecondName;
+		}
+	else if ( aContactFieldString.Compare(KSIPID) == 0)
+		{
+		uid = KUidContactFieldSIPID;
+		}
+	else if ( aContactFieldString.Compare(KAssistant) == 0)
+		{
+		uid = KUidContactFieldAssistant;
+		}
+	else if ( aContactFieldString.Compare(KAnniversary) == 0)
+		{
+		uid = KUidContactFieldAnniversary;
+		}
+	else if ( aContactFieldString.Compare(KSpouse) == 0)
+		{
+		uid = KUidContactFieldSpouse;
+		}
+	else if ( aContactFieldString.Compare(KChildren) == 0)
+		{
+		uid = KUidContactFieldChildren;
+		}
+	else if ( aContactFieldString.Compare(KClass) == 0)
+		{
+		uid = KUidContactFieldClass;
+		}
+	else if ( aContactFieldString.Compare(KDepartmentName) == 0)
+		{
+		uid = KUidContactFieldDepartmentName;
+		}
+	else
+		{
+		uid = KUidContactFieldNone;
+		}
+
+	return uid;
+	}
+
+/**
+ * Adds contact field to meet the specified contact based to meet the filter requirements
+ * @param aContact contact to be updated
+ * @param aBitWiseFilter desired view filter
+ */
+void TAddModifyDeleteContactFields::AddFilterBasedFieldsL(CContactItem& aContact, TInt aBitWiseFilter)
+	{
+	HBufC* buf = HBufC::NewLC(SharedConstants::KMaxBufferLength);
+	TPtr bufPtr = buf->Des();
+
+	if(aBitWiseFilter & CContactDatabase::ELandLine)
+		{
+		SetRandomNumericString(bufPtr,SharedConstants::KMaxBufferLength);
+		SetWorkPhoneL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::ESmsable)
+		{
+		SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetWorkMobileL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::EMailable)
+		{
+		SetRandomAlphaNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		if (aBitWiseFilter&CContactDatabase::EHome)
+			SetHomeEmailAddressL(aContact, bufPtr);
+		else
+			SetWorkEmailAddressL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::EFaxable)
+		{
+		SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetFaxL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::ERingTone)
+		{
+		SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetRingToneL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::EVoiceDial)
+		{
+		SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetVoiceDialL(aContact, bufPtr);
+		}
+
+	if(aBitWiseFilter & CContactDatabase::EWirelessVillage)
+		{
+		SetRandomNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetIMAddressL(aContact, bufPtr);
+		}
+	if(aBitWiseFilter & CContactDatabase::EIMAddress)
+		{
+		SetRandomAlphaNumericString(bufPtr, SharedConstants::KMaxBufferLength);
+		SetIMAddressL(aContact, bufPtr);
+		}
+
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+/**
+ * Adds contact field to meet the work phone filter requirement
+ * @param aContact contact to be updated
+ * @param aWorkPhone content for work phone contact field
+ */
+void TAddModifyDeleteContactFields::SetWorkPhoneL(CContactItem& aContact, const TDesC& aWorkPhone)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(aContact, *contentType,aWorkPhone);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+
+/**
+ * Adds contact field to meet the work mobile filter requirement
+ * @param aContact contact to be updated
+ * @param aWorkMobile content for work mobile contact field
+ */
+void TAddModifyDeleteContactFields::SetWorkMobileL(CContactItem& aContact, const TDesC& aWorkMobile)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(aContact, *contentType,aWorkMobile);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+
+/**
+ * Adds contact field to meet the home phone filter requirement
+ * @param aContact contact to be updated
+ * @param aHomePhone content for home phone contact field
+ */
+void TAddModifyDeleteContactFields::SetHomePhoneL(CContactItem& aContact, const TDesC& aHomePhone)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	SetTextFieldL(aContact, *contentType,aHomePhone);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+
+/**
+ * Adds contact field to meet the home mobile filter requirement
+ * @param aContact contact to be updated
+ * @param aHomeMobile content for home mobile contact field
+ */
+void TAddModifyDeleteContactFields::SetHomeMobileL(CContactItem& aContact, const TDesC& aHomeMobile)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	SetTextFieldL(aContact, *contentType,aHomeMobile);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+	
+/**
+ * Adds contact field to meet the home email filter requirement
+ * @param aContact contact to be updated
+ * @param aEmailAddress content for home email contact field
+ */
+void TAddModifyDeleteContactFields::SetHomeEmailAddressL(CContactItem& aContact, const TDesC& aEmailAddress)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME);
+	SetTextFieldL(aContact, *contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+/**
+ * Adds contact field to meet the work email filter requirement
+ * @param aContact contact to be updated
+ * @param aEmailAddress content for work email contact field
+ */
+void TAddModifyDeleteContactFields::SetWorkEmailAddressL(CContactItem& aContact, const TDesC& aEmailAddress)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldEMail);
+	contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	SetTextFieldL(aContact, *contentType,aEmailAddress);
+	CleanupStack::PopAndDestroy(contentType);
+	}
+
+/**
+ * Adds a new contact field to meet the fax filter requirement
+ * @param aContact contact to be updated
+ * @param aFax content for fax contact field
+ */
+void TAddModifyDeleteContactFields::SetFaxL(CContactItem& aContact, const TDesC& aFax)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldFax);
+	SetTextFieldL(aContact, *contentType, aFax);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+	
+/**
+ * Adds a new contact field to meet the IMAddress filter requirement
+ * @param aContact contact to be updated
+ * @param aIMAddress content for fax contact field
+ */
+void TAddModifyDeleteContactFields::SetIMAddressL(CContactItem& aContact, const TDesC& aIMAddress)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldIMAddress);
+	SetTextFieldL(aContact, *contentType, aIMAddress);
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+
+/**
+ * Adds a new contact field to meet the voice dial filter requirement
+ * @param aContact contact to be updated
+ * @param aVoiceDial content for voice dial contact field
+ */
+void TAddModifyDeleteContactFields::SetVoiceDialL(CContactItem& aContact, const TDesC& aVoiceDial)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactsVoiceDialField);
+	SetTextFieldL(aContact,  *contentType, aVoiceDial );
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+
+/**
+ * Adds a new contact field to meet the ring tone filter requirement
+ * @param aContact contact to be updated
+ * @param aRingTone content for ring tone contact field
+ */
+void TAddModifyDeleteContactFields::SetRingToneL(CContactItem& aContact, const TDesC& aRingTone)
+	{
+	CContentType* contentType = CContentType::NewL();
+	CleanupStack::PushL(contentType);
+	contentType->AddFieldTypeL(KUidContactFieldRingTone);
+	SetTextFieldL(aContact, *contentType, aRingTone );
+	CleanupStack::PopAndDestroy(contentType); 
+	}
+	
+/**
+ * Adds desired contact field content to the contact specified
+ * @param aContact contact to be updated
+ * @param aTypesToMatch Storage type for Contact Field
+ * @param aText content for the desired field
+ */
+void TAddModifyDeleteContactFields::SetTextFieldL(CContactItem& aContact, const CContentType& aTypesToMatch, const TDesC& aText)
+	{
+	TStorageType storageType = KStorageTypeText;
+	CContactItemField* field = 	CContactItemField::NewL(storageType, aTypesToMatch);
+	CleanupStack::PushL(field);
+	field->TextStorage()->SetTextL(aText);
+	aContact.AddFieldL(*field);
+	CleanupStack::Pop(field);	
+	}
+
+/**
+ * Update the contact item fields with new content
+ * @param aContact contact to be updated
+ */
+void TAddModifyDeleteContactFields::UpdateFieldsL(CContactItem& aContact)
+	{
+	CContactItemFieldSet& fieldSet = aContact.CardFields();
+	for(TInt i = 0; i < fieldSet.Count();i++)
+		{
+		TFieldType fieldType(KUidContactFieldNone);
+		CContactItemField& field = fieldSet[i];
+		SetDataL(fieldType, field);
+		}
+	}