contextframework/cfwplugins/cenrepsourceplugin/src/cenrepattributes.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfwplugins/cenrepsourceplugin/src/cenrepattributes.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* 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:  CCenRepAttributes class implementation.
+*
+*/
+
+
+#include <cfdefinitions.h>
+#include <cfcontextsourcesetting.h>
+#include <cfcontextsourcesettingarray.h>
+
+#include "cenrepattributes.h"
+#include "cenreptrace.h"
+
+// Capabilities
+_LIT_SECURITY_POLICY_PASS( KCenRepSourceInteractionSec );
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========
+
+CCenRepAttributes::~CCenRepAttributes()
+    {
+    FUNC_LOG;
+    // Delete context
+    delete iContext;
+    }
+
+CCenRepAttributes::CCenRepAttributes(
+    MCFContextInterface& aCF,
+    CCFContextSourceSettingArray& aSettings ) :
+    iSettings( aSettings ),
+    iCF( aCF )
+    {
+    FUNC_LOG;
+    }
+
+//----------------------------------------------------------------------------
+// CCenRepAttributes::ConvertToHex
+//----------------------------------------------------------------------------
+//
+TInt CCenRepAttributes::ConvertToHex( const TDesC& aString, TUint32& aValue )
+    {
+    FUNC_LOG;
+
+    const TUint KLimit = 0xffffffff;
+    _LIT( KHexPattern, "0x*" );
+    TInt err = KErrNotFound;
+
+    if ( err != aString.Match( KHexPattern ) )
+        {
+        TLex lex( aString );
+
+        // Get rid of '0x'
+        const TInt incAmount( 2 );
+        lex.Inc( incAmount );
+        err = lex.BoundedVal( aValue, EHex, KLimit );
+        }
+
+    return err;
+    }
+
+//----------------------------------------------------------------------------
+// CCenRepAttributes::ConvertToInt
+//----------------------------------------------------------------------------
+//
+TInt CCenRepAttributes::ConvertToInt( const TDesC& aString, TInt& aValue ) const
+    {
+    FUNC_LOG;
+
+    TInt err = KErrNone;
+
+    TLex lex( aString );
+
+    if( lex.Val( aValue ) != KErrNone )
+        {
+        err = KErrNotFound;
+        }
+
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CCenRepAttributes::InitCenRepKeyL
+// ---------------------------------------------------------------------------
+//
+TUint32 CCenRepAttributes::InitCenRepKeyL( TInt aIndex )
+    {
+    FUNC_LOG;
+
+    TUint32 cenRepKey = 0;
+
+    iParamArray = iSettings.Item( aIndex ).Parameters();
+    const RKeyValueArray& attrArray = iSettings.Item( aIndex ).Attributes();
+
+    iParamCount = iParamArray.Count();
+
+     // Check attributes
+    TInt attrCount = attrArray.Count();
+
+    DefineContext();
+
+    // Find given key
+    for( TInt i = 0; i < attrCount; i++ )
+        {
+        // Currently only interested given parameter key
+        if ( attrArray[i]->Key().CompareF( KKey ) == KErrNone )
+            {
+            TInt err = ConvertToHex( attrArray[i]->Value(), cenRepKey );
+            User::LeaveIfError( err );
+            }
+        }
+   return cenRepKey;
+   }
+
+// ---------------------------------------------------------------------------
+// CCenRepAttributes::DefineContext
+// ---------------------------------------------------------------------------
+//
+void CCenRepAttributes::DefineContext()
+    {
+    FUNC_LOG;
+
+    TPtrC value( KNullDesC );
+    TPtrC key( KNullDesC );
+
+    TPtrC conTypePtr ( KNullDesC );
+    TPtrC conSourcePtr ( KNullDesC );
+
+
+    for( TInt i = 0; i < iParamCount; i++ )
+        {
+        const RKeyValueArray& paramAttr = iParamArray[i]->Attributes();
+        TInt paramAttrCount = paramAttr.Count();
+        for( TInt j = 0; j < paramAttrCount; j++ )
+            {
+            key.Set( paramAttr[j]->Key() );
+            value.Set( paramAttr[j]->Value() );
+
+            // Check ContextSource
+            if ( key.CompareF( KContextSource ) == KErrNone )
+                {
+                conSourcePtr.Set( value );
+                }
+
+            // Check ContextType
+            else if ( key.CompareF( KContextType ) == KErrNone )
+                {
+                conTypePtr.Set( value);
+                }
+            }
+        iCF.DefineContext( conSourcePtr,
+                           conTypePtr,
+                           KCenRepSourceInteractionSec );
+        }
+   }
+
+// ---------------------------------------------------------------------------
+// CCenRepAttributes::PublishContext
+// ---------------------------------------------------------------------------
+//
+void CCenRepAttributes::PublishContext()
+    {
+    FUNC_LOG;
+
+    RThread thread;
+    iCF.PublishContext( *iContext, thread );
+    thread.Close();
+    }