--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/basicoperationsplugin/cfcontextoperation.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2002-2008 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: CCFContextOperation class implementation.
+*
+*/
+
+
+// INCLUDES
+#include <f32file.h> // for KExtDelimiter '.' and KDriveDelimiter ':'
+
+#include "cfcontextoperation.h"
+#include "cfbasicoptrace.h"
+
+// CONSTANTS
+const TInt KCFContextOperationNoContextLevelDelay = 0;
+const TInt KDefaultPreviousValueLength = 256;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::CCFContextOperation
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CCFContextOperation::CCFContextOperation( MCFOperationServices& aServices,
+ CCFOperationNode* aParent,
+ HBufC* aType,
+ HBufC* aSource )
+ : CCFOperationNode( aServices, aParent ),
+ iContextLevelDelay( 0 ),
+ iSource( aSource ),
+ iType( aType )
+ {
+ FUNC_LOG;
+
+ iPreviousValue = HBufC::New( KDefaultPreviousValueLength );
+ }
+
+
+// Destructor
+CCFContextOperation::~CCFContextOperation()
+ {
+ FUNC_LOG;
+
+ delete iSource;
+ delete iType;
+ delete iPreviousValue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::Evaluate
+// ---------------------------------------------------------------------------
+//
+TBool CCFContextOperation::Evaluate( const CCFContextObject& aContext,
+ TInt& aContextLevelDelay )
+ {
+ FUNC_LOG;
+
+ DOM_INFO( "CCFContextOperation::Evaluate" );
+
+ // Check that context value has changed (context is state information)
+ if ( iPreviousValue && ( *iPreviousValue ).Compare( aContext.Value() ) == 0 )
+ {
+ INFO_2( "CCFContextOperation::Evaluate - NOT evaluating (prev value [%S] == arg value [%S])!",
+ iPreviousValue, &aContext.Value() );
+ aContextLevelDelay = KCFContextOperationNoContextLevelDelay;
+ return EFalse;
+ }
+ TInt err = UpdatePreviousValue( aContext.Value() );
+ ERROR( err, "Previous value update failed!" );
+
+ // Ask concrete implementation if it is true
+ TInt val( EFalse );
+ TRAP( err, val = IsTrueL( aContext ) );
+
+ if ( err != KErrNone )
+ {
+ ERROR( err, "CCFContextOperation: IsTrueL leave occurred, evaluation cancelled" );
+ return EFalse;
+ }
+
+ // Evaluate parents if we have changed
+ if ( val != iValue )
+ {
+ INFO_1( "CCFContextOperation::Evaluate - Value changed to (-1=undefined, 0=false, 1=true): %d", val );
+
+ iValue = static_cast< TCFConditionValue >( val );
+ if ( iParent )
+ {
+ iParent->Evaluate();
+ }
+ }
+ else
+ {
+ INFO_1( "CCFContextOperation::Evaluate - Value still (-1=undefined, 0=false, 1=true): %d", val );
+ }
+
+ aContextLevelDelay = iContextLevelDelay;
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::Source
+// ---------------------------------------------------------------------------
+//
+TPtrC CCFContextOperation::Source() const
+ {
+ FUNC_LOG;
+
+ return TPtrC( *iSource );
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::Type
+// ---------------------------------------------------------------------------
+//
+TPtrC CCFContextOperation::Type() const
+ {
+ FUNC_LOG;
+
+ return TPtrC( *iType );
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::IsAllRequired
+// ---------------------------------------------------------------------------
+//
+TBool CCFContextOperation::IsAllRequired() const
+ {
+ FUNC_LOG;
+
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::UpdatePreviousValue
+// ---------------------------------------------------------------------------
+//
+TInt CCFContextOperation::UpdatePreviousValue( const TDesC& aNewValue )
+ {
+ FUNC_LOG;
+
+ TInt err = KErrNone;
+ if( !iPreviousValue )
+ {
+ iPreviousValue = HBufC::New( KDefaultPreviousValueLength );
+ }
+
+ if( iPreviousValue )
+ {
+ TPtr previousValuePtr = iPreviousValue->Des();
+ if( previousValuePtr.MaxLength() >= aNewValue.Length() )
+ {
+ previousValuePtr.Copy( aNewValue );
+ }
+ else
+ {
+ delete iPreviousValue;
+ iPreviousValue = NULL;
+ iPreviousValue = aNewValue.Alloc();
+ if( !iPreviousValue )
+ {
+ err = KErrNoMemory;
+ }
+ }
+ }
+ else
+ {
+ err = KErrNoMemory;
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::PreviousValue
+// ---------------------------------------------------------------------------
+//
+const TDesC& CCFContextOperation::PreviousValue()
+ {
+ if ( iPreviousValue )
+ {
+ return *iPreviousValue;
+ }
+ return KNullDesC;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::ActivateL
+// ---------------------------------------------------------------------------
+//
+void CCFContextOperation::ActivateL()
+ {
+ FUNC_LOG;
+
+ iServices.SubscribeContextL( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::Deactivate
+// ---------------------------------------------------------------------------
+//
+void CCFContextOperation::Deactivate()
+ {
+ FUNC_LOG;
+
+ iServices.RemoveSubscription( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::CheckSecurity
+// ---------------------------------------------------------------------------
+//
+TInt CCFContextOperation::CheckSecurity()
+ {
+ FUNC_LOG;
+
+ if ( !iSource || !iType )
+ {
+ return KErrBadDescriptor;
+ }
+
+ return iServices.CheckContextReadSecurity( *iSource, *iType );
+ }
+
+// ---------------------------------------------------------------------------
+// CCFContextOperation::Evaluate
+// ---------------------------------------------------------------------------
+//
+void CCFContextOperation::Evaluate()
+ {
+ FUNC_LOG;
+ }