ncdengine/engine/accesspointmanager/src/catalogsclientaccesspointdata.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/accesspointmanager/src/catalogsclientaccesspointdata.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Class CCatalogsClientAccessPointData declation
+*
+*/
+
+
+#include "catalogsclientaccesspointdata.h"
+#include "catalogsaccesspoint.h"
+#include "catalogsaccesspointmap.h"
+#include "catalogsdebug.h"
+#include "ncdnodeidentifier.h"
+#include "ncdnodeidentifiereditor.h"
+
+CCatalogsClientAccessPointData* CCatalogsClientAccessPointData::NewL() 
+    {
+    CCatalogsClientAccessPointData* self = NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+    
+CCatalogsClientAccessPointData* CCatalogsClientAccessPointData::NewLC()
+    {
+    CCatalogsClientAccessPointData* self = 
+        new (ELeave) CCatalogsClientAccessPointData();
+    CleanupStack::PushL(self);
+    return self;
+    }
+    
+CCatalogsClientAccessPointData::~CCatalogsClientAccessPointData() 
+    {
+    iAccessPoints.ResetAndDestroy();
+    iAccessPointMaps.ResetAndDestroy();
+    }
+    
+void CCatalogsClientAccessPointData::AddAccessPointL(CCatalogsAccessPoint* aAccessPoint) 
+    {
+    iAccessPoints.AppendL(aAccessPoint);
+    }
+    
+void CCatalogsClientAccessPointData::MapAccessPointL(
+    const TDesC& aNameSpace,
+    const MCatalogsAccessPointManager::TAction& aAction,
+    const TDesC& aApId) 
+    {
+    // check if some access point is mapped already
+    TInt mapCount = iAccessPointMaps.Count();
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        CCatalogsAccessPointMap* map = iAccessPointMaps[i];
+        if (map->NameSpace() == aNameSpace && map->Action() == aAction) 
+            {
+            // access point map found, delete it
+            iAccessPointMaps.Remove(i);
+            break;
+            }
+        }
+     
+    // create new map
+    CCatalogsAccessPointMap* map = CCatalogsAccessPointMap::NewLC(
+        aNameSpace, aAction, aApId);
+    iAccessPointMaps.AppendL(map);
+    CleanupStack::Pop(map);
+    iAccessPointMaps.Compress();
+    }
+
+void CCatalogsClientAccessPointData::MapAccessPointL(
+    const TDesC& aNameSpace,
+    const TDesC& aCatalogId,
+    const MCatalogsAccessPointManager::TAction& aAction,
+    const TDesC& aApId) 
+    {
+    // check if some access point is mapped already
+    TInt mapCount = iAccessPointMaps.Count();
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        CCatalogsAccessPointMap* map = iAccessPointMaps[i];
+        if (map->NameSpace() == aNameSpace && map->HasCatalogId() &&
+            map->CatalogId() == aCatalogId && map->Action() == aAction) 
+            {
+            // access point map found, delete it
+            iAccessPointMaps.Remove(i);
+            break;
+            }
+        }
+     
+    // create new map
+    CCatalogsAccessPointMap* map = CCatalogsAccessPointMap::NewLC(
+        aNameSpace, aCatalogId, aAction, aApId);
+    iAccessPointMaps.AppendL(map);
+    CleanupStack::Pop(map);
+    iAccessPointMaps.Compress();
+    }
+    
+CCatalogsAccessPoint* CCatalogsClientAccessPointData::AccessPoint(
+    const TDesC& aNameSpace,
+    const MCatalogsAccessPointManager::TAction& aAction) const
+    {
+    const TDesC* apId = NULL;        
+    
+    // find the access point id
+    // find the map
+    TInt mapCount = iAccessPointMaps.Count();
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        CCatalogsAccessPointMap* map = iAccessPointMaps[i];
+        if (map->NameSpace() == aNameSpace && map->Action() == aAction && !map->HasCatalogId()) 
+            {
+            // id found
+            apId = &map->AccessPointId();
+            break;
+            }
+        }
+
+    if (!apId) 
+        {        
+        return NULL;
+        }
+    
+    return AccessPointById(*apId);
+    }
+
+CCatalogsAccessPoint* CCatalogsClientAccessPointData::AccessPointL(
+    const TDesC& aNameSpace,
+    const TDesC& aCatalogId,
+    const MCatalogsAccessPointManager::TAction& aAction) const
+    {
+    const TDesC* apId = NULL;        
+    
+    // Create metadata identifier and search the access point using it.
+    // Fake clientUid can be used, we are only interested in namespace and id
+    // at this point.
+    CNcdNodeIdentifier* nodeId =
+        CNcdNodeIdentifier::NewLC( aNameSpace, aCatalogId, TUid::Uid( 1 ) );         
+    CNcdNodeIdentifier* metaDataId = 
+        NcdNodeIdentifierEditor::CreateMetaDataIdentifierL( *nodeId );
+    CleanupStack::PopAndDestroy( nodeId );
+    
+    // find the access point id
+    // find the map
+    TInt mapCount = iAccessPointMaps.Count();
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        CCatalogsAccessPointMap* map = iAccessPointMaps[i];
+        if (map->NameSpace() == metaDataId->NodeNameSpace() && map->HasCatalogId() &&
+            map->CatalogId() == metaDataId->NodeId() && map->Action() == aAction) 
+            {
+            // id found
+            apId = &map->AccessPointId();
+            break;
+            }
+        }
+
+    delete metaDataId;
+    metaDataId = NULL;
+    
+    if (!apId) 
+        {        
+        return NULL;
+        }
+    
+    return AccessPointById(*apId);
+    }
+    
+TInt CCatalogsClientAccessPointData::AccessPointCount() const 
+    {
+    return iAccessPoints.Count();
+    }
+    
+CCatalogsAccessPoint& CCatalogsClientAccessPointData::AccessPoint(const TInt& aIndex)
+    {
+    return *iAccessPoints[aIndex];
+    }
+
+    
+void CCatalogsClientAccessPointData::ExternalizeL(RWriteStream& aStream) 
+    {
+    DLTRACEIN((""));
+    
+    TInt apCount = iAccessPoints.Count();
+    
+    // write access points
+    aStream.WriteInt32L(apCount);
+    for (TInt i = 0; i < apCount; i++) 
+        {
+        iAccessPoints[i]->ExternalizeL(aStream);
+        }
+        
+    TInt mapCount = iAccessPointMaps.Count();
+    aStream.WriteInt32L(mapCount);
+    
+    // write access point maps
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        iAccessPointMaps[i]->ExternalizeL(aStream);
+        }
+    DLTRACEOUT((""));
+    }
+    
+void CCatalogsClientAccessPointData::InternalizeL(RReadStream& aStream) 
+    {    
+    DLTRACEIN((""));
+    TInt apCount = aStream.ReadInt32L();
+    for (TInt i = 0; i < apCount; i++) 
+        {
+        CCatalogsAccessPoint* ap = CCatalogsAccessPoint::NewLC(aStream);
+        iAccessPoints.AppendL(ap);
+        CleanupStack::Pop(); // ap
+        }
+        
+    TInt mapCount = aStream.ReadInt32L();
+    for (TInt i = 0; i < mapCount; i++) 
+        {
+        CCatalogsAccessPointMap* apMap = CCatalogsAccessPointMap::NewLC(aStream);
+        iAccessPointMaps.AppendL(apMap);
+        CleanupStack::Pop(); // apMap
+        }
+    }
+     
+    
+CCatalogsClientAccessPointData::CCatalogsClientAccessPointData()
+    {
+    }
+    
+CCatalogsAccessPoint* CCatalogsClientAccessPointData::AccessPointById(
+    const TDesC& apId) const 
+    {
+    TInt apCount = iAccessPoints.Count();
+    for (TInt i = 0; i < apCount; i++) 
+        {
+        if (iAccessPoints[i]->NcdAccessPointId() == apId) 
+            {
+            return iAccessPoints[i];
+            }
+        }
+    
+    return NULL;
+    }
+