omadm/omadmappui/inc/NSmlDMDbNotifier.h
changeset 0 3ce708148e4d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmappui/inc/NSmlDMDbNotifier.h	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2002-2005 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:  Header file for CNSmlDMDbNotifier
+*
+*/
+
+
+#ifndef NSMLDMDBNOTIFIER_H
+#define NSMLDMDBNOTIFIER_H
+
+#include <e32std.h>
+#include <SyncMLObservers.h>
+#include <SyncMLClient.h>
+#include "NSmlDMSyncUtil.h"
+
+// CLASS DECLARATION
+
+/**
+* DB events
+* 
+*/
+NONSHARABLE_CLASS (TNSmlDMDbEvent)
+	{
+	public:
+		TInt iType;	
+		TInt iProfileId;
+		TInt iError;
+	};
+
+/**
+* Interface class to handle database events
+* 
+*/
+class MNSmlDMDbEventHandler
+	{
+
+	public:
+		/**
+        * CNSmlDMDbNotifier calls this to inform that database has changed.
+        * @param aStatus EClose, EUnlock, ECommit, ERollback, or ERecover (d32dbms.h).
+		* @param aMoreEvents ETrue issue new request, EFalse no requests.
+        * @return None. 
+        */
+		virtual void HandleDbEventL( TNSmlDMDbEvent aEvent ) = 0;
+	};
+	
+/**
+* DB notifier
+* 
+*/
+NONSHARABLE_CLASS (CNSmlDMDbNotifier) : public CBase,
+                                        public MNSmlDMActiveCallerObserver,
+                                        public MSyncMLEventObserver
+	{	
+    public:
+	    enum TEventType
+			{
+			EUpdate,
+			EUpdateAll,
+			EDelete,
+	        EClose
+			};
+
+	public:
+		/**
+        * Two-phased constructor
+        * @param aDatabase Reference to RDbDatabase instance.
+		* @param aHandler Pointer to MNSmlDMDbEventHandler instance.
+        * @return None. 
+        */
+		static CNSmlDMDbNotifier* NewL( RSyncMLSession* aSyncSession,
+		                                MNSmlDMDbEventHandler* aHandler );
+
+        /**
+        * Destructor.
+        */
+		virtual ~CNSmlDMDbNotifier();
+
+		// Functions from base classes
+
+	private:
+
+		/**
+        * Constructor
+        * @param aDatabase Reference to RDbDatabase instance.
+		* @param aHandler Pointer to event handler.
+        * @return None. 
+        */
+		CNSmlDMDbNotifier( RSyncMLSession* aSyncSession,
+		                   MNSmlDMDbEventHandler* aHandler);
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+		void ConstructL();
+
+	public:
+		/**
+		* Start requesting events from db.
+        * @param None. 
+        * @return None. 
+        */
+		void RequestL();
+
+   
+	private:   // from MNSmlDMActiveCallerObserver
+	
+		/**
+        * From MNSmlDMActiveCallerObserver
+		* Called when CNSmlDMActiveCaller completes.
+        * @param None
+        * @return None.
+        */
+		void HandleActiveCallL();
+
+    private:    // from MSyncMLEventObserver
+        
+		/**
+        * From MSyncMLEventObserver
+		* Called when SyncML session events oocur.
+        * @param aEvent.
+        * @param aIdentifier.
+        * @param aError.
+        * @param aAdditionalData.
+        * @return None.
+        */
+        void OnSyncMLSessionEvent( TEvent aEvent,
+                                   TInt aIdentifier,
+                                   TInt aError,
+                                   TInt aAdditionalData);
+
+    public:
+		/**
+		* Call observer with delay
+		* @param None
+		* @return None
+        */
+		void CallObserverWithDelay();
+		
+		/**
+		* Call observer
+		* @param None
+		* @return None
+        */		
+		void CallObserver();
+		
+		/**
+		* Set as disabled
+		* @param aDisable
+		* @return None
+        */		
+		void SetDisabled( TBool aDisable );
+		
+		/**
+		* Change profile count
+		* @param None
+		* @return TInt
+        */		
+		TInt ChangedProfileCount();
+		
+		/**
+		* DB event
+		* @param aIndex
+		* @return db event
+        */        
+        TNSmlDMDbEvent Event(TInt aIndex);
+		
+		/**
+		* Event count
+		* @param None
+		* @return TInt
+        */		
+		TInt EventCount();
+		
+		/**
+		* Reset
+		* @param None
+		* @return None
+        */		
+		void Reset();
+		
+		/**
+		* Find event
+		* @param None
+		* @return TInt
+        */
+		TInt FindCloseEvent();
+		
+		/**
+		* Find event
+		* @param None
+		* @return TInt
+        */
+		TInt FindSingleProfileEvent();
+		
+		/**
+		* Find event
+		* @param None
+		* @return TInt
+        */
+		TInt FindProfileEvent();
+		
+		/**
+		* Check if profile id is unique
+		* @param aId Profile id
+		* @return ETrue if unique
+        */
+		TBool IsUniqueProfileId(TInt aId);
+		
+		/**
+		* Utility function.
+		* @return Sync session.
+        */
+		RSyncMLSession& Session();
+
+	private:  
+		// sync session
+		RSyncMLSession* iSyncSession;
+		// Pointer to event handler
+		MNSmlDMDbEventHandler* iHandler;
+		// for making function call via active scheduler
+		CNSmlDMActiveCaller* iActiveCaller;
+		// for storing ids of changed profiles
+		RArray<TNSmlDMDbEvent> iList;
+		// can observer be called
+		TBool iDisabled;
+		// is synchronizing going on
+		TBool iSyncRunning;
+	};
+
+#endif // NSMLDMDBNOTIFIER_H
+
+// End of File