srsf/nssvasapi/nssvasdb/src/nssvascvasdbbuilder.cpp
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/nssvasapi/nssvasdb/src/nssvascvasdbbuilder.cpp	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2005-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:  CNssVasDbBuilder is owned by CNssVASDBMgr. It is responsible for creating
+*               the context manaher, tag manager, vas db event notifier, and tag select 
+*               notifier. This class is a singleton, and is created using the InstanceL(),
+*               and deleted using the RemoveInstance() methods. 
+*
+*/
+
+
+#include "nssvascvasdbbuilder.h"
+#include "rubydebug.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::InstanceL
+// This function returns an instance of CNssVASDBBuilder.
+// Must be called one to one with RemoveInstance(). 
+// -----------------------------------------------------------------------------
+//
+CNssVASDBBuilder* CNssVASDBBuilder::InstanceL()
+    {
+    RUBY_DEBUG_BLOCK( "CNssVASDBBuilder::InstanceL" );
+
+	TThreadLocalStorage* pTls = 0;
+	if (Dll::Tls() == 0)
+	    {
+		CNssVASDBBuilder* instance = CNssVASDBBuilder::NewL();
+		CleanupStack::PushL(instance);
+		pTls = new (ELeave) TThreadLocalStorage ();
+		CleanupStack::Pop(instance);
+		pTls->iInstance = instance;
+		pTls->iInstanceCount = 0;
+		Dll::SetTls (pTls);
+	    }
+	else
+	    {
+		pTls = (TThreadLocalStorage *) Dll::Tls();
+	    }
+	pTls->iInstanceCount++;
+	return pTls->iInstance;
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::RemoveInstance
+// This method removes one instance of this class by decrementing
+// the number of instances. When the number of instances hit 0,
+// the object is deleted. Must be called one to one with InstanceL(). 
+// -----------------------------------------------------------------------------
+//
+void CNssVASDBBuilder::RemoveInstance() 
+    {
+    RUBY_DEBUG0( "CNssVASDBBuilder::RemoveInstance" );
+
+	TThreadLocalStorage* pTls = (TThreadLocalStorage *) Dll::Tls();
+	if (--pTls->iInstanceCount <= 0)
+	    {
+		delete pTls->iInstance;
+		delete (TThreadLocalStorage *) Dll::Tls();
+		Dll::SetTls (0);
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::CNssVASDBBuilder
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CNssVASDBBuilder::CNssVASDBBuilder()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::ConstructL
+// EPOC Constructor
+// -----------------------------------------------------------------------------
+//
+void CNssVASDBBuilder::ConstructL()
+    {
+	iVasDatabase = CNssVASDatabase::NewL(CActive::EPriorityStandard);
+	iContextMgr = CNssContextMgr::NewL(iVasDatabase);
+    iTagMgr = CNssTagMgr::NewL(iVasDatabase, iContextMgr);
+    iDBTagSelectNotifier = CNssDBTagSelectNotifier::NewL(iVasDatabase);
+    //iVASDBEventNotifier = new (ELeave) CNssVASDBEventNotifier(iVasDatabase);
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::NewL
+// 2 phase Construction
+// -----------------------------------------------------------------------------
+//
+CNssVASDBBuilder* CNssVASDBBuilder::NewL()
+    {
+    RUBY_DEBUG_BLOCK( "CNssVASDBBuilder::NewL" );
+
+	CNssVASDBBuilder* self = NewLC();
+	CleanupStack::Pop(self);
+	return (self);
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::NewLC
+// 2 phase Construction
+// -----------------------------------------------------------------------------
+//
+CNssVASDBBuilder* CNssVASDBBuilder::NewLC()
+    {
+	CNssVASDBBuilder* self = new(ELeave)CNssVASDBBuilder;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return (self);
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::~CNssVASDBBuilder
+// destructor
+// -----------------------------------------------------------------------------
+//
+CNssVASDBBuilder::~CNssVASDBBuilder()
+    {
+    RUBY_DEBUG0( "CNssVASDBBuilder::~CNssVASDBBuilder" );
+
+	if(iContextMgr)
+	    {
+	    delete iContextMgr;
+		iContextMgr = NULL;
+	    }
+	if(iTagMgr)
+	    {
+		delete iTagMgr;
+		iTagMgr = NULL;
+	    }
+	if(iDBTagSelectNotifier)
+	    {
+		delete iDBTagSelectNotifier;
+		iDBTagSelectNotifier = NULL;
+	    }
+	if(iVASDBEventNotifier)
+	    {
+		delete iVASDBEventNotifier;
+		iVASDBEventNotifier = NULL;
+	    }
+	if(iVasDatabase)
+	    {
+		iVasDatabase->CloseDatabase();
+		delete iVasDatabase;
+		iVasDatabase = NULL;
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::InitializeL
+// initialises CNssVASDatabase, by connecting, creating (if not created)
+// and opening the datatabase
+// -----------------------------------------------------------------------------
+//
+void CNssVASDBBuilder::InitializeL()
+    {
+    RUBY_DEBUG_BLOCK( "CNssVASDBBuilder::InitializeL" );
+    if( iInitialized )
+    	{
+    	RUBY_DEBUG0( "CNssVASDBBuilder::InitializeL Already initialized. Ignoring" );
+    	return;
+    	}
+
+    TInt err = iVasDatabase->CreateDb();
+    if ( err != KErrNone )
+        {
+        User::Leave( err ); // failed to create database
+        }
+
+	// open database 
+    err = iVasDatabase->OpenDatabase();
+    if ( err != KErrNone && err != KErrDbAlreadyOpen )
+        {
+        RUBY_DEBUG0( "CNssVASDBBuilder::InitializeL ERROR cannot open VAS DB" );
+        
+        User::Leave( err );
+        }
+    iInitialized = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::GetContextMgr
+// gets the context manager
+// -----------------------------------------------------------------------------
+//
+CNssContextMgr* CNssVASDBBuilder::GetContextMgr()
+    {
+	return iContextMgr;
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::GetTagMgr
+// gets the tag manager
+// -----------------------------------------------------------------------------
+//
+CNssTagMgr* CNssVASDBBuilder::GetTagMgr()
+    {
+	return  iTagMgr;
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::GetVASDBEventNotifier
+// gets the vas db event notifier
+// -----------------------------------------------------------------------------
+//
+CNssVASDBEventNotifier* CNssVASDBBuilder::GetVASDBEventNotifier()
+    {
+	return iVASDBEventNotifier; 
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::GetTagSelectNotifier
+// gets the tag select notifier
+// -----------------------------------------------------------------------------
+//
+CNssDBTagSelectNotifier* CNssVASDBBuilder::GetTagSelectNotifier()
+    {
+	return iDBTagSelectNotifier; 
+    }
+
+// -----------------------------------------------------------------------------
+// CNssVASDBBuilder::Close
+// closes the database
+// -----------------------------------------------------------------------------
+//
+void CNssVASDBBuilder::Close()
+    {
+    RUBY_DEBUG0( "CNssVASDBBuilder::Close" );
+
+	if(iVasDatabase)
+	    {
+		iVasDatabase->CloseDatabase();
+	    }
+    }
+