diff -r 000000000000 -r 32704c33136d ncdengine/engine/accesspointmanager/src/catalogsclientaccesspointdata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/engine/accesspointmanager/src/catalogsclientaccesspointdata.cpp Tue Jan 26 12:06:03 2010 +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; + } +