diff -r 000000000000 -r af10295192d8 linklayercontrol/networkinterfacemgr/src/DefaultRecord.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayercontrol/networkinterfacemgr/src/DefaultRecord.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,138 @@ +// Copyright (c) 2000-2009 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: +// + +/** + @file + @internalTechnology +*/ + +#include +#include "DbAccess.h" +#include "AgentPanic.h" +#include "NetConError.h" + +// +// CDefaultRecordAccess defintions +// + +CDefaultRecordAccess::CDefaultRecordAccess() +/** +default constructor +*/ + {} + +CDefaultRecordAccess::CDefaultRecordAccess(const TDesC& aName) + : iName(aName) +/** +constructor +*/ + {} + +CDefaultRecordAccess::~CDefaultRecordAccess() +/** +destructor +*/ + { + delete iTable; + } + +void CDefaultRecordAccess::Close() +/** +Close the table, but don't reset the ID, +so the next time we open a new record, we can work +out if it is a different one or not. +*/ + { + CloseTable(); + iOverridden=EFalse; + } + +void CDefaultRecordAccess::CloseTable() + { + delete iTable; + iTable = NULL; + } + +TBool CDefaultRecordAccess::OpenRecordL(CCommsDatabase* aDb, TUint32 aId) +/** +Close the view if there is one already open. If this has been overriden then use +the original ID given to us, if not, then use the new one. Open the view on the +table and position to the correct record. +@return if the record ID has changed, to notify client. +*/ + { + __ASSERT_DEBUG(iName.Length() > 0, AgentPanic(Agent::EUnknownTableName)); + + CloseTable(); + + TBool ret=ETrue; + if (iId==aId || iOverridden) // if the ID's happen to be the same or the record is already overridden + ret=EFalse; + + if (!iOverridden) + iId=aId; + + if (iId == 0) + User::Leave(KErrNetConDatabaseDefaultUndefined); + + CCommsDbTableView* table = aDb->OpenViewMatchingUintLC(iName,TPtrC(COMMDB_ID),iId); + + User::LeaveIfError(table->GotoFirstRecord()); + + CleanupStack::Pop(); // table + iTable = table; + + return ret; + } + +TBool CDefaultRecordAccess::OpenRecordL(CCommsDatabase* aDb, TUint32 aId, const TDesC& aTableName) +/** +Open the record, from the table with aName. If the name of the table, +or the ID of the record have changed, then return ETrue to signify +a change in service. +*/ + { + + TBool ret1=EFalse; + if (iName!=aTableName) // table has changed, so service certainly has! + ret1=ETrue; + + iName = aTableName; + + TBool ret2=OpenRecordL(aDb,aId); + + return (ret1 || ret2); + } + +TBool CDefaultRecordAccess::SetOverridden(TBool aOverridden, TUint32 aId) +/** +Set whether this is an overridden record and the ID to use when we open the table. +Return, if this is an override, if the ID has changed. If it is not a override, this will +be checked when the record is opened. If this is not an override them ignore the ID as +it will be given again when the record is opened. +*/ + { + + iOverridden=aOverridden; + TBool ret=EFalse; + if (iOverridden && iId!=aId) + { + ret=ETrue; + iId=aId; + } + + return ret; + } +