diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpststorage/src/cvimpststoragemanager.cpp --- /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 + +#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( 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( 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( 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( 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