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