diff -r 000000000000 -r b497e44ab2fc syncmlfw/ds/syncagent/src/nsmldsluidbuffer.cpp --- /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 +#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