ncdengine/provider/protocol/src/ncdrequestconfiguration.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/protocol/src/ncdrequestconfiguration.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,201 @@
+/*
+* 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:   CNcdRequestBrowseSearch implementation
+*
+*/
+
+
+#include "ncdrequestconfiguration.h"
+#include "ncdrequestbase.h"
+#include "ncdrequestconfigurationdata.h"
+#include "ncdprotocolutils.h"
+#include "ncdprotocolwords.h"
+#include "catalogsdebug.h"
+
+CNcdRequestConfiguration* CNcdRequestConfiguration::NewL()
+    {
+    //DLTRACEIN(( _L("NewL")));
+    CNcdRequestConfiguration* self = 
+        CNcdRequestConfiguration::NewLC( );
+    CleanupStack::Pop();
+    //DLTRACEOUT(( _L("NewL")));
+    return self;
+    }
+
+CNcdRequestConfiguration* CNcdRequestConfiguration::NewLC()
+    {
+    //DLTRACEIN(( _L("NewLC")));
+    CNcdRequestConfiguration* self = 
+        new (ELeave) CNcdRequestConfiguration();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    //DLTRACEOUT(( _L("NewLC")));
+    return self;
+    }
+
+void CNcdRequestConfiguration::ConstructL()
+    {
+    DLTRACEIN((""));
+//    iRootName.SetL();
+    CNcdRequestBase::ConstructL( KTagConfigurationRequest );
+    iNamespaceUri.SetL( KCdpNamespaceUri );
+    iPrefix.SetL( KNullDesC8 );
+    iVersion.SetL( KConfigurationReqVersion );
+    iType.SetL( KDefaultRequestType );
+    DLTRACEOUT((""));
+    }
+    
+CNcdRequestConfiguration::CNcdRequestConfiguration()
+    : CNcdRequestBase()
+    {
+    }
+
+CNcdRequestConfiguration::~CNcdRequestConfiguration()
+    {
+    DLTRACEIN((""));
+    iType.Free();
+    iNamespaceUri.Free();
+    iPrefix.Free();
+    delete iBundles;
+    DLTRACEOUT((""));
+    }
+
+void CNcdRequestConfiguration::AddCatalogBundleRequestL( TDesC8& aBundleId )
+    {
+    if ( !iBundles ) 
+        {
+        iBundles = new (ELeave) CDesC8ArrayFlat(1);
+        }
+    iBundles->AppendL( aBundleId );
+    }
+
+// generates the dom nodes
+HBufC8* CNcdRequestConfiguration::CreateRequestL()
+    {
+    // generate browse part of the request
+    DLTRACEIN((_L("entry")));
+
+    // override request root element name and namespace
+#ifndef RD_XML_ENGINE_API_CHANGE
+    TXmlEngString configurationRequest;
+    NcdProtocolUtils::DesToStringL( configurationRequest, KTagConfigurationRequest );
+    iRoot = iDocument.CreateDocumentElementL( configurationRequest );
+    configurationRequest.Free();
+    
+    TXmlEngString cdpUri;
+    NcdProtocolUtils::DesToStringL( cdpUri, KCdpNamespaceUri );
+    TXmlEngString cdpPrefix;
+    NcdProtocolUtils::DesToStringL( cdpPrefix, KCdpNamespacePrefix);
+    iRoot.SetDefaultNamespaceL( cdpUri );
+    iCdpNamespace = iRoot.AddNamespaceDeclarationL( cdpUri, cdpPrefix );
+    cdpUri.Free();
+    cdpPrefix.Free();
+
+    TXmlEngString xsUri;
+    TXmlEngString xsPrefix;
+    NcdProtocolUtils::DesToStringL( xsUri, KXsNamespaceUri );
+    NcdProtocolUtils::DesToStringL( xsPrefix, KXsNamespacePrefix );
+    iXsNamespace = iRoot.AddNamespaceDeclarationL( xsUri, xsPrefix );
+    xsUri.Free();
+    xsPrefix.Free();
+    
+    TXmlEngString xsiUri;
+    TXmlEngString xsiPrefix;
+    NcdProtocolUtils::DesToStringL( xsiUri, KXsiNamespaceUri );
+    NcdProtocolUtils::DesToStringL( xsiPrefix, KXsiNamespacePrefix );
+    iXsiNamespace = iRoot.AddNamespaceDeclarationL( xsiUri, xsiPrefix );
+    xsiUri.Free();
+    xsiPrefix.Free();
+    
+#else
+    iRoot = iDocument.CreateDocumentElementL( KTagConfigurationRequest );
+    iRoot.SetDefaultNamespaceL( KCdpNamespaceUri );
+    iCdpNamespace = iRoot.AddNamespaceDeclarationL( KCdpNamespaceUri, KCdpNamespacePrefix );
+    iXsNamespace = iRoot.AddNamespaceDeclarationL( KXsNamespaceUri, KXsNamespacePrefix );
+    iXsiNamespace = iRoot.AddNamespaceDeclarationL( KXsiNamespaceUri, KXsiNamespacePrefix );
+#endif
+
+    NcdProtocolUtils::NewAttributeL( iRoot, KAttrVersion, iVersion);
+    NcdProtocolUtils::NewAttributeL( iRoot, KAttrType, iType);
+    
+    // no request if there is no configuration data
+    if ( !iConfiguration )
+        {
+        DLTRACEOUT(( "exit with null" ));
+        return NULL;
+        }
+    
+    // prefix not needed in configuration request
+    iConfiguration->SetNamespacePrefixL( KNullDesC8 );
+
+    // network    
+    TXmlEngElement network = 
+        iConfiguration->GetNetworkConfigurationElementL( iDocument );
+    if ( network.NotNull() )
+        iRoot.AppendChildL( network );
+    
+    DLTRACE(("Adding %d client-infos", 
+        iConfiguration->ClientConfigurationCount() ));
+        
+    for ( TInt clientIndex = 0; 
+          clientIndex < iConfiguration->ClientConfigurationCount(); 
+          ++clientIndex )
+        {        
+        // client
+        TXmlEngElement client = 
+            iConfiguration->GetClientConfigurationElementL( 
+                iDocument, clientIndex );
+                
+        if ( client.NotNull() )
+            iRoot.AppendChildL( client );
+        }
+        
+    // cookies
+    TXmlEngElement cookies = iConfiguration->GetCookiesElementL( iDocument );
+    if ( cookies.NotNull() )
+        iRoot.AppendChildL( cookies );
+    
+
+    // queryResponse
+    TXmlEngElement queryResponses = GetQueryResponsesElementL( KNullDesC8 );
+    if ( queryResponses.NotNull() )
+        iRoot.AppendChildL( queryResponses );
+
+    // details
+    TXmlEngElement details = GetDetailsElementL( KNullDesC8 );
+    if ( details.NotNull() ) 
+        iRoot.AppendChildL( details );
+    // catalog bundle requests
+    if ( iBundles && iBundles->MdcaCount() > 0 ) 
+        {
+        if ( details.IsNull() ) 
+            {
+            details = 
+                NcdProtocolUtils::NewElementL( iDocument, iRoot, KTagDetails );
+            }
+        for ( TInt i = 0; i < iBundles->MdcaCount(); ++i ) 
+            {
+            TPtrC8 ptr = iBundles->MdcaPoint( i );
+            TXmlEngElement detail = 
+                NcdProtocolUtils::NewElementL( iDocument, details, KTagDetail );
+            NcdProtocolUtils::NewAttributeL( detail, KAttrId, KValueCatalogRequest );
+            NcdProtocolUtils::NewAttributeL( detail, KAttrValue, ptr );
+            }
+        }
+    
+    DLTRACEOUT((_L("exit")));
+    // base class CreateRequestL not needed
+    return CNcdRequestBase::ExternalizeL();
+    }
+