--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/metadataengine/client/src/mdeeventcondition.cpp Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,297 @@
+/*
+* 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: Representation of query event condition
+*
+*/
+
+#include "mdeeventcondition.h"
+#include "mdelogiccondition.h"
+#include "mdeeventdef.h"
+#include "mdscommoninternal.h"
+#include "mdepanic.h"
+#include "mdcserializationbuffer.h"
+#include "mdcquery.h"
+
+CMdEEventCondition* CMdEEventCondition::NewL( TItemId aEventId, const CMdEEventDef* aEventDef,
+ const TMdETimeRange* aCreationTimeRange, TEventConditionCompareMethod aCompareMethod,
+ const TDesC* aString )
+ {
+ CMdEEventCondition* self = CMdEEventCondition::NewLC( aEventId, aEventDef, aCreationTimeRange,
+ aCompareMethod, aString );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CMdEEventCondition* CMdEEventCondition::NewLC(TItemId aEventId, const CMdEEventDef* aEventDef,
+ const TMdETimeRange* aCreationTimeRange, TEventConditionCompareMethod aCompareMethod,
+ const TDesC* aString )
+ {
+ CMdEEventCondition* self = new (ELeave) CMdEEventCondition( aEventId, aEventDef );
+ CleanupStack::PushL( self );
+ self->ConstructL( aCreationTimeRange, aCompareMethod, aString );
+ return self;
+ }
+
+CMdEEventCondition::CMdEEventCondition(TItemId aEventId, const CMdEEventDef* aEventDef)
+ : CMdECondition(EConditionTypeEvent), iEventId(aEventId), iEventDef(aEventDef)
+ {
+ iCompareMethod = EEventConditionCompareNone;
+ iCreationTimeRange = NULL;
+ iObjectConditions = NULL;
+ iSourceConditions = NULL;
+ iParticipantConditions = NULL;
+ iURI = NULL;
+ }
+
+void CMdEEventCondition::ConstructL(const TMdETimeRange* aCreationTimeRange,
+ TEventConditionCompareMethod aCompareMethod,
+ const TDesC* aString)
+ {
+ iCompareMethod = aCompareMethod;
+
+ if(aCreationTimeRange)
+ {
+ // Make a copy of the creation time range.
+ iCreationTimeRange = new (ELeave) TMdETimeRange(*aCreationTimeRange);
+ }
+
+ if(aString)
+ {
+ switch(aCompareMethod)
+ {
+ case EEventConditionCompareNone:
+ // No comparison specified.
+ break;
+
+ case EEventConditionCompareSourceURI:
+ // Make a copy of the source URI descriptor.
+ iURI = aString->AllocL();
+ break;
+
+ case EEventConditionCompareParticipantURI:
+ // Make a copy of the participant URI descriptor.
+ iURI = aString->AllocL();
+ break;
+
+ default:
+ __ASSERT_DEBUG( EFalse, TMdEPanic::Panic(TMdEPanic::EInternal) );
+ }
+ }
+ }
+
+
+CMdEEventCondition::~CMdEEventCondition()
+ {
+ delete iCreationTimeRange;
+ delete iObjectConditions;
+ delete iSourceConditions;
+ delete iParticipantConditions;
+ delete iURI;
+ }
+
+
+EXPORT_C CMdELogicCondition& CMdEEventCondition::ObjectConditionsL()
+ {
+ if( !iObjectConditions )
+ {
+ iObjectConditions = CMdELogicCondition::NewL( ELogicConditionOperatorAnd );
+ }
+
+ return *iObjectConditions;
+ }
+
+
+EXPORT_C CMdELogicCondition& CMdEEventCondition::SourceObjectConditionsL()
+ {
+ if( !iSourceConditions )
+ {
+ iSourceConditions = CMdELogicCondition::NewL( ELogicConditionOperatorAnd );
+ }
+
+ return *iSourceConditions;
+ }
+
+
+EXPORT_C CMdELogicCondition& CMdEEventCondition::ParticipantObjectConditionsL()
+ {
+ if( !iParticipantConditions )
+ {
+ iParticipantConditions = CMdELogicCondition::NewL( ELogicConditionOperatorAnd );
+ }
+
+ return *iParticipantConditions;
+ }
+
+
+EXPORT_C TItemId CMdEEventCondition::EventId() const
+ {
+ return iEventId;
+ }
+
+
+EXPORT_C const CMdEEventDef* CMdEEventCondition::EventDef() const
+ {
+ return iEventDef;
+ }
+
+
+EXPORT_C const TMdETimeRange* CMdEEventCondition::TimeRange() const
+ {
+ return iCreationTimeRange;
+ }
+
+
+EXPORT_C const TDesC* CMdEEventCondition::SourceURI() const
+ {
+ if ( iCompareMethod == EEventConditionCompareSourceURI )
+ {
+ return iURI;
+ }
+
+ return NULL;
+ }
+
+
+EXPORT_C const TDesC* CMdEEventCondition::ParticipantURI() const
+ {
+ if ( iCompareMethod == EEventConditionCompareParticipantURI )
+ {
+ return iURI;
+ }
+
+ return NULL;
+ }
+
+TUint32 CMdEEventCondition::InternalQueryOptimizationFlags(TUint32& aFlags)
+ {
+ aFlags |= EContainsEventCondition;
+ return EContainsEventCondition;
+ }
+
+TUint32 CMdEEventCondition::RequiredBufferSize() const
+ {
+ TUint32 bufferSize = sizeof( TMdCEventCondition );
+
+ // size of each object to be serialized
+ if( iCreationTimeRange )
+ {
+ bufferSize += iCreationTimeRange->RequiredBufferSize();
+ }
+
+ if( iObjectConditions )
+ {
+ bufferSize += iObjectConditions->RequiredBufferSize();
+ }
+
+ if( iSourceConditions )
+ {
+ bufferSize += iSourceConditions->RequiredBufferSize();
+ }
+
+ if( iParticipantConditions )
+ {
+ bufferSize += iParticipantConditions->RequiredBufferSize();
+ }
+
+ if ( iURI )
+ {
+ bufferSize += CMdCSerializationBuffer::RequiredSize( *iURI );
+ }
+
+ return bufferSize;
+ }
+
+
+void CMdEEventCondition::SerializeL(CMdCSerializationBuffer& aBuffer,
+ TMdCOffset& aFreespaceOffset) const
+ {
+ TMdCEventCondition condition;
+
+ condition.iConditionType = iType;
+ condition.iNegated = iNegated;
+ condition.iCompareMethod = iCompareMethod;
+ condition.iEventId = iEventId;
+
+ if( iEventDef )
+ {
+ condition.iEventDefId = iEventDef->Id();
+ }
+ else
+ {
+ condition.iEventDefId = KNoDefId;
+ }
+
+ // init offsets to "zero", updated later if needed
+ condition.iCreationTimeRange = KNoOffset;
+ condition.iObjectCondition = KNoOffset;
+ condition.iSourceCondition = KNoOffset;
+ condition.iParticipantCondition = KNoOffset;
+ condition.iUriCondition = KNoOffset;
+
+ const TUint32 conditionOffset = aBuffer.Position();
+
+ // get position after condition
+ aFreespaceOffset = conditionOffset + sizeof( TMdCEventCondition );
+ aBuffer.PositionL( aFreespaceOffset );
+
+ if( iCreationTimeRange )
+ {
+ condition.iCreationTimeRange = aFreespaceOffset;
+
+ iCreationTimeRange->SerializeL( aBuffer );
+
+ aFreespaceOffset = aBuffer.Position();
+ }
+
+ if( iObjectConditions )
+ {
+ condition.iObjectCondition = aFreespaceOffset;
+
+ iObjectConditions->SerializeL( aBuffer, aFreespaceOffset );
+
+ aFreespaceOffset = aBuffer.Position();
+ }
+
+ if( iSourceConditions )
+ {
+ condition.iSourceCondition = aFreespaceOffset;
+
+ iSourceConditions->SerializeL( aBuffer, aFreespaceOffset );
+
+ aFreespaceOffset = aBuffer.Position();
+ }
+
+ if( iParticipantConditions )
+ {
+ condition.iParticipantCondition = aFreespaceOffset;
+
+ iParticipantConditions->SerializeL( aBuffer, aFreespaceOffset );
+
+ aFreespaceOffset = aBuffer.Position();
+ }
+
+ if ( ( EEventConditionCompareSourceURI == iCompareMethod ) ||
+ ( EEventConditionCompareParticipantURI == iCompareMethod ) )
+ {
+ condition.iUriCondition = aFreespaceOffset;
+
+ aBuffer.InsertL( *iURI );
+
+ aFreespaceOffset = aBuffer.Position();
+ }
+
+ aBuffer.PositionL( conditionOffset );
+
+ condition.SerializeL( aBuffer );
+ }