phonebookengines_old/contactsmodel/tsrc/NbCntTestLib/NbCntTestLib.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/NbCntTestLib/NbCntTestLib.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,691 @@
+// 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 <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include "NbCntTestLib.h"
+
+
+
+TContact::TContact(CContactItem* aCnt)
+:FirstName(KUidContactFieldGivenName, TUid::Null(), aCnt),
+Email(KUidContactFieldVCardMapEMAILINTERNET, aCnt),
+Address(KUidContactFieldAddress, aCnt),
+iCnt(aCnt)
+	{};
+
+
+
+
+void TContact::TProp::operator= (const TDesC& aStr)
+	{
+	CContactItemField& field = Find();
+	field.TextStorage()->SetTextL(aStr);
+	}
+
+
+TContact::TProp::operator const TPtrC()
+	{
+	const CContactItemField& field = Find();
+	return field.TextStorage()->Text();
+	}
+
+CContactItemField& TContact::TProp::Find()
+	{
+	for (TInt fieldNum = iCnt->CardFields().Count() - 1; fieldNum>=0; --fieldNum)  //For all the fields of contact
+		{
+		CContactItemField& currField = iCnt->CardFields()[fieldNum]; //current contact field
+		if (currField.ContentType().ContainsFieldType(iUid1))
+			{
+			if (iUid2 == TUid::Null()) 
+				{ //No need to check for the second UID
+				return currField;
+				}
+			else if (currField.ContentType().ContainsFieldType(iUid2))
+				{
+				return currField;
+				}
+			}
+		}
+
+	User::Leave(KErrBadName);	//We didn't find the field 
+
+	CContactItemField* currField = NULL; //Unreachable code
+	return *currField;
+	}
+
+
+//
+
+
+EXPORT_C TCnt::TGetSet& TCnt::operator [](TUid aUid)
+	{
+	//TInt32* id = reinterpret_cast<TInt32*>(&aUid);
+	TInt32 mapping;
+
+	switch(aUid.iUid)
+		{
+		case KUidContactFieldPhoneNumberValue:
+		case KUidContactFieldFaxValue:
+			mapping = KIntContactFieldVCardMapTEL;
+		break;
+
+		case KUidContactFieldEMailValue:		mapping = KIntContactFieldVCardMapEMAILINTERNET;
+		break;
+		case KUidContactFieldPostOfficeValue:	mapping = KIntContactFieldVCardMapPOSTOFFICE; 
+		break;
+		case KUidContactFieldExtendedAddressValue: mapping = KIntContactFieldVCardMapEXTENDEDADR; 
+		break;
+		case KUidContactFieldAddressValue: 		mapping = KIntContactFieldVCardMapADR; 
+		break;
+		case KUidContactFieldLocalityValue:		mapping = KIntContactFieldVCardMapLOCALITY; 
+		break;
+		case KUidContactFieldRegionValue: 		mapping = KIntContactFieldVCardMapREGION; 
+		break;
+		case KUidContactFieldPostCodeValue: 	mapping = KIntContactFieldVCardMapPOSTCODE; 
+		break;
+		case KUidContactFieldCountryValue: 		mapping = KIntContactFieldVCardMapCOUNTRY; 
+		break;
+		case KUidContactFieldUrlValue:			mapping = KIntContactFieldVCardMapURL; 
+		break;
+		case KUidContactFieldSecondNameValue: 	mapping = KIntContactFieldVCardMapSECONDNAME; 
+		break;
+		case KUidContactFieldCompanyNameValue: 	mapping = KIntContactFieldVCardMapORG; 
+		break;
+		case KUidContactFieldJobTitleValue: 	mapping = KIntContactFieldVCardMapTITLE; 
+		break;
+		case KUidContactFieldPictureValue: 		mapping = KIntContactFieldVCardMapLOGO; 
+		break;
+		case KUidContactFieldBirthdayValue: 	mapping = KIntContactFieldVCardMapBDAY; 
+		break;
+		case KUidContactFieldNoteValue: 		mapping = KIntContactFieldVCardMapNOTE; 
+		break;
+		case KUidContactFieldCompanyNamePronunciationValue: mapping = KIntContactFieldVCardMapORGPronunciation; 
+		break;
+		case KUidContactFieldSIPIDValue: 		mapping = KIntContactFieldVCardMapSIPID; 
+		break;
+		default:
+			mapping = KIntContactFieldVCardMapUnusedN;
+		};
+
+	iTaker.iContType = CContentType::NewL(aUid, TUid::Uid(mapping));
+	CleanupStack::PushL(iTaker.iContType);
+	return iTaker;
+	}
+
+EXPORT_C TCnt::TGetSet& TCnt::TGetSet::operator[](TInt aIndex)
+	{
+	iIndex = aIndex;
+	return *this;
+	}
+
+EXPORT_C TCnt::TGetSet& TCnt::TGetSet::operator&(TUid aUid)
+	{
+	iContType->AddFieldTypeL(aUid);
+	return *this;
+	}
+
+_LIT(KFieldNotFound, "Field Not Found");
+
+EXPORT_C void TCnt::TGetSet::operator= (const TDesC& aStr)
+	{
+	CContactItemField* aField = Find();
+	__ASSERT_ALWAYS(aField,  User::Panic(KFieldNotFound, KErrBadName));
+	aField->TextStorage()->SetTextL(aStr);
+	}
+
+EXPORT_C TBool TCnt::TGetSet::operator==(const TDesC& aStr)
+	{
+	CContactItemField* aField = Find();
+	__ASSERT_ALWAYS(aField,  User::Panic(KFieldNotFound, KErrBadName));
+	return aField->TextStorage()->Text() == aStr;
+	}
+
+EXPORT_C void TCnt::TGetSet::operator+= (const TDesC& aStr)
+	{
+	//Create the field if it is not found
+	CContactItemField* field = CContactItemField::NewLC(KStorageTypeText, *iContType);
+ 	iCnt->AddFieldL(*field); //Takes ownership
+
+	field->TextStorage()->SetTextL(aStr);
+
+	CleanupStack::Pop(field); 
+	CleanupStack::PopAndDestroy(iContType);
+	}
+
+EXPORT_C TInt TCnt::TGetSet::Count()
+	{
+	TInt counter(0);
+	const TInt numOfFields = iCnt->CardFields().Count();
+	for (TInt fieldNum = 0; fieldNum < numOfFields; ++fieldNum)  //For all the fields of contact
+		{
+		CContactItemField& currField = iCnt->CardFields()[fieldNum]; //current contact field
+		if (currField.ContentType() == *iContType)
+			{
+			++counter;
+			}
+		}
+	return counter;
+	}
+
+
+EXPORT_C CContactItemField& TCnt::TGetSet::Field()
+	{
+	return *Find();
+	}
+
+
+EXPORT_C TCnt::TGetSet::operator const TPtrC()
+	{
+	const CContactItemField* aField = Find();
+	__ASSERT_ALWAYS(aField,  User::Panic(KFieldNotFound, KErrBadName));
+	return aField->TextStorage()->Text();
+	}
+
+extern const TText* VCardMaping(const TFieldType& type);
+
+
+
+CContactItemField* TCnt::TGetSet::Find()
+	{
+	TInt fieldsToSkip = iIndex;
+	const TInt numOfFields = iCnt->CardFields().Count();
+
+	for (TInt fieldNum = 0; fieldNum < numOfFields; ++fieldNum)  //For all the fields of contact
+		{
+		CContactItemField& currField = iCnt->CardFields()[fieldNum]; //current contact field
+		if (currField.ContentType() == *iContType)
+			{
+			if (!fieldsToSkip)
+				{
+				CleanupStack::PopAndDestroy(iContType);
+				return &currField;
+				}
+			else
+				{
+				--fieldsToSkip;
+				}
+			}
+		}
+
+	return NULL;
+	}
+
+
+
+
+// Contact Builder.
+
+EXPORT_C CCntItemBuilder* CCntItemBuilder::NewLC(const CContactTemplate& aTemplate)
+	{
+	CCntItemBuilder* self = new (ELeave) CCntItemBuilder(aTemplate);
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+	
+void CCntItemBuilder::ConstructL()
+	{
+	iCntModifier = CCntItemModifier::NewLC();
+	CleanupStack::Pop(iCntModifier);
+	}
+
+EXPORT_C CCntItemBuilder::~CCntItemBuilder() 
+	{
+	delete iCntModifier;
+	}
+
+EXPORT_C CContactItem* CCntItemBuilder::GetCntItemLC()
+	{
+	CContactItem* contactItem = CContactCard::NewLC(&iTemplate);
+	FillWithRandomDataL(*contactItem);
+	return contactItem; //return ownership
+	}
+
+
+
+void CCntItemBuilder::FillWithRandomDataL(CContactItem& aContactItem)
+	{
+	HBufC* buf=HBufC::NewLC(256);
+	TPtr bufPtr=buf->Des();
+	SetRandomAlphaString(bufPtr,32);
+// 1
+	iCntModifier->SetTextFieldL(KUidContactFieldGivenName, bufPtr, aContactItem);
+	SetRandomAlphaString(bufPtr,32);
+// 2
+	iCntModifier->SetTextFieldL(KUidContactFieldFamilyName, bufPtr, aContactItem);
+
+	SetRandomAlphaString(bufPtr,32);
+// 3
+	iCntModifier->SetTextFieldL(KUidContactFieldCompanyName, bufPtr, aContactItem);
+
+	SetRandomAlphaString(bufPtr,32);
+// 4
+	iCntModifier->SetTextFieldL(KUidContactFieldJobTitle, bufPtr, aContactItem);
+	
+	SetRandomNumericString(bufPtr,24);
+// 5
+	iCntModifier->SetTextFieldL(KUidContactFieldPhoneNumber,
+				  KUidContactFieldVCardMapWORK,
+   				  KUidContactFieldVCardMapVOICE, 
+   				  bufPtr, aContactItem);
+	
+	SetRandomNumericString(bufPtr,24);
+// 6		
+	iCntModifier->SetTextFieldL(KUidContactFieldPhoneNumber,
+				KUidContactFieldVCardMapWORK, 
+				KUidContactFieldVCardMapVOICE,
+				KUidContactFieldVCardMapCELL,
+		 		bufPtr, aContactItem);
+
+
+	SetRandomNumericString(bufPtr,24);
+// 7
+	iCntModifier->SetTextFieldL(KUidContactFieldPhoneNumber, 
+				 KUidContactFieldVCardMapHOME, 
+				 KUidContactFieldVCardMapVOICE, 
+				 bufPtr, aContactItem);
+
+	SetRandomNumericString(bufPtr,24);    
+// 8	
+	
+	iCntModifier->SetTextFieldL(KUidContactFieldPhoneNumber,
+				  KUidContactFieldVCardMapHOME,
+ 				  KUidContactFieldVCardMapVOICE,
+				  KUidContactFieldVCardMapCELL,
+				  bufPtr, aContactItem);
+				
+	SetRandomNumericString(bufPtr,24);
+
+// 9	
+	iCntModifier->SetTextFieldL(KUidContactFieldFax, 
+				 bufPtr, aContactItem);
+	
+	SetRandomAlphaNumericString(bufPtr,48);
+
+// 10	
+	iCntModifier->SetTextFieldL(KUidContactFieldEMail,
+				  KUidContactFieldVCardMapWORK,
+				  bufPtr, aContactItem);
+
+	SetRandomAlphaNumericString(bufPtr,48);
+
+// 11	
+	iCntModifier->SetTextFieldL(KUidContactFieldUrl, 
+				  bufPtr, aContactItem);
+
+	SetRandomAlphaNumericString(bufPtr,32);
+
+// 12	
+	iCntModifier->SetTextFieldL(KUidContactFieldAddress, 
+				  bufPtr, aContactItem);
+
+	SetRandomAlphaString(bufPtr,32);
+// 13
+	iCntModifier->SetTextFieldL(KUidContactFieldLocality, 
+				  bufPtr, aContactItem);
+
+	SetRandomAlphaString(bufPtr,32);
+// 14
+	iCntModifier->SetTextFieldL(KUidContactFieldRegion, 
+				  bufPtr, aContactItem);
+
+	SetRandomAlphaNumericString(bufPtr,16);
+// 15
+	iCntModifier->SetTextFieldL(KUidContactFieldPostcode, 
+				  bufPtr, aContactItem);
+				
+	SetRandomAlphaString(bufPtr,32);
+// 16
+	iCntModifier->SetTextFieldL(KUidContactFieldCountry, 
+				  bufPtr, aContactItem);
+	SetRandomAlphaNumericString(bufPtr,256);
+// 17
+	iCntModifier->SetTextFieldL(KUidContactFieldNote, 
+				  bufPtr, aContactItem);
+
+	CleanupStack::PopAndDestroy(buf); // buf
+	}
+
+
+void CCntItemBuilder::SetRandomWordL(TDes& aBuf, TInt32 aType )
+	{
+	TInt len = 16;
+	SetRandomAlphaString(aBuf, len);
+
+	// the following are to make these look a bite more realistic
+	if(aType==KUidContactFieldEMailValue)	
+		{
+		aBuf.Append('@');
+		HBufC* buf  = HBufC::NewLC (KEmailAddrLen);
+		SetRandomAlphaString (aBuf, KEmailAddrLen);
+		aBuf.Append (buf->Des());
+		CleanupStack::PopAndDestroy(buf);
+		aBuf.Append (_L(".co.uk"));
+		}
+	if(aType==KUidContactFieldCompanyNameValue || aType==KUidContactFieldCompanyNamePronunciationValue)
+		{
+		aBuf.Append(' ');
+		aBuf.Append(_L(" Ltd."));
+		}
+	}
+
+
+void CCntItemBuilder::SetRandomAlphaString(TDes& aBuf,TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+
+	for (TInt i=0; i<aLength; ++i)
+		{
+		aBuf[i]=RandomAlphaCharCode();
+		}
+	}
+
+
+TText CCntItemBuilder::RandomAlphaCharCode()
+	{
+	return RandomCharCode('A','z',' ');
+	}
+
+TText CCntItemBuilder::RandomNumericCharCode()
+	{
+	return RandomCharCode('0','9',' ');
+	}
+
+TText CCntItemBuilder::RandomAlphaNumbericCharCode()
+	{
+	return RandomCharCode('0','z',' ');
+	}
+
+TText CCntItemBuilder::RandomCharCode(TText aLowerBound,TText aUpperBound,TText aException)
+	{
+	TText charCode = 0;
+	do
+		{
+		charCode = RandomCharCode(aLowerBound,aUpperBound);
+		}
+	while (charCode == aException);
+
+	return charCode;
+	}
+	
+TText CCntItemBuilder::RandomCharCode(TText aLowerBound,TText aUpperBound)
+	{
+//	TTime  now;
+//	now.UniversalTime();
+	TInt64 randSeed = 45879;
+//	TInt64 randSeed = now.Int64();
+	TText  charCode = STATIC_CAST(TText,(Math::Rand(randSeed)%(aUpperBound-aLowerBound))+aLowerBound);
+
+	ASSERT(charCode >= aLowerBound && charCode <= aUpperBound);
+	return charCode;
+	}
+	
+
+void CCntItemBuilder::SetRandomNumericString(TDes& aBuf, TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+
+	for (TInt ii = 0; ii < aLength; ++ii)
+		{
+		aBuf[ii]=RandomNumericCharCode();
+		}
+	}
+
+
+void CCntItemBuilder::SetRandomAlphaNumericString(TDes& aBuf,TInt aLength)
+	{
+	aBuf.SetLength(aLength);
+	for (TInt ii = 0; ii < aLength; ++ii)
+		{
+		aBuf[ii]=RandomAlphaNumbericCharCode();
+		}
+	}
+
+
+
+
+
+
+
+// ---------- CCntItemModifier ----------------
+
+
+EXPORT_C CCntItemModifier* CCntItemModifier::NewLC()
+	{
+	CCntItemModifier* self = new (ELeave) CCntItemModifier();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CCntItemModifier::~CCntItemModifier()
+	{
+	}
+
+
+EXPORT_C void CCntItemModifier::SetTextFieldL(TFieldType aFieldType, const TDesC& aText, CContactItem& aContactItem)
+	{
+	CContactItemFieldSet& fields = aContactItem.CardFields();
+	TInt fieldIndex = aContactItem.CardFields().Find(aFieldType);
+
+	if (fieldIndex > KErrNotFound)
+		{
+		CContactItemField& field = fields[ fieldIndex ];
+		ASSERT(field.StorageType() == KStorageTypeText);
+		
+		STATIC_CAST(CContactTextField*, field.Storage())->SetText(aText.AllocL());
+		}
+	else
+		{
+		InsertTextFieldL(aFieldType, aText, aContactItem);
+		}
+	}
+
+
+
+EXPORT_C void CCntItemModifier::SetTextFieldL(TFieldType aFieldType, TFieldType a2ndFieldType,
+							const TDesC& aText, 
+							CContactItem& aContactItem) const
+	{
+	CContentType* contentTypeToMatch = CContentType::NewL(); 
+	CleanupStack::PushL (contentTypeToMatch);
+	contentTypeToMatch->AddFieldTypeL (aFieldType);
+	contentTypeToMatch->AddFieldTypeL (a2ndFieldType);
+
+	CContactItemField& field   =  FindFieldL(*contentTypeToMatch, aContactItem);
+	ASSERT(field.StorageType() == KStorageTypeText);
+	STATIC_CAST(CContactTextField*, field.Storage())->SetText(aText.AllocL());
+	CleanupStack::PopAndDestroy(); // contentTypeToMatch.
+
+	}
+
+
+EXPORT_C void CCntItemModifier::SetTextFieldL(TFieldType aFieldType, TFieldType a2ndFieldType,
+							TFieldType a3rdFieldType,  
+							const TDesC& aText, CContactItem& aContactItem) const
+	{
+	CContentType* contentTypeToMatch = CContentType::NewL(); 
+	CleanupStack::PushL (contentTypeToMatch);
+	contentTypeToMatch->AddFieldTypeL (aFieldType);
+	contentTypeToMatch->AddFieldTypeL (a2ndFieldType);
+	contentTypeToMatch->AddFieldTypeL (a3rdFieldType);
+
+	CContactItemField& field   =  FindFieldL(*contentTypeToMatch, aContactItem);
+	ASSERT(field.StorageType() == KStorageTypeText);
+	STATIC_CAST(CContactTextField*, field.Storage())->SetText(aText.AllocL());
+	CleanupStack::PopAndDestroy(); // contentTypeToMatch.
+	}
+
+
+EXPORT_C void CCntItemModifier::SetTextFieldL(TFieldType aFieldType, TFieldType a2ndFieldType,
+							TFieldType a3rdFieldType, TFieldType a4thFieldType, 
+							const TDesC& aText, CContactItem& aContactItem) const
+	{
+	CContentType* contentTypeToMatch = CContentType::NewL(); 
+	CleanupStack::PushL (contentTypeToMatch);
+	contentTypeToMatch->AddFieldTypeL (aFieldType);
+	contentTypeToMatch->AddFieldTypeL (a2ndFieldType);
+	contentTypeToMatch->AddFieldTypeL (a3rdFieldType);
+	contentTypeToMatch->AddFieldTypeL (a4thFieldType);
+
+	CContactItemField& field   =  FindFieldL(*contentTypeToMatch, aContactItem);
+	ASSERT(field.StorageType() == KStorageTypeText);
+	STATIC_CAST(CContactTextField*, field.Storage())->SetText(aText.AllocL());
+	CleanupStack::PopAndDestroy(); // contentTypeToMatch.
+	}
+
+
+EXPORT_C TBool CCntItemModifier::FindTextFieldL(TFieldType aFieldType, TFieldType a2ndFieldType,
+							TFieldType a3rdFieldType, TFieldType a4thFieldType, 
+							const TDesC& aText, CContactItem& aContactItem) const
+							
+	{
+	CContentType* contentTypeToMatch = CContentType::NewL(); 
+	CleanupStack::PushL (contentTypeToMatch);
+	contentTypeToMatch->AddFieldTypeL (aFieldType);
+	contentTypeToMatch->AddFieldTypeL (a2ndFieldType);
+	contentTypeToMatch->AddFieldTypeL (a3rdFieldType);
+	contentTypeToMatch->AddFieldTypeL (a4thFieldType);
+
+	CContactItemField& field   =  FindFieldL(*contentTypeToMatch, aContactItem);
+	CContactTextField* textField = static_cast<CContactTextField*> (field.Storage());
+	CleanupStack::PopAndDestroy(); // contentTypeToMatch.
+	if (textField->Text() == aText)
+		{
+		return TRUE;
+		}
+	return FALSE;
+	}
+
+
+EXPORT_C TBool CCntItemModifier::FindTextFieldL(TFieldType aFieldType, 
+							const TDesC& aText, 
+							CContactItem& aContactItem)const
+	{
+	CContactItemFieldSet& fields = aContactItem.CardFields();
+	TInt fieldIndex = aContactItem.CardFields().Find(aFieldType);
+	CContactItemField& field = fields[ fieldIndex ];
+	STATIC_CAST(CContactTextField*, field.Storage())->SetText(aText.AllocL());
+	CContactTextField* textField = static_cast<CContactTextField*> (field.Storage());
+	if (textField->Text() == aText)
+		{
+		return TRUE;
+		}
+	return FALSE;
+	}
+
+
+EXPORT_C TBool CCntItemModifier::FindTextFieldL(TFieldType aFieldType, TFieldType a2ndFieldType,
+							const TDesC& aText, 
+							CContactItem& aContactItem) const
+	{
+	CContentType* contentTypeToMatch = CContentType::NewL(); 
+	CleanupStack::PushL (contentTypeToMatch);
+	contentTypeToMatch->AddFieldTypeL (aFieldType);
+	contentTypeToMatch->AddFieldTypeL (a2ndFieldType);
+
+	CContactItemField& field   =  FindFieldL(*contentTypeToMatch, aContactItem);
+	CContactTextField* textField = static_cast<CContactTextField*> (field.Storage());
+	CleanupStack::PopAndDestroy(); // contentTypeToMatch.
+	if (textField->Text() == aText)
+		{
+		return TRUE;
+		}
+	return FALSE;
+	}
+
+
+
+TInt CCntItemModifier::FindField(TFieldType aFieldType, CContactItem& aContactItem) const
+	{
+	return aContactItem.CardFields().Find( aFieldType );
+	}
+
+
+CContactItemField& CCntItemModifier::FindFieldL(TFieldType aFieldType, CContactItem& aContactItem) const
+	{
+	CContactItemFieldSet& fields = aContactItem.CardFields();
+	TInt index=fields.Find(aFieldType);
+	User::LeaveIfError(index);
+	return fields[index];
+	}
+
+
+CContactItemField& CCntItemModifier::FindFieldL(const CContentType& aTypesToMatch, CContactItem& aContactItem) const
+	{
+	CContactItemFieldSet& fields = aContactItem.CardFields();
+	const TInt numTypesToMatch (aTypesToMatch.FieldTypeCount());
+	const TFieldType mainFieldType (aTypesToMatch.FieldType(0));
+	TInt index=-1;
+	FOREVER
+		{
+		index = fields.FindNext(mainFieldType,index+1);
+		User::LeaveIfError(index);
+
+		CContactItemField& thisPhoneField=fields[index];
+		const CContentType& thisPhoneFieldTypes=thisPhoneField.ContentType();
+		const TInt numFieldTypes(thisPhoneFieldTypes.FieldTypeCount());
+
+		if (numFieldTypes != numTypesToMatch)
+			{
+			continue;
+			}
+
+		TInt numTypesLeftToMatch = numTypesToMatch;
+		for (TInt ii=0;ii<numFieldTypes;++ii)
+			{
+			TFieldType thisFieldType(thisPhoneFieldTypes.FieldType(ii));
+			for (TInt jj=0;jj<numTypesToMatch;++jj)
+				{
+				TFieldType thisFieldTypeToMatch(aTypesToMatch.FieldType(jj));
+				if (thisFieldType==thisFieldTypeToMatch)
+					{
+					if (--numTypesLeftToMatch<=0)
+						{
+						return thisPhoneField;
+						}
+
+					break;
+					}
+				}
+			}
+		}
+	}
+
+
+void CCntItemModifier::InsertTextFieldL(TFieldType aID, const TDesC& aStringOfStuff, CContactItem& aContactItem)
+	{
+	CContactItemField* itemFieldPtr   = CContactItemField::NewLC( KStorageTypeText, aID );
+	CContactTextField* textStoragePtr = itemFieldPtr->TextStorage(); // we don't have ownership here, hence no stack.
+
+	textStoragePtr->SetTextL( aStringOfStuff );
+	textStoragePtr = NULL; 
+
+	aContactItem.AddFieldL(*itemFieldPtr); // hand ownership over here
+	CleanupStack::Pop(itemFieldPtr); // and pop,
+	}
+
+
+
+
+
+
+#ifndef EKA2
+GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
+	{
+	return KErrNone;
+	}
+#endif