--- /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