syncmlfw/ds/syncagent/src/nsmldsluidbuffer.cpp
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/ds/syncagent/src/nsmldsluidbuffer.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 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:  LUID buffering
+*
+*/
+
+
+// INCLUDE FILES
+#include <nsmldebug.h>
+#include "nsmldsluidbuffer.h"
+#include "nsmlcliagconstants.h"
+#include "nsmldshostclient.h"
+#include "nsmldscontent.h"
+#include "NsmlDSContentItem.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::CNSmlDSLUIDBuffer
+// C++ constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDSLUIDBuffer::CNSmlDSLUIDBuffer( 
+    CNSmlDSHostClient& aHostClient, 
+    CNSmlDSContentItem& aContentItem ) : iHostClient( aHostClient ), 
+                                         iContentItem( aContentItem ),
+                                         iWrittenItems( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDSUIDBuffer::~CNSmlDSUIDBuffer
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDSLUIDBuffer::~CNSmlDSLUIDBuffer()
+    {
+    iModificationSet.Close();
+    }
+	
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::NextUIDL
+// Gets the first UID and its modification type from the buffer. The aCmdName
+// parameter is determined by the modification type.
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDSLUIDBuffer::NextUIDL( TSmlDbItemUid& aLocalUID, TDes8& aCmdName )
+    {
+    TInt ret( KErrNone );
+	
+    switch ( iCurrState )
+        {
+        case EModifications:
+            if ( iModificationSet.ItemCount() > 0 )
+                {
+                aLocalUID = iModificationSet.ItemAt( 0 ).ItemId();
+				
+                switch ( iModificationSet.ItemAt( 0 ).ModificationType() )
+                    {
+                    case TNSmlDbItemModification::ENSmlDbItemAdd:
+                        aCmdName = KNSmlAgentAdd;
+                        break;
+					
+                    case TNSmlDbItemModification::ENSmlDbItemModify:
+                        aCmdName = KNSmlAgentReplace;
+                        break;
+					
+                    case TNSmlDbItemModification::ENSmlDbItemDelete:
+                        aCmdName = KNSmlAgentDelete;
+                        break;
+					
+                    case TNSmlDbItemModification::ENSmlDbItemMove:
+                        aCmdName = KNSmlAgentMove;
+                        break;
+					
+                    case TNSmlDbItemModification::ENSmlDbItemSoftDelete:
+                        aCmdName = KNSmlAgentSoftDelete;
+                        break;
+                        
+                    default:
+                    	User::Leave( KErrGeneral );
+                    }
+                }
+            else
+                {
+                iModificationSet.Reset();
+                iCurrState = EEnd;
+                ret = KErrEof;
+                }
+            break;
+
+        case EEnd:
+            return KErrEof;
+            
+        default:
+        	User::Leave( KErrGeneral );
+        }
+		
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::CurrentUID
+// Returns the first UID in the buffer. 
+// -----------------------------------------------------------------------------
+//
+void CNSmlDSLUIDBuffer::CurrentUID( TSmlDbItemUid& aLocalUID ) const
+    {
+    if ( iModificationSet.ItemCount() > 0 )
+        {
+        aLocalUID = iModificationSet.ItemAt( 0 ).ItemId();
+        }
+    }
+	
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::ClientItemCount
+// Returns the total number of UIDs (both those still in the buffer and those 
+// already written).
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDSLUIDBuffer::ClientItemCount() const
+    {
+    return iModificationSet.ItemCount() + iWrittenItems;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::SetCurrentItemWritten
+// Removes the current UID from the buffer. 
+// -----------------------------------------------------------------------------
+//
+void CNSmlDSLUIDBuffer::SetCurrentItemWritten()
+    {
+    iModificationSet.RemoveItem( 0 );
+    ++iWrittenItems;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDSLUIDBuffer::FetchModificationsL
+// Gets UIDs of all modified items from datastore to the buffer asynchronously.
+// -----------------------------------------------------------------------------
+//
+void CNSmlDSLUIDBuffer::FetchModificationsL( TInt& aResultCode )
+    {
+    DBG_FILE(_S8("CNSmlDSLUIDBuffer::FetchModificationsL begins"));
+
+    iModificationSet.Reset();
+	
+    iHostClient.AllItemsL( iModificationSet, iContentItem.iImplementationUID, 
+                           *iContentItem.iStoreName, aResultCode );
+	
+    iCurrState = EModifications;
+	
+    DBG_FILE(_S8("CNSmlDSLUIDBuffer::FetchModificationsL ends"));
+    }
+
+// End of File