metadataengine/server/inc/mdsfindsequence.h
changeset 0 c53acadfccc6
--- /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 <e32base.h>
+#include <badesca.h>
+
+#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<HBufC>& 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__
+