diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/protocol/src/ncd_pp_paymentimpl.cpp --- /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( + currentSmsDetail ); + currentCastedSmsDetail->ExternalizeL( aStream ); + ++smsIndexer; + } + } + +void CNcdPreminetProtocolPaymentImpl::InternalizeL( RReadStream& aStream ) + { + DLTRACEIN(("")); + iMethod = static_cast( + 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; + }