ncdengine/provider/deviceinteraction/src/ncdtestconfig.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/deviceinteraction/src/ncdtestconfig.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 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:   Definition of CNcdTestConfig
+*
+*/
+
+
+#include "ncdtestconfig.h"
+#include "ncdpanics.h"
+#include "catalogsdebug.h"
+#include "catalogsutils.h"
+
+
+_LIT( KCurrentMnc, "currentmnc" );
+_LIT( KCurrentMcc, "currentmcc" );
+
+_LIT( KHomeMnc, "homemnc" );
+_LIT( KHomeMcc, "homemcc" );
+
+_LIT( KImsi, "imsi" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CNcdTestConfig* CNcdTestConfig::NewL( 
+    RFs& aFs, const TDesC& aConfigFile )
+    {
+    CNcdTestConfig* self = new (ELeave) CNcdTestConfig;
+    CleanupStack::PushL( self );
+    self->ConstructL( aFs, aConfigFile );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CNcdTestConfig::~CNcdTestConfig()
+    {
+    DLTRACEIN((""));
+    
+    iConfigStrings.ResetAndDestroy();
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// IsSet
+// ---------------------------------------------------------------------------
+//
+TBool CNcdTestConfig::IsSet( TConfigValue aValue ) const
+    {
+    DLTRACEIN(("aValue: %d", aValue));
+
+    return GetString( aValue ) != NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Value getter
+// ---------------------------------------------------------------------------
+//
+const TDesC& CNcdTestConfig::Value( TConfigValue aValue ) const
+    {
+    DLTRACEIN(("aValue: %d", aValue));
+    HBufC* value = GetString( aValue );
+    NCD_ASSERT_ALWAYS( value, ENcdPanicNoData );
+    DLTRACEOUT(( _L("Value: %S"), value ));
+    return *value;
+    }
+    
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CNcdTestConfig::CNcdTestConfig()
+    {
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CNcdTestConfig::ConstructL( RFs& aFs, const TDesC& aConfigFile )
+    {
+    DLTRACEIN(( _L("file: %S"), &aConfigFile ));
+    
+    // Fill the array with null pointers
+    for ( TInt i = 0; i < EConfigInternal; ++i ) 
+        {
+        iConfigStrings.AppendL( NULL );
+        }
+        
+    // Read & parse the configuration file
+    HBufC8* data8 = ReadFileL( aFs, aConfigFile );
+    
+    CleanupStack::PushL( data8 );
+    HBufC16* data16 = ConvertUtf8ToUnicodeL( *data8 );
+    CleanupStack::PopAndDestroy( data8 );
+    
+    CleanupStack::PushL( data16 );   
+    ParseL( *data16 );
+    CleanupStack::PopAndDestroy( data16 );
+    }
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CNcdTestConfig::ParseL( const TDesC& aData )
+    {
+    DLTRACEIN((""));
+        
+    TLex lex( aData );
+    lex.Mark();
+    for ( ;; )
+        {
+        if ( lex.Eos() ||              
+             lex.Peek() == 0x0d || 
+             lex.Peek() == 0x0a )
+            {
+            TPtrC data( lex.MarkedToken() );
+            
+            // basically if-else-if
+            TBool doStuff = ( 
+                 ParseEntityL( data, KCurrentMnc, EConfigCurrentMnc ) || 
+                 ParseEntityL( data, KCurrentMcc, EConfigCurrentMcc ) ||
+                 ParseEntityL( data, KHomeMnc, EConfigHomeMnc ) ||
+                 ParseEntityL( data, KHomeMcc, EConfigHomeMcc ) ||
+                 ParseEntityL( data, KImsi, EConfigImsi) );
+
+            if ( lex.Eos() )
+                {
+                break;
+                }
+            else
+                {
+                lex.SkipAndMark( 1 );
+                }
+            }
+        else
+            {
+            lex.Inc();
+            }
+        }
+
+/*    
+    // Check that at least one of the attributes was set
+    if ( !( iCurrentMnc ||
+            iCurrentMcc ||
+            iHomeMnc ||
+            iHomeMcc ||
+            iImsi ) )
+        {
+        DLERROR(("No attribute had been set, leaving with KErrArgument"));
+        User::Leave( KErrArgument );
+        }
+*/        
+    }
+    
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CNcdTestConfig::ParseEntityL( 
+    const TDesC& aData, const TDesC& aEntityName, TConfigValue aTarget )
+    {
+    DLTRACEIN((""));
+    if ( aData.FindF( aEntityName ) == 0 )
+        {
+        // current mcd
+        TInt offset = aData.LocateF( '=' );
+        if ( offset != KErrNotFound )
+            {
+            delete iConfigStrings[aTarget];
+            
+            iConfigStrings[aTarget] = NULL;
+            
+            // Decode all possible encoded characters
+            iConfigStrings[aTarget] = aData.Mid( offset + 1 ).AllocL();
+            
+            // Remove trailing white space
+            iConfigStrings[aTarget]->Des().TrimRight();
+            return ETrue;
+            }
+        else
+            {
+            User::Leave( KErrCorrupt );
+            }
+        }
+    return EFalse;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// GetValue
+// ---------------------------------------------------------------------------
+//
+HBufC* CNcdTestConfig::GetString( TConfigValue aValue ) const
+    {
+    DLTRACEIN(("aValue: %d", aValue));
+    NCD_ASSERT_ALWAYS( aValue < EConfigInternal, ENcdPanicIndexOutOfRange ); 
+    return iConfigStrings[aValue];
+    }
+