mds_plat/metadata_engine_api/inc/mderelationcondition.h
changeset 60 79f826a55db2
parent 0 c53acadfccc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mds_plat/metadata_engine_api/inc/mderelationcondition.h	Wed Oct 06 15:08:08 2010 +0300
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 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:  ?Description
+*
+*/
+
+
+#ifndef __MDERELATIONCONDITION_H__
+#define __MDERELATIONCONDITION_H__
+
+
+#include <mdccommon.h>
+#include <mdecondition.h>
+#include <mderange.h>
+
+
+/* Forward declarations. */
+class CMdELogicCondition;
+class CMdERelationDef;
+
+/**
+ * Search condition for relations.
+ */
+NONSHARABLE_CLASS(CMdERelationCondition) : public CMdECondition
+	{
+public:
+
+	/* Constructors and destructor. */
+
+	static CMdERelationCondition* NewL( TItemId aRelationId = KNoId,
+			const RArray<TItemId>* aRelationIds = NULL, 
+			TRelationConditionSide aSide = ERelationConditionSideEither,
+			const CMdERelationDef* aRelationDef = NULL,
+			const TMdEIntRange* aParameterRange = NULL );
+
+	static CMdERelationCondition* NewLC( TItemId aRelationId = KNoId,
+			const RArray<TItemId>* aRelationIds = NULL, 
+			TRelationConditionSide aSide = ERelationConditionSideEither,
+			const CMdERelationDef* aRelationDef = NULL,
+			const TMdEIntRange* aParameterRange = NULL );
+
+	/**
+	 * Destructor.
+	 */
+	virtual ~CMdERelationCondition();
+
+	/* Methods. */
+
+    /**
+     * Returns the relation ID.
+     *
+     * @return Relation ID.
+     */
+    IMPORT_C TItemId RelationId() const;
+
+    /**
+     * Returns the relation IDs.
+     *
+     * @return Relation IDs.
+     */
+    IMPORT_C const RArray<TItemId>* RelationIds() const;
+    
+    /**
+     * Returns a pointer to the relation definition.
+     *
+     * @return  Relation definition; or <code>NULL</code>,
+     *          if no relation definition has been associated with this
+     *          condition.
+     */
+    IMPORT_C const CMdERelationDef* RelationDef() const;
+
+    /**
+     * Returns the conditions for the object on the left side of the relation.
+     *
+     * @return  Logic condition node.
+     */
+    IMPORT_C CMdELogicCondition& LeftL();
+
+    /**
+     * Returns the conditions for the object on the right side of the 
+     * relation.
+     *
+     * @return  Logic condition node.
+     */
+    IMPORT_C CMdELogicCondition& RightL();
+
+    /**
+     * Returns the side on which a matched object must be.
+     * @return The side on which an object must be.
+     */
+    TRelationConditionSide Side() const;
+
+    /**
+     * Sets the side on which a matched object must be.
+     * @return The side on which an object must be.
+     */
+    IMPORT_C void SetSide(TRelationConditionSide aSide);
+
+    /**
+     * Returns the relation parameter range.
+     * @return Parameter's range conditions 
+     */
+    IMPORT_C const TMdEIntRange* ParameterRange() const;
+
+	/**
+	 * Sets the GUID which a relation must match.
+	 *
+	 * @param aGuidHigh new GuidHigh value
+	 * @param aGuidLow new GuidLow value
+	 */
+	IMPORT_C void SetGuid(const TInt64& aGuidHigh, const TInt64& aGuidLow);
+
+	/**
+	 * Gets the GUID which a relation must match.
+	 *
+	 * @param aGuidHigh reference where GuidHigh will be stored
+	 * @param aGuidLow reference where GuidLow will be stored
+	 * @return returns ETrue if relation condition contains GUID condition, 
+	 *         otherwise doesn't change parameters' values and returns EFalse
+	 */
+	IMPORT_C TBool Guid(TInt64& aGuidHigh, TInt64& aGuidLow) const;
+
+	/**
+	 * Sets the last modified date range which a relation must match.
+	 *
+	 * @param aLastModifiedTimeRange last modified date range
+	 */
+	IMPORT_C void SetLastModifiedDateRangeL(const TMdETimeRange& aLastModifiedDateRange);
+
+	/**
+	 * Gets the last modified date range which a relation must match.
+	 *
+	 * @param aLastModifiedDateRange reference where last modified date range will be stored
+	 * @return returns ETrue if relation condition contains last modified date range condition, 
+	 *         otherwise doesn't change parameter's value and returns EFalse
+	 */
+	IMPORT_C TBool LastModifiedDateRange(TMdETimeRange& aLastModifiedDateRange) const;
+
+    /**
+     * Get possible query's internal optimization flags from condition.
+     *
+     * @param aFlaga query's internal optimization flags
+     * @return last level internal optimization flags
+     */
+    TUint32 InternalQueryOptimizationFlags(TUint32& aFlags);
+
+	/**
+     * Get required size of serialized buffer when it is serialized.
+     *
+     * @return required serialized buffer size
+     */
+	TUint32 RequiredBufferSize() const;
+	
+	/**
+     * Serialize own data to serialized buffer (correct position must be set 
+     * before calling).
+	 *
+     * @param aBuffer  serialized buffer.
+     */
+    void SerializeL(CMdCSerializationBuffer& aBuffer,
+    		TMdCOffset& aFreespaceOffset) const;
+
+protected:
+
+    /* Constructor. */
+
+
+	/* Utility methods. */
+
+
+private:
+
+    /* Private methods. */
+
+  	/**
+	 * Constructor.
+	 *
+     * @param aRelationId  The relation ID which an relation must match.
+     * @param aSide  The side on which an object must be.
+	 * @param aRelationDef  relation definition
+	 */
+	CMdERelationCondition(TItemId aRelationId, TRelationConditionSide aSide, 
+			const CMdERelationDef* aRelationDef);
+
+    /**
+	 * Second-phase constructor. Creates two LogicConditions as children of 
+     * this relation condition and creates range condition for parameter. 
+     * Ownership of the parameter stays with caller.
+     *
+     * @param aRelationIds  The relation IDs which an relation must match.
+     * @param aParameterRange parameter range conditions
+	 */
+    void ConstructL(const RArray<TItemId>* aRelationIds, 
+    		const TMdEIntRange* aParameterRange);
+
+
+private:
+
+	const TItemId iRelationId;
+	
+	RArray<TItemId>* iRelationIds;
+
+    /** Relation definition. */
+    const CMdERelationDef* iRelationDef;
+
+    /** Conditions for the left object. */
+    CMdELogicCondition* iLeftCondition;
+
+    /** Conditions for the right object. */
+    CMdELogicCondition* iRightCondition;
+
+    /** The side on which an object must be. */
+    TRelationConditionSide iSide;
+
+    /** Conditions for the relation parameter. */
+    TMdEIntRange* iParameterRange;
+    
+    /** Conditions for the relation GUID. */
+    TInt64 iGuidHigh;
+    TInt64 iGuidLow;
+    
+    /** Conditions for the relation last modified date. */
+    TMdETimeRange* iLastModifiedDateRange;
+    };
+
+#endif  // __MDERELATIONCONDITION_H__