diff -r 87e65c44ff3a -r fe894bb075c2 mds_plat/metadata_engine_api/inc/mdelogiccondition.h --- a/mds_plat/metadata_engine_api/inc/mdelogiccondition.h Fri Sep 03 10:57:50 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,656 +0,0 @@ -/* -* 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 __MDELOGICCONDITION_H__ -#define __MDELOGICCONDITION_H__ - - -#include - -#include -#include -#include -#include - - -/* Forward declarations. */ -class CMdEBoolPropertyCondition; -class CMdEObjectDef; -class CMdEPropertyDef; -class CMdERelationDef; -class CMdEEventDef; -class CMdCSerializationBuffer; -class CMdEEventCondition; -class CMdEObjectCondition; -class CMdEPropertyCondition; -class CMdERelationCondition; - -/** - * Logic conditions are used for combining other conditions with boolean - * AND or OR operators. Each logic condition can have an unlimited number of - * child conditions. The same operator is applied to all of the child - * conditions: (X and Y and Z), (X or Y or Z). - * - * CMdELogicCondition provides a number of factory methods for creating and - * adding new nodes as children of the logic condition node. Always use the - * factory methods when constructing a query condition tree. - * - * A logic condition node owns all of its children. - */ -NONSHARABLE_CLASS(CMdELogicCondition) : public CMdECondition - { -public: - - /* Constructors and destructor. */ - - /** - * Constructs a new logic condition node. - * - * @param aOperator Operator to use for the child conditions. - */ - IMPORT_C static CMdELogicCondition* NewL(TLogicConditionOperator aOperator); - - /** - * Constructs a new logic condition node, leaving the node on the - * cleanup stack. - * - * @param aOperator Operator to use for the child conditions. - */ - IMPORT_C static CMdELogicCondition* NewLC(TLogicConditionOperator aOperator); - - - /** - * Destructor. - */ - virtual ~CMdELogicCondition(); - - - /* Methods. */ - - /** - * Returns the operator of the logic condition. - * - * @return Logic operator. - */ - IMPORT_C TLogicConditionOperator Operator() const; - - /** - * Changes the operator of the logic condition. - * - * @param aLogicOperator The new logic operator for the condition. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C void SetOperator(TLogicConditionOperator aLogicOperator); - - /** - * Determines the number of child conditions. - * - * @return Number of conditions in the logic operation. - */ - IMPORT_C TInt Count() const; - - /** - * Returns a child condition node. - * - * @param aIndex Index of the condition to return. - * - * @return Condition node at the specified index. - */ - IMPORT_C CMdECondition& Condition(TInt aIndex) const; - - /** - * Removes a condition node from the logic condition. - * - * @param aIndex Index of the condition to remove. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C void Remove(TInt aIndex); - - - /* Factory methods for creating and adding new condition nodes into - * the tree. */ - - /** - * Creates a new logic condition and makes it a child condition of this - * logic condition node. - * - * @param aLogicOperator Operator of the new logic condition. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdELogicCondition& AddLogicConditionL(TLogicConditionOperator aLogicOperator); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. The object condition node sets a requirement for - * the object class. - * - * Example: - * // We want the condition to match with image objects. - * CMdELogicCondition* condition = CMdELogicCondition::NewL( ELogicConditionOperatorAnd ); - * CleanupStack::PushL( condition ); - * - * CMdENamespaceDef& defaultNamespace = iMdeSession->GetDefaultNamespaceDefL(); - * CMdEObjectDef& imageDef = defaultNamespace.GetObjectDefL( MdeConstants::Image::KImageObject ); - * condition->AddObjectConditionL( imageDef ); - * - * @param aObjectDef Object definition. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEObjectCondition& - AddObjectConditionL(const CMdEObjectDef& aObjectDef); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. The object condition node sets a requirement for - * the object's ID number. - * - * Example: - * CMdERelationQuery* relationQuery = iMdeSession->NewRelationQueryL( defNamespace, this ); - * CMdERelationCondition& filterCond = relationQuery->Conditions(). - * AddRelationConditionL( ERelationConditionSideRight ); - * // Left object in relation must have this ID. - * filterCond.LeftL().AddObjectConditionL( aObjectId ); - * - * @param aObjectId ID number of the object. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEObjectCondition& AddObjectConditionL(TItemId aObjectId); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. The object condition node sets a requirement for - * the objects' ID numbers. - * - * @param aObjectId ID numbers of objects. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - * - */ - IMPORT_C CMdEObjectCondition& AddObjectConditionL( - const RArray& aObjectIds); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. The object condition node sets a requirement for - * the object's GUID. - * - * @param aObjectGuidHigh GUID high part of the object. - * @param aObjectGuidLow GUID low part of the object. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEObjectCondition& AddObjectConditionL( - TInt64 aObjectGuidHigh, TInt64 aObjectGuidLow); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. - * - * @param aCompareMethod Comparison method. - * @param aString Text string to look for. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEObjectCondition& AddObjectConditionL( - TObjectConditionCompareMethod aCompareMethod, - const TDesC& aString); - - /** - * Creates a new object condition and makes it a child condition of this - * logic condition node. - * - * @param aRange range for usage count - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEObjectCondition& AddObjectConditionL( - const TMdEUintRange& aRange); - - /** - * Creates a new property condition and makes it a child condition of this - * logic condition node. The property condition tests if a property - * exists in an object. - * - * Example: - * CMdEPropertyDef& commentDef = objDef.GetPropertyDefL( MdeConstants::MediaObject::KCommentProperty ); - * iQuery->Conditions().AddPropertyConditionL( commentDef ); - * - * @param aPropertyDef The property to look for. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEPropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef); - - /** - * Creates a new boolean property condition and makes it a child - * condition of this logic condition node. The property condition - * tests the value of a boolean property. - * - * Example: - * CMdEPropertyDef& commentDef = objDef.GetPropertyDefL( MdeConstants::MediaObject::KProtectedProperty ); - * iQuery->Conditions().AddPropertyConditionL( commentDef, ETrue ); - * - * @param aPropertyDef Property definition. - * @param aBoolValue Boolean value. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEBoolPropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, TBool aBoolValue); - - /** - * Creates a new integer property condition and makes it a child - * condition of this logic condition node. The property condition defines - * a range of integer values. If the property's value is within the range - * the condition evaluates to True. - * - * Example: - * CMdEPropertyDef& frameCountDef = objDef.GetPropertyDefL( MdeConstants::Image::FrameCount ); - * iQuery->Conditions().AddPropertyConditionL( frameCountDef, TMdEIntRange(0, 5, rangeType) ); - * - * @param aPropertyDef Property definition. - * @param aIntRange Range of integer values. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEIntRangePropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - const TMdEIntRange& aIntRange); - - /** - * Creates a new 64 bit integer property condition and makes it a child - * condition of this logic condition node. The property condition defines - * a range of integer values. If the property's value is within the range - * the condition evaluates to True. - * - * @param aPropertyDef Property definition. - * @param aInt64Range Range of 64 bit integer values. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEInt64RangePropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - const TMdEInt64Range& aIntRange); - - /** - * Creates a new unsigned integer property condition and makes it a child - * condition of this logic condition node. The property condition defines - * a range of unsigned integer values. If the property's value is within - * the range the condition evaluates to True. - * - * @param aPropertyDef Property definition. - * @param aUintRange Range of unsigned integer values. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEUintRangePropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - const TMdEUintRange& aUintRange); - - /** - * Creates a new floating-point property condition and makes it a child - * condition of this logic condition node. The property condition defines - * a range of floating-point values. If the property's value is within - * the range the condition evaluates to True. - * - * @param aPropertyDef Property definition. - * @param aRealRange Range of floating-point values. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERealRangePropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - const TMdERealRange& aRealRange); - - /** - * Creates a new time property condition and makes it a child - * condition of this logic condition node. The property condition defines - * a range of time values. If the property's value is within the range - * the condition evaluates to True. - * - * @param aPropertyDef Property definition. - * @param aTimeRange Range of time values. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdETimeRangePropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - const TMdETimeRange& aTimeRange); - - /** - * Creates a new text property condition and makes it a child condition - * of this logic condition node. - * - * @param aPropertyDef Property definition. - * @param aCompareMethod Comparison method. - * @param aText Text string to look for. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdETextPropertyCondition& AddPropertyConditionL( - const CMdEPropertyDef& aPropertyDef, - TTextPropertyConditionCompareMethod aCompareMethod, - const TDesC& aText); - - /** - * Creates a new relation condition and makes it a child condition of this - * logic condition node. The new relation condition contains no parameters - * by default. It is assumed that the relation condition is augmented - * with further conditions for the objects to which the relation is - * attached. - * - * Example: - * TItemId relationId( 1 ); - * CMdERelationCondition& relationCond = relationQuery->Conditions(). - * AddRelationConditionL( relationId, ERelationConditionSideRight ); - * - * @param aRelationId Relation ID. - * @param aSide The side on which an object must be. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERelationCondition& AddRelationConditionL(TItemId aRelationId, - TRelationConditionSide aSide = ERelationConditionSideEither); - - /** - * Creates a new relation condition and makes it a child condition of this - * logic condition node. The new relation condition contains no parameters - * by default. It is assumed that the relation condition is augmented - * with further conditions for the objects to which the relation is - * attached. - * - * Example: - * RArray arrayOfIds; - * arrayOfIds.Append( TItemId( 1 ) ); - * arrayOfIds.Append( TItemId( 2 ) ); - * CMdERelationCondition& relationCond = relationQuery->Conditions(). - * AddRelationConditionL( arrayOfIds, ERelationConditionSideRight ); - * - * @param aRelationIds Array of Relation IDs. - * @param aSide The side on which an object must be. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERelationCondition& AddRelationConditionL( - RArray& aRelationIds, - TRelationConditionSide aSide = ERelationConditionSideEither); - - /** - * Creates a new relation condition and makes it a child condition of this - * logic condition node. The new relation condition contains no parameters - * by default. It is assumed that the relation condition is augmented - * with further conditions for the objects to which the relation is - * attached. - * - * Example: - * CMdERelationCondition& relationCond = relationQuery->Conditions(). - * AddRelationConditionL( ERelationConditionSideRight ); - * - * @param aSide The side on which an object must be. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERelationCondition& AddRelationConditionL( - TRelationConditionSide aSide = ERelationConditionSideEither); - - /** - * Creates a new relation condition and makes it a child condition of this - * logic condition node. The new relation condition tests the relation's - * type. The relation condition can be augmented with further conditions - * for the objects to which the relation is attached. - * - * @param aRelationDef relation definition - * @param aSide The side on which an object must be. Defaults to - * ERelationConditionSideEither. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERelationCondition& AddRelationConditionL( - const CMdERelationDef& aRelationDef, - TRelationConditionSide aSide = ERelationConditionSideEither); - - /** - * Creates a new relation condition and makes it a child condition of this - * logic condition node. The new relation condition tests the relation's - * type. The relation condition can be augmented with further conditions - * for the objects to which the relation is attached. - * - * @param aRelationDef relation definition - * @param aIntRange parameter range conditions - * @param aSide The side on which an object must be. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdERelationCondition& AddRelationConditionL( - const CMdERelationDef& aRelationDef, const TMdEIntRange& aIntRange, - TRelationConditionSide aSide = ERelationConditionSideEither); - - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition contains no parameters - * by default. It is assumed that the event condition is augmented - * with further conditions for the object to which the event is attached. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL(); - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition tests the event's type. - * The event condition can be augmented with further conditions - * for the object to which the event is attached. - * - * @param aEventId Event ID. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL(TItemId aEventId); - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition tests the event's type. - * The event condition can be augmented with further conditions - * for the object to which the event is attached. - * - * @param aEventDef Event definition. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL( - const CMdEEventDef& aEventDef); - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition tests the event's - * creation time. The event condition can be augmented with further - * conditions for the object to which the event is attached. - * - * @param aCreationTimeRange Time range. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL( - const TMdETimeRange& aCreationTimeRange); - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition tests the event's - * source or participant. The event condition can be augmented with - * further conditions for the object to which the event is attached. - * - * @param aCompareMethod Comparison method. - * @param aString Text string to look for. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL( - TEventConditionCompareMethod aCompareMethod, const TDesC& aString); - - /** - * Creates a new event condition and makes it a child condition of this - * logic condition node. The new event condition tests the event's - * creation time. The new event condition also tests the event's - * source or participant. The event condition can be augmented with - * further conditions for the object to which the event is attached. - * - * @param aCreationTimeRange Time range. - * @param aCompareMethod Comparison method. - * @param aString Text string to look for. - * - * @return Reference to the new condition node. - * - * @panic TMdEPanic::EConditionLocked Condition node is locked. - */ - IMPORT_C CMdEEventCondition& AddEventConditionL( - const TMdETimeRange& aCreationTimeRange, - TEventConditionCompareMethod aCompareMethod, const TDesC& aString); - - /** - * Locking a logic condition causes all children to be locked as well. - * Attempting to modify a locked condition causes a panic. - * - * @param aLocked ETrue to lock; - * EFalse to unlock. - */ - void SetLocked(TBool aLocked = ETrue); - - /** - * 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 this is serialized. - * - * @return required size of serialized buffer - */ - 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: - - /* Constructors. */ - - /** - * Constructor. - * - * @param aOperator Logic operator. - */ - CMdELogicCondition(TLogicConditionOperator aOperator); - - /** - * Second-phase constructor. - */ - void ConstructL(); - - - /* Utility methods. */ - - /** - * Makes an existing condition node a child node of this logic condition. - * The logic condition takes ownership of the node. - * - * @param aCondition Condition node. - * - * @return Reference to the added node (aCondition). - */ - CMdECondition& AddL(CMdECondition* aCondition); - - -private: - - /** Type of the condition. */ - TLogicConditionOperator iOperator; - - /** Children of the condition. The logic condition owns all the - child nodes. */ - RPointerArray iChildren; - - TUint32 iOptimizationFlags; - }; - -#endif // __MDELOGICCONDITION_H__