diff -r 000000000000 -r c53acadfccc6 metadataengine/server/inc/mdsfindsequence.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/inc/mdsfindsequence.h Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2005-2009 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: Manages object search from database using SQL, +* +*/ + +#ifndef __MDSFINDSEQUENCE_H__ +#define __MDSFINDSEQUENCE_H__ + +#include +#include + +#include "mdscommoninternal.h" + +// FORWARD DECLARATIONS +class CMdsSchema; +class CMdSServer; +class CMdSSqLiteConnection; +class CMdSFindEngine; +class CMdSSqlFindOperation; +class CMdCSerializationBuffer; + +// CONSTANTS +const TInt KFindSetReady = 1; + +/** +* CMdSFindSequence. +* Handles on sequence of find. +* A sequence is a logical operation, which may consist +* of several parallel physical operations from different +* physical entities (tables) +*/ +class CMdSFindSequence : public CActive + { + public: // Constructors and destructor + + /** + * NewL. + * Two-phased constructor. + * @param aServer reference to server + * @param aSchema the schema + * @param aObserver reference to find engine observer + * @return Pointer to created CMdSManipulationEngine object. + */ + static CMdSFindSequence* NewL( + CMdSServer& aServer, CMdsSchema& aSchema, CMdSFindEngine& aObserver ); + + /** + * NewLC. + * Two-phased constructor. + * @param aServer reference to server + * @param aSchema the schema + * @param aObserver reference to find engine observer + * @return Pointer to created CMdSManipulationEngine object. + */ + static CMdSFindSequence* NewLC( + CMdSServer& aServer, CMdsSchema& aSchema, CMdSFindEngine& aObserver ); + + /** + * Destructor. + */ + virtual ~CMdSFindSequence(); + + private: // Private constructors + + /** + * 2nd phase constructor + */ + void ConstructL(); + + /** + * C++ default constructor. + * @param aServer reference to server + * @param aSchema the schema + * @param aObserve reference to find engine observer + */ + CMdSFindSequence( + CMdSServer& aServer, CMdsSchema& aSchema, CMdSFindEngine& aObserve ); + + public: + + void SetFindParams( TUint32 aNotifyCount ); + + /** + * Finds objects synchronously + * @param aConnection database connection to use in find + * @param aSerializedCriteria serialized criteria buffer + * @param aUserLevel client's access level + * @return KErrNone or KSetReady + */ + TInt FindL( CMdCSerializationBuffer& aSerializedCriteria, + TUserLevel aUserLevel ); + + /** + * Continues ongoing synchronous find with the next set + * @param aConnection database connection to use in find + * @return KErrNone or KSetReady + */ + TInt ContinueL(); + + /** + * Start Find objects asynchronously + * @param aSerializedCriteria serialized criteria buffer + */ + void FindAsync( CMdCSerializationBuffer& aSerializedCriteria, + TUserLevel aUserLevel ); + + /** + * Continues ongoing asynchronous find with the next set + */ + void ContinueAsync(); + + /** + * Returns whether find sequence is complete or not. + * Completed sequence can be safely delete. + */ + TBool IsComplete() const; + + /** + * Returns whether find sequence's query is complete or not. + */ + TBool IsQueryComplete() const; + + public: // methods called by CMdSFindOperation + + /** access to the schema */ + const CMdsSchema& Schema() const; + + /** access to the server */ + CMdSServer& Server() const; + + /** access to the result buffer */ + CMdCSerializationBuffer& ResultsL() const; + + void SetResultMode( TBool aResultModeItems ); + + protected: // From CActive + + /** + * Handles an active object’s request completion event. + * CMdEFindSequence calls this methot by itself. + */ + void RunL(); + + /** + * Handles a leave occurring in the RunL(). The active + * scheduler calls this function RunL() function leaves. + * @param aError leave code + * @return KErrNone. Returning any other value results + * in the active scheduler function CActiveScheduler::Error() + * being called. + */ + TInt RunError( TInt aError ); + + /** + * Implementation of asynchronous loop canceling. + * calls Cancel method in FindOperation and then + * ExecuteL (or ContinueL) should finish pretty soon. + */ + void DoCancel(); + + protected: // Find sequence's new methods + /** + * creates the find operation + * @param aResults find results container + * @param aCriteria find criteria + * @param aRules find rules + * @param aConnection the database connection reserved for the find + * @return the created operation + */ + CMdSSqlFindOperation* CreateOperationLC( + CMdCSerializationBuffer& aSerializedCriteria ); + + /** + * creates the find operation + */ + CMdSSqlFindOperation* CreateOperationL( + CMdCSerializationBuffer& aSerializedCriteria ); + + /** + * Helper function for PostProcessL + * return freetext which belongs to object(id) + */ + void GetFreeTextForObjectL( CDesCArray& aResultWordBuffer, + TDefId aNamespaceDefId, TItemId aObjectId ); + + + /** + * Post-processing of found objects. + * This routine may launch sub-operations based on the results. + * @param aSerializedResultBuffer found objects serialized in buffer + */ + void PostProcessL( CMdCSerializationBuffer& aSerializedResultBuffer ); + + /** + * Deletes iFindOperation and iFindResults. + */ + void CleanUp(); + + private: + + /** + * Sort objects by free text hit count if no text search plug-in found + * @param aFreeTextArray array which contains all free texts in criteria + * @param aObjGroup found object by criterias + */ + TUint32 GetFreeTextHitCountL(const CDesCArray& aObjectFreeText, + const RPointerArray& aSearchFreeText); + + private: + + /** + * server + */ + CMdSServer& iServer; + + /** + * the schema + */ + CMdsSchema& iSchema; + + TUint32 iNotifyCount; + + /** + * the find results + */ + CMdCSerializationBuffer* iFindResults; + + /** + * Serialized criteria buffer. Not owned by CMdSFindSequence. + */ + CMdCSerializationBuffer* iSerializedCriteria; + + /** + * asynchronous operation observer + */ + CMdSFindEngine* iObserver; + + /** + * Database connection for asynchronous use + */ + CMdSSqlFindOperation* iFindOperation; + + TDesC8* iFindSqlClauseBuffer; + + // if last query result was Items result + TBool iLastResultModeItems; + + // client application's user level + TUserLevel iUserLevel; + }; + + +#endif //__MDSFINDSEQUENCE_H__ +