diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdsubscriptiondatacompleter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdsubscriptiondatacompleter.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2007 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: Implements CNcdSubscriptionDataCompleterDataCompleter class +* +*/ + + +#include "ncdsubscriptiondatacompleter.h" + +#include "ncdsubscriptionmanagerimpl.h" +#include "ncdnodeidentifier.h" +#include "ncdsubscriptionmanagerobserver.h" +#include "catalogsdebug.h" +#include "ncdnodemanager.h" +#include "ncdsubscriptionimpl.h" +#include "ncdsubscriptiongroup.h" +#include "ncdnodemetadataimpl.h" +#include "ncdnodeiconimpl.h" +#include "ncdpurchaseoptionimpl.h" +#include "ncdnodeimpl.h" + + +CNcdSubscriptionDataCompleter::CNcdSubscriptionDataCompleter( + CNcdSubscriptionManager& aSubscriptionManager, + CNcdNodeManager& aNodeManager, + CNcdOperationManager& aOperationManager ) : + iSubscriptionManager( aSubscriptionManager ), + iNodeManager( aNodeManager ), + iOperationManager( aOperationManager ) + { + } + +void CNcdSubscriptionDataCompleter::ConstructL() + { + } + + +CNcdSubscriptionDataCompleter* CNcdSubscriptionDataCompleter::NewL( + CNcdSubscriptionManager& aSubscriptionManager, + CNcdNodeManager& aNodeManager, + CNcdOperationManager& aOperationManager ) + { + CNcdSubscriptionDataCompleter* self = + CNcdSubscriptionDataCompleter::NewLC( aSubscriptionManager, + aNodeManager, + aOperationManager ); + CleanupStack::Pop( self ); + return self; + } + +CNcdSubscriptionDataCompleter* CNcdSubscriptionDataCompleter::NewLC( + CNcdSubscriptionManager& aSubscriptionManager, + CNcdNodeManager& aNodeManager, + CNcdOperationManager& aOperationManager ) + { + CNcdSubscriptionDataCompleter* self = + new( ELeave ) CNcdSubscriptionDataCompleter( aSubscriptionManager, + aNodeManager, + aOperationManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CNcdSubscriptionDataCompleter::~CNcdSubscriptionDataCompleter() + { + DLTRACEIN(("")); + + iNodeIds.ResetAndDestroy(); + delete iPurchaseOptionIds; + iPurchaseOptionIds = NULL; + + iContext = NULL; + iInternalizationObserver = NULL; + + DLTRACEOUT(("")); + } + +TInt CNcdSubscriptionDataCompleter::CompleteSubscriptions( + TUid aClientUid, + RPointerArray aNodeIds, + MDesCArray* aPurchaseOptionIds, + MCatalogsContext* aContext, + MNcdSubscriptionManagerObserver* aObserver ) + { + DLTRACEIN(("")); + iClientUid = aClientUid; + iNodeIds = aNodeIds; + iPurchaseOptionIds = aPurchaseOptionIds; + iContext = aContext; + iInternalizationObserver = aObserver; + + if ( aNodeIds.Count() != iPurchaseOptionIds->MdcaCount() ) + { + return KErrArgument; + } + + iIndexer = 0; + + + ProceedCompletion(); + + + DLTRACEOUT(("")); + return KErrNone; + } + +void CNcdSubscriptionDataCompleter::ProceedCompletion() + { + DLTRACEIN(("")); + const TInt KSubscriptionAmount( iNodeIds.Count() ); + while ( iIndexer < KSubscriptionAmount ) + { + + CNcdNodeIdentifier& currentNodeIdentifier = *iNodeIds[iIndexer]; + const TDesC& currentPurchaseOptionId = + iPurchaseOptionIds->MdcaPoint( iIndexer ); + + TRAPD( error, + { + // pointer to current subscription should not be + // stored to prevent errors if the subscription is for + // some reason deleted + CNcdSubscription& currentSubscription = + SubscriptionL( currentNodeIdentifier, + currentPurchaseOptionId ); + + if ( SubscriptionIncomplete( currentSubscription ) ) + { + CNcdNodeMetaData& meta = + iNodeManager.NodeMetaDataL( currentNodeIdentifier ); + + CompleteSubscriptionL( currentSubscription, + meta, + currentPurchaseOptionId, + iClientUid ); + } + } ); + if ( error != KErrNone ) + { + // Nothing to be done, meta data was not found + // or some other error situation and could not + // complete the subscription info + } + + ++iIndexer; + } + + // All subscriptions completed. Notify and delete this. + iSubscriptionManager.NotifyListeners( iClientUid ); + if ( iInternalizationObserver ) + { + iInternalizationObserver->SubscriptionsInternalizeComplete( + KErrNone ); + } + iSubscriptionManager.SubscriptionCompleted( this ); + } + +void CNcdSubscriptionDataCompleter::CompleteSubscriptionL( + CNcdSubscription& aCurrentSubscription, + const CNcdNodeMetaData& aCurrentNodeMetaData, + const TDesC& aPurchaseOptionId, + TUid aClientUid ) const + { + DLTRACEIN(("")); + + CompleteSubscriptionNameL( aCurrentSubscription, + aCurrentNodeMetaData, + aPurchaseOptionId ); + + TRAPD( error, CompleteSubscriptionIconL( + aCurrentSubscription, + aCurrentNodeMetaData ) ); + // Leave on error situations. If the meta data does not + // have an icon then this is not an error situation. + if ( error != KErrNone && error != KErrNotFound ) + { + User::Leave( error ); + } + + TRAP_IGNORE( iSubscriptionManager.SaveGroupIntoDatabaseL( + aClientUid, + aCurrentSubscription.ParentGroup() ) ); + + DLTRACEOUT(("")); + } + + +CNcdSubscription& CNcdSubscriptionDataCompleter::SubscriptionL( + const CNcdNodeIdentifier& aNodeIdentifier, + const TDesC& aPurchaseOptionId ) const + { + DLTRACEIN(("")); + return iSubscriptionManager.SubscriptionL( + aNodeIdentifier.NodeId(), + aNodeIdentifier.NodeNameSpace(), + aPurchaseOptionId, + aNodeIdentifier.ClientUid() ); + } + +TBool CNcdSubscriptionDataCompleter::SubscriptionIncomplete( + const CNcdSubscription& aSubscription ) const + { + DLTRACEIN(("")); + if ( aSubscription.SubscriptionName() == KNullDesC ) + { + return ETrue; + } + if ( aSubscription.ParentGroup().Icon() == KNullDesC8 ) + { + return ETrue; + } + return EFalse; + } + +void CNcdSubscriptionDataCompleter::CompleteSubscriptionNameL( + CNcdSubscription& aSubscription, + const CNcdNodeMetaData& aMetaData, + const TDesC& aPurchaseOptionId ) const + { + DLTRACEIN(("")); + CNcdPurchaseOptionImpl& subscriptionPo = + aMetaData.PurchaseOptionByIdL( aPurchaseOptionId ); + const TDesC& subscriptionName = subscriptionPo.PurchaseOptionName(); + aSubscription.SetSubscriptionNameL( subscriptionName ); + DLTRACEOUT(("")); + } + +void CNcdSubscriptionDataCompleter::CompleteSubscriptionIconL( + CNcdSubscription& aSubscription, + const CNcdNodeMetaData& aMetaData ) const + { + DLTRACEIN(("")); + CNcdNodeIcon& nodeIcon = aMetaData.IconL(); + HBufC8* icon = nodeIcon.IconDataL(); + CleanupStack::PushL( icon ); + aSubscription.ParentGroup().SetIconL( *icon ); + CleanupStack::PopAndDestroy( icon ); + DLTRACEOUT(("")); + }