ncdengine/provider/protocol/src/ncdrequestbrowsesearch.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/protocol/src/ncdrequestbrowsesearch.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,328 @@
+/*
+* 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 "ncdrequestbrowsesearch.h"
+#include "ncdrequestbase.h"
+#include "ncdrequestconfigurationdata.h"
+#include "catalogsdebug.h"
+#include "ncdprotocolutils.h"
+#include "ncdprotocoltypes.h"
+#include "ncdprotocolwords.h"
+
+CNcdRequestBrowseSearch* CNcdRequestBrowseSearch::NewL()
+    {
+    CNcdRequestBrowseSearch* self = 
+        CNcdRequestBrowseSearch::NewLC( );
+    CleanupStack::Pop();
+    return self;
+    }
+
+CNcdRequestBrowseSearch* CNcdRequestBrowseSearch::NewLC()
+    {
+    CNcdRequestBrowseSearch* self = 
+        new (ELeave) CNcdRequestBrowseSearch();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+void CNcdRequestBrowseSearch::ConstructL()
+    {
+    DLTRACEIN((""));
+    CNcdRequestBase::ConstructL( KTagPreminetRequest );
+    iName.SetL(KTagBrowse);
+    iNamespaceUri.SetL(KDefaultNamespaceUri);
+    iPrefix.SetL(KAttrCdpNamespacePrefix);
+    iVersion.SetL(KAttrPreminetVersion);
+    DLTRACEOUT((""));
+    }
+    
+CNcdRequestBrowseSearch::CNcdRequestBrowseSearch()
+: CNcdRequestBase(), iDoSearch(EFalse)
+    {
+    }
+
+CNcdRequestBrowseSearch::~CNcdRequestBrowseSearch()
+    {
+    DLTRACEIN((""));
+    if (iName.NotNull())
+        iName.Free();
+    if (iNamespaceUri.NotNull())
+        iNamespaceUri.Free();
+    if (iPrefix.NotNull())
+        iPrefix.Free();
+    if (iType.NotNull())
+        iType.Free();
+    
+    ResetAndCloseArray( iEntities );
+    
+    iEntityFilter.Close();    
+    
+    iResponseFilter.Close();
+        
+    DLTRACEOUT((""));
+    }
+
+
+void CNcdRequestBrowseSearch::SetSearch(TBool aDoSearch) 
+    {
+    iDoSearch = aDoSearch;
+    }
+
+
+void CNcdRequestBrowseSearch::AddEntityL(
+    const TDesC& aId, 
+    TBool aIncludeMetadata) 
+    {
+    DLTRACEIN((_L("entry")));
+    AddEntityL(aId, KNullDesC, aIncludeMetadata);
+    }
+    
+void CNcdRequestBrowseSearch::AddEntityL(
+    const TDesC& aId, 
+    const TDesC& aTimestamp, 
+    TBool aIncludeMetadata) 
+    {
+    DLTRACEIN((_L("entry")));
+    TNcdRequestRemoteEntity ent;
+    ent.id.SetL(aId);
+    
+    if (aTimestamp != KNullDesC)
+        ent.timeStamp.SetL(aTimestamp);
+    
+    ent.includeMetaData = 
+        aIncludeMetadata ? EValueTrue : EValueFalse;
+    iEntities.AppendL(ent);
+    }
+
+void CNcdRequestBrowseSearch::AddEntityFilterL(
+    const MDesC16Array& aIncludedKeywords,
+    const MDesC16Array& aIncludedContentPurposes,    
+    TBool         aSubscribableContent,
+    TBool         aFreeContent) 
+    {
+    DLTRACEIN(("entry"));
+    iEntityFilter.keywords.Reset();
+    for (TInt i = 0; i < aIncludedKeywords.MdcaCount(); ++i) 
+        {
+        TPtrC16 ptr = aIncludedKeywords.MdcaPoint(i);
+        if ( ptr.Length() > 0) 
+            {
+            TNcdRequestFilter keyword;
+            keyword.text.SetL(ptr);
+            keyword.exclude = EValueFalse;
+            iEntityFilter.keywords.Append( keyword );
+            }
+        }
+        
+
+    DLTRACE((""));
+    iEntityFilter.contentPurposes.Reset();
+    for (TInt i = 0; i < aIncludedContentPurposes.MdcaCount(); ++i) 
+        {
+        TPtrC16 ptr = aIncludedContentPurposes.MdcaPoint(i);
+        if ( ptr.Length() > 0) 
+            {
+            TNcdRequestFilter contentPurpose;
+            contentPurpose.text.SetL(ptr);
+            contentPurpose.exclude = EValueFalse;
+            iEntityFilter.contentPurposes.Append( contentPurpose );
+            }
+        }
+
+    DLTRACE((""));
+
+    iEntityFilter.subscribableContent = 
+        aSubscribableContent ? EValueTrue : EValueFalse;
+    iEntityFilter.freeContent = 
+        aFreeContent ? EValueTrue : EValueFalse;
+    
+    // Should add details
+    iEntityFilterEnabled = ETrue;
+    }
+    
+
+void CNcdRequestBrowseSearch::AddResponseFilterL(
+    TInt          aPageSize,
+    TInt          aPageStart,
+    TInt          aStructureDepth,
+    TInt          aMetaDataDepth,
+    TInt          aMetaDataPerLevel,
+    const MDesC16Array& aIncludedElements,
+    const MDesC16Array& aExcludedElements )
+    {
+    DLTRACEIN((_L("entry")));
+    iResponseFilter.pageSize = aPageSize;
+    iResponseFilter.pageStart = aPageStart;
+    iResponseFilter.structureDepth = aStructureDepth;
+    iResponseFilter.metadataDepth = aMetaDataDepth;
+    iResponseFilter.metadataPerLevel = aMetaDataPerLevel;
+    
+    iResponseFilter.includedElements.Reset();
+    for (TInt i = 0; i < aIncludedElements.MdcaCount(); ++i) 
+        {
+        TPtrC16 ptr = aIncludedElements.MdcaPoint(i);
+        if ( ptr.Length() > 0) 
+            {
+            TXmlEngString element;
+            element.SetL(ptr);
+            iResponseFilter.includedElements.Append( element );
+            }
+        }
+
+    iResponseFilter.excludedElements.Reset();
+    for (TInt i = 0; i < aExcludedElements.MdcaCount(); ++i) 
+        {
+        TPtrC16 ptr = aExcludedElements.MdcaPoint(i);
+        if ( ptr.Length() > 0) 
+            {
+            TXmlEngString element;
+            element.SetL(ptr);
+            iResponseFilter.excludedElements.Append( element );
+            }
+        }
+        
+    iResponseFilterEnabled = ETrue;
+    }
+
+// generates the dom nodes
+HBufC8* CNcdRequestBrowseSearch::CreateRequestL()
+    {
+    DLTRACEIN((_L("entry")));
+    if ( iDoSearch ) 
+        iRequestElement = NcdProtocolUtils::NewElementL(iDocument, KTagSearch);
+    else 
+        iRequestElement = NcdProtocolUtils::NewElementL(iDocument, KTagBrowse);
+        
+    if (iConfiguration)
+        iConfiguration->SetNamespacePrefixL( KAttrCdpNamespacePrefix );
+
+    // entity
+    for (TInt i = 0; i < iEntities.Count(); ++i)
+        {
+        // create remote entity elements
+        TNcdRequestRemoteEntity entity = iEntities[i];
+        TXmlEngElement entityElement = 
+            NcdProtocolUtils::NewElementL( 
+                iDocument, iRequestElement, KTagEntity );
+
+        NcdProtocolUtils::NewAttributeL( 
+            entityElement, KAttrId, entity.id);
+
+        if (entity.timeStamp.NotNull())
+            NcdProtocolUtils::NewAttributeL( 
+                entityElement, KAttrTimeStamp, entity.timeStamp);
+
+        if (entity.includeMetaData != EValueNotSet) 
+            {
+            NcdProtocolUtils::NewNcdBoolAttributeL( 
+                entityElement, KAttrIncludeMetaData, 
+                entity.includeMetaData);
+            }
+        }
+    
+    // responseFilter
+    if (iResponseFilterEnabled)
+        {
+        // create element for response filter
+        TXmlEngElement responseFilter = NcdProtocolUtils::NewElementL( 
+            iDocument, iRequestElement, KTagResponseFilter );
+        NcdProtocolUtils::NewAttributeL( 
+            responseFilter, KAttrPageSize, iResponseFilter.pageSize );
+        NcdProtocolUtils::NewAttributeL( 
+            responseFilter, KAttrPageStart, iResponseFilter.pageStart );
+        NcdProtocolUtils::NewAttributeL( 
+            responseFilter, KAttrStructureDepth, 
+            iResponseFilter.structureDepth );
+        NcdProtocolUtils::NewAttributeL( 
+            responseFilter, KAttrMetadataDepth, 
+            iResponseFilter.metadataDepth );
+        NcdProtocolUtils::NewAttributeL( 
+            responseFilter, KAttrMetadataPerLevel, 
+            iResponseFilter.metadataPerLevel );
+
+        TBool inc = EFalse;
+        for ( TInt i = 0; i < iResponseFilter.includedElements.Count(); ++i )
+            {
+            TXmlEngElement includeElement = NcdProtocolUtils::NewElementL( 
+                iDocument, responseFilter, KTagIncludeElement );
+            NcdProtocolUtils::NewAttributeL( 
+                includeElement, KAttrName, iResponseFilter.includedElements[i] );
+            inc = ETrue;
+            }
+        for ( TInt i = 0; !inc && i < iResponseFilter.excludedElements.Count(); ++i )
+            {
+            TXmlEngElement excludeElement = NcdProtocolUtils::NewElementL( 
+                iDocument, responseFilter, KTagExcludeElement );
+            NcdProtocolUtils::NewAttributeL( 
+                excludeElement, KAttrName, iResponseFilter.excludedElements[i] );
+            }
+
+        }
+
+    
+    // entityFilter
+    if (iEntityFilterEnabled) 
+        {
+        // create element for entity filter
+        TXmlEngElement entityFilter = NcdProtocolUtils::NewElementL( 
+                iDocument, iRequestElement, KTagEntityFilter );
+
+        NcdProtocolUtils::NewNcdBoolAttributeL( 
+            entityFilter, KAttrSubscribableContent, 
+            iEntityFilter.subscribableContent );
+        NcdProtocolUtils::NewNcdBoolAttributeL( 
+            entityFilter, KAttrFreeContent, iEntityFilter.freeContent );
+
+        if ( iEntityFilter.keywords.Count() > 0 ) 
+            {
+            TXmlEngElement keywords = NcdProtocolUtils::NewElementL( 
+                    iDocument, entityFilter, KTagKeywords );
+            for ( TInt i = 0; i < iEntityFilter.keywords.Count(); ++i ) 
+                {
+                TNcdRequestFilter filter = iEntityFilter.keywords[i];
+                TXmlEngElement keyword = 
+                    NcdProtocolUtils::NewElementL( 
+                        iDocument, keywords, KTagKeyword );
+                keyword.SetTextL(filter.text.PtrC8());
+                NcdProtocolUtils::NewNcdBoolAttributeL( 
+                    keyword, KAttrExclude, filter.exclude );
+                }
+            }
+                        
+        if ( iEntityFilter.contentPurposes.Count() > 0 ) 
+            {
+            TXmlEngElement contentPurposes = NcdProtocolUtils::NewElementL( 
+                    iDocument, entityFilter, KTagContentPurposes );
+            for ( TInt i = 0; i < iEntityFilter.contentPurposes.Count(); ++i ) 
+                {
+                TNcdRequestFilter filter = iEntityFilter.contentPurposes[i];
+                TXmlEngElement contentPurpose = NcdProtocolUtils::NewElementL( 
+                    iDocument, contentPurposes, KTagContentPurpose );
+                contentPurpose.SetTextL(filter.text.PtrC8());
+                NcdProtocolUtils::NewNcdBoolAttributeL( 
+                    contentPurpose, KAttrExclude, filter.exclude );
+                }
+            }
+        }
+
+    DLTRACEOUT((_L("exit")));
+    
+    // base class generates the complete request
+    return CNcdRequestBase::CreateRequestL();
+    }