diff -r 000000000000 -r 61fad867f68e ximpfw/presence/srcpresencedatamodel/presencecache/presencebuddyinfolistimp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ximpfw/presence/srcpresencedatamodel/presencecache/presencebuddyinfolistimp.cpp Wed Nov 03 09:32:20 2010 +0530 @@ -0,0 +1,317 @@ +/* +* Copyright (c) 2007, 2008 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: CPresenceBuddyInfoListImp object implementation. +* +*/ + + +#include +#include +#include + +#include "presencebuddyinfolistimp.h" +#include "presencebuddyinfoimp.h" +#include "ximpidentityimp.h" +#include "ximptrace.h" +#include "ximprbufhelpers.h" + +_LIT(KColon, ":"); + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::NewLC() +// --------------------------------------------------------------------------- +// +EXPORT_C CPresenceBuddyInfoListImp* CPresenceBuddyInfoListImp::NewLC( + const TDesC& aServiceName) + { + CPresenceBuddyInfoListImp* self = new( ELeave ) CPresenceBuddyInfoListImp; + CleanupStack::PushL( self ); + self->ConstructL(aServiceName); + return self; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::NewL() +// --------------------------------------------------------------------------- +// +EXPORT_C CPresenceBuddyInfoListImp* CPresenceBuddyInfoListImp::NewL( + const TDesC& aServiceName) + { + CPresenceBuddyInfoListImp* self = NewLC(aServiceName); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::~CPresenceBuddyInfoListImp() +// --------------------------------------------------------------------------- +// +CPresenceBuddyInfoListImp::~CPresenceBuddyInfoListImp() + { + if(iOwnDataObjects) + { + TInt count = iBuddyCollection.Count(); + for (TInt i=0;i& CPresenceBuddyInfoListImp::GetObjectCollection() + { + return iBuddyCollection; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::ServiceName() +// --------------------------------------------------------------------------- +// +TPtrC CPresenceBuddyInfoListImp::ServiceName() const + { + return iService; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::Count() +// --------------------------------------------------------------------------- +// +TInt CPresenceBuddyInfoListImp::Count() const + { + return iBuddyCollection.Count(); + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::AddOrReplace() +// --------------------------------------------------------------------------- +// +TInt CPresenceBuddyInfoListImp::AddOrReplace( + MPresenceBuddyInfo* aPresenceBuddyInfo) + { + TRACE( _L("CPresenceBuddyInfoListImp::AddOrReplace - begin") ); + TRACE_1( _L("______identity: %S"), &(aPresenceBuddyInfo->BuddyId()->Identity())); + if(!aPresenceBuddyInfo) + return KErrArgument; + + if ( (ServiceName() != KNullDesC) && + (ExtractService( aPresenceBuddyInfo->BuddyId()->Identity()).Compare( ServiceName()) )) + { + return KErrArgument; + } + TInt count = iBuddyCollection.Count(); + for(TInt i=0;iEqualsIdentity(aPresenceBuddyInfo))) + { + delete iBuddyCollection[i]; + iBuddyCollection.Remove(i); + TRACE( _L("_________Match found") ); + break; + } + } + iBuddyCollection.Append(aPresenceBuddyInfo); + TRACE( _L("CPresenceBuddyInfoListImp::AddOrReplace - return")); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::FindAndRemove() +// --------------------------------------------------------------------------- +// +TInt CPresenceBuddyInfoListImp::FindAndRemove(const MXIMPIdentity& aIdentity) + { + TRACE( _L("CPresenceBuddyInfoListImp::FindAndRemove - begin") ); + TRACE_1( _L("______identity: %S"), &(aIdentity.Identity())); + TInt err(KErrNotFound); + TInt count = iBuddyCollection.Count(); + for(TInt i=0;iBuddyId()->Identity())== aIdentity.Identity() ) + { + delete iBuddyCollection[i]; + iBuddyCollection.Remove(i); + err = KErrNone; + break; + } + } + TRACE_1( _L("CPresenceBuddyInfoListImp::FindAndRemove - err=%d"),err ); + return err; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::FindAndGet() +// --------------------------------------------------------------------------- +// +MPresenceBuddyInfo* CPresenceBuddyInfoListImp::FindAndGet( + const MXIMPIdentity& aIdentity) const + { + TRACE( _L("CPresenceBuddyInfoListImp::FindAndGet - begin") ); + TRACE_1( _L("______identity: %S"), &(aIdentity.Identity())); + MPresenceBuddyInfo* buddyPresInfo(NULL); + + TInt count = iBuddyCollection.Count(); + for(TInt i=0;iBuddyId()->Identity())== aIdentity.Identity() ) + { + buddyPresInfo = iBuddyCollection[i]; + break; + } + } + TRACE_1( _L("CPresenceBuddyInfoListImp::FindAndGet - buddyPresInfo=%d"),buddyPresInfo ); + return buddyPresInfo; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::NewFromStreamLC() +// --------------------------------------------------------------------------- +// +XIMPIMP_IMPLEMENT_DATAOBJ_NEWFROMSTREAM( CPresenceBuddyInfoListImp ) + + +// --------------------------------------------------------------------------- +// Implement supported interface access. +// --------------------------------------------------------------------------- +// +XIMPIMP_IF_BASE_GET_INTERFACE_BEGIN( CPresenceBuddyInfoListImp, + MPresenceBuddyInfoList ) +XIMPIMP_IF_BASE_GET_INTERFACE_END() + + +XIMPIMP_IF_BASE_GET_CONST_INTERFACE_BEGIN( CPresenceBuddyInfoListImp, + MPresenceBuddyInfoList ) +XIMPIMP_IF_BASE_GET_INTERFACE_END() + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::ExternalizeL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CPresenceBuddyInfoListImp::ExternalizeL( RWriteStream& aStream ) const + { + TUint32 count = iBuddyCollection.Count(); + CPresenceBuddyInfoImp* tmp(NULL); + + aStream.WriteInt32L(count); + for (TInt i=0;i::From( *(iBuddyCollection[i])); + tmp->ExternalizeL( aStream ); + } + + XIMPRBuf16Helper::ExternalizeL( iService, aStream ); + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::InternalizeL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CPresenceBuddyInfoListImp::InternalizeL( RReadStream& aStream ) + { + TUint32 internalizeCount = aStream.ReadInt32L(); + CPresenceBuddyInfoImp* tmp(NULL); + for (TInt i=0;iInternalizeL( aStream ); + iBuddyCollection.Append(tmp); + CleanupStack::Pop( tmp ); + } + XIMPRBuf16Helper::InternalizeL( iService, aStream ); + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::EqualsContent() +// --------------------------------------------------------------------------- +// +TBool CPresenceBuddyInfoListImp::EqualsContent( + const CXIMPApiDataObjBase& /*aOtherInstance*/ ) const + { + //Not implemented + return EFalse; + } + +// --------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::BlindAddL() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CPresenceBuddyInfoListImp::BlindAddL( + MPresenceBuddyInfo* aPresenceBuddyInfo) + { + if(!aPresenceBuddyInfo) + return KErrArgument; + iBuddyCollection.Append(aPresenceBuddyInfo); + return KErrNone; + } + +// -------------------------------------------------------------------------- +// CPresenceBuddyInfoListImp::ExtractService +// -------------------------------------------------------------------------- +// +TPtrC CPresenceBuddyInfoListImp::ExtractService( const TDesC& aXspId ) + { + TInt pos = aXspId.Find(KColon); + if ( pos >= 0) + { + // ok input + return aXspId.Left(pos); + } + else + { + // return something in illegal input case + return aXspId; + } + } + +// eof