creator/engine/src/creator_phonebookwrapper.cpp
branchRCL_3
changeset 21 b3cee849fa46
equal deleted inserted replaced
20:48060abbbeaf 21:b3cee849fa46
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "engine.h"
       
    20 #include "enginewrapper.h"
       
    21 #include "creator_contactsetcache.h"
       
    22 
       
    23 #include "creator_phonebookwrapper.h" 
       
    24 #include "creator_traces.h"
       
    25 
       
    26 #include <bautils.h> 
       
    27 
       
    28 _LIT(KTempPath, "C:\\Data\\Creator\\");
       
    29 
       
    30 typedef struct {
       
    31 TInt iFieldCode;
       
    32 QString iDetail;
       
    33 QString iFieldContext;
       
    34 QString iFieldString;
       
    35 } QDetailFieldInfo;
       
    36 //static const TInt RND_TYPE_UNDEF = -99;
       
    37 QDetailFieldInfo CreatorPbkTextFields[] = {        
       
    38         { (TInt)CCreatorPhonebookWrapper::EFirstName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldFirstName).operator QString()},
       
    39         { (TInt)CCreatorPhonebookWrapper::ELastName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldLastName).operator QString()},
       
    40         { (TInt)CCreatorPhonebookWrapper::ECompanyName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldName).operator QString()},
       
    41         { (TInt)CCreatorPhonebookWrapper::EJobTitle,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldTitle).operator QString()},
       
    42         { (TInt)CCreatorPhonebookWrapper::EPrefix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldPrefix).operator QString()},
       
    43         { (TInt)CCreatorPhonebookWrapper::ESuffix,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldSuffix).operator QString()},
       
    44         { (TInt)CCreatorPhonebookWrapper::EMiddleName,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactName::FieldMiddleName).operator QString()},
       
    45         { (TInt)CCreatorPhonebookWrapper::EAddrStreetHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldStreet).operator QString()},
       
    46         { (TInt)CCreatorPhonebookWrapper::EAddrLocalHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldLocality).operator QString()},
       
    47         { (TInt)CCreatorPhonebookWrapper::EAddrRegionHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldRegion).operator QString()},
       
    48         { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
       
    49         { (TInt)CCreatorPhonebookWrapper::EAddrCountryHome,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactAddress::FieldCountry).operator QString()},
       
    50         { (TInt)CCreatorPhonebookWrapper::EAddrStreetGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldStreet).operator QString()},
       
    51         { (TInt)CCreatorPhonebookWrapper::EAddrLocalGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldLocality).operator QString()},
       
    52         { (TInt)CCreatorPhonebookWrapper::EAddrRegionGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldRegion).operator QString()},
       
    53         { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldPostcode).operator QString()},
       
    54         { (TInt)CCreatorPhonebookWrapper::EAddrCountryGen,(QContactAddress::DefinitionName).operator QString(), "", (QContactAddress::FieldCountry).operator QString()},
       
    55         { (TInt)CCreatorPhonebookWrapper::EAddrStreetWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldStreet).operator QString()},
       
    56         { (TInt)CCreatorPhonebookWrapper::EAddrLocalWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldLocality).operator QString()},
       
    57         { (TInt)CCreatorPhonebookWrapper::EAddrRegionWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldRegion).operator QString()},
       
    58         { (TInt)CCreatorPhonebookWrapper::EAddrPostCodeWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldPostcode).operator QString()},
       
    59         { (TInt)CCreatorPhonebookWrapper::EAddrCountryWork,(QContactAddress::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactAddress::FieldCountry).operator QString()},
       
    60         { (TInt)CCreatorPhonebookWrapper::EMobilePhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeMobile).operator QString()},
       
    61         { (TInt)CCreatorPhonebookWrapper::ELandPhoneWork,(QContactPhoneNumber::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactPhoneNumber::SubTypeLandline).operator QString()},
       
    62         { (TInt)CCreatorPhonebookWrapper::ENote,(QContactNote::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactNote::FieldNote).operator QString()},
       
    63         { (TInt)CCreatorPhonebookWrapper::EDepartment,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldDepartment).operator QString()},
       
    64         { (TInt)CCreatorPhonebookWrapper::EAsstName,(QContactOrganization::DefinitionName).operator QString(), (QContactDetail::ContextWork).operator QString(), (QContactOrganization::FieldAssistantName).operator QString()},
       
    65         { (TInt)CCreatorPhonebookWrapper::ESpouse,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldSpouse).operator QString()},
       
    66         { (TInt)CCreatorPhonebookWrapper::EChildren,(QContactFamily::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(), (QContactFamily::FieldChildren).operator QString()},
       
    67         { (TInt)CCreatorPhonebookWrapper::EGenLabel,(QContactName::DefinitionName).operator QString(), (QContactDetail::ContextHome).operator QString(),  (QContactName::FieldCustomLabel).operator QString()}
       
    68         };
       
    69                   
       
    70 
       
    71 typedef struct{
       
    72 TInt iFieldCode;
       
    73 QString iFieldContext;
       
    74 QString iFieldString;
       
    75 }PhoneNumInfo;
       
    76 PhoneNumInfo CreatorPhoneNumberFields[] =
       
    77     {
       
    78     { CCreatorPhonebookWrapper::ELandPhoneGen,"", "Landline"},
       
    79     { CCreatorPhonebookWrapper::ELandPhoneHome,"Home", "Landline"},
       
    80     { CCreatorPhonebookWrapper::ELandPhoneWork,"Work", "Landline"},                        
       
    81     { CCreatorPhonebookWrapper::EMobilePhoneGen,"","Mobile"},
       
    82     { CCreatorPhonebookWrapper::EMobilePhoneHome,"Home","Mobile"},
       
    83     { CCreatorPhonebookWrapper::EMobilePhoneWork,"Work", "Mobile"},
       
    84     { CCreatorPhonebookWrapper::EFaxNumberGen, "", "Facsimile"},
       
    85     { CCreatorPhonebookWrapper::EFaxNumberHome, "Home", "Facsimile"},
       
    86     { CCreatorPhonebookWrapper::EFaxNumberWork, "Work", "Facsimile"},
       
    87     { CCreatorPhonebookWrapper::EPagerNumber, "Work", "Pager"},
       
    88     { CCreatorPhonebookWrapper::EVideoNumberGen, "", "Video"},
       
    89     { CCreatorPhonebookWrapper::EVideoNumberHome, "Home", "Video"},
       
    90     { CCreatorPhonebookWrapper::EVideoNumberWork, "Work", "Video"},   //{ "Home", "Voice" },//{ "Work", "Voice" },
       
    91     { CCreatorPhonebookWrapper::EAsstPhone, "Work", "Assistant" },
       
    92     { CCreatorPhonebookWrapper::ECarPhone, "Home",  "Car" }
       
    93     };
       
    94 
       
    95 
       
    96 typedef struct{
       
    97 	TInt iFieldCode;
       
    98 	QString iFieldContext;
       
    99 }EmailInfo;
       
   100 EmailInfo CreatorEmailFields[] =
       
   101 	{
       
   102     {CCreatorPhonebookWrapper::EEmailGen,""},
       
   103     {CCreatorPhonebookWrapper::EEmailHome,(QContactDetail::ContextHome).operator QString()},
       
   104     {CCreatorPhonebookWrapper::EEmailWork,(QContactDetail::ContextWork).operator QString()}
       
   105     };
       
   106 
       
   107 typedef struct{
       
   108 	TInt iFieldCode;
       
   109 	QString iFieldContext;
       
   110 }UrlInfo;
       
   111 UrlInfo CreatorUrlFields[] =
       
   112     {
       
   113     {CCreatorPhonebookWrapper::EUrlGen,""},
       
   114     {CCreatorPhonebookWrapper::EUrlHome,(QContactDetail::ContextHome).operator QString()},
       
   115     {CCreatorPhonebookWrapper::EUrlWork,(QContactDetail::ContextWork).operator QString()}
       
   116     };
       
   117 
       
   118 CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewL()
       
   119     {
       
   120     CCreatorPhonebookWrapper* self = CCreatorPhonebookWrapper::NewLC();
       
   121     CleanupStack::Pop(self);
       
   122     return self;
       
   123     }
       
   124 
       
   125 CCreatorPhonebookWrapper* CCreatorPhonebookWrapper::NewLC()
       
   126     {
       
   127     CCreatorPhonebookWrapper* self = new (ELeave) CCreatorPhonebookWrapper();
       
   128     CleanupStack::PushL(self);
       
   129     self->ConstructL();
       
   130     return self;
       
   131     }
       
   132 
       
   133 
       
   134 CCreatorPhonebookWrapper::CCreatorPhonebookWrapper() 
       
   135     {
       
   136     }
       
   137 
       
   138 void CCreatorPhonebookWrapper::ConstructL()
       
   139     {
       
   140     LOGSTRING("Creator: CCreatorPhonebookWrapper::ConstructL");
       
   141 
       
   142     QT_TRYCATCH_LEAVING( iPhonebookAPI = new CCreatorPhonebookAPI() );
       
   143 	
       
   144 	}
       
   145 	
       
   146 
       
   147 CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper()
       
   148     {
       
   149     LOGSTRING("Creator: CCreatorPhonebookWrapper::~CCreatorPhonebookWrapper");
       
   150 	if( iPhonebookAPI )
       
   151         {
       
   152         delete iPhonebookAPI;
       
   153         iPhonebookAPI = NULL;
       
   154         }
       
   155     }
       
   156 
       
   157 //----------------------------------------------------------------------------
       
   158 
       
   159 QList<QContactDetail> CCreatorPhonebookWrapper::CreateContactDetailsFromParameters( const TCreatorContactFields& aFields )
       
   160 	{
       
   161 	QList<QContactDetail> contDetList;
       
   162 	QString content;
       
   163 	HBufC* temp;
       
   164 	TInt arraySize = sizeof(CreatorPbkTextFields)/sizeof(QDetailFieldInfo);
       
   165 	for (TInt i = 0; i < arraySize; i++)
       
   166 		{
       
   167 	    TCreatorContactFields::const_iterator it = aFields.find(CreatorPbkTextFields[i].iFieldCode);
       
   168 		if( it != aFields.end() )
       
   169 			{
       
   170 		    temp = (*it).second;
       
   171 			content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   172 			QContactDetail contactDetail =  CreateContactDetail(contDetList, CreatorPbkTextFields[i].iDetail,CreatorPbkTextFields[i].iFieldContext,CreatorPbkTextFields[i].iFieldString, content );
       
   173 			AddFieldToList( contDetList, contactDetail );
       
   174 			}
       
   175 		
       
   176 		}
       
   177 	arraySize = sizeof(CreatorPhoneNumberFields)/sizeof(PhoneNumInfo);
       
   178 		for (TInt i = 0; i < arraySize; i++)
       
   179 			{
       
   180 			TCreatorContactFields::const_iterator it = aFields.find(CreatorPhoneNumberFields[i].iFieldCode);
       
   181 			if( it != aFields.end() )
       
   182 				{
       
   183 			    temp = (*it).second;
       
   184 				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   185 				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactPhoneNumber::DefinitionName ,CreatorPhoneNumberFields[i].iFieldContext,CreatorPhoneNumberFields[i].iFieldString, content );
       
   186 				AddFieldToList( contDetList, contactDetail );
       
   187 				}
       
   188 			}
       
   189 		
       
   190 	arraySize = sizeof(CreatorEmailFields)/sizeof(EmailInfo);
       
   191 		for (TInt i = 0; i < arraySize; i++)
       
   192 			{
       
   193 			TCreatorContactFields::const_iterator it = aFields.find(CreatorEmailFields[i].iFieldCode);
       
   194 			if( it != aFields.end() )
       
   195 				{
       
   196 			    temp = (*it).second;
       
   197 				content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   198 				QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactEmailAddress::DefinitionName ,CreatorEmailFields[i].iFieldContext,"", content );
       
   199 				AddFieldToList( contDetList, contactDetail );
       
   200 				}
       
   201 			}
       
   202 		
       
   203 	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
       
   204 			for (TInt i = 0; i < arraySize; i++)
       
   205 				{
       
   206 				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
       
   207 				if( it != aFields.end() )
       
   208 					{
       
   209 				    temp = (*it).second;
       
   210 					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   211 					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
       
   212 					AddFieldToList( contDetList, contactDetail );
       
   213 					}
       
   214 				}	
       
   215 	arraySize = sizeof(CreatorUrlFields)/sizeof(UrlInfo);
       
   216 			for (TInt i = 0; i < arraySize; i++)
       
   217 				{
       
   218 				TCreatorContactFields::const_iterator it = aFields.find(CreatorUrlFields[i].iFieldCode);
       
   219 				if( it != aFields.end() )
       
   220 					{
       
   221 					temp = (*it).second;
       
   222 					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   223 					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactUrl::DefinitionName ,CreatorUrlFields[i].iFieldContext,"", content );
       
   224 					AddFieldToList( contDetList, contactDetail );
       
   225 					}
       
   226 				}
       
   227 			
       
   228 			TCreatorContactFields::const_iterator it = aFields.find(CCreatorPhonebookWrapper::EThumbnailPic);
       
   229 			if( it != aFields.end() )
       
   230 				{
       
   231 				temp = (*it).second;
       
   232 				if(temp)
       
   233 					{
       
   234 					content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   235 					QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAvatar::DefinitionName ,"","", content );
       
   236 					AddFieldToList( contDetList, contactDetail );
       
   237 					}
       
   238 				}
       
   239 			it = aFields.find(CCreatorPhonebookWrapper::EAnniversary);
       
   240 				if( it != aFields.end() )
       
   241 					{
       
   242 					temp = (*it).second;
       
   243 					if(temp)
       
   244 						{
       
   245 						content = QString::fromUtf16( temp->Des().Ptr(), temp->Length() );
       
   246 						QContactDetail contactDetail =  CreateContactDetail(contDetList, QContactAnniversary::DefinitionName ,"","", content );
       
   247 						AddFieldToList( contDetList, contactDetail );
       
   248 						}
       
   249 					}
       
   250 		
       
   251 	return contDetList;
       
   252 	}
       
   253 QContactDetail CCreatorPhonebookWrapper::CreateContactDetail( QList<QContactDetail>& aContactDetailList,QString aDetail, QString aFieldContext, QString aFieldString, QString aData )
       
   254     {
       
   255     QContactDetail contactDetail;
       
   256         
       
   257         if( aDetail == QContactPhoneNumber::DefinitionName)
       
   258             {
       
   259             QContactPhoneNumber phoneNumber;// = contactDetail;
       
   260             if(!aFieldContext.isEmpty())
       
   261             	{
       
   262 				phoneNumber.setContexts(aFieldContext);
       
   263             	}
       
   264             phoneNumber.setSubTypes(aFieldString);
       
   265             //QString number = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   266             phoneNumber.setNumber(aData);
       
   267             return phoneNumber;
       
   268             }
       
   269         else if( aDetail == QContactName::DefinitionName )          //--Contact NAME-----------------------------
       
   270             {
       
   271             QContactName contactName;
       
   272             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
       
   273                 {
       
   274                 if(aContactDetailList.at(i).definitionName() == QContactName::DefinitionName )
       
   275                     {
       
   276                     contactName = aContactDetailList.at(i);
       
   277                     }
       
   278                 }
       
   279             //QString name = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   280             if(aFieldString == QContactName::FieldFirstName)
       
   281                 {
       
   282                 if(contactName.firstName().isEmpty())
       
   283                     {
       
   284                     contactName.setFirstName( aData );
       
   285                     }
       
   286                 }
       
   287             else if(aFieldString == QContactName::FieldLastName)
       
   288                 {
       
   289                 if(contactName.lastName().isEmpty())
       
   290                     {
       
   291                     contactName.setLastName( aData );
       
   292                     }
       
   293                 }
       
   294             else if(aFieldString == QContactName::FieldMiddleName)
       
   295                 {
       
   296                 if(contactName.middleName().isEmpty())
       
   297                     {
       
   298                     contactName.setMiddleName( aData );
       
   299                     }
       
   300                 }
       
   301             else if(aFieldString == QContactName::FieldPrefix)
       
   302                 {
       
   303                 if(contactName.prefix().isEmpty())
       
   304                     {
       
   305                     contactName.setPrefix( aData );
       
   306                     }
       
   307                 }
       
   308             else if(aFieldString == QContactName::FieldSuffix)
       
   309                 {
       
   310                 if(contactName.suffix().isEmpty())
       
   311                     {
       
   312                     contactName.setSuffix( aData );
       
   313                     }
       
   314                 }
       
   315             else        //QContactName::FieldCustomLabel:
       
   316                 {
       
   317                 if(contactName.customLabel().isEmpty())
       
   318                     {
       
   319                     contactName.setCustomLabel( aData );
       
   320                     }
       
   321                 }
       
   322             return contactName;
       
   323             }
       
   324         else if( aDetail == QContactOrganization::DefinitionName )          //--Contact Company-----------------------------
       
   325             {
       
   326             QContactOrganization contactCompany;
       
   327             
       
   328             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
       
   329                 {
       
   330                 if(aContactDetailList.at(i).definitionName() == QContactOrganization::DefinitionName )
       
   331                     {
       
   332                     contactCompany = aContactDetailList.at(i);
       
   333                     }
       
   334                 }
       
   335             
       
   336             //QString company = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   337             if(aFieldString == QContactOrganization::FieldName)
       
   338                 {
       
   339                 if(contactCompany.name().isEmpty())
       
   340                     {
       
   341                     contactCompany.setName( aData );
       
   342                     }
       
   343                 }
       
   344             if(aFieldString == QContactOrganization::FieldTitle)
       
   345                 {
       
   346                 if(contactCompany.title().isEmpty())
       
   347                     {
       
   348                     contactCompany.setTitle( aData );
       
   349                     }
       
   350                 }
       
   351             if(aFieldString == QContactOrganization::FieldDepartment)
       
   352                 {
       
   353                 QStringList depList = contactCompany.department();
       
   354                 depList.append(aData);
       
   355                 contactCompany.setDepartment(depList);
       
   356                 }
       
   357             if(aFieldString == QContactOrganization::FieldAssistantName)
       
   358                 {
       
   359                 if(contactCompany.assistantName().isEmpty())
       
   360                     {
       
   361                     contactCompany.setAssistantName( aData );
       
   362                     }
       
   363                 }
       
   364             return contactCompany;
       
   365             }
       
   366         else if( aDetail == QContactAddress::DefinitionName )           //--Contact Address-----------------------------
       
   367                 {
       
   368                 QContactAddress contactAddress;
       
   369                 
       
   370                 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
       
   371                     {
       
   372                     if(aContactDetailList.at(i).definitionName() == QContactAddress::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
       
   373                         {
       
   374                         contactAddress = aContactDetailList.at(i);
       
   375                         }
       
   376                     }
       
   377                 if( !aFieldContext.isEmpty() )
       
   378                     {
       
   379 					contactAddress.setContexts( aFieldContext );
       
   380                     }
       
   381                 //QString address = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   382                 if(aFieldString == QContactAddress::FieldStreet )
       
   383                     {
       
   384                     if( contactAddress.street().isEmpty() )
       
   385                         {
       
   386                         contactAddress.setStreet( aData );
       
   387                         }
       
   388                     }
       
   389                 else if(aFieldString == QContactAddress::FieldLocality )
       
   390                     {
       
   391                     if( contactAddress.locality().isEmpty() )
       
   392                         {
       
   393                         contactAddress.setLocality( aData );
       
   394                         }
       
   395                     }
       
   396                 else if(aFieldString == QContactAddress::FieldRegion )
       
   397                     {
       
   398                     if( contactAddress.region().isEmpty() )
       
   399                         {
       
   400                         contactAddress.setRegion( aData );
       
   401                         }
       
   402                     }
       
   403                 else if(aFieldString == QContactAddress::FieldPostcode )
       
   404                     {
       
   405                     if( contactAddress.postcode().isEmpty() )
       
   406                         {
       
   407                         contactAddress.setPostcode( aData );
       
   408                         }
       
   409                     }
       
   410                 else if(aFieldString == QContactAddress::FieldCountry )
       
   411                     {
       
   412                     if( contactAddress.country().isEmpty() )
       
   413                         {
       
   414                         contactAddress.setCountry( aData );
       
   415                         }
       
   416                     }
       
   417                 else 
       
   418                     {
       
   419                     return contactDetail;
       
   420                     }
       
   421                 return contactAddress;
       
   422                 }
       
   423         else if( aDetail == QContactNote::DefinitionName )          //--Contact Note-----------------------------
       
   424                     {
       
   425                     QContactNote contactNote;
       
   426                     //QString note = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   427                     contactNote.setNote(aData);
       
   428                     return contactNote;
       
   429                     }
       
   430         else if( aDetail == QContactFamily::DefinitionName )            //--Contact Family-----------------------------
       
   431                     {
       
   432                     QContactFamily contactFamily;
       
   433                     
       
   434                     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
       
   435                         {
       
   436                         if(aContactDetailList.at(i).definitionName() == QContactFamily::DefinitionName && aContactDetailList.at(i).value(QContactDetail::FieldContext) == aFieldContext )
       
   437                             {
       
   438                             contactFamily = aContactDetailList.at(i);
       
   439                             }
       
   440                         }
       
   441                    
       
   442                     //QString familyData = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   443                     if(aFieldString == QContactFamily::FieldSpouse )
       
   444                         {
       
   445                         if( contactFamily.spouse().isEmpty() )
       
   446                             {
       
   447                             contactFamily.setSpouse( aData );
       
   448                             }
       
   449                         }
       
   450                     if(aFieldString == QContactFamily::FieldChildren )
       
   451                         {
       
   452                             QStringList children = contactFamily.children();
       
   453                             children.append( aData );
       
   454                             contactFamily.setChildren( children );
       
   455                         }
       
   456                     
       
   457                     return contactFamily;
       
   458                     }
       
   459         
       
   460         if( aDetail == QContactAvatar::DefinitionName)                      //--Contact Picture-----------------------------
       
   461                 {
       
   462                 QContactAvatar contactAvatar;
       
   463                 /*TBuf<KMaxFileName> srcPath;
       
   464                 aEngine->RandomPictureFileL(srcPath);
       
   465                 TBuf<KMaxFileName> destPath(KTempPath);
       
   466                             
       
   467                 if(!BaflUtils::FolderExists( fs, destPath ))
       
   468                     {
       
   469                     BaflUtils::EnsurePathExistsL( fs, destPath );
       
   470                     }
       
   471                 
       
   472                 TInt err=BaflUtils::CopyFile( fs, srcPath, destPath );
       
   473 
       
   474                 TParse temp;
       
   475                 temp.Set( srcPath,NULL,NULL );
       
   476                 destPath.Append(temp.NameAndExt());
       
   477                 
       
   478                 QString avatarFile = QString::fromUtf16( destPath.Ptr(),destPath.Length() );
       
   479                 */
       
   480                 QUrl imageUrl;
       
   481                 imageUrl.setUrl(aData);
       
   482                 contactAvatar.setImageUrl(imageUrl);
       
   483 
       
   484                 return contactAvatar;
       
   485                 }
       
   486         if( aDetail == QContactAnniversary::DefinitionName) //--Anniversary------------------------------
       
   487                 {
       
   488                 QContactAnniversary contactAnniversary;
       
   489                 aData.replace(QChar('/'), QChar('-'));
       
   490        		    QDate date = QDate::fromString(aData, "dd-MM-yyyy");
       
   491                 //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDateFuture );
       
   492                 //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
       
   493                 contactAnniversary.setOriginalDate( date );
       
   494                 return contactAnniversary;
       
   495                 }
       
   496         if( aDetail == QContactEmailAddress::DefinitionName) //--Email------------------------------------
       
   497             {
       
   498             QContactEmailAddress email;
       
   499             //QString emailAddr = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   500             if( !aFieldContext.isEmpty() )
       
   501             	{
       
   502 				email.setContexts( aFieldContext );
       
   503             	}
       
   504             email.setEmailAddress( aData );
       
   505             return email;
       
   506             }
       
   507         if( aDetail == QContactUrl::DefinitionName )    //--Url-------------------------------------------
       
   508             {
       
   509             QContactUrl url;
       
   510             //QString urlStr = QString::fromUtf16(aData.Ptr(),aData.Length());
       
   511             if( !aFieldContext.isEmpty() )
       
   512                 {
       
   513 				url.setContexts( aFieldContext );
       
   514                 }
       
   515             url.setUrl(aData);
       
   516             return url;
       
   517             }
       
   518         if( aDetail == QContactBirthday::DefinitionName )   //--Birthday-----------------------------------
       
   519             {
       
   520             QContactBirthday birthday;
       
   521             QDate date = QDate::fromString(aData);
       
   522             //TTime datetime = aEngine->RandomDate( CCreatorEngine::EDatePast );
       
   523             //date.setDate( datetime.DateTime().Year(),(int) (datetime.DateTime().Month()+1), datetime.DateTime().Day() );
       
   524             birthday.setDate( date );
       
   525             return birthday;
       
   526             }
       
   527                 
       
   528         return contactDetail;
       
   529     }
       
   530 
       
   531 void CCreatorPhonebookWrapper::AddFieldToList( QList<QContactDetail>& aDetailList, QContactDetail aDetail)
       
   532     {
       
   533      bool replace = false;
       
   534      for(int i = 0 ; i< aDetailList.count() ; i++) //go through
       
   535           {
       
   536            if( !aDetail.isEmpty() && aDetail.definitionName() == aDetailList.at(i).definitionName() 
       
   537         		   && aDetail.definitionName() != QContactPhoneNumber::DefinitionName 
       
   538         		   && aDetail.definitionName() != QContactEmailAddress::DefinitionName
       
   539         		   && aDetail.definitionName() != QContactUrl::DefinitionName )
       
   540                {
       
   541                QString context = aDetail.value(QContactDetail::FieldContext);
       
   542                bool isContextEmpty = context.isEmpty();
       
   543                if( isContextEmpty ||  ( aDetail.value(QContactDetail::FieldContext) == aDetailList.at(i).value(QContactDetail::FieldContext)) )
       
   544                    {
       
   545                    //replace
       
   546                    aDetailList.replace(i,aDetail);
       
   547                    replace = true;
       
   548                    }
       
   549                }
       
   550           }
       
   551           if(!replace)
       
   552              {
       
   553              if(!aDetail.isEmpty())
       
   554                 {
       
   555                 aDetailList.append(aDetail);
       
   556                 }
       
   557              }
       
   558       
       
   559     }
       
   560 
       
   561 TUint32 CCreatorPhonebookWrapper::CreateContactEntryL(const TCreatorContactFields& aFields)
       
   562     {
       
   563 	QList<QContactDetail> list = CreateContactDetailsFromParameters( aFields );
       
   564 	
       
   565 	return iPhonebookAPI->saveContact( list );
       
   566     }
       
   567 
       
   568 
       
   569 //----------------------------------------------------------------------------
       
   570 
       
   571 
       
   572 
       
   573 //----------------------------------------------------------------------------
       
   574 
       
   575 void CCreatorPhonebookWrapper::DeleteAllL()
       
   576     {
       
   577 	iPhonebookAPI->deleteAllContacts();
       
   578     }
       
   579 
       
   580 //----------------------------------------------------------------------------
       
   581 void CCreatorPhonebookWrapper::DeleteAllGroupsL()
       
   582     {
       
   583     LOGSTRING("Creator: CCreatorPhonebookWrapper::DeleteAllGroupsL");
       
   584     
       
   585     iPhonebookAPI->deleteAllContacts( QContactType::TypeGroup );
       
   586 
       
   587     }
       
   588 
       
   589 //----------------------------------------------------------------------------
       
   590 void CCreatorPhonebookWrapper::DeleteContactsL( RArray<TUint32>& aContactsToDelete, TUid aStoreUid )
       
   591     {
       
   592 	QList<QContactLocalId> contacts; 
       
   593 	for( TInt i = 0; i < aContactsToDelete.Count(); ++i )
       
   594 	    {
       
   595 	    QContact contact = iPhonebookAPI->contact( QContactLocalId( aContactsToDelete[i] ) );
       
   596 	    if( (contact.type() == QContactType::TypeGroup && aStoreUid == KUidDictionaryUidContactGroups ) ||  (contact.type() != QContactType::TypeGroup && aStoreUid != KUidDictionaryUidContactGroups) )
       
   597             {
       
   598             contacts.append( QContactLocalId( aContactsToDelete[i] ) );
       
   599             }
       
   600 	    }
       
   601     QMap<int, QContactManager::Error> errorMap;
       
   602 	iPhonebookAPI->deleteContacts( contacts );
       
   603     }
       
   604 
       
   605 //----------------------------------------------------------------------------
       
   606 TBool CCreatorPhonebookWrapper::HasOtherThanGroupsL()
       
   607     {
       
   608     LOGSTRING("Creator: CCreatorPhonebookWrapper::HasOtherThanGroupsL");
       
   609     TBool result( EFalse );
       
   610     return result;
       
   611     }
       
   612 
       
   613 
       
   614 TUint32 CCreatorPhonebookWrapper::CreateGroupEntryL( HBufC* aGroupName )
       
   615     {
       
   616 	TUint32 id = 0;
       
   617 	QString groupName = QString::fromUtf16( aGroupName->Des().Ptr(), aGroupName->Length() );
       
   618 	
       
   619 	id = iPhonebookAPI->createGroup( groupName );
       
   620 	
       
   621 	return id; 
       
   622     }
       
   623 TInt CCreatorPhonebookWrapper::NumberOfContacts()
       
   624 	{
       
   625 	//return all stored contacts
       
   626 	return iPhonebookAPI->numberOfContacts();
       
   627 	}
       
   628 
       
   629 TInt CCreatorPhonebookWrapper::AddContactToGroup( TUint32 aGroupId, TUint32 aContact )
       
   630 	{
       
   631 	QContactLocalId group = QContactLocalId(aGroupId);
       
   632 	QContactLocalId contact = QContactLocalId(aContact);
       
   633 	
       
   634 	TInt ret = iPhonebookAPI->addContactToGroup(group, contact);
       
   635 
       
   636 	return ret;
       
   637 	}
       
   638 TInt CCreatorPhonebookWrapper::AddToGroup( TUint32 aGroupId, TInt aAmount )
       
   639 	{
       
   640 	QContactLocalId group = QContactLocalId(aGroupId);
       
   641 	TInt ret = iPhonebookAPI->addToGroup( group, (int) aAmount );
       
   642 	return ret;
       
   643 	}
       
   644 
       
   645 
       
   646 //----------------------------------------------------------------------------
       
   647 
       
   648 TInt CCreatorPhonebookWrapper::CreateSubscribedContactEntryL()
       
   649     {
       
   650     LOGSTRING("Creator: CCreatorPhonebookWrapper::CreateSubscribedContactEntryL");
       
   651 
       
   652     return KErrNotSupported;
       
   653     }
       
   654