uiservicetab/vimpststorage/src/cvimpststoragemanager.cpp
branchRCL_3
changeset 29 9a48e301e94b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpststorage/src/cvimpststoragemanager.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 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:  Implementation of storage manager
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "cvimpststorageserviceview.h"
+
+#include <e32std.h>
+
+#include "cvimpststoragemanager.h"
+#include "tvimpststoragepanics.h"
+#include "uiservicetabtracer.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::InitialiseLibraryL
+// Factory method that create the singleton instance of the storage manager
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTStorageManager::InitialiseLibraryL()
+    {
+	TRACER_AUTO;
+    //see whether there is an instance in the TLS
+    //if not create the instance and set the same in TLS
+    CVIMPSTStorageManager *sm = static_cast<CVIMPSTStorageManager*>( Dll::Tls() );
+    if ( ! sm )
+        {
+        // no existing instance, create a new one
+        CVIMPSTStorageManager *manager = CVIMPSTStorageManager::NewL();
+        sm = manager;
+        CleanupStack::PushL( manager );
+        User::LeaveIfError( Dll::SetTls( static_cast<TAny*>( sm ) ) );
+        CleanupStack::Pop( manager );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::Release
+// Factory method to release the singleton instance of the storage manager
+// -----------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageManager::Release()
+    {
+	TRACER_AUTO;
+    //if any instance in TLS get the same and delete it    
+    CVIMPSTStorageManager *storage = static_cast<CVIMPSTStorageManager*>( Dll::Tls() );
+    if ( storage )
+        {
+        delete storage;
+        Dll::SetTls( NULL );
+        }
+    return KErrNone;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::Instance()
+// -----------------------------------------------------------------------------
+//
+CVIMPSTStorageManager& CVIMPSTStorageManager::Instance()
+    {
+	TRACER_AUTO;
+    //get the instance frm TLS and return the same
+    CVIMPSTStorageManager *storage = static_cast<CVIMPSTStorageManager*>( Dll::Tls() );
+    
+    __ASSERT_ALWAYS( storage,
+        User::Panic( KPanicCategory, KLIBNOTINITIALIZED ) );
+    return *storage;
+    }    
+    
+    
+
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::NewL
+// -----------------------------------------------------------------------------
+//
+ CVIMPSTStorageManager* CVIMPSTStorageManager::NewL()
+    {
+		TRACER_AUTO;
+    //creates the instance
+    CVIMPSTStorageManager* self = new( ELeave ) CVIMPSTStorageManager;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::ConstructL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTStorageManager::ConstructL()
+	{
+	TRACER_AUTO;
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::~CVIMPSTStorageManager
+// -----------------------------------------------------------------------------
+// 
+ CVIMPSTStorageManager::~CVIMPSTStorageManager()
+    {
+		TRACER_AUTO;
+    //release  all the existing views
+	iServiceViewList.ResetAndDestroy();	
+    }
+    
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::CreateServiceViewL
+// -----------------------------------------------------------------------------
+//
+CVIMPSTStorageServiceView* CVIMPSTStorageManager::CreateServiceViewL( TUint32 aServiceId,
+											const TDesC& aStoreName,
+											const TDesC& aServiceName )
+	{
+	TRACER_AUTO;
+	//creates a new view based on the service id.
+	TInt index = KErrNotFound;
+	CVIMPSTStorageServiceView* serviceView = NULL;
+	
+	//check if the view already exists in the viewlist
+	index = FindServiceView(aServiceId);
+	if( KErrNotFound == index )
+		{
+	TRACE( "service does not exit" );
+		// service view is not found 
+		// check if store name is valid create a service view for aServiceId
+		if( aStoreName.Length() )
+			{
+		TRACE(" store name is valid" );
+			serviceView = CVIMPSTStorageServiceView::NewL(aServiceId,
+	    										aStoreName, aServiceName);	
+			iServiceViewList.Append(serviceView); 
+			TRACE( "new view created for serviceId = %d",aServiceId );
+			}
+		// if store name is not valid ,return NULL
+		}
+    else
+	    {
+    TRACE( " service already exist = %d",aServiceId );
+	    serviceView = iServiceViewList[ FindServiceView(aServiceId)];
+	    }
+    //return the extisting view from the viewlist
+	return serviceView;
+	}
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::FindServiceView
+// -----------------------------------------------------------------------------
+//
+TInt CVIMPSTStorageManager::FindServiceView( TUint32 aServiceId)
+	{
+	TRACER_AUTO;
+	//search whether the view exists in the view list.
+	TInt index = KErrNotFound;
+    TInt count = iServiceViewList.Count();
+    for(TInt i = 0; i < count; i++ )
+	    {
+    	if( aServiceId == iServiceViewList[ i ]->GetServiceId() )
+			{
+			TRACE( "aServiceId found = %d" ,aServiceId ); 
+			index = i;
+			break;
+			}
+		}
+	return index;
+	}
+	
+	
+// -----------------------------------------------------------------------------
+// CVIMPSTStorageManager::RemoveServiceView
+// -----------------------------------------------------------------------------
+//
+void  CVIMPSTStorageManager::RemoveServiceView( TUint32 aServiceId)
+	{
+	TRACER_AUTO;
+	//searches and removes the view from the view list.
+    TInt index = FindServiceView(aServiceId);
+	if( index >= 0 )
+		{
+		TRACE( "aServiceId found = %d" ,aServiceId ); 
+		//view exists, so delete and remove the same
+		CVIMPSTStorageServiceView* serviceView = iServiceViewList[ index ];
+		iServiceViewList.Remove( index ); 
+		delete serviceView;
+		iServiceViewList.Compress();     
+		}
+	}
+
+//  End of File