diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdsearchoperationimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/inc/ncdsearchoperationimpl.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,202 @@ +/* +* 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: +* +*/ + + +#ifndef C_NCDSEARCHOPERATIONIMPL_H +#define C_NCDSEARCHOPERATIONIMPL_H + +#include "ncdloadnodeoperationimpl.h" +#include "ncdnodefactory.h" + +class CNcdSearchFilter; + +/** + * Search operation implementation. + * + * + * @lib ?library + * @since S60 ?S60_version *** for example, S60 v3.0 + */ +class CNcdSearchOperation : public CNcdLoadNodeOperationImpl + { + +public: + + /* + * @param aRecursionLevel Determines the number of remote folder levels + * the search request is made to. Negative number means unlimited levels. + */ + static CNcdSearchOperation* NewL( + const CNcdNodeIdentifier& aNodeIdentifier, + const CNcdNodeIdentifier& aParentIdentifier, + const CNcdSearchFilter& aFilter, + TNcdResponseFilterParams aFilterParams, + CNcdGeneralManager& aGeneralManager, + MCatalogsHttpSession& aHttpSession, + MNcdOperationRemoveHandler* aRemoveHandler, + MNcdOperationQueue* aOperationQueue, + MCatalogsSession& aSession, + TBool aLoadChildren = EFalse, + TNcdChildLoadMode aMode = ELoadStructure, + TInt aRecursionLevels = -1, + TBool iIsSubOperation = EFalse ); + + /* + * @param aRecursionLevel Determines the number of remote folder levels + * the search request is made to. Negative number means unlimited levels. + */ + static CNcdSearchOperation* NewLC( + const CNcdNodeIdentifier& aNodeIdentifier, + const CNcdNodeIdentifier& aParentIdentifier, + const CNcdSearchFilter& aFilter, + TNcdResponseFilterParams aFilterParams, + CNcdGeneralManager& aGeneralManager, + MCatalogsHttpSession& aHttpSession, + MNcdOperationRemoveHandler* aRemoveHandler, + MNcdOperationQueue* aOperationQueue, + MCatalogsSession& aSession, + TBool aLoadChildren = EFalse, + TNcdChildLoadMode aMode = ELoadStructure, + TInt aRecursionLevels = -1, + TBool aIsSubOperation = EFalse ); + + virtual ~CNcdSearchOperation(); + +public: // from MNcdParserEntityObserver + + /** + * @see MNcdParserEntityObserver + */ + virtual void FolderRefL( MNcdPreminetProtocolFolderRef* aData ); + + /** + * @see MNcdParserEntityObserver + */ + virtual void FolderDataL( MNcdPreminetProtocolDataEntity* aData ); + + /** + * @see MNcdParserEntityObserver + */ + virtual void ItemRefL( MNcdPreminetProtocolItemRef* aData ); + + /** + * @see MNcdParserEntityObserver + */ + virtual void ItemDataL( MNcdPreminetProtocolDataEntity* aData ); + +public: // from MNcdParserErrorObserver + + virtual void ErrorL( MNcdPreminetProtocolError* aData ); + +protected: + + CNcdSearchOperation( TNcdResponseFilterParams aFilterParams, + TNcdChildLoadMode aMode, + TBool aLoadChildren, + CNcdGeneralManager& aGeneralManager, + MCatalogsHttpSession& aHttpSession, + MNcdOperationRemoveHandler* aRemoveHandler, + MNcdOperationQueue* aOperationQueue, + MCatalogsSession& aSession, + TInt aRecursionLevels, + TBool aIsSubOperation = EFalse ); + + void ConstructL( const CNcdNodeIdentifier& aNodeIdentifier, + const CNcdNodeIdentifier& aParentIdentifier, + const CNcdSearchFilter& aFilter ); + +protected: // From CNcdLoadNodeOperationImpl + + virtual HBufC8* CreateRequestLC( CNcdNodeIdentifier* aNodeIdentifier, + TNcdResponseFilterParams aFilterParams, + const TDesC& aUri ); + + virtual void CreateSubOperationsL(); + + + /** + * @see CNcdLoadNodeOperationImpl::IsLoadingNecessaryL + */ + TBool IsLoadingNecessaryL(); + + /** + * @see CNcdLoadNodeOperationImpl::IsChildClearingNecessaryL + */ + virtual TBool IsChildClearingNecessaryL(); + + /** + * @see CNcdLoadNodeOperationImpl::RemoteFolderCount + */ + virtual TInt RemoteFolderCount() const; + + + /** + * @see CNcdLoadNodeOperationImpl::RemoveChildrenL + */ + virtual void RemoveChildrenL( CNcdNodeFolder& aFolder ); + + +protected: + + void DetermineParentTypeL( const TUid& aUid ); + + /** + * Creates a skeleton node that contains all needed info to + * conduct search for a bundle. + * + * @return The created search folder. + */ + CNcdNode& CreateSearchBundleSkeletonL(); + + /** + * Creates a skeleton node that contains all needed info to + * conduct search for a regular folder. + * + * @return The created search folder. + */ + CNcdNode& CreateSearchFolderSkeletonL(); + + /** + * Actual implementation for FolderRefL + */ + void DoFolderRefL( MNcdPreminetProtocolFolderRef* aData ); + + /** + * Actual implementation for ItemRefL + */ + void DoItemRefL( MNcdPreminetProtocolItemRef* aData ); + + /** + * Actual implementation for ItemDataL + */ + void DoItemDataL( MNcdPreminetProtocolDataEntity* aData ); + +private: // data + + CNcdSearchFilter* iSearchFilter; + + CNcdNodeFactory::TNcdNodeType iParentType; + + // Recursion levels left + TInt iRecursionLeft; + + // Remote folders that are children of transparent will be here. + RPointerArray iRemoteFoldersChildOfTransparent; + + }; + +#endif // C_NCDSEARCHOPERATIONIMPL_H