messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsConfigFileParser.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsConfigFileParser.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,194 @@
+// Copyright (c) 2003-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:
+//
+
+/**
+ @file
+*/
+
+
+#include "CMtfTestActionUtilsConfigFileParser.h"
+
+#include <f32file.h>
+
+const TInt KFileBufferSize = 1024;
+_LIT8(KComment,"*#*");
+
+
+CMtfTestActionUtilsConfigFileParser* CMtfTestActionUtilsConfigFileParser::NewL(const TDesC& aFileName)
+ {
+ CMtfTestActionUtilsConfigFileParser* self = new (ELeave) CMtfTestActionUtilsConfigFileParser();
+ CleanupStack::PushL(self);
+ self->ConstructL(aFileName);
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+CMtfTestActionUtilsConfigFileParser::CMtfTestActionUtilsConfigFileParser()
+ {
+ }
+
+
+CMtfTestActionUtilsConfigFileParser::~CMtfTestActionUtilsConfigFileParser()
+ {
+ iName.ResetAndDestroy();
+ iContent.ResetAndDestroy();
+ iContent8.ResetAndDestroy();
+ }
+
+
+void CMtfTestActionUtilsConfigFileParser::ConstructL(const TDesC& aFileName)
+ {
+ RFs fs;
+ fs.Connect();
+
+ RFile file;
+ User::LeaveIfError(file.Open(fs,aFileName,EFileRead));
+
+ TInt eof = EFalse;
+ TInt fileOffset = 0;
+ TBuf8<KFileBufferSize> fileBuffer;
+
+ while (!eof)
+ {
+ fileBuffer.SetLength(0);
+ User::LeaveIfError(file.Read(fileOffset,fileBuffer,KFileBufferSize));
+ TInt read = fileBuffer.Length();
+
+ if (read < KFileBufferSize)
+ {
+ fileBuffer.Append('\n');
+ eof = ETrue;
+ }
+
+ TInt lineOverflow = fileBuffer.Locate('\n');
+ if ((lineOverflow == KErrNotFound) && (read == KFileBufferSize))
+ User::Leave(KErrOverflow);
+
+ TInt eol = EFalse;
+ while (!eol)
+ {
+ TInt lineFeedLocation = fileBuffer.Locate('\n');
+ if (lineFeedLocation == KErrNotFound)
+ eol = ETrue;
+ else
+ {
+ fileOffset += lineFeedLocation + 1;
+ TInt lineLength;
+ if ((lineFeedLocation != 0) && (fileBuffer[lineFeedLocation-1] == '\r'))
+ lineLength = lineFeedLocation-1;
+ else
+ lineLength = lineFeedLocation;
+ TPtrC8 line = fileBuffer.Left(lineLength);
+ TInt commentLocation = line.Match(KComment);
+ if (commentLocation != KErrNotFound)
+ {
+ TPtrC8 skipComment = line.Left(commentLocation);
+ line.Set(skipComment);
+ }
+ TInt seperatorLocation = line.Locate('=');
+ if (seperatorLocation != KErrNotFound)
+ if ((seperatorLocation == 0) || (seperatorLocation == line.Length()-1))
+ seperatorLocation = KErrNotFound;
+ if (seperatorLocation != KErrNotFound)
+ {
+ TPtrC8 namePtr = line.Left(seperatorLocation);
+ HBufC8* nameBuf8 = HBufC8::NewL(namePtr.Length());
+ CleanupStack::PushL(nameBuf8);
+ TPtr8 name8 = nameBuf8->Des();
+ name8.Copy(namePtr);
+ name8.Trim();
+ HBufC* nameBuf16 = HBufC::NewL(namePtr.Length());
+ TPtr name16 = nameBuf16->Des();
+ name16.Copy(name8);
+ iName.Append(nameBuf16);
+ CleanupStack::PopAndDestroy(nameBuf8);
+
+ TPtrC8 contentPtr = line.Mid(seperatorLocation+1);
+ HBufC8* contentBuf8 = HBufC8::NewL(contentPtr.Length());
+ CleanupStack::PushL(contentBuf8);
+ TPtr8 content8 = contentBuf8->Des();
+ content8.Copy(contentPtr);
+ content8.Trim();
+ HBufC* contentBuf16 = HBufC::NewL(contentPtr.Length());
+ TPtr content16 = contentBuf16->Des();
+ content16.Copy(content8);
+ iContent.Append(contentBuf16);
+ iContent8.Append(contentBuf8);
+ CleanupStack::Pop(contentBuf8);
+ }
+ TPtrC8 theRest = fileBuffer.Mid(lineFeedLocation+1);
+ fileBuffer.Copy(theRest);
+ }
+ }
+ }
+
+ fs.Close();
+ }
+
+
+TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsInteger(const TDesC& aFieldName,TInt& aValue)
+ {
+ TInt count = iName.Count();
+
+ for (TInt i=0; i<count; i++)
+ {
+ if (iName[i]->Compare(aFieldName) == 0)
+ {
+ TPtrC content = iContent[i]->Des();
+ TLex lex(content);
+ lex.Val(aValue);
+ return (KErrNone);
+ }
+ }
+
+ return (KErrNotFound);
+ }
+
+
+TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsString(const TDesC& aFieldName,TPtrC& aString)
+ {
+ TInt count = iName.Count();
+
+ for (TInt i=0; i<count; i++)
+ {
+ if (iName[i]->Compare(aFieldName) == 0)
+ {
+ aString.Set(*iContent[i]);
+ return (KErrNone);
+ }
+ }
+
+ return (KErrNotFound);
+ }
+
+
+TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsString8(const TDesC& aFieldName,TPtrC8& aString)
+ {
+ TInt count = iName.Count();
+
+ for (TInt i=0; i<count; i++)
+ {
+ if (iName[i]->Compare(aFieldName) == 0)
+ {
+ aString.Set(*iContent8[i]);
+ return (KErrNone);
+ }
+ }
+
+ return (KErrNotFound);
+ }
+
+