diff -r 000000000000 -r b497e44ab2fc syncmlfw/ds/hostserver/dshostclient/src/nsmldsitemmodificationset.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/ds/hostserver/dshostclient/src/nsmldsitemmodificationset.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,170 @@ +/* +* 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: Utilities for DS Loader Framework +* +*/ + + +// INCLUDE FILES +#ifndef __HOST_SERVER_MTEST__ +#include +#endif + +#include "nsmldsitemmodificationset.h" + +// ================================= MEMBER FUNCTIONS ============================================= + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::AddItem +// Adds item to modification set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C TInt RNSmlDbItemModificationSet::AddItemL(const TNSmlDbItemModification& aItem ) + { + if ( iItemSet.Find( aItem ) != KErrNotFound ) + { + return KErrAlreadyExists; + } + else + { + iItemSet.AppendL( aItem ); + } + + return KErrNone; + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::RemoveItem +// Removes the item at a specified position from the modification set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::RemoveItem( TInt aIndex ) + { + iItemSet.Remove( aIndex ); + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::AddGroup +// Adds group of items to modification set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::AddGroupL( const MSmlDataItemUidSet& aUidSet, TNSmlDbItemModification::TNSmlDbItemModificationType aModType ) + { + for ( TInt i = 0; i < aUidSet.ItemCount(); i++ ) + { + TNSmlDbItemModification tempItem( aUidSet.ItemAt( i ), aModType ); + if ( iItemSet.Find( tempItem ) == KErrNotFound ) + { + iItemSet.AppendL( tempItem ); + } + } + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::ItemCount +// Returns the number of items in the set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C TInt RNSmlDbItemModificationSet::ItemCount() const + { + return iItemSet.Count(); + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::ItemIndex +// Returns the index of modification item. +// ------------------------------------------------------------------------------------------------ +EXPORT_C TInt RNSmlDbItemModificationSet::ItemIndex( const TSmlDbItemUid aItemId ) const + { + for ( TInt i = 0; i < iItemSet.Count(); i++ ) + { + if ( iItemSet[i].ItemId() == aItemId ) + { + return i; + } + } + return KErrNotFound; + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::ItemAt +// Retuns the modifcation item. +// ------------------------------------------------------------------------------------------------ +EXPORT_C TNSmlDbItemModification RNSmlDbItemModificationSet::ItemAt( TInt aIndex ) const + { + return iItemSet[aIndex]; + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::Reset +// Resets modification set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::Reset() + { + iItemSet.Reset(); + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::Reset +// Closes modification set. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::Close() + { + Reset(); + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::ExternalizeL +// This method externalizes class to stream. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::ExternalizeL( RWriteStream& aStream ) const + { + aStream.WriteInt32L( iItemSet.Count() ); + for ( TInt i = 0; i < iItemSet.Count(); i++ ) + { + TPckgBuf b( ( iItemSet[i].ItemId() ) ); + aStream << b; + TPckgBuf c( iItemSet[i].ModificationType() ); + aStream << c; + } + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::InternalizeL +// This method internalizes class from stream. +// ------------------------------------------------------------------------------------------------ +EXPORT_C void RNSmlDbItemModificationSet::InternalizeL( RReadStream& aStream ) + { + TInt count( aStream.ReadInt32L() ); + for ( TInt i = 0; i < count; i++ ) + { + TPckgBuf packageA; + aStream >> packageA; + TSmlDbItemUid tempId = packageA(); + + TPckgBuf packageB; + aStream >> packageB; + TNSmlDbItemModification::TNSmlDbItemModificationType tempModType = packageB(); + + TNSmlDbItemModification tempItem( tempId, tempModType ); + AddItemL( tempItem ); + } + }; + +// ------------------------------------------------------------------------------------------------ +// RNSmlDbItemModificationSet::StreamSize +// calculates size needed for stream when externalized. +// ------------------------------------------------------------------------------------------------ +EXPORT_C TInt RNSmlDbItemModificationSet::StreamSize() const + { + return ( sizeof( TInt32 ) + ( sizeof( TNSmlDbItemModification ) + 2 ) * ItemCount() ); + } + +// End of File