ncdengine/provider/protocol/src/ncdrequestpurchase.cpp
changeset 0 ba25891c3a9e
--- /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();
+    }
+    
+