ncdengine/provider/server/src/ncdnodecachecleanermanager.cpp
changeset 0 ba25891c3a9e
--- /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;
+    }
+
+