serviceproviders/sapi_contacts_vpbk/tsrc/dev/tcontacts_sync/src/tcontacts_sync_blocks.cpp
changeset 5 989d2f495d90
child 10 fc9cf246af83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_contacts_vpbk/tsrc/dev/tcontacts_sync/src/tcontacts_sync_blocks.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,3153 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   ?Description
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <VPbkEng.rsg>
+
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkContactLink.h>
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactGroup.h>
+#include <utf.h>
+
+#include "tcontacts_sync.h"
+#include "singlecontact.h"
+
+// CONSTANTS
+_LIT(KError,"Error code is");
+_LIT(KSuccess,"Successful");
+_LIT(KNewLine,"\n");
+_LIT(KServiceOpen,"Service handle created");
+_LIT(KServiceClose,"Service handle deleted");
+_LIT(KPhoneNumber,"9886431364");
+ _LIT(KGroup1,"Test1");
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CContactsUT::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CContactsUT::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        { 
+        ENTRY( "Add_contact_sapi", CContactsUT::AddContactSAPIL ),
+        ENTRY( "Delete_contact_sapi", CContactsUT::DeleteContactSAPIL ),
+        ENTRY( "Modify_contact_sapi", CContactsUT::ModifyContactSAPIL ),
+        ENTRY( "Import_contact_sapi", CContactsUT::ImportContactSAPIL ),
+        ENTRY( "Export_contact_sapi", CContactsUT::ExportContactSAPIL ),
+        ENTRY( "Getlist_delete_contact", CContactsUT::GetListDeleteContactL ),
+        ENTRY( "Add_getlist_contact", CContactsUT::AddContactGetListL ), 
+        ENTRY( "Get_group", CContactsUT::GetGroupsL ),
+        ENTRY( "Get_contact", CContactsUT::GetContactsL ),
+        ENTRY( "Get_database", CContactsUT::GetDatabaseL ),
+        ENTRY( "Add_contact", CContactsUT::AddL ),
+        ENTRY( "Add_group", CContactsUT::AddGroupL ),
+        ENTRY( "Modify_contact", CContactsUT::ModifyL ),
+        ENTRY( "Modify_group", CContactsUT::ModifyGroupL ),
+        ENTRY( "Delete_contact", CContactsUT::DeleteContactL ),
+        ENTRY( "Delete_group", CContactsUT::DeleteGroupL ),
+        ENTRY( "Organise_add", CContactsUT::OrganiseAddL ),
+        ENTRY( "Organise_delete", CContactsUT::OrganiseDeleteL ),
+        ENTRY( "Import", CContactsUT::ImportL ),
+        ENTRY( "Export", CContactsUT::ExportL ),
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+
+void CContactsUT::HandleReturnValue( TOperationEvent /*aEvent*/, const TInt& aError, TInt /*aTransId*/ )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In Handle Return Value\n");
+    iLog->Log(KFunc);
+    iErr = aError;
+    TBuf<5> buf;
+    buf.Num(aError);
+    iLog->Log(KError);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    }
+    
+void CContactsUT::HandleReturnIter( const TInt& aError, CContactIter* aIter, TInt /*aTransId*/ )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In Handle Return Iter\n");
+    iLog->Log(KFunc);
+    iErr = aError;
+    TBuf<5> buf;
+    buf.Num(aError);
+    iLog->Log(KError);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    
+    HBufC8* idBuf = NULL;
+    _LIT8(KNumber,"MobilePhoneGen");
+    while(ETrue)
+        {
+        aIter->NextL(iSingleContact,idBuf);
+        if(!iSingleContact)
+            {
+            break;
+            } 
+        CleanupStack::PushL(idBuf); 
+               
+             
+        TInt count(iSingleContact->FieldCount());       
+        CSingleContactField* field = NULL;                 
+        while(count)
+            {            
+            TPtrC8 fieldKey;
+            TPtrC label;
+            TPtrC value;
+            field = iSingleContact->FieldAt(--count);
+            field->GetFieldDataL(fieldKey,label,value);
+            if(!(fieldKey.Compare(KNumber)) && !(value.Compare(KPhoneNumber)))
+                {
+                CleanupStack::Pop(idBuf);
+                delete aIter; 
+                return; //NOTE                       
+                }
+                
+            }           
+        CleanupStack::PopAndDestroy(idBuf);
+        delete iSingleContact;
+        iSingleContact = NULL;  
+        } 
+     delete aIter;
+    }
+    /*
+    if(EGetContactDelete == iOperation )
+        {
+        iOperation = ENone;        
+        CSingleContact* singleContact = NULL;  
+        HBufC8* buf = NULL;
+        TInt count = 0; 
+        while(ETrue)
+            {
+            aIter->NextL(singleContact,buf);
+            if(!singleContact)
+                {
+                break;
+                }
+            iBuffer = buf;
+           // delete buf;
+            delete singleContact;
+            break;
+            }
+        }
+    if(iOperation == EContact)
+        {
+        iOperation = ENone;
+        
+        CSingleContact* singleContact = NULL;        
+        HBufC8* buf = NULL; 
+        
+        _LIT(KPhone,"560087");       
+        _LIT8(KField,"MobilePhoneGen");
+        
+        while(ETrue)
+            {
+            aIter->NextL(singleContact,buf);
+            CleanupStack::PushL(singleContact);
+            CleanupStack::PushL(buf); 
+            if(!singleContact)
+                {
+                break;
+                }
+            
+            
+            if(!buf->Compare(*iBuffer))
+                {     
+                TInt count(singleContact->FieldCount());       
+                CSingleContactField* field = NULL;                 
+                while(count)
+                    {            
+                    TBuf8<50> fieldKey;
+                    TBuf<50> label;
+                    TBuf<50> value;
+                    field = singleContact->FieldAt(--count);
+                    field->GetFieldDataL(fieldKey,label,value);
+                    if(!fieldKey.Compare(KField))
+                        {
+                        field->SetFieldParamsL(KField,KNullDesC,KPhone);
+                        iLog->Log(_L("Phone Contact Field modified \n"));
+                        iServiceHandle->AddL(this,0,singleContact);
+                        iLog->Log(_L("AddL called\n"));
+                        iLog->Log(_L("Start Active Scheduler\n"));
+                        CActiveScheduler::Start(); 
+                        break;                        
+                        }
+                    }
+                }            
+              
+            CleanupStack::PopAndDestroy(buf);
+            CleanupStack::PopAndDestroy(singleContact);  
+            }             
+         } 
+    if(EGetContact == iOperation )
+        {
+        iOperation = ENone;
+        //iErr = KErrGeneral;
+        _LIT8(KFirstName,"FirstName");
+        _LIT(KName,"Kats"); 
+        CSingleContact* singleContact = NULL;  
+        HBufC8* buf = NULL;
+        TInt count = 0; 
+        while(ETrue)
+            {
+            aIter->NextL(singleContact,buf);
+            if(!singleContact)
+                {
+                break;
+                }
+            ++count;
+            TInt count(singleContact->FieldCount());
+            while(count)
+                {
+                CSingleContactField* field = singleContact->FieldAt(--count);
+                TBuf8<256> fieldKey;
+                TBuf<256> label;
+                TBuf<256> value;
+                field->GetFieldDataL(fieldKey,label,value);
+                if (fieldKey == KFirstName && value == KName)
+                    {
+                    iErr = KErrNone;
+                    }
+              //  delete field;
+                }
+            delete singleContact;
+            }
+        }
+    
+    if(EGetGroup == iOperation )
+        {
+        iOperation = ENone;
+        CSingleContact* singleContact = NULL;  
+        HBufC8* buf = NULL;
+        TInt count = 0; 
+        while(ETrue)
+            {
+            aIter->NextL(singleContact,buf);
+            iBuffer = buf;
+            if(!singleContact)
+                {
+                break;
+                }
+            ++count; 
+            TInt fields(singleContact->FieldCount());
+            while(fields)
+                {
+                CSingleContactField* field = singleContact->FieldAt(--fields);
+                TBuf<256> groupId;
+                RPointerArray<HBufC8> array;
+                field->GetFieldDataL(groupId,array);
+                TInt contacts(array.Count());
+                //array->Reset();
+                }
+                          
+            }
+        }
+    delete aIter;  
+    }*/
+
+void CContactsUT::HandleRetrieveContact( MVPbkStoreContact* /*aStoreContact*/, TInt /*aTransId*/ )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In Handle Retrieve Contact\n");
+    iLog->Log(KFunc);
+    }
+
+void CContactsUT::ContactOperationCompleted(TContactOpResult aResult)
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In ContactOperationCompleted \n");
+    iLog->Log(KFunc);
+    iErr = KErrNone;
+    TBuf<5> buf;
+    buf.Num(aResult.iOpCode);
+    iLog->Log(KSuccess);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    switch(iOperation)
+        {/*
+        case EContact: delete iStoreContact;
+                       iStoreContact = NULL;
+                       break;*/
+        case EGroup: delete iGroup;
+                     iGroup = NULL;
+                     break;
+        }          
+    iOperation = ENone;
+    }
+void CContactsUT::ContactOperationFailed
+            (TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/)
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In ContactOperationFailed \n");
+    iLog->Log(KFunc);
+    iErr = aErrorCode;
+    TBuf<5> buf;
+    buf.Num(aErrorCode);
+    iLog->Log(KError);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    switch(iOperation)
+        {
+        case EContact:/* delete iStoreContact;
+                       iStoreContact = NULL;
+                       break;*/
+        case EGroup: delete iGroup;
+                     iGroup = NULL;
+                     break;
+        }          
+    iOperation = ENone;
+    }  
+            
+void CContactsUT::FindCompleteL( MVPbkContactLinkArray* aResults )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In FindCompleteL \n");
+    iLog->Log(KFunc);
+    iErr = KErrNone;
+    iFindResults = aResults;
+    iLog->Log(KSuccess);
+    }
+void CContactsUT::FindFailed( TInt aError )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In FindFailed \n");
+    iLog->Log(KFunc);
+    iErr = aError;
+    TBuf<5> buf;
+    buf.Num(aError);
+    iLog->Log(KError);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    }
+    
+void CContactsUT::VPbkSingleContactOperationComplete(
+                MVPbkContactOperationBase& aOperation,
+                MVPbkStoreContact* aContact )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In VPbkSingleContactOperationComplete \n");
+    iLog->Log(KFunc);
+    iErr = KErrNone;
+    
+    if(iOperation == EVCard)
+        {
+        iDestStream.CommitL();
+        delete iOp;
+        iOp = NULL;
+        iDestStream.Close();
+        delete iResult;
+        iResult = NULL;
+        }
+    else if(iOperation == EVCardEx)
+        {        
+        delete iOp;
+        iOp = NULL;
+        }
+    else
+        {
+        delete iStoreContact;
+        iStoreContact = NULL;
+        iStoreContact = aContact;
+        if( iOp == &aOperation )
+            {
+                delete iOp;
+                iOp = NULL;
+            }
+        }
+    iOperation = ENone;
+    iLog->Log(KSuccess);
+    }
+
+
+void CContactsUT::VPbkSingleContactOperationFailed(
+                MVPbkContactOperationBase& aOperation, 
+                TInt aError )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In VPbkSingleContactOperationFailed \n");
+    iLog->Log(KFunc);
+    iErr = aError;
+    ;
+    if(iOperation == EVCard)
+        {
+        iDestStream.CommitL();
+        delete iOp;
+        iOp = NULL;
+        iDestStream.Close();
+        delete iBuffer;
+        iBuffer = NULL;
+        delete iResult;
+        iResult = NULL;
+        }
+    else if(iOperation == EVCardEx)
+        {        
+        delete iOp;
+        iOp = NULL;
+        }
+    else
+        {
+        delete iStoreContact;
+        iStoreContact = NULL;
+        if( iOp == &aOperation )
+            {
+                delete iOp;
+                iOp = NULL;
+            }
+        }
+    TBuf<5> buf;
+    buf.Num(aError);
+    iLog->Log(KError);
+    iLog->Log(buf);
+    iLog->Log(KNewLine);
+    
+    iOperation = ENone;
+    }
+
+void CContactsUT::StepComplete( 
+                MVPbkContactOperationBase& /*aOperation*/,
+                TInt /*aStepSize*/ )
+    {
+    _LIT(KFunc,"In StepComplete \n");
+    iLog->Log(KFunc);
+    iLog->Log(KSuccess);
+    iLog->Log(KNewLine);
+    }
+
+TBool CContactsUT::StepFailed(
+                MVPbkContactOperationBase& /*aOperation*/,
+                TInt /*aStepSize*/, TInt /*aError*/ )
+    {
+    _LIT(KFunc,"In StepFailed \n");
+    iLog->Log(KFunc);
+    return EFalse;
+    }
+
+void CContactsUT::OperationComplete( 
+                MVPbkContactOperationBase& /*aOperation*/ )
+    {
+    CActiveScheduler::Stop();
+    _LIT(KFunc,"In OperationComplete \n");
+    iLog->Log(KFunc);
+    iErr = KErrNone;
+    iLog->Log(KSuccess);
+    iLog->Log(KNewLine);
+    }
+
+
+//Delete all contacts
+void CContactsUT::DeleteAllL()
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In DeleteAllL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    iErr = KErrNone;
+       
+    __UHEAP_MARK;    
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhoneNumber, KPhoneNumber().Length(), *this );    
+    CActiveScheduler::Start();
+    delete iOp;
+    iOp = NULL;
+    
+    TInt count(iFindResults->Count());
+    iContactToDelete = CVPbkContactLinkArray::NewLC();
+    while(count)
+        {  
+        MVPbkContactLink* link = iFindResults->At(--count).CloneLC();
+        iContactToDelete->AppendL(link);
+        CleanupStack::Pop();
+        }
+    delete iFindResults;
+    iFindResults = NULL;
+        
+    iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+    CActiveScheduler::Start();
+    delete iOp;
+    iOp = NULL;
+    CleanupStack::PopAndDestroy(iContactToDelete);
+    iContactToDelete = NULL;
+         
+    
+    __UHEAP_MARKEND;          
+    }
+
+//Add 1 contact
+void CContactsUT::AddOneContactL(TDesC& aName)
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In AddOneContactL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    iErr = KErrNone;
+    
+    __UHEAP_MARK;
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( aName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KPhoneNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::PopAndDestroy(); // iStoreContact
+    iStoreContact = NULL;
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    __UHEAP_MARKEND;    
+    }
+    
+//Check for contact
+void CContactsUT::CheckContactsL(TInt& aCount,RPointerArray<TDesC8>& aIdArray)
+    {    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In CheckContactsL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    iErr = KErrNone;
+        
+    //__UHEAP_MARK;
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhoneNumber, KPhoneNumber().Length(), *this );    
+    CActiveScheduler::Start();
+    delete iOp;
+    iOp = NULL;
+    
+    aCount = iFindResults->Count();
+    TInt count(aCount);
+    while(count)
+        {
+        aIdArray.AppendL((const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC());
+        CleanupStack::Pop();
+        }
+    delete iFindResults;
+    iFindResults = NULL;
+   // __UHEAP_MARKENDC(aCount);          
+    }
+    
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddContactSAPIL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In AddContactSAPIL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    DeleteAllL();
+    
+     /**Add contact using SAPI Core class*/
+    
+    _LIT8(KFirstName,"FirstName");
+    _LIT(KName,"Sikandar"); 
+    _LIT8(KNumber,"MobilePhoneGen");
+        
+    __UHEAP_MARK;
+    //instantiate service class 
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    CSingleContact* singleContact = CSingleContact::NewL();
+    CleanupStack::PushL(singleContact);
+    iLog->Log(_L("single Contact created\n"));
+    
+    CSingleContactField* nameContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(nameContactField);
+    iLog->Log(_L("Name Contact Field created \n"));
+    
+    CSingleContactField* phoneContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field created \n"));
+    
+    nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+    singleContact->AddFieldToContactL(nameContactField);
+    iLog->Log(_L("Name Contact Field added \n"));
+    
+    phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhoneNumber);
+    singleContact->AddFieldToContactL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field added \n"));
+    
+    serviceHandle->AddL(singleContact);
+    iLog->Log(_L("AddL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));        
+    
+    CleanupStack::Pop(phoneContactField);//singleContactField	
+    CleanupStack::Pop(nameContactField);//singleContactField	
+    CleanupStack::PopAndDestroy(singleContact);//singleContact
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+    iLog->Log( KServiceClose );
+    __UHEAP_MARKEND; 
+    /**end */
+    
+    TInt count;
+    RPointerArray<TDesC8> idArray;
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        iErr = KErrGeneral;
+        }
+    idArray.ResetAndDestroy();
+    
+    DeleteAllL();
+    return iErr;    
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteContactSAPIL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In DeleteContactSAPIL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    DeleteAllL();
+    _LIT(KName,"SpiderMan");
+    TPtrC name(KName);
+    AddOneContactL(name);
+    
+    TInt count(0);
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        return KErrGeneral;
+        }
+        
+    /**Delete using SAPI core class*/
+    
+    __UHEAP_MARK;         
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+   
+    serviceHandle->DeleteL(idArray);
+    iLog->Log(_L("DeleteL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    //CActiveScheduler::Start(); 
+   
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle      	          
+    iLog->Log( KServiceClose ); 
+    __UHEAP_MARKEND;  
+    /**end*/
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+        
+    RPointerArray<TDesC8> idArray1;
+    CleanupClosePushL(idArray1);
+    CheckContactsL(count,idArray1);
+    if(count)
+        {
+        iErr = KErrGeneral;
+        }
+    CleanupStack::Pop(&idArray1);
+    idArray.ResetAndDestroy();
+    return iErr;
+        
+    }
+    
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyContactSAPIL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In ModifyContactSAPIL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    DeleteAllL();
+    _LIT(KName,"SuperMan");
+    TPtrC name(KName);
+    AddOneContactL(name);
+    
+    TInt count(0);
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        return KErrGeneral;
+        }
+      
+    /**Get using SAPI core class*/    
+    __UHEAP_MARK;         
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    serviceHandle->GetListL(this,0,EContacts,*idArray[0]);
+    iLog->Log(_L("GetListL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();
+    
+    if(!iSingleContact)
+        {
+        return KErrGeneral;
+        }
+    
+    _LIT(KName1,"SpiderMan");
+    _LIT8(KFirstName,"FirstName");
+    CSingleContactField* field = NULL; 
+    TInt fieldCount(iSingleContact->FieldCount());                    
+    while(fieldCount)
+        {            
+        TPtrC8 fieldKey;
+        TPtrC label;
+        TPtrC value;
+        field = iSingleContact->FieldAt(--fieldCount);
+        field->GetFieldDataL(fieldKey,label,value);
+        if( !fieldKey.Compare(KFirstName) && !value.Compare(KName))
+            {
+            field->SetFieldParamsL(KFirstName,KNullDesC,KName1);
+            iLog->Log(_L("Phone Contact Field modified \n"));            
+            break;                        
+            }
+        }
+    //
+    //MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(iSingleContact->GetContactId());
+    //iOp = iContactManager->RetrieveContactL(linkArray->At(0),*this);
+    //CActiveScheduler::Start();
+    //CleanupStack::Pop();
+    //
+    __UHEAP_MARK;
+    serviceHandle->AddL(this,0,iSingleContact);
+    iLog->Log(_L("AddL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();        
+    __UHEAP_MARKEND;
+    
+    delete iSingleContact;
+    iSingleContact = NULL;
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle      	          
+    iLog->Log( KServiceClose ); 
+    __UHEAP_MARKEND;  
+    /**end*/
+    
+    
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+        
+    RPointerArray<TDesC8> idArray1;
+    CleanupClosePushL(idArray1);
+    CheckContactsL(count,idArray1);
+    if(count != 1)
+        {
+        iErr = KErrGeneral;
+        }
+    CleanupStack::Pop();
+    idArray1.ResetAndDestroy();
+    //to implement ..checking name
+    return iErr;
+        
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ImportContactSAPIL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In ImportContactSAPIL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone; 
+    _LIT(KFileName,"c:\\vcardim.vcf");
+    
+  /*  DeleteAllL();
+    
+    _LIT(KName,"SuperMan");
+    TPtrC name(KName);
+    AddOneContactL(name);
+    
+    TInt count(0);
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        return KErrGeneral;
+        }
+        
+    //__UHEAP_MARK;
+    MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(*idArray[0]);
+    iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+     // Create the buffer to store the contact
+    iBuffer = HBufC8::NewL( 1024 );
+    TPtr8 bufferPtr( iBuffer->Des() );
+    iDestStream.Open( bufferPtr );
+    //export the contact from MVPbkContactLink
+   // __UHEAP_MARK;
+    iOp = iVCardEngine->ExportVCardL( iDestStream, linkArray->At(0), *this );
+    CActiveScheduler::Start();    
+    
+    // __UHEAP_MARKEND;
+    if( !iErr )
+        {
+        iDestStream.CommitL();
+        }
+    
+    iDestStream.Close();
+    if(iBuffer)
+        {
+        RFile file;
+        CleanupClosePushL(file);            
+        file.Replace(iRfs,KFileName,EFileWrite);
+        file.Write(0,*iBuffer);
+        CleanupStack::PopAndDestroy(&file);        
+        }    
+    delete iBuffer;
+    iBuffer = NULL;
+    delete iVCardEngine;
+    iVCardEngine = NULL;   
+    CleanupStack::PopAndDestroy();//linkArray      
+    //__UHEAP_MARKEND;
+    
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+    DeleteAllL();
+    */
+    DeleteAllL();
+    __UHEAP_MARK;
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    TFileName importFile(KFileName);
+    
+    serviceHandle->ImportVCardToStoreL(this,0,importFile);
+    iLog->Log(_L("ImportVCardToStoreL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();  
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle        
+    iLog->Log( KServiceClose );   
+    __UHEAP_MARKEND;
+    
+    TInt count = 0;
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        return KErrGeneral;
+        }
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+    return iErr;
+    }
+    
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ExportContactSAPIL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In ExportContactSAPIL" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone; 
+    _LIT(KFileName,"c:\\vcardim.vcf");
+    _LIT(KFileName1,"c:\\vcardim1.vcf");
+    
+    DeleteAllL();
+    
+    _LIT(KName,"SuperMan");
+    TPtrC name(KName);
+    AddOneContactL(name);
+    
+    _LIT(KName1,"SpiderMan");
+    TPtrC name1(KName1);
+    AddOneContactL(name1);
+    
+    TInt count(0);
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    TInt ret = iRfs.Delete(KFileName);
+   // ret = iRfs.Delete(KFileName1);
+   /* if(count != 1)
+        {
+        return KErrGeneral;
+        }*/
+        
+   /* __UHEAP_MARK;
+    RFile writeStream;
+    CleanupClosePushL(writeStream);
+    User::LeaveIfError(writeStream.Create(iRfs,KFileName,EFileWrite));
+    while(count)
+        {
+        writeStream.Write(*idArray[--count]);
+        }
+    CleanupStack::PopAndDestroy(&writeStream);
+    __UHEAP_MARKEND;
+    */
+    //iBuffer = HBufC8::NewL( 1024 );
+    //TPtr8 bfrPtr(iBuffer->Des());
+   // __UHEAP_MARK;
+    //RFileReadStream readStream;
+   // CleanupClosePushL(readStream);
+   // User::LeaveIfError(readStream.Open(iRfs,KFileName,EFileRead));
+    
+    //TInt cells = User::CountAllocCells();
+    __UHEAP_MARK;
+    RFileWriteStream destStream;
+    CleanupClosePushL(destStream);
+    User::LeaveIfError(destStream.Create(iRfs,KFileName,EFileWrite));
+    iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+    while(count)
+        {
+        MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(*idArray[--count]);
+        const MVPbkContactLink& link = linkArray->At(0);
+        iOp = iVCardEngine->ExportVCardL( destStream, link, *this );
+        CActiveScheduler::Start();
+        destStream.CommitL();
+        CleanupStack::PopAndDestroy();
+        }
+    delete iVCardEngine;
+    iVCardEngine = NULL;
+    CleanupStack::PopAndDestroy(&destStream);
+    __UHEAP_MARKEND;
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+    
+    /*
+    //CleanupStack::PushL(linkArray);
+    cells = User::CountAllocCells();
+    iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+    
+    cells = User::CountAllocCells();    
+    RDesWriteStream destStream;
+    CleanupClosePushL(destStream);
+    //User::LeaveIfError(destStream.Create(iRfs,KFileName1,EFileWrite));
+    destStream.Open(bfrPtr);
+    TInt links = linkArray->Count();
+    while(links)
+        {
+        const MVPbkContactLink& link = linkArray->At(--links);
+        iOp = iVCardEngine->ExportVCardL( destStream, link, *this );
+        CActiveScheduler::Start();
+        }
+    destStream.CommitL();
+    CleanupStack::PopAndDestroy(&destStream);
+    
+    cells = User::CountAllocCells();
+    delete iVCardEngine;
+    iVCardEngine = NULL;
+    cells = User::CountAllocCells();
+    
+    CleanupStack::PopAndDestroy();
+    cells = User::CountAllocCells();
+    CleanupStack::PopAndDestroy(&readStream);
+    
+   // __UHEAP_MARKEND;
+   if(iBuffer)
+        {
+        RFile file;
+        CleanupClosePushL(file);            
+        file.Replace(iRfs,KFileName,EFileWrite);
+        file.Write(0,*iBuffer);
+        CleanupStack::PopAndDestroy(&file);        
+        }    
+    delete iBuffer;
+    iBuffer = NULL;
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+    /*
+     // Create the buffer to store the contact
+    iBuffer = HBufC8::NewL( 1024 );
+    TPtr8 bufferPtr( iBuffer->Des() );
+    iDestStream.Open( bufferPtr );
+    //export the contact from MVPbkContactLink
+   // __UHEAP_MARK;
+    
+    CActiveScheduler::Start();    
+    
+    // __UHEAP_MARKEND;
+    if( !iErr )
+        {
+        iDestStream.CommitL();
+        }
+    
+    iDestStream.Close();
+    if(iBuffer)
+        {
+        RFile file;
+        CleanupClosePushL(file);            
+        file.Replace(iRfs,KFileName,EFileWrite);
+        file.Write(0,*iBuffer);
+        CleanupStack::PopAndDestroy(&file);        
+        }    
+    delete iBuffer;
+    iBuffer = NULL;
+    delete iVCardEngine;
+    iVCardEngine = NULL;   
+    CleanupStack::PopAndDestroy();//linkArray      
+    //__UHEAP_MARKEND;
+    
+    CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();
+    DeleteAllL();
+    */
+ /*   __UHEAP_MARK;
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    TFileName exportFile(KFileName);
+    
+    serviceHandle->ExportVCardL(this,0,exportFile,idArray);
+    iLog->Log(_L("ExportVCardL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();  
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle        
+    iLog->Log( KServiceClose );   
+    __UHEAP_MARKEND;
+    *//*
+    TInt count = 0;
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CheckContactsL(count,idArray);
+    if(count != 1)
+        {
+        return KErrGeneral;
+        }*/
+   /* CleanupStack::Pop(&idArray);
+    idArray.ResetAndDestroy();*/
+    return iErr;
+    }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetListDeleteContactL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;      
+   
+    
+    /**Getlist using SAPI core class*/
+    
+    //__UHEAP_MARK;
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    iOperation = EGetContactDelete;
+    serviceHandle->GetListL(this,0,EContacts);
+    iLog->Log(_L("GetListL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();
+    
+    //iOperation = EGetContact;
+    //iServiceHandle->GetListL(this,0,EContacts,*iBuffer);
+    //CActiveScheduler::Start();
+     /**Delete using SAPI core class*/
+    
+    //  __UHEAP_MARK;    
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);    
+    idArray.AppendL(iBuffer);    
+    
+   
+    serviceHandle->DeleteL(this,0,idArray);
+    iLog->Log(_L("DeleteL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start(); 
+   
+   
+    CleanupStack::PopAndDestroy(&idArray);//singleContactField      
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+    iLog->Log( KServiceClose );
+  //  __UHEAP_MARKEND;
+    
+  
+    
+    return iErr;
+    }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddContactGetListL( CStifItemParser& aItem )
+    {
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    /**Add contact using SAPI Core class*/
+       
+    _LIT8(KFirstName,"FirstName");
+    _LIT(KName,"Kats"); 
+    _LIT8(KNumber,"MobilePhoneHome");
+    _LIT(KPhone,"98789");
+    
+   // __UHEAP_MARK;
+    //instantiate service class 
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    CSingleContact* singleContact = CSingleContact::NewL();
+    CleanupStack::PushL(singleContact);
+    iLog->Log(_L("single Contact created\n"));
+    
+    CSingleContactField* nameContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(nameContactField);
+    iLog->Log(_L("Name Contact Field created \n"));
+    
+    CSingleContactField* phoneContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field created \n"));
+    
+    nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+    singleContact->AddFieldToContactL(nameContactField);
+    iLog->Log(_L("Name Contact Field added \n"));
+    
+    phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhone);
+    singleContact->AddFieldToContactL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field added \n"));
+    
+    serviceHandle->AddL(this,0,singleContact,KNullDesC8,KNullDesC);
+    iLog->Log(_L("AddL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();    
+    
+    CleanupStack::Pop(phoneContactField);//singleContactField	
+    CleanupStack::Pop(nameContactField);//singleContactField	
+    CleanupStack::PopAndDestroy(singleContact);//singleContact
+  //  CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+   // iLog->Log( KServiceClose );
+//    __UHEAP_MARKENDC(1); 
+    /**end */
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+    
+    /**Getlist using SAPI core class*/
+    
+    //__UHEAP_MARK;
+    //serviceHandle = CContactService::NewL();
+  //  CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    iOperation = EGetContact;
+    serviceHandle->GetListL(this,0,EContacts);
+    iLog->Log(_L("GetListL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    CActiveScheduler::Start();
+    
+    //iOperation = EGetContact;
+    //iServiceHandle->GetListL(this,0,EContacts,*iBuffer);
+    //CActiveScheduler::Start();
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+    iLog->Log( KServiceClose );
+  //  __UHEAP_MARKEND;
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+    /**Delete using virtual Phonebook */ 
+    
+    
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhone, KPhone().Length(), *this );    
+    CActiveScheduler::Start();
+    
+    iErr = KErrGeneral;
+    TInt count(iFindResults->Count());
+    while(count)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();
+        }       
+    /**end  */   
+  
+    
+    return iErr;
+    }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetGroupsL( CStifItemParser& aItem )
+    {
+
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrGeneral;  
+    
+    /**Add 1 group using virtual phonebook */
+    
+   
+    
+	iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup1);	
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+	
+  
+  //  __UHEAP_MARK;
+    iServiceHandle = CContactService::NewL();
+    iLog->Log( KServiceOpen );
+        
+    CContactIter* iter = iServiceHandle->GetListL(EGroups);
+    iLog->Log(_L("GetListL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+   // CActiveScheduler::Start();
+    
+   iErr = KErrGeneral;
+    CSingleContact* singleContact = NULL;  
+    HBufC8* buf = NULL;
+    TInt count = 0; 
+    while(ETrue)
+        {
+        iter->NextL(singleContact,buf);
+        iBuffer = buf;
+        if(!singleContact)
+            {
+            break;
+            }
+        ++count; 
+        TInt fields(singleContact->FieldCount());
+        while(fields)
+            {
+            CSingleContactField* field = singleContact->FieldAt(--fields);
+            TPtrC groupId;
+            RPointerArray<TDesC8> array;
+            field->GetFieldDataL(groupId,array);
+
+
+            if(groupId.Compare(KGroup1)==0)
+                {
+                iErr = KErrNone; 
+                break;   
+                }
+            }
+        }          
+    delete iServiceHandle;//serviceHandle 
+    delete iter;  
+    iServiceHandle = NULL;
+    iLog->Log( KServiceClose );
+    return iErr;
+    
+    }
+
+TInt CContactsUT::GetDatabaseL( CStifItemParser& aItem )
+    {
+
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    
+  
+  //  __UHEAP_MARK;
+    iServiceHandle = CContactService::NewL();
+    iLog->Log( KServiceOpen );
+    
+    iOperation = EGetDatabase;
+    
+    CContactIter* iter = CContactIter::NewL();
+    iServiceHandle->GetListL(*iter);
+    iLog->Log(_L("GetListL called\n"));
+    TPtrC DbName;
+    iter->NextL(DbName);
+    
+    while(!DbName.Compare(KNullDesC))
+        {
+        iter->NextL(DbName);
+        }
+        
+    delete iServiceHandle;//serviceHandle   
+    iServiceHandle = NULL;
+    delete iter;
+    iLog->Log( KServiceClose );
+ //   __UHEAP_MARKEND;
+    
+    
+    
+  
+    return iErr;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetContactsL( CStifItemParser& aItem )
+    {
+    
+   
+    /**GetList using SAPI Core class */
+  //  __UHEAP_MARK;
+  
+  
+
+ // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    /**Delete using virtual Phonebook */ 
+    
+    _LIT(KPhone,"13579");
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhone, KPhone().Length(), *this );    
+    CActiveScheduler::Start();
+    
+    iErr = KErrGeneral;
+    TInt count1(iFindResults->Count());
+    while(count1)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count1))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();
+        }       
+    /**end  */   
+    
+    /**Add 2 contacts using virtual phonebook*/
+    
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"13579"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+
+    
+    // Create second contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KSecondName,"Birbal"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KSecondNumber,"13579"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+    
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /**end*/
+    
+    
+    
+    iServiceHandle = CContactService::NewL();
+    iLog->Log( KServiceOpen );
+    
+    iOperation = EGetContact;
+    CContactIter* iter = iServiceHandle->GetListL(EContacts);
+    
+    _LIT8(KFirstName1,"FirstName");
+    _LIT(KTName,"Tenali");
+    _LIT(KBName,"Birbal"); 
+    TInt tError = KErrNotFound;
+    TInt bError = KErrNotFound;
+    CSingleContact* singleContact = NULL;  
+    HBufC8* buf = NULL;
+    TInt count = 0; 
+    while(ETrue)
+        {
+        iter->NextL(singleContact,buf);
+        if(!singleContact)
+            {
+            break;
+            }
+        ++count;
+        TInt count(singleContact->FieldCount());
+        while(count)
+            {
+            CSingleContactField* field = singleContact->FieldAt(--count);
+            TPtrC8 fieldKey;
+            TPtrC label;
+            TPtrC value;
+            field->GetFieldDataL(fieldKey,label,value);
+            if (fieldKey == KFirstName1 && value == KTName)
+                {            
+                tError = KErrNone;
+                }
+            else if (fieldKey == KFirstName1 && value == KBName)
+                {            
+                bError = KErrNone;
+                }                
+            }
+            delete singleContact;
+        } 
+    if(tError == KErrNone && bError == KErrNone)
+        {
+        iErr = KErrNone;    
+        }
+    else
+        {
+        iErr = KErrNotFound;    
+        }    
+    delete iServiceHandle;//serviceHandle 
+    delete iter;  
+    iServiceHandle = NULL;
+    iLog->Log( KServiceClose );   
+    return iErr;        
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddL( CStifItemParser& aItem )
+    {
+    __UHEAP_MARK;
+
+    // Print to UI
+    _LIT( KContactsTest, "ContactsUT" );
+    _LIT( KExample, "In Add" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;  
+    
+    /**Add contact using SAPI Core class*/
+    
+    _LIT8(KFirstName,"FirstName");
+    _LIT(KName,"Sikandar"); 
+    _LIT8(KNumber,"MobilePhoneHome");
+    _LIT(KPhone,"123456");
+        
+    //instantiate service class 
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    CSingleContact* singleContact = CSingleContact::NewL();
+    CleanupStack::PushL(singleContact);
+    iLog->Log(_L("single Contact created\n"));
+    
+    CSingleContactField* nameContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(nameContactField);
+    iLog->Log(_L("Name Contact Field created \n"));
+    
+    CSingleContactField* phoneContactField = CSingleContactField::NewL();
+    CleanupStack::PushL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field created \n"));
+    
+    nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+    singleContact->AddFieldToContactL(nameContactField);
+    iLog->Log(_L("Name Contact Field added \n"));
+    
+    phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhone);
+    singleContact->AddFieldToContactL(phoneContactField);
+    iLog->Log(_L("Phone Contact Field added \n"));
+    
+    //temp 
+    
+    serviceHandle->AddL(this,0,singleContact);
+    CActiveScheduler::Start();
+    
+    
+    
+    
+    
+    
+        
+    serviceHandle->AddL(singleContact);    
+    iLog->Log(_L("AddL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));    
+    CleanupStack::Pop(phoneContactField);//singleContactField	
+    CleanupStack::Pop(nameContactField);//singleContactField	
+    CleanupStack::PopAndDestroy(singleContact);//singleContact
+    
+    
+    CContactIter* iter = serviceHandle->GetListL( EContacts,KNullDesC8,KName);
+          
+    HBufC8* buf = NULL;
+    TInt count = 0; 
+    while(ETrue)
+        {
+        iter->NextL(singleContact,buf);
+        if(!singleContact)
+            {
+            break;
+            }
+        ++count;
+        TInt count(singleContact->FieldCount());
+        while(count)
+            {
+            CSingleContactField* field = singleContact->FieldAt(--count);
+            TPtrC8 fieldKey;
+            TPtrC label;
+            TPtrC value;
+            field->GetFieldDataL(fieldKey,label,value);
+            if (fieldKey == KFirstName && value == KName)
+                {            
+                iErr = KErrNone;
+                }                           
+            }
+            delete singleContact;
+            delete buf;
+        } 
+        delete buf;
+       
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle 
+    delete iter;  
+    iLog->Log( KServiceClose );
+    __UHEAP_MARKEND; 
+    /**end */
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+    
+    /**Delete using virtual Phonebook */ 
+    /*
+    
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhone, KPhone().Length(), *this );    
+    CActiveScheduler::Start();
+    
+    iErr = KErrGeneral;
+    TInt count(iFindResults->Count());
+    while(count)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();
+        }       
+    /**end  */   
+  
+    
+    return iErr;
+    
+    }
+
+        
+// -----------------------------------------------------------------------------
+// CContactsUT::AddGroupL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddGroupL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In AddGroup" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;   
+    
+    /**Add group using SAPI core class */
+    __UHEAP_MARK;
+    _LIT(KGroup,"Test");  
+    //instantiate service class 
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );    
+      
+    serviceHandle->AddL(NULL,KNullDesC8,KGroup);
+    iLog->Log(_L("AddL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));       
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+    iLog->Log( KServiceClose );
+    
+    /**end */
+    __UHEAP_MARKEND;
+    if(iErr)
+        {
+        return iErr;
+        }
+        
+    //Check for the added group using virtual phonebook classes 
+    iFindResults = iStore->ContactGroupsLC();    
+    TInt count(iFindResults->Count());    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iOp = iContactManager->RetrieveContactL(*iResult,*this);
+        CActiveScheduler::Start();
+        
+        if(iErr)
+            {
+            break;
+            }
+        iErr = KErrGeneral;      
+        iGroup = iStoreContact->Group();
+        if(!iGroup->GroupLabel().Compare(KGroup))
+            {
+            iErr = KErrNone;
+            iContactToDelete = CVPbkContactLinkArray::NewL();
+            iContactToDelete->AppendL(iResult);
+            iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+            CActiveScheduler::Start();    
+            break;        
+            }             
+        }
+    CleanupStack::Pop();
+    iFindResults = NULL;
+    /**end */
+    
+    return iErr;
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CContactsUT::DeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteContactL( CStifItemParser& aItem )
+    {   
+    __UHEAP_MARK;    
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    CSingleContact* myContact=NULL;
+    
+    HBufC8* conactId = NULL; 
+    
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+
+    CContactIter* Iter = serviceHandle->GetListL( EContacts );
+    
+    Iter->NextL(myContact,conactId);
+         
+    idArray.AppendL(&conactId->Des());
+              
+    serviceHandle->DeleteL(idArray);
+    
+    iLog->Log(_L("DeleteL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    //CActiveScheduler::Start(); 
+   
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle 
+    CleanupStack::PopAndDestroy(&idArray);//singleContactField
+    delete myContact;
+    delete conactId;
+    delete Iter;  
+    iLog->Log( KServiceClose ); 
+    __UHEAP_MARKEND; 
+    return iErr;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::DeleteListL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteGroupL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In DeleteList" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+     
+    /**Add 2 groups using virtual phonebook */
+    
+    _LIT(KGroup1,"Test1");
+    _LIT(KGroup2,"Test2");
+	iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup1);
+	iOperation = EGroup;
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+	
+	iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup2);
+	iOperation = EGroup;
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+    /**end */
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+        
+    /**Delete the groups using SAPI core class */
+    
+    /** Check for the added group using virtual phonebook classes */   
+      
+    iFindResults = iStore->ContactGroupsLC();    
+    TInt count(iFindResults->Count());    
+    if(count>1)
+        {
+        HBufC8* groupId;
+        RPointerArray<TDesC8> idArray;  
+        CleanupClosePushL(idArray);
+        while(count)
+            {
+            iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+            iOp = iContactManager->RetrieveContactL(*iResult,*this);
+            CActiveScheduler::Start();
+            
+            iGroup = iStoreContact->Group();
+            if(!iGroup->GroupLabel().Compare(KGroup1) || !iGroup->GroupLabel().Compare(KGroup2))
+                {
+                groupId = iResult->PackLC();
+                idArray.AppendL(groupId);
+                }             
+            }
+        TInt num(idArray.Count());  
+        if( num < 2)
+            {
+            return KErrGeneral;
+            }
+        __UHEAP_MARK;    
+        CContactService* serviceHandle = CContactService::NewL();
+        CleanupStack::PushL(serviceHandle);
+        iLog->Log( KServiceOpen );
+       
+        serviceHandle->DeleteL(idArray);
+        iLog->Log(_L("DeleteL called\n"));
+        iLog->Log(_L("Start Active Scheduler\n"));
+        //CActiveScheduler::Start(); 
+       
+        CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle 
+        __UHEAP_MARKEND;
+        CleanupStack::PopAndDestroy(num);//destroy all contactIds
+        CleanupStack::PopAndDestroy(&idArray);//singleContactField	
+          
+        iLog->Log( KServiceClose );        
+        }        
+    CleanupStack::Pop();
+    iFindResults = NULL;
+    /**end */
+    
+    return iErr;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::ModifyL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyL( CStifItemParser& aItem )
+    {    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In Modify" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+    
+    /** Add 1 contacts */
+       
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"123456"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+    
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /** ends */
+    
+    /** Retrieve contact ids and modify using SAPI core class */
+        
+    // Phone number to be searched for
+    _LIT( KMatchNo, "123456" );
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );
+    
+    CActiveScheduler::Start();    
+    TInt count(iFindResults->Count());
+    /**end*/
+    
+    /**Modify using SAPI core class*/
+    
+
+        iBuffer = (const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC();
+        CleanupStack::Pop();//iBuffer
+        
+    //__UHEAP_MARK;    
+    
+        iServiceHandle = CContactService::NewL();
+        iLog->Log( KServiceOpen );
+        
+        iOperation = EContact;
+        CContactIter* iter = iServiceHandle->GetListL(EContacts);
+        
+        
+                
+        iErr = KErrGeneral;
+        CSingleContact* singleContact = NULL;        
+        HBufC8* buf = NULL; 
+        
+        _LIT(KPhone,"Birbal");       
+        _LIT8(KField,"FirstName");
+        
+        while(ETrue)
+            {
+           // __UHEAP_MARK;
+            iter->NextL(singleContact,buf);           
+            if(!singleContact)
+                {
+                break;
+                }            
+            CleanupStack::PushL(singleContact);                
+             
+            if(!buf->Compare(*iBuffer))
+                {     
+                TInt count(singleContact->FieldCount());       
+                CSingleContactField* field = NULL;                 
+                while(count)
+                    {            
+                    TPtrC8 fieldKey;
+                    TPtrC label;
+                    TPtrC value;
+                    field = singleContact->FieldAt(--count);
+                    field->GetFieldDataL(fieldKey,label,value);
+                    if(!fieldKey.Compare(KField))
+                        {
+                        field->SetFieldParamsL(KField,KNullDesC,KPhone);
+                        iLog->Log(_L("Phone Contact Field modified \n"));
+                        //__UHEAP_MARK;
+                        iServiceHandle->AddL(singleContact);
+                        iLog->Log(_L("AddL called\n"));
+                        iLog->Log(_L("Start Active Scheduler\n"));
+                        // CActiveScheduler::Start(); 
+                        //__UHEAP_MARKEND;
+                        break;                        
+                        }
+                    }
+                }
+                
+             CleanupStack::PopAndDestroy(singleContact); 
+             delete buf;       
+            }
+        delete buf;         
+        delete iter;        
+        
+        CContactIter* iterr = iServiceHandle->GetListL(EContacts,iBuffer->Des());
+        
+         while(ETrue)
+            {
+            //__UHEAP_MARK;
+            iter->NextL(singleContact,buf);           
+            if(!singleContact)
+                {
+                break;
+                }            
+            CleanupStack::PushL(singleContact);                
+             
+            if(!buf->Compare(*iBuffer))
+                {     
+                TInt count(singleContact->FieldCount());       
+                CSingleContactField* field = NULL;                 
+                while(count)
+                    {            
+                    TPtrC8 fieldKey;
+                    TPtrC label;
+                    TPtrC value;
+                    field = singleContact->FieldAt(--count);
+                    field->GetFieldDataL(fieldKey,label,value);
+                    if(fieldKey == KField && value == KPhone)
+                        {
+                        iErr = KErrNone;                     
+                        }                      
+                    }
+                }
+            CleanupStack::PopAndDestroy(singleContact);
+            delete buf;     
+            }          
+        delete buf;          
+        iLog->Log(_L("GetListL called\n"));
+        iLog->Log(_L("Start Active Scheduler\n"));
+        //CActiveScheduler::Start();
+        
+        delete iServiceHandle;//serviceHandle  
+        delete iterr; 
+        iServiceHandle = NULL;
+        iLog->Log( KServiceClose );
+       // __UHEAP_MARKEND;
+            
+      
+     
+    /** ends */
+    
+    /**Delete using virtual Phonebook 
+    _LIT(KPhone1,"560087");
+    
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KPhone1, KPhone1().Length(), *this );    
+    CActiveScheduler::Start();
+    
+    iErr = KErrGeneral;
+    count = iFindResults->Count();
+    while(count)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();
+        }       
+    /**end  */   
+    
+    return iErr;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::ModifyGroupL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyGroupL( CStifItemParser& aItem )
+    {
+   
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In ModifyGroup" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+    /**Add 1 group using virtual phonebook */
+    
+    _LIT(KGroup1,"Modify1");
+    _LIT(KGroup2,"Modify2");
+    iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup1);
+	iOperation = EGroup;
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+	/**end */
+	
+	/** Check for the added group using virtual phonebook classes */
+    iFindResults = iStore->ContactGroupsLC();    
+    TInt count(iFindResults->Count());    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iOp = iContactManager->RetrieveContactL(*iResult,*this);
+        CActiveScheduler::Start();
+        
+        if(iErr)
+            {
+            break;
+            }
+        iErr = KErrGeneral;      
+        iGroup = iStoreContact->Group();
+        if(!iGroup->GroupLabel().Compare(KGroup1))
+            {
+             __UHEAP_MARK;
+            CContactService* serviceHandle = CContactService::NewL();
+            CleanupStack::PushL(serviceHandle);
+            iLog->Log( KServiceOpen );    
+              
+            serviceHandle->AddL(NULL,KNullDesC8,KGroup2);
+            iLog->Log(_L("ModifyGroupL called\n"));
+            iLog->Log(_L("Start Active Scheduler\n"));
+           // CActiveScheduler::Start();    
+            
+            CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle   
+            iLog->Log( KServiceClose ); 
+            __UHEAP_MARKEND;               
+            }             
+        }
+    CleanupStack::Pop();
+    iFindResults = NULL;
+    /**end */
+    
+    /** Check for the added group using virtual phonebook classes */
+    iFindResults = iStore->ContactGroupsLC();    
+    count = iFindResults->Count();    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iOp = iContactManager->RetrieveContactL(*iResult,*this);
+        CActiveScheduler::Start();
+        
+        if(iErr)
+            {
+            break;
+            }
+        iErr = KErrGeneral;      
+        iGroup = iStoreContact->Group();
+        if(!iGroup->GroupLabel().Compare(KGroup2))
+            {
+            iErr = KErrNone;
+            iContactToDelete = CVPbkContactLinkArray::NewL();
+            iContactToDelete->AppendL(iResult);
+            iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+            CActiveScheduler::Start();    
+            break;        
+            }             
+        }
+    CleanupStack::Pop();
+    iFindResults = NULL;
+    
+    /**end */
+    return iErr;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseAddL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::OrganiseAddL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In OrganiseAdd" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    
+    iErr = KErrNone;
+    
+    /** Add 1 group */
+        
+    _LIT(KGroup,"OrganiseTest1");
+   	iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup);
+	iOperation = EGroup;
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+	/** ends */
+	
+	
+    if(iErr)
+        {
+        return iErr;
+        }
+        
+    /** Retrieve the group id */
+    HBufC8* groupId = NULL;
+    iFindResults = iStore->ContactGroupsLC();    
+    TInt count(iFindResults->Count());
+    iErr = KErrGeneral;    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iOp = iContactManager->RetrieveContactL(*iResult,*this);
+        CActiveScheduler::Start();
+        
+        iGroup = iStoreContact->Group();
+        if(!iGroup->GroupLabel().Compare(KGroup))
+            {
+            groupId =iResult->PackLC();
+            CleanupStack::Pop();//groupId
+            break;           
+            }             
+        }
+    CleanupStack::Pop();//iFindResults
+    CleanupStack::PushL(groupId);
+    iFindResults = NULL;
+    /** ends */
+    
+    /** Add 2 contacts */
+    
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"24680"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+
+    
+    // Create second contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KSecondName,"Birbal"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KSecondNumber,"24680"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+    
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /** end */
+    
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+        
+        
+    /** Retrieve the 2 contacts */    
+    
+    // Phone number to be searched for
+    _LIT( KMatchNo, "24680" );
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );
+    
+    CActiveScheduler::Start();    
+    count = iFindResults->Count();
+    /**end*/
+    
+    /**Organise using SAPI core class*/    
+    if(count>1 && groupId)
+        {        
+        RPointerArray<TDesC8> idArray;
+        CleanupClosePushL(idArray);
+        TInt num(count);
+        while(count)
+            {
+            HBufC8* contactId = (const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC();
+            idArray.AppendL(contactId);  
+            }
+        __UHEAP_MARK;
+        CContactService* serviceHandle = CContactService::NewL();
+        CleanupStack::PushL(serviceHandle);
+        iLog->Log( KServiceOpen );
+        
+        serviceHandle->OrganiseGroupsL(*groupId,idArray,ETrue);
+        iLog->Log(_L("OrganiseGroupsL called\n"));
+        iLog->Log(_L("Start Active Scheduler\n"));
+        //CActiveScheduler::Start();
+        
+       
+        CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle 
+        __UHEAP_MARKEND;
+        CleanupStack::PopAndDestroy(num);//destroy all contactIds
+        CleanupStack::PopAndDestroy(&idArray);//singleContactField	
+          
+        iLog->Log( KServiceClose );        
+        }    
+    /** ends */
+    
+    
+    /** Check for the group and delete*/
+    iFindResults = iStore->ContactGroupsLC();    
+    count = iFindResults->Count();
+    iErr = KErrGeneral;    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        if(!(iResult->PackLC())->Compare(*groupId))
+            {
+            iOp = iContactManager->RetrieveContactL(*iResult,*this);
+            CActiveScheduler::Start();
+                
+            iGroup = iStoreContact->Group();
+            MVPbkContactLinkArray* linkArray = iGroup->ItemsContainedLC();
+            iOp = iContactManager->DeleteContactsL( *linkArray, *this );
+            CActiveScheduler::Start();
+            CleanupStack::Pop();//linkArray
+            
+            iContactToDelete = CVPbkContactLinkArray::NewL();
+            iContactToDelete->AppendL(iResult);
+            iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+            CActiveScheduler::Start();              
+            }
+        CleanupStack::PopAndDestroy();       
+        }
+    CleanupStack::Pop();
+    iFindResults = NULL;
+    /**end */
+    CleanupStack::PopAndDestroy(groupId);  
+    
+    return iErr;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::OrganiseDeleteL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In OrganiseDelete" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+    
+    /** Add 1 group */
+        
+    _LIT(KGroup,"OrganiseTest1");
+   	iGroup = iStore->CreateNewContactGroupLC();
+	iGroup->SetGroupLabelL(KGroup);
+	iOperation = EGroup;
+	iGroup->CommitL(*this);
+	
+	CActiveScheduler::Start();
+	CleanupStack::Pop();
+	/** ends */
+	
+	
+    if(iErr)
+        {
+        return iErr;
+        }        
+    
+    
+    /** Add 2 contacts */
+    
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"97531"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+
+    
+    // Create second contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KSecondName,"Birbal"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KSecondNumber,"97531"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+    
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /** end */
+    
+    
+    if(iErr)
+        {
+        return iErr;
+        }
+    
+    /** Retrieve the 2 contacts */    
+    RPointerArray<TDesC8> idArray;
+    CleanupClosePushL(idArray);
+    // Phone number to be searched for
+    _LIT( KMatchNo, "97531" );
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );
+    
+    CActiveScheduler::Start();    
+    TInt count = iFindResults->Count();
+    TInt num(count);
+    iContactToDelete = CVPbkContactLinkArray::NewL();
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iContactToDelete->AppendL(iResult);
+        idArray.AppendL(iResult->PackLC());
+        }
+    /** ends */    
+    
+    /** Retrieve the group id */
+    HBufC8* groupId = NULL;
+    iFindResults = iStore->ContactGroupsLC();    
+    count = iFindResults->Count();
+    iErr = KErrGeneral;    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iOp = iContactManager->RetrieveContactL(*iResult,*this);
+        CActiveScheduler::Start();
+        
+        iGroup = iStoreContact->Group();
+        if(!iGroup->GroupLabel().Compare(KGroup))
+            {
+            groupId =iResult->PackLC();
+            TInt count(iContactToDelete->Count());
+            while(count)
+                {
+                iGroup->AddContactL(iContactToDelete->At(--count));
+                }
+            CleanupStack::Pop();
+            break;           
+            }             
+        }
+    CleanupStack::Pop();
+    CleanupStack::PushL(groupId);    
+    iFindResults = NULL;
+    delete iContactToDelete;
+    iContactToDelete = NULL;
+    /** ends */        
+    
+    /**Organise using SAPI core class*/    
+    if(groupId)
+        {        
+        __UHEAP_MARK;
+        CContactService* serviceHandle = CContactService::NewL();
+        CleanupStack::PushL(serviceHandle);
+        iLog->Log( KServiceOpen );
+        
+        serviceHandle->OrganiseGroupsL(*groupId,idArray,EFalse);
+        iLog->Log(_L("OrganiseGroupsL called\n"));
+        iLog->Log(_L("Start Active Scheduler\n"));
+        //CActiveScheduler::Start();
+        
+       
+        CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle        
+          
+        iLog->Log( KServiceClose );   
+        __UHEAP_MARKEND;     
+        }    
+    /** ends */
+    
+    
+    /** Check for the group */
+    iFindResults = iStore->ContactGroupsLC();    
+    count = iFindResults->Count();
+    iErr = KErrGeneral;    
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        if(!(iResult->PackLC())->Compare(*groupId))
+            {
+            iContactToDelete = CVPbkContactLinkArray::NewL();
+            iContactToDelete->AppendL(iResult);
+            iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+            CActiveScheduler::Start();  
+            }
+        CleanupStack::PopAndDestroy();
+        }        
+    CleanupStack::Pop(); //iFindResults
+    iFindResults = NULL;
+    /**end */
+    CleanupStack::PopAndDestroy(groupId);
+    CleanupStack::PopAndDestroy(num);//destroy all contactIds
+    CleanupStack::PopAndDestroy(&idArray);//singleContactField	
+    
+    return iErr;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ImportL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In Import" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+    _LIT(KFileName,"c:\\vcardex.vcf");
+    
+    /** Add 1 contact */    
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"45678"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /** end */
+    
+     /** Retrieve the contact */    
+    
+    // Phone number to be searched for
+    _LIT( KMatchNo, "45678" );
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );
+    
+    CActiveScheduler::Start();    
+    TInt count = iFindResults->Count();
+    while(count)
+        {
+        iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+        iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+        
+        // Create the buffer to store the contact
+        iBuffer = HBufC8::NewL( 1024 );
+        TPtr8 bufferPtr( iBuffer->Des() );
+        iDestStream.Open( bufferPtr );
+        
+        iOperation = EVCard;
+        
+        //export the contact from MVPbkContactLink
+        iOp = iVCardEngine->ExportVCardL( iDestStream, *iResult, *this );
+        CActiveScheduler::Start();
+        
+        delete iVCardEngine;
+        iVCardEngine = NULL;   
+        
+        if(iBuffer)
+            {
+            RFile file;
+            CleanupClosePushL(file);            
+            file.Replace(iRfs,KFileName,EFileWrite);
+            file.Write(0,*iBuffer);
+            CleanupStack::PopAndDestroy(&file);
+            delete iBuffer;
+            iBuffer = NULL;
+            }
+            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(iResult);
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();        
+        }
+    iFindResults = NULL;
+    __UHEAP_MARK;
+    //using sapi
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );
+    
+    TFileName file(KFileName);
+    
+    serviceHandle->ImportVCardToStoreL(file);
+    iLog->Log(_L("ImportVCardToStoreL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+   // CActiveScheduler::Start();  
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle        
+    iLog->Log( KServiceClose );   
+    __UHEAP_MARKEND;
+     /**Delete using virtual Phonebook */ 
+    
+   
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );    
+    CActiveScheduler::Start();
+    iErr = KErrGeneral;
+    count = iFindResults->Count();
+    while(count)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start();
+        }       
+    /**end  */   
+    
+    return iErr;
+    }
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ExportL( CStifItemParser& aItem )
+    {
+    
+    // Print to UI
+    _LIT( KContactsTest, "ContactsTest" );
+    _LIT( KExample, "In Import" );
+    TestModuleIf().Printf( 0, KContactsTest, KExample );
+    // Print to log file
+    iLog->Log( KExample );
+
+    TInt i = 0;
+    TPtrC string;
+    _LIT( KParam, "Param[%i]: %S" );
+    while ( aItem.GetNextString ( string ) == KErrNone )
+        {
+        TestModuleIf().Printf( i, KContactsTest, 
+                                KParam, i, &string );
+        i++;
+        }
+    iErr = KErrNone;
+    _LIT(KFileName,"c:\\vcardim.vcf");
+    RFs fs;
+	CleanupClosePushL(fs);
+	User::LeaveIfError(fs.Connect());
+	RFile file;
+	if(!file.Open(fs,KFileName,EFileRead))
+	    {
+	    file.Close();
+		fs.Delete(KFileName);
+	    }
+	CleanupStack::PopAndDestroy(&fs);
+	
+    /** Add 1 contact */    
+    CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+    CleanupStack::PushL(fieldTypeRefList);
+    
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+    fieldTypeRefList->AppendL( 
+        *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+    
+    // Create first contact
+    iStoreContact = iStore->CreateNewContactLC();
+    
+    // Create contact field for contact
+    MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+    // Set contact field data
+    _LIT(KFirstName,"Tenali"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Create contact field for contact
+    field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+    // Set contact field data
+    _LIT(KFirstNumber,"214365"); 
+    (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+    // Add the contact field to contact
+    iStoreContact->AddFieldL( field );
+    CleanupStack::Pop(); // field
+    
+    // Commit the new created contact to contact store
+    iStoreContact->CommitL( *this );
+    CActiveScheduler::Start();	
+    CleanupStack::Pop(); // iStoreContact
+
+    CleanupStack::PopAndDestroy(fieldTypeRefList);
+    /** end */
+    
+    /** Retrieve the contact */    
+    
+    // Phone number to be searched for
+    _LIT( KMatchNo, "214365" );
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );
+    
+    CActiveScheduler::Start();    
+    TInt count = iFindResults->Count();
+   
+    iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+    iBuffer = iResult->PackLC();
+    CleanupStack::Pop();
+  //  __UHEAP_MARK;
+    //using sapi
+    CContactService* serviceHandle = CContactService::NewL();
+    CleanupStack::PushL(serviceHandle);
+    iLog->Log( KServiceOpen );    
+            
+    CSingleContact* myContact=NULL;
+    
+    HBufC8* conactId = NULL;         
+    TFileName filename(KFileName);
+    CContactIter* Iter = serviceHandle->GetListL( EContacts );
+    
+    Iter->NextL(myContact,conactId);  
+                      
+    serviceHandle->ExportVCardL(filename,conactId->Des());        
+    
+    delete myContact;
+    delete Iter;  
+    iLog->Log(_L("ExportVCardL called\n"));
+    iLog->Log(_L("Start Active Scheduler\n"));
+    //CActiveScheduler::Start();  
+    
+    CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle        
+    iLog->Log( KServiceClose );          
+  //   __UHEAP_MARKEND;
+     
+    iContactToDelete = CVPbkContactLinkArray::NewL();
+    iContactToDelete->AppendL(iResult);
+    iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+    CActiveScheduler::Start(); 
+    
+    delete iBuffer;
+    iBuffer = NULL;   
+            
+    RPointerArray< MVPbkStoreContact > importedContacts;
+    CleanupClosePushL(importedContacts);
+
+    iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+    
+    // Open the RFileReadStream that holds the vCard content
+    iErr = iSource.Open( iRfs, KFileName, EFileRead );
+
+    // Import the contact from RFileReadStream asynchronously
+    // The operation status is reported via MVPbkSingleContactOperationObserver.
+    iOp = iVCardEngine->ImportVCardL( importedContacts, *iStore, iSource, *this );
+    CActiveScheduler::Start();
+    
+    if(!importedContacts.Count())
+        {
+        return KErrGeneral;
+        
+        }
+   
+    // Close iImportedContacts
+    //
+    importedContacts.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(&importedContacts);   
+    iFindResults = NULL;
+    
+    /**Delete using virtual Phonebook */ 
+    
+    // Create find operation
+    iOp = iContactManager->MatchPhoneNumberL(
+        KMatchNo, KMatchNo().Length(), *this );    
+    CActiveScheduler::Start();
+        
+    count = iFindResults->Count();
+    while(count)
+        {            
+        iContactToDelete = CVPbkContactLinkArray::NewL();
+        iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+        iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+        CActiveScheduler::Start() ;
+        }
+    /**end  */ 
+    
+    return iErr;
+    }
+
+    
+    
+//End of file