diff -r 000000000000 -r 32704c33136d ncdengine/provider/protocol/src/ncdrequestbrowsesearch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/protocol/src/ncdrequestbrowsesearch.cpp Tue Jan 26 12:06:03 2010 +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(); + }