diff -r fcbbe021d614 -r 9c97ad6591ae cmmanager/cmmgr/cmmserver/src/cmmconnmethodstruct.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/cmmserver/src/cmmconnmethodstruct.cpp Mon May 03 12:53:07 2010 +0300 @@ -0,0 +1,315 @@ +/* +* Copyright (c) 2009-2010 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: +* Cache side object representing a connection method. +* +*/ + + +#include +#include + +#include "cmmconnmethodstruct.h" +#include "cmmconnmethodinstance.h" + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cmmconnmethodstructTraces.h" +#endif + + +// --------------------------------------------------------------------------- +// Two phased construction. +// --------------------------------------------------------------------------- +// +CCmmConnMethodStruct* CCmmConnMethodStruct::NewL( + const TUint32& aConnMethodId ) + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_NEWL_ENTRY ); + + CCmmConnMethodStruct* self = CCmmConnMethodStruct::NewLC( aConnMethodId ); + CleanupStack::Pop( self ); + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_NEWL_EXIT ); + return self; + } + +// --------------------------------------------------------------------------- +// Two phased construction. +// --------------------------------------------------------------------------- +// +CCmmConnMethodStruct* CCmmConnMethodStruct::NewLC( + const TUint32& aConnMethodId ) + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_NEWLC_ENTRY ); + + CCmmConnMethodStruct* self = new( ELeave ) CCmmConnMethodStruct( aConnMethodId ); + CleanupStack::PushL( self ); + self->ConstructL(); + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_NEWLC_EXIT ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CCmmConnMethodStruct::~CCmmConnMethodStruct() + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_CCMMCONNMETHODSTRUCT_ENTRY ); + + if ( iConnMethodPlugin ) + { + delete iConnMethodPlugin; + iConnMethodPlugin = NULL; + } + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_CCMMCONNMETHODSTRUCT_EXIT ); + } + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CCmmConnMethodStruct::CCmmConnMethodStruct( TUint32 aConnMethodId ) + : + iConnMethodId( aConnMethodId ) + { + OstTraceFunctionEntry0( DUP1_CCMMCONNMETHODSTRUCT_CCMMCONNMETHODSTRUCT_ENTRY ); + + iConnMethodPlugin = NULL; + iBearerType = 0; + iStatus = ECmmConnMethodStatusNotSaved; + iReferenceCounter = 0; + + OstTraceFunctionExit0( DUP1_CCMMCONNMETHODSTRUCT_CCMMCONNMETHODSTRUCT_EXIT ); + } + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// Return the reference count. +// --------------------------------------------------------------------------- +// +TInt CCmmConnMethodStruct::GetReferenceCounter() + { + return iReferenceCounter; + } + +// --------------------------------------------------------------------------- +// Increase the reference counter by one. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::IncrementReferenceCounter() + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_INCREMENTREFERENCECOUNTER_ENTRY ); + iReferenceCounter++; + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_INCREMENTREFERENCECOUNTER_EXIT ); + } + +// --------------------------------------------------------------------------- +// Return the connection method ID. +// --------------------------------------------------------------------------- +// +TUint32 CCmmConnMethodStruct::GetId() const + { + return iConnMethodId; + } + +// --------------------------------------------------------------------------- +// Set the connection method ID. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::SetId( const TUint32& aConnMethodId ) + { + iConnMethodId = aConnMethodId; + } + +// --------------------------------------------------------------------------- +// Return bearer type. +// --------------------------------------------------------------------------- +// +TUint32 CCmmConnMethodStruct::GetBearerType() const + { + return iBearerType; + } + +// --------------------------------------------------------------------------- +// Gets the current status of this connection method struct. +// --------------------------------------------------------------------------- +// +TCmmConnMethodStatus CCmmConnMethodStruct::GetStatus() const + { + return iStatus; + } + + +// --------------------------------------------------------------------------- +// Sets a new status value. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::SetStatus( const TCmmConnMethodStatus& aStatus ) + { + iStatus = aStatus; + } + +// --------------------------------------------------------------------------- +// TODO +// +// Refresh the relevant connection method data in cache side object to be in +// synch with database and copy that data back to this session side connection +// method object. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::RefreshConnMethodInstanceL( + CCmmConnMethodInstance& aConnMethodInstance ) + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_REFRESHCONNMETHODINSTANCEL_ENTRY ); + + if ( !iConnMethodPlugin ) + { + User::Leave( KErrCorrupt ); + } + + switch ( iStatus ) + { + case ECmmConnMethodStatusValid: + case ECmmConnMethodStatusToBeDeleted: + { + //TODO, add record status check later and only call Reload() if necessary. TCmmRecordStatus + //if ( !aConnMethodStruct->UpToDate() ) + // { + iConnMethodPlugin->ReLoadL(); + // } + iConnMethodPlugin->GetPluginDataL( aConnMethodInstance.GetPluginDataInstance() ); + } + break; + case ECmmConnMethodStatusNotSaved: // This is checked before. + case ECmmConnMethodStatusChanged: + default: + User::Leave( KErrCorrupt ); // Error, invalid status. + break; + } + + // Internal state need to be set to the same state as after a successfull update. + aConnMethodInstance.UpdateSuccessful(); + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_REFRESHCONNMETHODINSTANCEL_EXIT ); + } + +// --------------------------------------------------------------------------- +// Decrease the reference counter by one. Return the remaining number of +// references. +// --------------------------------------------------------------------------- +// +TInt CCmmConnMethodStruct::SessionInstanceClosed() + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_SESSIONINSTANCECLOSED_ENTRY ); + + iReferenceCounter--; + if ( iReferenceCounter < 0 ) + { + ASSERT( 0 ); + iReferenceCounter = 0; + } + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_SESSIONINSTANCECLOSED_EXIT ); + return iReferenceCounter; + } + +// --------------------------------------------------------------------------- +// Set the connection method plugin. Updates status and sets reference +// counter to 1. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::SetPlugin( + CCmPluginBaseEng* aPlugin, + TUint32 aBearerType, + TCmmConnMethodStatus aStatus ) + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_SETPLUGIN_ENTRY ); + + // Only check reference counter, it is incremented by session side instance + // when data is copied into it. + if ( iReferenceCounter != 0 ) + { + ASSERT( 0 ); // Error. + } + + iConnMethodPlugin = aPlugin; + iBearerType = aBearerType; + + switch ( aStatus ) //TODO, add missing status + { + // Fallthrough intended + case ECmmConnMethodStatusNotSaved: + case ECmmConnMethodStatusValid: + iStatus = aStatus; + break; + case ECmmConnMethodStatusChanged: + default: + iStatus = ECmmConnMethodStatusChanged; + ASSERT( 0 ); // Error, invalid status. + break; + } + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_SETPLUGIN_EXIT ); + } + +// --------------------------------------------------------------------------- +// Returns the connection method plugin. +// --------------------------------------------------------------------------- +// +CCmPluginBaseEng* CCmmConnMethodStruct::GetPlugin() + { + return iConnMethodPlugin; + } + +// --------------------------------------------------------------------------- +// Called after this connection method has been deleted and database +// transaction has completed successfully. Sets the internal state of this +// connection method structure to reflect the new deleted state. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::DeleteSuccessful( const TUint32& aNewSecondaryId ) + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_DELETESUCCESSFUL_ENTRY ); + + iConnMethodId = aNewSecondaryId; + iStatus = ( ECmmConnMethodStatusNotSaved ); + + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_DELETESUCCESSFUL_EXIT ); + } + +// --------------------------------------------------------------------------- +// Called after this connection method has been updated and database +// transaction has completed successfully. Sets the internal state of this +// connection method structure to reflect the new valid state. +// --------------------------------------------------------------------------- +// +void CCmmConnMethodStruct::UpdateSuccessful() + { + OstTraceFunctionEntry0( CCMMCONNMETHODSTRUCT_UPDATESUCCESSFUL_ENTRY ); + iStatus = ECmmConnMethodStatusValid; + OstTraceFunctionExit0( CCMMCONNMETHODSTRUCT_UPDATESUCCESSFUL_EXIT ); + } + +// End of file