--- /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__
+