ncdengine/provider/protocol/src/ncd_pp_paymentimpl.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/protocol/src/ncd_pp_paymentimpl.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2006 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:   CNcdPreminetProtocolPaymentImpl implementation
+*
+*/
+
+
+#include "ncd_pp_paymentimpl.h"
+#include "ncd_pp_purchase.h"
+#include "ncdprotocolutils.h"
+#include "ncdpaymentmethod.h"
+#include "catalogsutils.h"
+#include "ncdstring.h"
+#include "ncd_pp_smsdetailsimpl.h"
+#include "catalogsdebug.h"
+
+CNcdPreminetProtocolPaymentImpl* 
+CNcdPreminetProtocolPaymentImpl::NewL() 
+    {
+    CNcdPreminetProtocolPaymentImpl* self =
+        new (ELeave) CNcdPreminetProtocolPaymentImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+CNcdPreminetProtocolPaymentImpl* 
+CNcdPreminetProtocolPaymentImpl::NewLC() 
+    {
+    CNcdPreminetProtocolPaymentImpl* self =
+        new (ELeave) CNcdPreminetProtocolPaymentImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+void CNcdPreminetProtocolPaymentImpl::ConstructL()
+    {
+    NcdProtocolUtils::AssignEmptyDesL( iQueryId );
+    iName = CNcdString::NewL();
+    }
+
+CNcdPreminetProtocolPaymentImpl::~CNcdPreminetProtocolPaymentImpl()
+    {
+    delete iQueryId;
+    delete iName;
+    iSmsDetails.ResetAndDestroy();
+    }
+
+void CNcdPreminetProtocolPaymentImpl::ExternalizeL( RWriteStream& aStream )
+    {
+    DLTRACEIN((""));
+    aStream.WriteInt32L( iMethod );
+
+    // For name and queryid:
+    // if not given in protocol, still constructed in ConstructL.
+    // So they exist in any case and can be externalized.
+    ExternalizeDesL( *iQueryId, aStream );
+    iName->ExternalizeL( aStream );
+    
+    // And then there can be sms details or not
+    const TInt KSmsDetailsCount( iSmsDetails.Count() );
+    aStream.WriteInt32L( KSmsDetailsCount );
+    
+    TInt smsIndexer( 0 );
+    while ( smsIndexer < KSmsDetailsCount )
+        {
+        MNcdPreminetProtocolSmsDetails*
+            currentSmsDetail = iSmsDetails[ smsIndexer ];
+        
+        CNcdPreminetProtocolSmsDetailsImpl* currentCastedSmsDetail =
+            static_cast<CNcdPreminetProtocolSmsDetailsImpl*>(
+                currentSmsDetail );
+        currentCastedSmsDetail->ExternalizeL( aStream );        
+        ++smsIndexer;
+        }
+    }
+
+void CNcdPreminetProtocolPaymentImpl::InternalizeL( RReadStream& aStream )
+    {
+    DLTRACEIN((""));
+    iMethod = static_cast<MNcdPaymentMethod::TNcdPaymentMethodType>(
+                  aStream.ReadInt32L() );
+    
+    InternalizeDesL( iQueryId, aStream );
+    iName->InternalizeL( aStream );
+    
+    // And then there can be sms details or not
+    iSmsDetails.ResetAndDestroy();
+    const TInt KSmsDetailsCount( aStream.ReadInt32L() );
+    TInt smsIndexer( 0 );
+    while ( smsIndexer < KSmsDetailsCount )
+        {
+        CNcdPreminetProtocolSmsDetailsImpl* smsDetails = 
+            CNcdPreminetProtocolSmsDetailsImpl::NewLC();
+        iSmsDetails.AppendL( smsDetails );
+        CleanupStack::Pop( smsDetails );
+        smsDetails->InternalizeL( aStream );
+        ++smsIndexer;
+        }     
+    }
+
+MNcdPaymentMethod::TNcdPaymentMethodType
+CNcdPreminetProtocolPaymentImpl::Method() const
+    {
+    return iMethod;
+    }
+
+const TDesC& 
+CNcdPreminetProtocolPaymentImpl::QueryId() const
+    {
+    return *iQueryId;
+    }
+
+const CNcdString& 
+CNcdPreminetProtocolPaymentImpl::Name() const
+    {
+    return *iName;
+    }
+
+const MNcdPreminetProtocolSmsDetails&
+CNcdPreminetProtocolPaymentImpl::SmsDetailsL(TInt aIndex) const
+    {
+    DASSERT( aIndex >= 0 && aIndex < iSmsDetails.Count() );
+    if ( aIndex < 0 || aIndex >= iSmsDetails.Count() ) 
+        {
+        User::Leave(KErrArgument);
+        }
+    return *iSmsDetails[aIndex];
+    }
+
+TInt CNcdPreminetProtocolPaymentImpl::SmsDetailsCount() const 
+    {
+    return iSmsDetails.Count();
+    }
+    
+CNcdPreminetProtocolPaymentImpl* CNcdPreminetProtocolPaymentImpl::CloneL() const 
+    {
+    DLTRACEIN((""));
+    CNcdPreminetProtocolPaymentImpl* clone =
+        CNcdPreminetProtocolPaymentImpl::NewLC();
+    clone->iMethod = iMethod;
+    AssignDesL( clone->iQueryId, *iQueryId );
+    clone->iName->SetKeyL( iName->Key() );
+    clone->iName->SetDataL( iName->Data() );
+    
+    for ( TInt i = 0; i < iSmsDetails.Count(); i++ ) 
+        {
+        MNcdPreminetProtocolSmsDetails* details = iSmsDetails[i]->CloneL();
+        CleanupStack::PushL( details );
+        clone->iSmsDetails.AppendL( details );
+        CleanupStack::Pop( details );
+        }
+    
+    CleanupStack::Pop( clone );
+    return clone;
+    }