diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/protocol/src/ncdrequestpurchase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/protocol/src/ncdrequestpurchase.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,462 @@ +/* +* 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: CNcdRequestPurchase implementation +* +*/ + + +#include "ncdrequestpurchase.h" +#include "ncdrequestbase.h" +#include "ncdrequestconfigurationdata.h" +#include "catalogsdebug.h" +#include "ncdprotocolutils.h" +//#include "ncdprotocoltypes.h" +#include "ncdprotocolwords.h" +#include "ncdpaymentmethod.h" + +CNcdRequestPurchase* CNcdRequestPurchase::NewL() + { + CNcdRequestPurchase* self = CNcdRequestPurchase::NewLC( ); + CleanupStack::Pop(); + return self; + } + +CNcdRequestPurchase* CNcdRequestPurchase::NewLC() + { + CNcdRequestPurchase* self = new (ELeave) CNcdRequestPurchase(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CNcdRequestPurchase::ConstructL() + { + CNcdRequestBase::ConstructL( KTagPreminetRequest ); + iName.SetL(KTagPurchase); + iNamespaceUri.SetL(KDefaultNamespaceUri); + iPrefix = TXmlEngString(); + iVersion.SetL(KAttrPreminetVersion); + iType = TXmlEngString(); + iConfirmationSet = EFalse; + iGetDownloadDetailsSet = EFalse; + } + +CNcdRequestPurchase::CNcdRequestPurchase() +: CNcdRequestBase() + { + } + +CNcdRequestPurchase::~CNcdRequestPurchase() + { + DLTRACEIN(("")); + iName.Free(); + iNamespaceUri.Free(); + iPrefix.Free(); + iType.Free(); + iTransactionId.Free(); + + for (TInt i = 0; i < iEntityDetails.Count(); ++i) + { + TNcdRequestPurchaseEntity e = iEntityDetails[i]; + e.id.Free(); + e.timestamp.Free(); + e.purchaseOptionId.Free(); + e.ticket.Free(); + } + iEntityDetails.Close(); + + + for (TInt i = 0; i < iConfirmation.entities.Count(); ++i) + { + TNcdRequestDeliverablePurchaseEntity e = + iConfirmation.entities[i]; + e.id.Free(); + e.timestamp.Free(); + e.purchaseOptionId.Free(); + e.ticket.Free(); + e.deliveryMethod.Free(); + } + iConfirmation.entities.Close(); + iConfirmation.queryResponseId.Free(); + iConfirmation.paymentMethod.Free(); + + + + iGetDownloadDetails.id.Free(); + iGetDownloadDetails.timestamp.Free(); + iGetDownloadDetails.purchaseOptionId.Free(); + iGetDownloadDetails.ticket.Free(); + DLTRACEOUT(("")); + } + +void CNcdRequestPurchase::SetTransactionIdL( const TDesC& aTransactionId ) + { + iTransactionId.SetL(aTransactionId); + } + +void CNcdRequestPurchase::SetCancelL( TBool aCancel ) + { + iCancel = aCancel ? EValueTrue : EValueFalse; + } + +void CNcdRequestPurchase::UnsetCancel() + { + iCancel = EValueNotSet; + } + +void CNcdRequestPurchase::AddEntityDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId ) + { + TNcdRequestPurchaseEntity entity; + entity.id.SetL(aId); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.ticket = TXmlEngString(); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.gift = EValueNotSet; + iEntityDetails.AppendL(entity); + } + +void CNcdRequestPurchase::AddEntityDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, const TDesC& aTicket ) + { + TNcdRequestPurchaseEntity entity; + entity.id.SetL(aId); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.ticket.SetL(aTicket); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.gift = EValueNotSet; + iEntityDetails.AppendL(entity); + } + +void CNcdRequestPurchase::AddEntityDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, const TDesC& aTicket, TBool aGift ) + { + TNcdRequestPurchaseEntity entity; + entity.id.SetL(aId); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.ticket.SetL(aTicket); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.gift = aGift ? EValueTrue : EValueFalse; + iEntityDetails.AppendL(entity); + } + + +void CNcdRequestPurchase::SetPurchaseConfirmationL( + MNcdPaymentMethod::TNcdPaymentMethodType aPaymentMethod ) + { + SetPurchaseConfirmationL(KNullDesC, aPaymentMethod); + } + +void CNcdRequestPurchase::SetPurchaseConfirmationL( + const TDesC& aQueryResponseId, + MNcdPaymentMethod::TNcdPaymentMethodType aPaymentMethod ) + { + iConfirmation.queryResponseId = TXmlEngString(); + if ( aQueryResponseId != KNullDesC ) + { + iConfirmation.queryResponseId.SetL( aQueryResponseId ); + } + + iConfirmation.paymentMethod = TXmlEngString(); + if ( aPaymentMethod == MNcdPaymentMethod::EPaymentSms ) + { + iConfirmation.paymentMethod.SetL( KValueSms ); + } + else if ( aPaymentMethod == MNcdPaymentMethod::EPaymentCreditCard ) + { + iConfirmation.paymentMethod.SetL( KValueCreditCard ); + } + else if ( aPaymentMethod == MNcdPaymentMethod::EPaymentDirect ) + { + iConfirmation.paymentMethod.SetL( KValueDirect ); + } + else if ( aPaymentMethod == MNcdPaymentMethod::EPaymentCustom ) + { + iConfirmation.paymentMethod.SetL( KValueCustom ); + } + + iConfirmationSet = ETrue; + // entities must be set separately using AddPurchaseConfirmationEntityL() + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + const TDesC& aId, + const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId ) + { + AddPurchaseConfirmationEntityL(aId, aTimestamp, aPurchaseOptionId, EDeliveryNotSet); + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + const TDesC& aId, + const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, + TNcdDeliveryMethod aDeliveryMethod ) + { + TNcdRequestDeliverablePurchaseEntity entity; + entity.id.SetL(aId); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.ticket = TXmlEngString(); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.gift = EValueNotSet; + + AddPurchaseConfirmationEntityL(entity, aDeliveryMethod); + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + const TDesC& aId, + const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, + const TDesC& aTicket ) + { + TNcdRequestDeliverablePurchaseEntity entity; + entity.id.SetL(aId); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.ticket.SetL(aTicket); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.gift = EValueNotSet; + + AddPurchaseConfirmationEntityL(entity, EDeliveryNotSet); + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + const TDesC& aId, + const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, + const TDesC& aTicket, + TNcdDeliveryMethod aDeliveryMethod ) + { + TNcdRequestDeliverablePurchaseEntity entity; + entity.id.SetL(aId); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.ticket.SetL(aTicket); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.gift = EValueNotSet; + + AddPurchaseConfirmationEntityL(entity, aDeliveryMethod); + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + const TDesC& aId, + const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, + const TDesC& aTicket, + TBool aGift, + TNcdDeliveryMethod aDeliveryMethod ) + { + TNcdRequestDeliverablePurchaseEntity entity; + entity.id.SetL(aId); + entity.purchaseOptionId.SetL(aPurchaseOptionId); + entity.ticket.SetL(aTicket); + if ( aTimestamp != KNullDesC ) + entity.timestamp.SetL(aTimestamp); + entity.gift = aGift ? EValueTrue : EValueFalse; + + AddPurchaseConfirmationEntityL(entity, aDeliveryMethod); + } + +void CNcdRequestPurchase::AddPurchaseConfirmationEntityL( + TNcdRequestDeliverablePurchaseEntity aEntity, + TNcdDeliveryMethod aDeliveryMethod ) + { + TXmlEngString method; + switch (aDeliveryMethod) + { + case EDeliverySms: + { + method = "sms"; + break; + } + case EDeliveryWapPush: + { + method = "wap-push"; + break; + } + case EDeliveryDirect: + { + method = "direct"; + break; + } + case EDeliveryNone: + { + method = "none"; + break; + } + default: + break; + } + aEntity.deliveryMethod = method; + iConfirmation.entities.AppendL(aEntity); + } + + +void CNcdRequestPurchase::SetGetDownloadDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId ) + { + SetGetDownloadDetailsL(aId, aTimestamp, aPurchaseOptionId, KNullDesC, EFalse); + } + +void CNcdRequestPurchase::SetGetDownloadDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, const TDesC& aTicket ) + { + SetGetDownloadDetailsL(aId, aTimestamp, aPurchaseOptionId, aTicket, EFalse); + } + +void CNcdRequestPurchase::SetGetDownloadDetailsL( + const TDesC& aId, const TDesC& aTimestamp, + const TDesC& aPurchaseOptionId, const TDesC& aTicket, TBool aGift ) + { + iGetDownloadDetails.id.SetL(aId); + iGetDownloadDetails.timestamp.SetL(aTimestamp); + iGetDownloadDetails.purchaseOptionId.SetL(aPurchaseOptionId); + + iGetDownloadDetails.ticket = TXmlEngString(); + if ( aTicket != KNullDesC ) + iGetDownloadDetails.ticket.SetL(aTicket); + + iGetDownloadDetails.gift = aGift ? EValueTrue : EValueFalse; + iGetDownloadDetailsSet = ETrue; + } + + +// generates the dom nodes +HBufC8* CNcdRequestPurchase::CreateRequestL() + { + DLTRACEIN((_L("entry"))); + // generate browse part of the request + CNcdRequestBase::SetProtocolVersionL(KPreminetReqVersion); + iRequestElement = NcdProtocolUtils::NewElementL(iDocument, KTagPurchase); + if (iConfiguration) + iConfiguration->SetNamespacePrefixL( KAttrCdpNamespacePrefix ); + + if ( iCancel != EValueNotSet ) + NcdProtocolUtils::NewAttributeL( iRequestElement, KAttrCancel, iCancel ); + + if ( iTransactionId.NotNull() ) + NcdProtocolUtils::NewAttributeL( iRequestElement, KAttrTransactionId, iTransactionId ); + + + // only one of the following parts is allowed at a time + if (!iConfirmationSet && iEntityDetails.Count() > 0) + { + for (TInt i = 0; i < iEntityDetails.Count(); ++i) + { + // create remote entity elements + TNcdRequestPurchaseEntity entity = iEntityDetails[i]; + TXmlEngElement entityElement = + NcdProtocolUtils::NewElementL( + iDocument, iRequestElement, KTagEntityDetails ); + NcdProtocolUtils::NewAttributeL( entityElement, KAttrId, entity.id); + + if (entity.timestamp.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrTimestamp, entity.timestamp); + + if (entity.purchaseOptionId.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrPurchaseOptionId, entity.purchaseOptionId); + + if (entity.ticket.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrTicket, entity.ticket); + + if (entity.gift != EValueNotSet) + NcdProtocolUtils::NewBoolAttributeL( + entityElement, KAttrGift, entity.gift); + } + } + else if (iConfirmationSet && iConfirmation.entities.Count() > 0) + { + TXmlEngElement confirmation = + NcdProtocolUtils::NewElementL( iDocument, iRequestElement, KTagConfirmation ); + + NcdProtocolUtils::NewAttributeL( confirmation, KAttrQueryResponseId, + iConfirmation.queryResponseId ); + TXmlEngElement entities = + NcdProtocolUtils::NewElementL( iDocument, confirmation, KTagEntities ); + for (TInt i = 0; i < iConfirmation.entities.Count(); ++i) + { + TNcdRequestDeliverablePurchaseEntity entity = + iConfirmation.entities[i]; + TXmlEngElement entityElement = + NcdProtocolUtils::NewElementL( iDocument, entities, KTagEntity ); + + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrId, entity.id); + + if (entity.timestamp.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrTimestamp, entity.timestamp); + + if (entity.purchaseOptionId.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrPurchaseOptionId, + entity.purchaseOptionId); + + if (entity.ticket.NotNull()) + NcdProtocolUtils::NewAttributeL( + entityElement, KAttrTicket, entity.ticket); + + if (entity.gift != EValueNotSet) + NcdProtocolUtils::NewBoolAttributeL( + entityElement, KAttrGift, entity.gift); + + if (entity.deliveryMethod.NotNull()) + { + TXmlEngElement deliveryElement = + NcdProtocolUtils::NewElementL( + iDocument, iRequestElement, KTagDelivery ); + NcdProtocolUtils::NewAttributeL( + deliveryElement, KAttrMethod, entity.deliveryMethod); + } + } + TXmlEngElement payment = + NcdProtocolUtils::NewElementL( iDocument, confirmation, KTagPayment ); + NcdProtocolUtils::NewAttributeL( payment, KAttrMethod, iConfirmation.paymentMethod); + + } + else if (iGetDownloadDetailsSet) + { + TXmlEngElement getDownloadDetails = + NcdProtocolUtils::NewElementL( iDocument, iRequestElement, KTagGetDownloadDetails ); + NcdProtocolUtils::NewAttributeL( + getDownloadDetails, KAttrId, iGetDownloadDetails.id); + NcdProtocolUtils::NewAttributeL( + getDownloadDetails, KAttrTimestamp, iGetDownloadDetails.timestamp); + NcdProtocolUtils::NewAttributeL( + getDownloadDetails, KAttrPurchaseOptionId, iGetDownloadDetails.purchaseOptionId); + NcdProtocolUtils::NewAttributeL( + getDownloadDetails, KAttrTicket, iGetDownloadDetails.ticket); + NcdProtocolUtils::NewBoolAttributeL( + getDownloadDetails, KAttrGift, iGetDownloadDetails.gift); + } + + DLTRACEOUT((_L("exit"))); + + // base class generates the complete request + return CNcdRequestBase::CreateRequestL(); + } + +