telephonyprotocols/csdagt/TS_CsdAgt/DbUndo.h
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/csdagt/TS_CsdAgt/DbUndo.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,257 @@
+// Copyright (c) 2003-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:
+//
+ 
+#ifndef __DBUNDO_H__
+#define __DBUNDO_H__
+
+#include <commsdattypesv1_1.h>
+#include <metadatabase.h>
+using namespace CommsDat;
+#include <e32base.h>
+#include <e32std.h>
+#include <e32def.h>
+
+// For Connection Preferences table
+#include <cdbpreftable.h>
+
+// COMMDB Connection Preference settings
+#include <comms-infras/connectionsettings.h>
+
+// Indexes of the CDMA, GPRS and Dial Out IAP records
+// Dependent on the database used
+#define KGprsIAPIndex 2
+#define KDialOutIAPIndex 1
+
+_LIT( KDialOutIap, "DialOutIsp" );
+_LIT( KGprsIap, "NTRas GPRS" );
+
+// Classes to maintain an "undo" linked list to restore database state
+// between tests
+class CDbAgtBase;
+
+// Base class for storing undo data, derived classes store data specific to the 
+// type of column we're dealing with
+class CDbUndoBase : public CBase
+	{
+public:
+	virtual void UndoL(CDbAgtBase *aTable)=0;
+
+public:
+	TDblQueLink iLink;
+
+protected:
+	TPtrC iColumn;
+	};
+
+// Derived from CDbUndoBase to store integer values requiring Undo
+class CDbUndoInt : public CDbUndoBase
+	{
+public:
+
+	static CDbUndoInt* NewL(const TDesC &aColumn, const TUint32 &aValue);
+	void ConstructL(const TDesC &aColumn, const TUint32 &aValue);
+
+	// Concrete implementation of pure virtual in CDbUndoBase
+	virtual void UndoL(CDbAgtBase *aDb);
+
+private:
+	// Data specific to the type of column we're are dealing with
+	// In this class we undo integer data.
+	TUint32 iValue;
+	};
+
+// Derived from CDbUndoBase to store boolean values requiring Undo
+class CDbUndoBool : public CDbUndoBase
+	{
+public:
+
+	static CDbUndoBool* NewL(const TDesC &aColumn, const TBool &aValue);
+	void ConstructL(const TDesC &aColumn, const TBool &aValue);
+
+	// Concrete implementation of pure virtual in CDbUndoBase
+	virtual void UndoL(CDbAgtBase *aDb);
+
+private:
+	// Data specific to the type of column we're are dealing with
+	// In this class we undo boolean data.
+	TBool iValue;
+	};
+
+// Derived from CDbUndoBase to store text values requiring Undo
+class CDbUndoText : public CDbUndoBase
+	{
+public:
+
+	static CDbUndoText* NewL(const TDesC &aColumn, const TDesC16& aValue);
+	void ConstructL(const TDesC &aColumn, const TDesC16& aValue);
+
+	// Concrete implementation of pure virtual in CDbUndoBase
+	virtual void UndoL(CDbAgtBase *aDb);
+
+private:
+	// Data specific to the type of column we're are dealing with
+	// In this class we undo text data.
+	TBuf16<KCommsDbSvrMaxFieldLength> iText;
+	};
+
+// Derived from CDbUndoBase to store long text values requiring Undo
+class CDbUndoLongText : public CDbUndoBase
+	{
+public:
+
+	static CDbUndoLongText* NewL(const TDesC &aColumn, const HBufC* aValue);
+	void ConstructL(const TDesC &aColumn, const HBufC* aValue);
+
+	// Concrete implementation of pure virtual in CDbUndoBase
+	virtual void UndoL(CDbAgtBase *aDb);
+
+private:
+	// Data specific to the type of column we're are dealing with
+	// In this class we undo long text data.
+	HBufC* iLongText;
+	};
+
+// Derived from CDbUndoBase to store agent extension name requiring Undo
+class CDbUndoAgentExt : public CDbUndoBase
+	{
+public:
+
+	static CDbUndoAgentExt* NewL(const TDesC &aService, const TDesC& aAgentExt);
+	void ConstructL(const TDesC &aService, const TDesC& aAgentExt);
+
+	// Concrete implementation of pure virtual in CDbUndoBase
+	virtual void UndoL(CDbAgtBase *aDb);
+
+private:
+	// Data specific to the type of column we're are dealing with
+	// In this class we undo text data.
+	TBuf16<KCommsDbSvrMaxFieldLength> iText;
+	};
+
+// Base class for all database access
+class CDbAgtBase : public CBase 
+	{
+	friend class CDbUndoInt;
+	friend class CDbUndoBool;
+	friend class CDbUndoText;
+	friend class CDbUndoLongText;
+	friend class CDbUndoAgentExt;
+public:
+	~CDbAgtBase();
+	void SetColumnIntL(const TDesC& aColumn, const TUint32& aValue);
+	void SetColumnBoolL(const TDesC& aColumn, const TBool& aValue);
+	void SetColumnTextL(const TDesC& aColumn, const TDesC16& aValue);
+	void SetColumnLongTextL(const TDesC& aColumn, const TDesC16& aValue);
+	void UndoDatabaseChangesL();
+	CMDBRecordSetBase* Table();
+
+protected:
+	CDbAgtBase();
+	void ConstructL();
+
+
+protected:
+	// Used to access the database and retain a view on whichever table is of interest
+	CMDBSession *iDb;
+	CMDBRecordSetBase* iTable;
+	TUint iCurrentRecord;
+
+private:
+	void ModifyColumnIntL(const TDesC& aColumn, const TUint32& aValue);
+	void ModifyColumnBoolL(const TDesC& aColumn, const TBool& aValue);
+	void ModifyColumnTextL(const TDesC& aColumn, const TDesC16& aValue);
+	void ModifyColumnLongTextL(const TDesC& aColumn, const TDesC16& aValue);
+
+private:
+	// Double linked list header for undo functionality
+	TDblQue<CDbUndoBase> iQHeader;
+	
+	// Double linked list iterator for undo functionality
+	TDblQueIter<CDbUndoBase> iQIter;
+
+	};
+
+// GPRS OUTGOING specific class 
+class CDbGPRSOutgoingTable : public CDbAgtBase 
+	{
+public:
+	static CDbGPRSOutgoingTable *NewL();
+	~CDbGPRSOutgoingTable();
+
+private:
+	CDbGPRSOutgoingTable();
+	void ConstructL();
+	};
+
+// CSD specific class 
+class CDbCsdTable : public CDbAgtBase 
+	{
+public:
+	static CDbCsdTable *NewL();
+	~CDbCsdTable();
+	CMDBRecordSetBase* Table();
+
+private:
+	CDbCsdTable();
+	void ConstructL();
+	};
+
+// MODEM specific class 
+class CDbModemTable : public CDbAgtBase 
+	{
+public:
+	static CDbModemTable *NewL();
+	~CDbModemTable();
+
+private:
+	CDbModemTable();
+	void ConstructL();
+	};
+/*
+// Preference table
+class CDbPrefTable : public CDbAgtBase 
+	{
+public:
+	static CDbPrefTable *NewL( TCommDbConnectionDirection aDirection, CCommsDbConnectionPrefTableView::TCommDbIapBearer aBearerUpdate, TBool aReadOnly, TCommDbDialogPref aDialogPref );
+	~CDbPrefTable();
+
+private:
+	CDbPrefTable();
+	void ConstructL();
+	CCommsDbConnectionPrefTableView* iPrefTable;
+
+	TBuf16<KCommsDbSvrMaxFieldLength> iIapName;
+	TCommDbConnectionDirection iDirection;
+	CCommsDbConnectionPrefTableView::TCommDbIapBearer iBearerUpdate;
+	CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref iOldPrefs;
+	TBool iReadOnly;
+	TCommDbDialogPref iDialogPref;
+	};
+
+// IAP table
+class CDbIapTable : public CDbAgtBase 
+	{
+public:
+	static CDbIapTable *NewL(const TDesC16& aIapName);
+	~CDbIapTable();
+	void GetBearerSetIapId(TUint32& aIapId);
+
+private:
+	CDbIapTable();
+	void ConstructL();
+	TBuf16<KCommsDbSvrMaxFieldLength> iIapName;
+	};
+*/
+#endif  // DBUNDO