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