videofeeds/server/tsrc/VCXServiceManagementApiTest/src/CIptvTestServiceStore.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/tsrc/VCXServiceManagementApiTest/src/CIptvTestServiceStore.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,707 @@
+/*
+* 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: 
+*
+*/
+
+
+
+//  INCLUDES
+#include "CIptvTestServiceStore.h"
+#include "VCXTestLog.h"
+#include "CIptvTestUtilities.h"
+
+#include "CIptvService.h"
+#include "CIptvServices.h"
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::NewL
+// -----------------------------------------------------------------------------
+//
+CIptvTestServiceStore* CIptvTestServiceStore::NewL( CIptvTestServiceStore* aStore, CIptvTestUtilities* aTestUtil )
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::NewL");
+    CIptvTestServiceStore* self = new (ELeave) CIptvTestServiceStore();
+    CleanupStack::PushL(self);
+    self->ConstructL( aStore, aTestUtil, NULL );
+    CleanupStack::Pop(self);
+    VCXLOGLO1("<<<CIptvTestServiceStore::NewL");
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::NewL
+// -----------------------------------------------------------------------------
+//
+CIptvTestServiceStore* CIptvTestServiceStore::NewL( CIptvServices* aServices )
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::NewL");
+    CIptvTestServiceStore* self = new (ELeave) CIptvTestServiceStore();
+    CleanupStack::PushL(self);
+    self->ConstructL( NULL, NULL, aServices );
+    CleanupStack::Pop(self);
+    VCXLOGLO1("<<<CIptvTestServiceStore::NewL");
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::~CIptvTestServiceStore
+// -----------------------------------------------------------------------------
+//
+CIptvTestServiceStore::~CIptvTestServiceStore()
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::~CIptvTestServiceStore");
+
+    iServices.ResetAndDestroy();
+    iServices.Close();
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::~CIptvTestServiceStore");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::CIptvTestServiceStore
+// -----------------------------------------------------------------------------
+//
+CIptvTestServiceStore::CIptvTestServiceStore()
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::CIptvTestServiceStore");
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::CIptvTestServiceStore");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::ConstructL( CIptvTestServiceStore* aStore, CIptvTestUtilities* aTestUtil, CIptvServices* aServices )
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::ConstructL");
+
+    iIptvTestUtilities = aTestUtil;
+
+    if(aStore != NULL)
+        {
+        TInt i;
+        for(i=0; i<aStore->ServiceCount(); i++)
+            {
+            CIptvService* service;
+            service = aStore->GetService(i);
+            if(service != NULL)
+                {
+                AddServiceL( *service );
+                }
+            }
+        }
+
+    if(aServices != NULL)
+        {
+        TInt i;
+        for(i=0; i<aServices->Count(); i++)
+            {
+            CIptvService* service;
+            service = aServices->GetServiceL(i);
+            CleanupStack::PushL( service );
+            AddServiceL( *service );
+            CleanupStack::PopAndDestroy( service );
+            }
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::ConstructL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::RefreshServicesFromDbL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::RefreshServicesFromDbL(TUint32 aFlagsFilter, CIptvServiceManagementClient::TOrder aOrder)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::RefreshServicesFromDbL");
+
+    if(!iIptvTestUtilities)
+        {
+        VCXLOGLO1("No instance of CIptvTestUtilities!");
+        VCXLOGLO1("<<<CIptvTestServiceStore::RefreshServicesFromDbL");
+        User::Leave(KErrNotReady);
+        }
+
+    DeleteAllServices();
+
+    TBool ok = EFalse;
+    TRAPD(error, ok = iIptvTestUtilities->GetServicesFromDbL(iServices, aFlagsFilter, aOrder) );
+
+    if(!ok || error)
+        {
+        iServices.ResetAndDestroy();
+
+        VCXLOGLO3("** FAIL ** Getting services failed. ok: %d, leave: %d", ok, error);
+        VCXLOGLO1("<<<CIptvTestServiceStore::RefreshServicesFromDbL");
+        }
+
+    error = (error == KErrNone && ok == EFalse) ? KErrGeneral : error;
+    if(error != KErrNone)
+        {
+        VCXLOGLO2("CIptvTestServiceStore::RefreshServicesFromDbL ERROR %d", error);
+        VCXLOGLO1("<<<CIptvTestServiceStore::RefreshServicesFromDbL");
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::RefreshServicesFromDbL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::AddServiceL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::AddServiceL(CIptvService& aService)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::AddServiceL");
+
+    CIptvService* service = CloneServiceL(aService);
+    iServices.Append( service );
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::AddServiceL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::AddServicesL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::AddServicesL(RPointerArray<CIptvService>& aServiceArray)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::AddServicesL");
+
+    TInt i;
+    for(i=0; i<aServiceArray.Count(); i++)
+        {
+        AddServiceL(*aServiceArray[i]);
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::AddServicesL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::ReplaceServiceL
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::ReplaceServiceL(TInt aId, CIptvService& aService)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::ReplaceServiceL");
+
+    TInt i = FindService(iServices, aId);
+    if(i < KErrNone)
+        {
+        VCXLOGLO1("<<<CIptvTestServiceStore::ReplaceServiceL");
+        User::Leave(i);
+        }
+
+    CIptvService* service = CloneServiceL(aService);
+
+    VCXLOGLO1("Services before:");
+    PrintServices();
+
+    // Get the old service
+    CIptvService* oldService = iServices[i];
+    service->SetId( oldService->GetId() );
+    delete oldService;
+    oldService = NULL;
+    
+    iServices.Insert(service, i);
+    iServices.Remove(i+1);
+
+    VCXLOGLO1("Services now:");
+    PrintServices();
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::ReplaceServiceL");
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::DeleteService
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::DeleteService(TInt aId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::DeleteService");
+
+    TInt i = FindService(iServices, aId);
+    if(i < KErrNone)
+        {
+        VCXLOGLO1("<<<CIptvTestServiceStore::DeleteService");
+        return i;
+        }
+
+    CIptvService* service = iServices[i];
+    if( service->GetType() == CIptvService::EServiceGroup )
+        {
+        /* Get groupId and delete the group */
+        TInt groupID( service->GetGroupId() );
+        delete service;
+        service = NULL;
+        iServices.Remove(i);
+        
+        /* delete services with groupID */
+        TInt groupedIndex( 0 );
+        groupedIndex = FindServiceByGroupId( iServices, groupID );
+        while( groupedIndex != KErrNotFound )
+            {
+            iServices.Remove( groupedIndex );
+            groupedIndex = FindServiceByGroupId( iServices, groupID );
+            }
+        }
+    else
+        {
+        delete service;
+        service = NULL;
+        iServices.Remove(i);        
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::DeleteService");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::Compare
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::Compare(CIptvTestServiceStore& aStore)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::Compare");
+
+    if( aStore.ServiceCount() != iServices.Count() )
+        {
+        VCXLOGLO3("Counts of services are different, %d vs. %d.", aStore.ServiceCount(), iServices.Count() );
+        VCXLOGLO1("<<<CIptvTestServiceStore::Compare");
+        return KErrCorrupt;
+        }
+
+    TInt i;
+    for(i=0; i< aStore.ServiceCount(); i++)
+        {
+        CIptvService* service = aStore.GetService(i);
+        if(!CompareServices(*(iServices[i]), *service ))
+            {
+            VCXLOGLO2("Services at index %d are different!", i);
+            VCXLOGLO1("<<<CIptvTestServiceStore::Compare");
+            return KErrCorrupt;
+            }
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::Compare");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::GetService
+// -----------------------------------------------------------------------------
+//
+CIptvService* CIptvTestServiceStore::GetService(TInt aIndex)
+    {
+    CIptvService* service = NULL;
+    ASSERT(aIndex >= 0 && aIndex < iServices.Count());
+    service = iServices[aIndex];
+    return service;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::GetServiceById
+// -----------------------------------------------------------------------------
+//
+CIptvService* CIptvTestServiceStore::GetServiceById(TInt aId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::GetServiceById");
+    CIptvService* service = NULL;
+
+    TInt i;
+    for(i=0; i< iServices.Count(); i++)
+        {
+        if(iServices[i]->GetId() == aId)
+            {
+            service = iServices[i];
+            break;
+            }
+        }
+
+    if(service == NULL)
+        {
+        VCXLOGLO2("Service not found with id: %d", aId);
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::GetServiceById");
+    return service;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::GetGroupedServicesById
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::GetGroupedServicesByGroupId(RPointerArray<CIptvService>& aServicesArray, TInt aId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::GetGroupedServicesById");
+
+    TInt i;
+    for( i=0; i< iServices.Count(); i++ )
+        {
+        if( iServices[i]->GetGroupId() == aId && iServices[i]->GetType() != CIptvService::EServiceGroup )
+            {
+            aServicesArray.Append( iServices[i] );
+            }
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::GetGroupedServicesById");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::GetServices
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::GetServices(RPointerArray<CIptvService>& aServicesArray)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::GetServices");
+
+    TInt i;
+    for(i=0; i< iServices.Count(); i++)
+        {
+        aServicesArray.Append( iServices[i] );
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::GetServices");
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::GetServicesByProviderId
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::GetServicesByProviderId(RPointerArray<CIptvService>& aServicesArray, TDes& aProviderId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::GetServicesByProviderId");
+
+    TInt i;
+    for(i=0; i< iServices.Count(); i++)
+        {
+        if(iServices[i]->GetProviderId() == aProviderId)
+            {
+            aServicesArray.Append( iServices[i] );
+            }
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::GetServicesByProviderId");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::ServiceCount
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::ServiceCount()
+    {
+    return iServices.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::PrintServices
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::PrintServices()
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::PrintServices");
+
+    TInt i;
+    for(i=0; i< iServices.Count(); i++)
+        {
+        TBuf<256> name;
+        TBuf<256> providerId;
+        name = iServices[i]->GetName();
+        providerId = iServices[i]->GetProviderId();
+        VCXLOGLO4("%d, Name: %S, Provider: %S", iServices[i]->GetId(), &name, &providerId );
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::PrintServices");
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::DeleteAllServices
+// -----------------------------------------------------------------------------
+//
+void CIptvTestServiceStore::DeleteAllServices()
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::DeleteAllServices");
+
+    iServices.ResetAndDestroy();
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::DeleteAllServices");
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::CompareServices
+// -----------------------------------------------------------------------------
+//
+TBool CIptvTestServiceStore::CompareServices(CIptvService& aS1, CIptvService& aS2)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::CompareServices");
+
+    TBool rv(TRUE);
+    TUint8 i(0);
+
+    VCXLOGLO3("Comparing services: ID: %d - %d", aS1.GetId(), aS2.GetId());
+    VCXLOGLO3(" - Name: %S - %S", &aS1.GetName(), &aS2.GetName() );
+
+    if(aS1.GetName() != aS2.GetName())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Name doesn't match: name1 = %S, name2 = %S",&aS1.GetName(),&aS2.GetName());
+        }
+
+    if(aS1.GetAddress() != aS2.GetAddress())
+        {
+         rv = EFalse;
+        VCXLOGLO3("Address doesn't match: address1 = %S, address2 = %S",&aS1.GetAddress(),&aS2.GetAddress());
+        }
+
+    if(aS1.GetIconPath() != aS2.GetIconPath())
+        {
+         rv = EFalse;
+        VCXLOGLO3("IconPath doesn't match: IconPath1 = %S, IconPath2 = %S",&aS1.GetIconPath(),&aS2.GetIconPath());
+        }
+
+    if(aS1.GetEpgPluginUid() != aS2.GetEpgPluginUid())
+        {
+         rv = EFalse;
+        VCXLOGLO3("EpgPluginUid doesn't match: EpgPluginUid1 = %d, EpgPluginUid2 = %d",aS1.GetEpgPluginUid(),aS2.GetEpgPluginUid());
+        }
+
+    if(aS1.GetVodPluginUid() != aS2.GetVodPluginUid())
+        {
+         rv = EFalse;
+        VCXLOGLO3("VodPluginUid doesn't match: VodPluginUid1 = %d, VodPluginUid2 = %d",aS1.GetVodPluginUid(),aS2.GetVodPluginUid());
+        }
+
+    if(aS1.GetIptvPluginUid() != aS2.GetIptvPluginUid())
+        {
+         rv = EFalse;
+        VCXLOGLO3("IptvPluginUid doesn't match: IptvPluginUid1 = %d, IptvPluginUid2 = %d",aS1.GetIptvPluginUid(),aS2.GetIptvPluginUid());
+        }
+
+    if(aS1.GetType() != aS2.GetType())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Type doesn't match: Type1 = %d Type2 = %d", aS1.GetType(), aS2.GetType());
+        }
+
+    CIptvIapList& iapListS1 = aS1.GetIapList();
+    CIptvIapList& iapListS2 = aS2.GetIapList();
+    TIptvIap iapS1;
+    TIptvIap iapS2;
+
+    if(iapListS1.Count() != iapListS2.Count())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Cnt of iaps doesn't match: Service1 = %d Service2 = %d", iapListS1.Count(), iapListS2.Count());
+        }
+
+    if(rv) // Same count of iaps
+        {
+        for(i = 0; i < iapListS1.Count(); i++)
+            {
+            iapListS1.GetIap(i, iapS1);
+            iapListS2.GetIap(i, iapS2);
+
+            if(iapS1.iId != iapS2.iId || iapS1.iPriority != iapS2.iPriority)
+                {
+                rv = EFalse;
+                VCXLOGLO2("IAP %d doesn't match", i);
+                }
+            }
+        }
+
+    if(aS1.GetUserName() != aS2.GetUserName())
+        {
+        rv = EFalse;
+        VCXLOGLO3("UserName doesn't match: UserName1 = %S, UserName2 = %S",&aS1.GetUserName() ,&aS2.GetUserName());
+        }
+
+    if(aS1.GetPassword() != aS2.GetPassword())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Password doesn't match:Password1 = %S, Password2 = %S",&aS1.GetPassword() ,&aS2.GetPassword());
+        }
+
+    if(aS1.GetDesc() != aS2.GetDesc())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Desription doesn't match: Desription1 = %S, Desription2 = %S",&aS1.GetDesc() ,&aS2.GetDesc());
+        }
+
+    if(aS1.GetFlags() != aS2.GetFlags())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Flags doesn't match: 0x%x & 0x%x", aS1.GetFlags(), aS2.GetFlags() );
+
+        VCXLOGLO1("Service1 flags: ");
+        if(aS1.GetFlags() & CIptvService::ESelected)
+            {
+            VCXLOGLO1("ESelected");
+            }
+        if(aS1.GetFlags() & CIptvService::EReadOnly)
+            {
+            VCXLOGLO1("EReadOnly");
+            }
+        if(aS1.GetFlags() & CIptvService::EMainService)
+            {
+            VCXLOGLO1("EMainService");
+            }
+        if(aS1.GetFlags() & CIptvService::EConnectionApproved)
+            {
+            VCXLOGLO1("EConnectionApproved");
+            }
+        if(aS1.GetFlags() & CIptvService::EReadOnlyIaps)
+            {
+            VCXLOGLO1("EReadOnlyIaps");
+            }
+
+        VCXLOGLO1("Service2 flags: ");
+        if(aS2.GetFlags() & CIptvService::ESelected)
+            {
+            VCXLOGLO1("ESelected");
+            }
+        if(aS2.GetFlags() & CIptvService::EReadOnly)
+            {
+            VCXLOGLO1("EReadOnly");
+            }
+        if(aS2.GetFlags() & CIptvService::EMainService)
+            {
+            VCXLOGLO1("EMainService");
+            }
+        if(aS2.GetFlags() & CIptvService::EConnectionApproved)
+            {
+            VCXLOGLO1("EConnectionApproved");
+            }
+        if(aS2.GetFlags() & CIptvService::EReadOnlyIaps)
+            {
+            VCXLOGLO1("EReadOnlyIaps");
+            }
+
+        }
+
+    if(aS1.GetApplicationUid() != aS2.GetApplicationUid())
+        {
+        rv = EFalse;
+        VCXLOGLO1("Application uid doesn't match");
+        }
+
+    /*if(aS1.GetDisplayOrder() != aS2.GetDisplayOrder())
+        {
+        rv = EFalse;
+        VCXLOGLO1("Display order doesn't match");
+        }
+    */
+        if(aS1.GetProviderId() != aS2.GetProviderId())
+        {
+        rv = EFalse;
+        VCXLOGLO3("Provider id doesn't match: id1 = %S, id2 = %S", &aS1.GetProviderId(), &aS2.GetProviderId());
+        }
+
+            if(aS1.GetAccountManagementUrl() != aS2.GetAccountManagementUrl())
+        {
+        rv = EFalse;
+        VCXLOGLO3("AccountManagementUrl doesn't match: url1 = %S, url2 = %S", &aS1.GetAccountManagementUrl(), &aS2.GetAccountManagementUrl());
+        }
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::CompareServices");
+    return rv;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::FindService
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::FindService(RPointerArray<CIptvService>& aServices, TInt aId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::FindService");
+    TInt i;
+
+    if( aServices.Count() > 0 )
+        {
+        for( i=aServices.Count()-1; i>=0; i-- )
+        //for(i=0; i<aServices.Count(); i++)
+            {
+            if( aServices[i]->GetId() == aId )
+                {
+                VCXLOGLO2("Found ID: %d",  aServices[i]->GetId());
+                return i;
+                }
+            }
+        }
+
+    VCXLOGLO2("Service not found: %d", aId);
+    VCXLOGLO1("<<<CIptvTestServiceStore::FindService");
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::FindServiceByGroupId
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestServiceStore::FindServiceByGroupId(RPointerArray<CIptvService>& aServices, TInt aGroupId)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::FindServiceByGroupId");
+    TInt i;
+
+    VCXLOGLO2("Searching for service with group ID %d.",  aGroupId);
+    
+    if( aServices.Count() > 0 )
+        {
+        for( i=aServices.Count()-1; i>=0; i-- )
+            {
+            if( aServices[i]->GetGroupId() == aGroupId )
+                {
+                VCXLOGLO2("Found service: %d",  aServices[i]->GetId());
+                return i;
+                }
+            }
+        }
+
+    VCXLOGLO2("Service with group ID %d not found!", aGroupId);
+    VCXLOGLO1("<<<CIptvTestServiceStore::FindServiceByGroupId");
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvTestServiceStore::CloneServiceL
+// -----------------------------------------------------------------------------
+//
+CIptvService* CIptvTestServiceStore::CloneServiceL(CIptvService& aService)
+    {
+    VCXLOGLO1(">>>CIptvTestServiceStore::CloneServiceL");
+
+    CIptvService* iptvService = CIptvService::NewL();
+    CleanupStack::PushL(iptvService);
+    HBufC8* buff = aService.GetL();
+    CleanupStack::PushL( buff );
+    iptvService->SetL( buff->Des() );
+    CleanupStack::Pop( buff );
+    delete buff;
+    CleanupStack::Pop(iptvService);
+
+    VCXLOGLO1("<<<CIptvTestServiceStore::CloneServiceL");
+
+    return iptvService;
+    }
+
+// End of File