testexecfw/stf/stffw/logger/STFLogger/src/StifLogger.cpp
changeset 2 8bb370ba6d1d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/stf/stffw/logger/STFLogger/src/StifLogger.cpp	Fri Apr 09 10:46:28 2010 +0800
@@ -0,0 +1,600 @@
+/*
+ * Copyright (c) 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: This module contains implementation of CStifLogger 
+ * class member functions.
+ *
+ */
+
+// INCLUDE FILES
+#include <e32std.h>
+#include "StifLogger.h"
+#include "STFLogger.h"
+#include "STFLoggerOverFlow.h"
+#include "SettingServerClient.h"
+
+CStifLogger::CStifLogger() :
+    iLogger(NULL)
+    {
+    }
+
+void CStifLogger::ConstructL(const TDesC& aTestPath, const TDesC& aTestFile,
+        TLoggerType aLoggerType, TOutput aOutput, TBool aOverWrite,
+        TBool aWithTimeStamp, TBool aWithLineBreak, TBool aWithEventRanking,
+        TBool aThreadIdToLogFile, TBool aCreateLogDir,
+        TInt aStaticBufferSize, TBool aUnicode)
+    {
+    TInt ret;
+    if(!iLogger)
+        {
+        iLogger = new (ELeave) RSTFLogger();
+        ret = iLogger->Connect();
+        if (ret)
+            {
+            User::Leave(ret);
+            }
+        }
+    ret = iLogger->CreateL(aTestPath, aTestFile, aLoggerType, aOutput,
+            aOverWrite, aWithTimeStamp, aWithLineBreak, aWithEventRanking,
+            aThreadIdToLogFile, aCreateLogDir, aStaticBufferSize, aUnicode);
+    if (ret)
+        {
+        User::Leave(ret);
+        }
+    }
+
+void CStifLogger::ConstructL(const TDesC& aTestPath, const TDesC& aTestFile,
+        TLoggerSettings& aLoggerSettings)
+    {
+
+    TInt ret;
+    if(!iLogger)
+        {
+        iLogger = new (ELeave) RSTFLogger();
+        ret = iLogger->Connect();
+        if (ret)
+            {
+            User::Leave(ret);
+            }
+        }
+    ret = iLogger->CreateL(aTestPath, aTestFile, aLoggerSettings);
+    if (ret)
+        {
+        User::Leave(ret);
+        }
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: NewL
+
+ Description: Two-phased constructor.
+
+ Parameters: const TDesC& aTestPath: in: Path to logged information
+ const TDesC& aTestFile: in: Log name for information
+ TLoggerType aLoggerType: in: Log file type(txt, html,
+ data)
+ TOutput aOutput: in: Output source(File)
+ TBool aOverWrite: in: Indicator to file overwrite
+ TBool aWithTimeStamp: in: Indicator to time stamp
+ TBool aWithLineBreak: in: Indicator to line break
+ TBool aWithEventRanking: in: Indicator to event ranking
+ TBool aThreadIdToLogFile: in: Indicator to thread id adding to
+ end of the log file
+ TBool aCreateLogDir: in: Indicator to directory creation
+ TInt  aStaticBufferSize
+ TBool aUnicode: in: Indicator if file has to be in unicode format
+
+ Return Values: CStifLogger* logger: pointer to CStifLogger object
+
+ Errors/Exceptions: Leaves if aTestPath or aTestFile length is over KMaxName
+ Leaves if called serv.Connect() method fails
+ Leaves if called CHtmlLogger::NewL method fails
+ Leaves if called CDataLogger::NewL method fails
+ Leaves if called CTxtLogger::NewL method fails
+
+ Status: Proposal
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C CStifLogger* CStifLogger::NewL(const TDesC& aTestPath,
+        const TDesC& aTestFile, TLoggerType aLoggerType, TOutput aOutput,
+        TBool aOverWrite, TBool aWithTimeStamp, TBool aWithLineBreak,
+        TBool aWithEventRanking, TBool aThreadIdToLogFile,
+        TBool aCreateLogDir, TInt aStaticBufferSize, TBool aUnicode)
+    {
+    if( KMaxName < aTestPath.Length() || KMaxName < aTestFile.Length() )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CStifLogger* self = new (ELeave) CStifLogger();
+    CleanupStack::PushL(self);
+
+    self->ConstructL(aTestPath, aTestFile, aLoggerType, aOutput, aOverWrite,
+            aWithTimeStamp, aWithLineBreak, aWithEventRanking,
+            aThreadIdToLogFile, aCreateLogDir, aStaticBufferSize, aUnicode);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: NewL
+
+ Description: Two-phased constructor.
+
+ TestEngine's and TestServer's are friend. For TestEngine's and
+ TestServer's StifLogger creation.
+
+ Parameters: const TDesC& aTestPath: in: Path to logged information
+ const TDesC& aTestFile: in: Log name for information
+ TLoggerSettings& aLoggerSettings: in: Struct for StifLogger
+ settigs
+
+ Return Values: CStifLogger* logger: pointer to CStifLogger object
+
+ Errors/Exceptions:  Leaves if called CHtmlLogger::NewL method fails
+ Leaves if called CDataLogger::NewL method fails
+ Leaves if called CTxtLogger::NewL method fails
+
+ Status: Proposal
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C CStifLogger* CStifLogger::NewL(const TDesC& aTestPath,
+        const TDesC& aTestFile, TLoggerSettings& aLoggerSettings)
+    {
+    CStifLogger* self = new (ELeave) CStifLogger();
+    CleanupStack::PushL(self);
+    self->ConstructL(aTestPath, aTestFile, aLoggerSettings);
+    CleanupStack::Pop(self);
+    return self;
+
+    }
+
+CStifLogger::~CStifLogger()
+    {
+    if (iLogger)
+        {
+        iLogger->Close();
+        delete iLogger;
+        }
+    }
+
+void CStifLogger::OverwriteLoggerSettings(
+        TLoggerSettings& /*aLoggerSettings*/, TName& /*aTestPath*/,
+        TName& /*aTestFile*/, TLoggerType& /*aLoggerType*/,
+        TOutput& /*aOutput*/, TBool& /*aOverWrite*/,
+        TBool& /*aWithTimeStamp*/, TBool& /*aWithLineBreak*/,
+        TBool& /*aWithEventRanking*/, TBool& /*aThreadIdToLogFile*/,
+        TBool& /*aCreateLogDir*/, TBool& /*aUnicode*/)
+    {
+    //Keep nothing to do.
+    }
+
+EXPORT_C TInt CStifLogger::Log(const TDesC& aLogInfo)
+    {
+    // No text style info
+    return iLogger->Log(ENoStyle, aLogInfo);
+
+    }
+
+EXPORT_C TInt CStifLogger::Log(const TDesC8& aLogInfo)
+    {
+    // No text style info
+    return iLogger->Log(ENoStyle, aLogInfo);
+
+    }
+
+EXPORT_C TInt CStifLogger::Log(TInt aStyle, const TDesC& aLogInfo)
+    {
+    return iLogger->Log(aStyle, aLogInfo);
+
+    }
+
+EXPORT_C TInt CStifLogger::Log(TInt aStyle, const TDesC8& aLogInfo)
+    {
+    return iLogger->Log(aStyle, aLogInfo);
+
+    }
+
+EXPORT_C TInt CStifLogger::Log(TRefByValue<const TDesC> aLogInfo, ...)
+    {
+    VA_LIST list;
+    VA_START( list, aLogInfo );
+    TLogInfo logInfo;
+
+    TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 1);
+
+    // Parse parameters
+    logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler);
+
+    // No text style info
+    return iLogger->Log(ENoStyle, logInfo);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: Log
+
+ Description: Log a 8 bit information.
+
+ This log method accepts several parameters.
+
+ Parameters: TRefByValue<const TDesC8> aLogInfo: in: A templated class which 
+ encapsulates a reference to an object within a wrapper
+
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  TDes8LoggerOverflowHandler called if logged information is 
+ over KMaxLogData
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::Log(TRefByValue<const TDesC8> aLogInfo, ...)
+    {
+    VA_LIST list;
+    VA_START( list, aLogInfo );
+    TLogInfo8 logInfo;
+    // Create overflow handler. If the log information size is over the
+    // KMaxLogData rest of the information will cut.
+    TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 1);
+    // Parse parameters
+    logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler);
+    // No text style info
+    return iLogger->Log(ENoStyle, logInfo);
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: Log
+
+ Description: Log a 16 bit information.
+
+ This log method accepts several parameters. There is also parameter to
+ styling text information e.g. text color.
+
+ Parameters: TInt aStyle: in: Logged text forming parameter
+ TRefByValue<const TDesC> aLogInfo: in: A templated class 
+ which encapsulates a reference to an object
+ within a wrapper
+
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  TDesOverflowHandler called if logged information is
+ over KMaxLogData
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::Log(TInt aStyle,
+        TRefByValue<const TDesC> aLogInfo, ...)
+    {
+    VA_LIST list;
+    VA_START( list, aLogInfo );
+    TLogInfo logInfo;
+
+    // Create overflow handler. If the log information size is over the
+    // KMaxLogData rest of the information will cut.
+    TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 2);
+
+    // Parse parameters
+    logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler);
+
+    return iLogger->Log(aStyle, logInfo);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: Log
+
+ Description: Log a 8 bit information.
+
+ This log method accepts several parameters. There is also parameter to
+ styling text information e.g. text color.
+
+ Parameters: TInt aStyle: in: Logged text forming parameter
+ TRefByValue<const TDesC8> aLogInfo: in: A templated class 
+ which encapsulates a reference to an object
+ within a wrapper
+
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  TDes8LoggerOverflowHandler called if logged information is
+ over KMaxLogData
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::Log(TInt aStyle,
+        TRefByValue<const TDesC8> aLogInfo, ...)
+    {
+    VA_LIST list;
+    VA_START( list, aLogInfo );
+    TLogInfo8 logInfo;
+
+    // Create overflow handler. If the log information size is over the
+    // KMaxLogData rest of the information will cut.
+    TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 2);
+
+    // Parse parameters
+    logInfo.AppendFormatList(aLogInfo, list, &overFlowHandler);
+
+    return iLogger->Log(aStyle, logInfo);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: WriteDelimiter
+
+ Description: Log a 16 bit delimiter.
+
+ Log a delimiters required locations to the log information.
+ This will be used if parameters are not given when calling this method.
+
+ Parameters: const TDesC& aDelimiter: in: Logged delimiter(e.g. '#' or 'XO')
+ TInt aCount: in: Repeated count for delimiter
+
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  TDesLoggerOverflowHandler called if logged information
+ is over KMaxLogData.
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::WriteDelimiter(const TDesC& aDelimiter,
+        TInt aCount)
+    {
+    TLogInfo delimiter;
+
+    // Create overflow handler. If the delimiter size expands over the
+    // KMaxLogData the TDesLoggerOverflowHandler will call.
+    TDesSTFLoggerOverflowHandler overFlowHandler(iLogger, 3);
+
+    // Create a delimiter
+    for (TInt a = 0; a < aCount; a++)
+        {
+        // If delimiter creation keeps under the KMaxLogData.
+        // If not we use TDesLoggerOverflowHandler.
+        if ((a * aDelimiter.Length()) < KMaxLogData)
+            {
+            delimiter.Append(aDelimiter);
+            }
+        // KMaxLogData is exceeded
+        else
+            {
+            // If the title size is over the KMaxLogData default delimiter will
+            // use. Use normal overflowhandler to print overflow information.
+            TBuf<4> empty; // Not really used.
+            overFlowHandler.Overflow(empty);
+            delimiter.Copy(
+                    _L( "##################################################" ));
+            break;
+            }
+        }
+
+    // No text style info
+    return iLogger->Log(ENoStyle, delimiter);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: WriteDelimiter
+
+ Description: Log a 8 bit delimiter.
+
+ Log a delimiters required locations to the log information.
+
+ Parameters: const TDesC8& aDelimiter: in: Logged delimiter
+ (e.g. '#' or 'XO')
+ TInt aCount: in: Repeated count for delimiter
+
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  TDes8LoggerOverflowHandler called if logged information is
+ over KMaxLogData.
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::WriteDelimiter(const TDesC8& aDelimiter,
+        TInt aCount)
+    {
+    TLogInfo8 delimiter;
+
+    // Create overflow handler. If the delimiter size expands over the
+    // KMaxLogData the TDesLoggerOverflowHandler will call.
+    TDes8STFLoggerOverflowHandler overFlowHandler(iLogger, 3);
+
+    // Create a delimiter
+    for (TInt a = 0; a < aCount; a++)
+        {
+        // If delimiter creation keeps under the KMaxLogData.
+        // If not we use TDesLoggerOverflowHandler.
+        if ((a * aDelimiter.Length()) < KMaxLogData)
+            {
+            delimiter.Append(aDelimiter);
+            }
+        // KMaxLogData is exceeded
+        else
+            {
+            // If the title size is over the KMaxLogData default delimiter will
+            // use. Use normal overflowhandler to print overflow information.
+            TBuf8<4> empty; // Not really used.
+            overFlowHandler.Overflow(empty);
+            delimiter.Copy(
+                    _L8( "##################################################" ));
+            break;
+            }
+        }
+
+    // No text style info
+    return iLogger->Log(ENoStyle, delimiter);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: SaveData
+
+ Description: Save file or data( 16 bit ).
+
+ Used when is need to save file or data to storage e.g. web page.
+
+ Parameters: TDesC& aData: in: Data to be saved
+ 
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  None
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::SaveData(TDesC& aData)
+    {
+    // No text style info
+    return iLogger->Log(ENoStyle, aData);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: SaveData
+
+ Description: Save file or data( 8 bit ).
+
+ Used when is need to save file or data to storage e.g. web page.
+
+ Parameters: TDesC8& aData: in: Data to be saved
+ 
+ Return Values: TInt: Symbian error code.
+
+ Errors/Exceptions:  None
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::SaveData(TDesC8& aData)
+    {
+    // No text style info
+    return iLogger->Log(ENoStyle, aData);
+
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: CreationResult
+
+ Description: Return StifLogger creation result.
+
+ Parameters: None
+ 
+ Return Values: StifLogger creation result
+
+ Errors/Exceptions:  None
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C TInt CStifLogger::CreationResult()
+    {
+    TInt outputType;
+    iLogger->CreationResult(outputType);
+    return outputType;
+    }
+
+/*
+ -------------------------------------------------------------------------------
+
+ Class: CStifLogger
+
+ Method: OutputType
+
+ Description: Get output type. Valid only if CreationResult returns KErrNone.
+
+ Parameters: TOutput& aOutput
+ 
+ Return Values: StifLogger creation result
+
+ Errors/Exceptions:  None
+
+ Status: Approved
+
+ -------------------------------------------------------------------------------
+ */
+EXPORT_C CStifLogger::TOutput CStifLogger::OutputType()
+    {
+
+    TOutput outputType;
+    iLogger->OutputType(outputType);
+    return outputType;
+
+    }
+
+EXPORT_C TInt CStifLogger::Send(TInt aStyle, const TDesC& aData)
+    {
+    return iLogger->Log(aStyle, aData);
+    }
+
+EXPORT_C TInt CStifLogger::Send(TInt aStyle, const TDesC8& aData)
+    {
+    return iLogger->Log(aStyle, aData);
+    }
+
+// End of File
+