--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfwplugins/cenrepsourceplugin/src/cenrephandler.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,215 @@
+/*
+* Copyright (c) 2007-2007 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: CCenRepHandler class implementation.
+*
+*/
+
+
+#include <centralrepository.h>
+#include <cfcontextsourcesetting.h>
+#include <cfcontextsourcesettingarray.h>
+
+#include "cenrephandler.h"
+#include "cenrepattributesmasked.h"
+#include "cenrepattributesnonmasked.h"
+#include "cenreptrace.h"
+// #include "cenrepsourceplugintester.h"
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========
+
+CCenRepHandler* CCenRepHandler::NewL(
+ MCFContextInterface& aCF,
+ CCFContextSourceSettingArray& aSettings,
+ TInt aIndex)
+ {
+ FUNC_LOG;
+
+ CCenRepHandler* self = new (ELeave) CCenRepHandler();
+ CleanupStack::PushL( self );
+ self->ConstructL( aCF, aSettings, aIndex);
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+void CCenRepHandler::ConstructL( MCFContextInterface& aCF,
+ CCFContextSourceSettingArray& aSettings,
+ TInt aIndex )
+ {
+ FUNC_LOG;
+
+ TUid repositoryUid = TUid::Null();
+ TUint32 repositoryInt( 0 );
+
+ const RKeyValueArray& attrArray = aSettings.Item( aIndex ).Attributes();
+ TInt attrCount = attrArray.Count();
+
+ // Find attribute values
+ for( TInt i = 0; i < attrCount; i++ )
+ {
+ if ( attrArray[i]->Key().CompareF( KUID ) == KErrNone )
+ {
+ TInt err = CCenRepAttributes::ConvertToHex( attrArray[i]->Value(),
+ repositoryInt );
+ User::LeaveIfError( err );
+ repositoryUid = TUid::Uid( repositoryInt );
+ }
+ else if ( attrArray[i]->Key().CompareF( KMode ) == KErrNone )
+ {
+ if ( attrArray[i]->Value().CompareF( KMasked ) == KErrNone )
+ {
+ iCenRepAttributes = CCenRepAttributesMasked::NewL( aCF, aSettings );
+ }
+ else if ( attrArray[i]->Value().CompareF( KNonMasked ) == KErrNone )
+ {
+ iCenRepAttributes = CCenRepAttributesNonMasked::NewL( aCF, aSettings );
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ iKey = iCenRepAttributes->InitCenRepKeyL( aIndex );
+ }
+ }
+
+ iCrep = CRepository::NewL( repositoryUid );
+
+ QueryAndUpdateContext();
+
+ // Test
+
+ /*
+ iTester = CCenRepSourcePluginTester::NewL( this );
+ iTester->StartTimer();
+ */
+
+ TInt err = iCrep->NotifyRequest( iKey, iStatus );
+ if( err == KErrNone )
+ {
+ SetActive();
+ }
+ }
+
+CCenRepHandler::CCenRepHandler():
+ CActive( CActive::EPriorityStandard )
+ {
+ FUNC_LOG;
+
+ CActiveScheduler::Add( this );
+ }
+
+CCenRepHandler::~CCenRepHandler()
+ {
+ FUNC_LOG;
+
+ Cancel();
+ delete iCenRepAttributes;
+ delete iCrep;
+ // delete iTester;
+ }
+
+// ---------------------------------------------------------------------------
+// CCenRepHandler::RunL
+// ---------------------------------------------------------------------------
+//
+void CCenRepHandler::RunL()
+ {
+ FUNC_LOG;
+
+ TInt err( KErrGeneral );
+
+ // Test
+ /*
+ vvalue = 0x1;
+ iCenRepAttributes->UpdateContext( vvalue );
+
+ vvalue = 0xb;
+ iCenRepAttributes->UpdateContext( vvalue );
+ */
+ // End of test
+
+ TInt tmpStat = iStatus.Int();
+ INFO_1( "CCenRepHandler::RunL: iStatus == %d", tmpStat );
+
+ if ( tmpStat > 0 )
+ {
+ QueryAndUpdateContext();
+ err = iCrep->NotifyRequest( iKey, iStatus );
+ }
+ else
+ {
+ err = iCrep->NotifyRequest( iKey, iStatus );
+ }
+
+ INFO_1( "Error code of Central Repository NotifyRequest access: %d", err );
+
+ if ( err != KErrAlreadyExists )
+ {
+ User::LeaveIfError( err );
+ }
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CCenRepHandler::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CCenRepHandler::RunError( TInt aError )
+ {
+ FUNC_LOG;
+
+ INFO_1( "CCenRepHandler::RunError: aError == %d", aError );
+
+ // Avoid Panic in CActiveScheduler
+ aError = KErrNone;
+
+ return aError;
+ }
+
+// ---------------------------------------------------------------------------
+// CCenRepHandler::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CCenRepHandler::DoCancel()
+ {
+ FUNC_LOG;
+
+ iCrep->NotifyCancel( iKey );
+ }
+
+// ---------------------------------------------------------------------------
+// CCenRepHandler::QueryAndUpdateContext
+// ---------------------------------------------------------------------------
+//
+void CCenRepHandler::QueryAndUpdateContext()
+ {
+ FUNC_LOG;
+
+ TInt value( 0 );
+
+ TInt err = iCrep->Get( iKey, value );
+
+ INFO_1( "Error code of Central Repository get access: %d", err );
+
+ if( err == KErrNone )
+ {
+ TRAPD( updateErr, iCenRepAttributes->UpdateContextL( value ) );
+
+ INFO_1( "Leave code of CenRepAttributes->UpdateContextL: %d", updateErr );
+
+ updateErr = updateErr; // Make compiler happy
+ }
+ }