diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdnodecachecleanermanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdnodecachecleanermanager.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,179 @@ +/* +* 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: Implements CNcdNodeCacheCleanerManager class +* +*/ + + +#include "ncdnodecachecleanermanager.h" +#include "ncdnodecachecleaner.h" +#include "ncdnodemanager.h" +#include "ncdnodedbmanager.h" +#include "ncdnodefactory.h" +#include "catalogsconstants.h" +#include "ncdproviderdefines.h" +#include "catalogsutils.h" +#include "ncdgeneralmanager.h" + +#include "catalogsdebug.h" + + +CNcdNodeCacheCleanerManager* +CNcdNodeCacheCleanerManager::NewL( CNcdGeneralManager& aGeneralManager, + CNcdNodeDbManager& aNodeDbManager, + TInt aDbDefaultMaxSize, + CNcdNodeFactory& aNodeFactory ) + { + CNcdNodeCacheCleanerManager* self = + CNcdNodeCacheCleanerManager::NewLC( aGeneralManager, + aNodeDbManager, + aDbDefaultMaxSize, + aNodeFactory ); + CleanupStack::Pop( self ); + return self; + } + +CNcdNodeCacheCleanerManager* +CNcdNodeCacheCleanerManager::NewLC( CNcdGeneralManager& aGeneralManager, + CNcdNodeDbManager& aNodeDbManager, + TInt aDbDefaultMaxSize, + CNcdNodeFactory& aNodeFactory ) + { + CNcdNodeCacheCleanerManager* self = + new( ELeave ) CNcdNodeCacheCleanerManager( aGeneralManager, + aNodeDbManager, + aDbDefaultMaxSize, + aNodeFactory ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + + +CNcdNodeCacheCleanerManager::CNcdNodeCacheCleanerManager( CNcdGeneralManager& aGeneralManager, + CNcdNodeDbManager& aNodeDbManager, + TInt aDbDefaultMaxSize, + CNcdNodeFactory& aNodeFactory ) +: CBase(), + iGeneralManager( aGeneralManager ), + iNodeManager( aGeneralManager.NodeManager() ), + iNodeDbManager( aNodeDbManager ), + iDbMaxSize( aDbDefaultMaxSize ), + iNodeFactory( aNodeFactory ) + { + } + + +void CNcdNodeCacheCleanerManager::ConstructL() + { + // These values have to be set. + } + + +CNcdNodeCacheCleanerManager::~CNcdNodeCacheCleanerManager() + { + DLTRACEIN(("")); + + // Before deleting cache cleaners make sure that db cleaner + // has finished its job. + // Reload the node list just in case. Also, reset the list + // when everything is done. + DLINFO(("Cache cleaner force clean")); + for ( TInt i = 0; i < iCleaners.Count(); ++i ) + { + // Be sure to trap here, because destructor can not leave. + TRAP_IGNORE( iCleaners[ i ]->ForceCleanupL() ); + } + + // This manager owns the cleaners. + // So, delete them. + iCleaners.ResetAndDestroy(); + + DLTRACEOUT(("")); + } + + +CNcdNodeCacheCleaner& CNcdNodeCacheCleanerManager::CacheCleanerL( const TUid& aClientUid ) + { + DLTRACEIN(("")); + + for ( TInt i = 0; i < iCleaners.Count(); ++i ) + { + if ( aClientUid == iCleaners[ i ]->ClientUid() ) + { + DLTRACEOUT(("Cleaner was in the array")); + return *iCleaners[ i ]; + } + } + + DLINFO(("Cleaner was not in the array. So, create new.")); + CNcdNodeCacheCleaner* cleaner( + CNcdNodeCacheCleaner::NewLC( iGeneralManager, NodeDbManager(), + DbMaxSize(), NodeFactory() ) ); + // Array takes the ownership. + iCleaners.AppendL( cleaner ); + CleanupStack::Pop( cleaner ); + + DLTRACEOUT(("")); + + return *cleaner; + } + + +TInt CNcdNodeCacheCleanerManager::DbMaxSize() const + { + DLTRACEIN(("")); + return iDbMaxSize; + } + + +void CNcdNodeCacheCleanerManager::SetDbMaxSize( const TInt aDbMaxSize ) + { + DLTRACEIN(("")); + iDbMaxSize = aDbMaxSize; + } + + +void CNcdNodeCacheCleanerManager::CheckAllL() const + { + DLTRACEIN(("")); + + for ( TInt i = 0; i < iCleaners.Count(); ++i ) + { + iCleaners[ i ]->CheckDbSizeL(); + } + + DLTRACEOUT(("")); + } + + +CNcdNodeManager& CNcdNodeCacheCleanerManager::NodeManager() const + { + return iNodeManager; + } + + +CNcdNodeDbManager& CNcdNodeCacheCleanerManager::NodeDbManager() const + { + return iNodeDbManager; + } + + +CNcdNodeFactory& CNcdNodeCacheCleanerManager::NodeFactory() const + { + return iNodeFactory; + } + +