diff -r fe894bb075c2 -r 79f826a55db2 mds_plat/metadata_engine_api/inc/mderelationcondition.h --- /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 +#include +#include + + +/* 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* aRelationIds = NULL, + TRelationConditionSide aSide = ERelationConditionSideEither, + const CMdERelationDef* aRelationDef = NULL, + const TMdEIntRange* aParameterRange = NULL ); + + static CMdERelationCondition* NewLC( TItemId aRelationId = KNoId, + const RArray* 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* RelationIds() const; + + /** + * Returns a pointer to the relation definition. + * + * @return Relation definition; or NULL, + * 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* aRelationIds, + const TMdEIntRange* aParameterRange); + + +private: + + const TItemId iRelationId; + + RArray* 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__