--- /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<CNcdNodeIdentifier> 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((""));
+ }