creator/engine/src/creator_phonebookwrapper.cpp
changeset 31 e7a04a6385be
child 48 da3ec8478e66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/src/creator_phonebookwrapper.cpp	Thu Jun 24 14:55:55 2010 +0300
@@ -0,0 +1,654 @@
+/*
+* Copyright (c) 2010 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 "engine.h"
+#include "enginewrapper.h"
+#include "creator_contactsetcache.h"
+
+#include "creator_phonebookwrapper.h" 
+#include "creator_traces.h"
+
+#include <bautils.h> 
+
+_LIT(KTempPath, "C:\\Data\\Creator\\");
+
+typedef struct {
+TInt iFieldCode;
+QString iDetail;
+QString iFieldContext;
+QString iFieldString;
+} QDetailFieldInfo;
+//static const TInt RND_TYPE_UNDEF = -99;
+QDetailFieldInfo CreatorPbkTextFields[] = {        
+        { (TInt)CCreatorPhonebookWrapper::EFirstName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldFirstName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ELastName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldLastName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ECompanyName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EJobTitle,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldTitle).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EPrefix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldPrefix).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ESuffix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldSuffix).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EMiddleName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldMiddleName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrStreetWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldStreet).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrLocalWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldLocality).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrRegionWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldRegion).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAddrCountryWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldCountry).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EMobilePhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeMobile).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ELandPhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeLandline).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ENote,(QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EDepartment,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldDepartment).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EAsstName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldAssistantName).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::ESpouse,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldSpouse).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EChildren,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldChildren).operator QString()},
+        { (TInt)CCreatorPhonebookWrapper::EGenLabel,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),  (QContactName::FieldCustomLabel).operator QString()}
+        };
+                  
+
+typedef struct{
+TInt iFieldCode;
+QString iFieldContext;
+QString iFieldString;
+}PhoneNumInfo;
+PhoneNumInfo CreatorPhoneNumberFields[] =
+    {
+    { CCreatorPhonebookWrapper::ELandPhoneGen,"", "Landline"},
+    { CCreatorPhonebookWrapper::ELandPhoneHome,"Home", "Landline"},
+    { CCreatorPhonebookWrapper::ELandPhoneWork,"Work", "Landline"},                        
+    { CCreatorPhonebookWrapper::EMobilePhoneGen,"","Mobile"},
+    { CCreatorPhonebookWrapper::EMobilePhoneHome,"Home","Mobile"},
+    { CCreatorPhonebookWrapper::EMobilePhoneWork,"Work", "Mobile"},
+    { CCreatorPhonebookWrapper::EFaxNumberGen, "", "Facsimile"},
+    { CCreatorPhonebookWrapper::EFaxNumberHome, "Home", "Facsimile"},
+    { CCreatorPhonebookWrapper::EFaxNumberWork, "Work", "Facsimile"},
+    { CCreatorPhonebookWrapper::EPagerNumber, "Work", "Pager"},
+    { CCreatorPhonebookWrapper::EVideoNumberGen, "", "Video"},
+    { CCreatorPhonebookWrapper::EVideoNumberHome, "Home", "Video"},
+    { CCreatorPhonebookWrapper::EVideoNumberWork, "Work", "Video"},   //{ "Home", "Voice" },//{ "Work", "Voice" },
+    { CCreatorPhonebookWrapper::EAsstPhone, "Work", "Assistant" },
+    { CCreatorPhonebookWrapper::ECarPhone, "Home",  "Car" }
+    };
+
+
+typedef struct{
+	TInt iFieldCode;
+	QString iFieldContext;
+}EmailInfo;
+EmailInfo CreatorEmailFields[] =
+	{
+    {CCreatorPhonebookWrapper::EEmailGen,""},
+    {CCreatorPhonebookWrapper::EEmailHome,(QContactDetail::ContextHome).operator QString()},
+    {CCreatorPhonebookWrapper::EEmailWork,(QContactDetail::ContextWork).operator QString()}
+    };
+
+typedef struct{
+	TInt iFieldCode;
+	QString iFieldContext;
+}UrlInfo;
+UrlInfo CreatorUrlFields[] =
+    {
+    {CCreatorPhonebookWrapper::EUrlGen,""},
+    {CCreatorPhonebookWrapper::EUrlHome,(QContactDetail::ContextHome).operator QString()},
+    {CCreatorPhonebookWrapper::EUrlWork,(QContactDetail::ContextWork).operator QString()}
+    };
+
+CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewL()
+    {
+    CCreatorPhonebookWrapper* self = CCreatorPhonebookWrapper::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewLC()
+    {
+    CCreatorPhonebookWrapper* self = new (ELeave) CCreatorPhonebookWrapper();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+CCreatorPhonebookWrapper::CCreatorPhonebookWrapper() 
+    {
+    }
+
+void CCreatorPhonebookWrapper::ConstructL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::ConstructL");
+
+    QT_TRYCATCH_LEAVING( iPhonebookAPI = new CCreatorPhonebookAPI() );
+	
+	}
+	
+
+CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper");
+	if( iPhonebookAPI )
+        {
+        delete iPhonebookAPI;
+        iPhonebookAPI = NULL;
+        }
+    }
+
+//----------------------------------------------------------------------------
+
+QList<QContactDetail> CCreatorPhonebookWrapper::CreateContactDetailsFromParameters( const TCreatorContactFields& aFields )
+	{
+	QList<QContactDetail> contDetList;
+	QString content;
+	HBufC* temp;
+	TInt arraySize = sizeof(CreatorPbkTextFields)/sizeof(QDetailFieldInfo);
+	for (TInt i = 0; i < arraySize; i++)
+		{
+	    TCreatorContactFields::const_iterator it = aFields.find(CreatorPbkTextFields[i].iFieldCode);
+		if( it != aFields.end() )
+			{
+		    temp = (*it).second;
+			content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+			QContactDetail contactDetail =  CreateContactDetail(contDetList, CreatorPbkTextFields[i].iDetail,CreatorPbkTextFields[i].iFieldContext,CreatorPbkTextFields[i].iFieldString, content );
+			AddFieldToList( contDetList, contactDetail );
+			}
+		
+		}
+	arraySize = sizeof(CreatorPhoneNumberFields)/sizeof(PhoneNumInfo);
+		for (TInt i = 0; i < arraySize; i++)
+			{
+			TCreatorContactFields::const_iterator it = aFields.find(CreatorPhoneNumberFields[i].iFieldCode);
+			if( it != aFields.end() )
+				{
+			    temp = (*it).second;
+				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactPhoneNumber::DefinitionName ,CreatorPhoneNumberFields[i].iFieldContext,CreatorPhoneNumberFields[i].iFieldString, content );
+				AddFieldToList( contDetList, contactDetail );
+				}
+			}
+		
+	arraySize = sizeof(CreatorEmailFields)/sizeof(EmailInfo);
+		for (TInt i = 0; i < arraySize; i++)
+			{
+			TCreatorContactFields::const_iterator it = aFields.find(CreatorEmailFields[i].iFieldCode);
+			if( it != aFields.end() )
+				{
+			    temp = (*it).second;
+				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactEmailAddress::DefinitionName ,CreatorEmailFields[i].iFieldContext,"", content );
+				AddFieldToList( contDetList, contactDetail );
+				}
+			}
+		
+	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
+			for (TInt i = 0; i < arraySize; i++)
+				{
+				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
+				if( it != aFields.end() )
+					{
+				    temp = (*it).second;
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}	
+	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
+			for (TInt i = 0; i < arraySize; i++)
+				{
+				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
+				if( it != aFields.end() )
+					{
+					temp = (*it).second;
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}
+			
+			TCreatorContactFields::const_iterator it = aFields.find(CCreatorPhonebookWrapper::EThumbnailPic);
+			if( it != aFields.end() )
+				{
+				temp = (*it).second;
+				if(temp)
+					{
+					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAvatar::DefinitionName ,"","", content );
+					AddFieldToList( contDetList, contactDetail );
+					}
+				}
+			it = aFields.find(CCreatorPhonebookWrapper::EAnniversary);
+				if( it != aFields.end() )
+					{
+					temp = (*it).second;
+					if(temp)
+						{
+						content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
+						QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAnniversary::DefinitionName ,"","", content );
+						AddFieldToList( contDetList, contactDetail );
+						}
+					}
+		
+	return contDetList;
+	}
+QContactDetail CCreatorPhonebookWrapper::CreateContactDetail( QList<QContactDetail>& aContactDetailList,QString aDetail, QString aFieldContext, QString aFieldString, QString aData )
+    {
+    QContactDetail contactDetail;
+        
+        if( aDetail == QContactPhoneNumber::DefinitionName)
+            {
+            QContactPhoneNumber phoneNumber;// = contactDetail;
+            if(!aFieldContext.isEmpty())
+            	{
+				phoneNumber.setContexts(aFieldContext);
+            	}
+            phoneNumber.setSubTypes(aFieldString);
+            //QString number = QString::fromUtf16(aData.Ptr(),aData.Length());
+            phoneNumber.setNumber(aData);
+            return phoneNumber;
+            }
+        else if( aDetail == QContactName::DefinitionName )          //--Contact NAME-----------------------------
+            {
+            QContactName contactName;
+            for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                {
+                if(aContactDetailList.at(i).definitionName() == QContactName::DefinitionName )
+                    {
+                    contactName = aContactDetailList.at(i);
+                    }
+                }
+            //QString name = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if(aFieldString == QContactName::FieldFirstName)
+                {
+                if(contactName.firstName().isEmpty())
+                    {
+                    contactName.setFirstName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldLastName)
+                {
+                if(contactName.lastName().isEmpty())
+                    {
+                    contactName.setLastName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldMiddleName)
+                {
+                if(contactName.middleName().isEmpty())
+                    {
+                    contactName.setMiddleName( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldPrefix)
+                {
+                if(contactName.prefix().isEmpty())
+                    {
+                    contactName.setPrefix( aData );
+                    }
+                }
+            else if(aFieldString == QContactName::FieldSuffix)
+                {
+                if(contactName.suffix().isEmpty())
+                    {
+                    contactName.setSuffix( aData );
+                    }
+                }
+            else        //QContactName::FieldCustomLabel:
+                {
+                if(contactName.customLabel().isEmpty())
+                    {
+                    contactName.setCustomLabel( aData );
+                    }
+                }
+            return contactName;
+            }
+        else if( aDetail == QContactOrganization::DefinitionName )          //--Contact Company-----------------------------
+            {
+            QContactOrganization contactCompany;
+            
+            for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                {
+                if(aContactDetailList.at(i).definitionName() == QContactOrganization::DefinitionName )
+                    {
+                    contactCompany = aContactDetailList.at(i);
+                    }
+                }
+            
+            //QString company = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if(aFieldString == QContactOrganization::FieldName)
+                {
+                if(contactCompany.name().isEmpty())
+                    {
+                    contactCompany.setName( aData );
+                    }
+                }
+            if(aFieldString == QContactOrganization::FieldTitle)
+                {
+                if(contactCompany.title().isEmpty())
+                    {
+                    contactCompany.setTitle( aData );
+                    }
+                }
+            if(aFieldString == QContactOrganization::FieldDepartment)
+                {
+                QStringList depList = contactCompany.department();
+                depList.append(aData);
+                contactCompany.setDepartment(depList);
+                }
+            if(aFieldString == QContactOrganization::FieldAssistantName)
+                {
+                if(contactCompany.assistantName().isEmpty())
+                    {
+                    contactCompany.setAssistantName( aData );
+                    }
+                }
+            return contactCompany;
+            }
+        else if( aDetail == QContactAddress::DefinitionName )           //--Contact Address-----------------------------
+                {
+                QContactAddress contactAddress;
+                
+                for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                    {
+                    if(aContactDetailList.at(i).definitionName() == QContactAddress::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
+                        {
+                        contactAddress = aContactDetailList.at(i);
+                        }
+                    }
+                if( !aFieldContext.isEmpty() )
+                    {
+					contactAddress.setContexts( aFieldContext );
+                    }
+                //QString address = QString::fromUtf16(aData.Ptr(),aData.Length());
+                if(aFieldString == QContactAddress::FieldStreet )
+                    {
+                    if( contactAddress.street().isEmpty() )
+                        {
+                        contactAddress.setStreet( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldLocality )
+                    {
+                    if( contactAddress.locality().isEmpty() )
+                        {
+                        contactAddress.setLocality( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldRegion )
+                    {
+                    if( contactAddress.region().isEmpty() )
+                        {
+                        contactAddress.setRegion( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldPostcode )
+                    {
+                    if( contactAddress.postcode().isEmpty() )
+                        {
+                        contactAddress.setPostcode( aData );
+                        }
+                    }
+                else if(aFieldString == QContactAddress::FieldCountry )
+                    {
+                    if( contactAddress.country().isEmpty() )
+                        {
+                        contactAddress.setCountry( aData );
+                        }
+                    }
+                else 
+                    {
+                    return contactDetail;
+                    }
+                return contactAddress;
+                }
+        else if( aDetail == QContactNote::DefinitionName )          //--Contact Note-----------------------------
+                    {
+                    QContactNote contactNote;
+                    //QString note = QString::fromUtf16(aData.Ptr(),aData.Length());
+                    contactNote.setNote(aData);
+                    return contactNote;
+                    }
+        else if( aDetail == QContactFamily::DefinitionName )            //--Contact Family-----------------------------
+                    {
+                    QContactFamily contactFamily;
+                    
+                    for(int i = 0 ; i < aContactDetailList.count() ; i++ ) //go through all contact details to check if there is already Contact Name to set other details
+                        {
+                        if(aContactDetailList.at(i).definitionName() == QContactFamily::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
+                            {
+                            contactFamily = aContactDetailList.at(i);
+                            }
+                        }
+                   
+                    //QString familyData = QString::fromUtf16(aData.Ptr(),aData.Length());
+                    if(aFieldString == QContactFamily::FieldSpouse )
+                        {
+                        if( contactFamily.spouse().isEmpty() )
+                            {
+                            contactFamily.setSpouse( aData );
+                            }
+                        }
+                    if(aFieldString == QContactFamily::FieldChildren )
+                        {
+                            QStringList children = contactFamily.children();
+                            children.append( aData );
+                            contactFamily.setChildren( children );
+                        }
+                    
+                    return contactFamily;
+                    }
+        
+        if( aDetail == QContactAvatar::DefinitionName)                      //--Contact Picture-----------------------------
+                {
+                QContactAvatar contactAvatar;
+                /*TBuf<KMaxFileName> srcPath;
+                aEngine->RandomPictureFileL(srcPath);
+                TBuf<KMaxFileName> destPath(KTempPath);
+                            
+                if(!BaflUtils::FolderExists( fs, destPath ))
+                    {
+                    BaflUtils::EnsurePathExistsL( fs, destPath );
+                    }
+                
+                TInt err=BaflUtils::CopyFile( fs, srcPath, destPath );
+
+                TParse temp;
+                temp.Set( srcPath,NULL,NULL );
+                destPath.Append(temp.NameAndExt());
+                
+                QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() );
+                */
+                QUrl imageUrl;
+                imageUrl.setUrl(aData);
+                contactAvatar.setImageUrl(imageUrl);
+
+                return contactAvatar;
+                }
+        if( aDetail == QContactAnniversary::DefinitionName) //--Anniversary------------------------------
+                {
+                QContactAnniversary contactAnniversary;
+                aData.replace(QChar('/'), QChar('-'));
+       		    QDate date = QDate::fromString(aData, "dd-MM-yyyy");
+                //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDateFuture );
+                //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
+                contactAnniversary.setOriginalDate( date );
+                return contactAnniversary;
+                }
+        if( aDetail == QContactEmailAddress::DefinitionName) //--Email------------------------------------
+            {
+            QContactEmailAddress email;
+            //QString emailAddr = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if( !aFieldContext.isEmpty() )
+            	{
+				email.setContexts( aFieldContext );
+            	}
+            email.setEmailAddress( aData );
+            return email;
+            }
+        if( aDetail == QContactUrl::DefinitionName )    //--Url-------------------------------------------
+            {
+            QContactUrl url;
+            //QString urlStr = QString::fromUtf16(aData.Ptr(),aData.Length());
+            if( !aFieldContext.isEmpty() )
+                {
+				url.setContexts( aFieldContext );
+                }
+            url.setUrl(aData);
+            return url;
+            }
+        if( aDetail == QContactBirthday::DefinitionName )   //--Birthday-----------------------------------
+            {
+            QContactBirthday birthday;
+            QDate date = QDate::fromString(aData);
+            //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDatePast );
+            //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
+            birthday.setDate( date );
+            return birthday;
+            }
+                
+        return contactDetail;
+    }
+
+void CCreatorPhonebookWrapper::AddFieldToList( QList<QContactDetail>& aDetailList, QContactDetail aDetail)
+    {
+     bool replace = false;
+     for(int i = 0 ; i< aDetailList.count() ; i++) //go through
+          {
+           if( !aDetail.isEmpty() && aDetail.definitionName() == aDetailList.at(i).definitionName() 
+        		   && aDetail.definitionName() != QContactPhoneNumber::DefinitionName 
+        		   && aDetail.definitionName() != QContactEmailAddress::DefinitionName
+        		   && aDetail.definitionName() != QContactUrl::DefinitionName )
+               {
+               QString context = aDetail.value(QContactDetail::FieldContext);
+               bool isContextEmpty = context.isEmpty();
+               if( isContextEmpty ||  ( aDetail.value(QContactDetail::FieldContext) == aDetailList.at(i).value(QContactDetail::FieldContext)) )
+                   {
+                   //replace
+                   aDetailList.replace(i,aDetail);
+                   replace = true;
+                   }
+               }
+          }
+          if(!replace)
+             {
+             if(!aDetail.isEmpty())
+                {
+                aDetailList.append(aDetail);
+                }
+             }
+      
+    }
+
+TUint32 CCreatorPhonebookWrapper::CreateContactEntryL(const TCreatorContactFields& aFields)
+    {
+	QList<QContactDetail> list = CreateContactDetailsFromParameters( aFields );
+	
+	return iPhonebookAPI->saveContact( list );
+    }
+
+
+//----------------------------------------------------------------------------
+
+
+
+//----------------------------------------------------------------------------
+
+void CCreatorPhonebookWrapper::DeleteAllL()
+    {
+	iPhonebookAPI->deleteAllContacts();
+    }
+
+//----------------------------------------------------------------------------
+void CCreatorPhonebookWrapper::DeleteAllGroupsL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::DeleteAllGroupsL");
+    
+    iPhonebookAPI->deleteAllContacts( QContactType::TypeGroup );
+
+    }
+
+//----------------------------------------------------------------------------
+void CCreatorPhonebookWrapper::DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid )
+    {
+	QList<QContactLocalId> contacts; 
+	for( TInt i = 0; i < aContactsToDelete.Count(); ++i )
+	    {
+	    QContact contact = iPhonebookAPI->contact( QContactLocalId( aContactsToDelete[i] ) );
+	    if( (contact.type() == QContactType::TypeGroup && aStoreUid == KUidDictionaryUidContactGroups ) ||  (contact.type() != QContactType::TypeGroup && aStoreUid != KUidDictionaryUidContactGroups) )
+            {
+            contacts.append( QContactLocalId( aContactsToDelete[i] ) );
+            }
+	    }
+    QMap<int, QContactManager::Error> errorMap;
+	iPhonebookAPI->deleteContacts( contacts );
+    }
+
+//----------------------------------------------------------------------------
+TBool CCreatorPhonebookWrapper::HasOtherThanGroupsL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::HasOtherThanGroupsL");
+    TBool result( EFalse );
+    return result;
+    }
+
+
+TUint32 CCreatorPhonebookWrapper::CreateGroupEntryL( HBufC* aGroupName )
+    {
+	TUint32 id = 0;
+	QString groupName = QString::fromUtf16( aGroupName->Des().Ptr(), aGroupName->Length() );
+	
+	id = iPhonebookAPI->createGroup( groupName );
+	
+	return id; 
+    }
+TInt CCreatorPhonebookWrapper::NumberOfContacts()
+	{
+	//return all stored contacts
+	return iPhonebookAPI->numberOfContacts();
+	}
+
+TInt CCreatorPhonebookWrapper::AddContactToGroup( TUint32 aGroupId, TUint32 aContact )
+	{
+	QContactLocalId group = QContactLocalId(aGroupId);
+	QContactLocalId contact = QContactLocalId(aContact);
+	
+	TInt ret = iPhonebookAPI->addContactToGroup(group, contact);
+
+	return ret;
+	}
+TInt CCreatorPhonebookWrapper::AddToGroup( TUint32 aGroupId, TInt aAmount )
+	{
+	QContactLocalId group = QContactLocalId(aGroupId);
+	TInt ret = iPhonebookAPI->addToGroup( group, (int) aAmount );
+	return ret;
+	}
+
+
+//----------------------------------------------------------------------------
+
+TInt CCreatorPhonebookWrapper::CreateSubscribedContactEntryL()
+    {
+    LOGSTRING("Creator: CCreatorPhonebookWrapper::CreateSubscribedContactEntryL");
+
+    return KErrNotSupported;
+    }
+