linklayercontrol/networkinterfacemgr/src/DefaultRecord.cpp
changeset 0 af10295192d8
--- /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 <nd_err.h>
+#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;
+	}
+