--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/useremul/src/Logger.cpp Mon Mar 08 15:03:44 2010 +0800
@@ -0,0 +1,260 @@
+/*------------------------------------------------------------------
+ -
+ * Software Name : UserEmulator
+ * Version : v4.2.1309
+ *
+ * Copyright (c) 2009 France Telecom. All rights reserved.
+ * This software is distributed under the License
+ * "Eclipse Public License - v 1.0" the text of which is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * France Telecom
+ *
+ * Contributors:
+ *------------------------------------------------------------------
+ -
+ * File Name: Logger.cpp
+ *
+ * Created: 13/08/2009
+ * Author(s): Marcell Kiss, Reshma Sandeep Das
+ *
+ * Description:
+ * This class is used for logging purposes
+ *------------------------------------------------------------------
+ -
+ *
+ */
+
+//System Includes
+#include <eikenv.h> // CEikonEnv
+#include <f32file.h> // TParsePtrC
+#include <bautils.h> // BaflUtils
+#include <aknnotewrappers.h>
+
+//User Includes
+#include "Logger.h"
+#include "Settings.h"
+
+//Constants
+_LIT8(KTimeFormat,"%04d-%02d-%02d, %02d:%02d:%02d:%02d");
+_LIT8(KHashTimeFormat,"#%04d-%02d-%02d, %02d:%02d:%02d:%02d");
+_LIT(KDriveError, "Drive might be locked. Missing or incomplete log file possible.");
+const TInt KTimeRecordSize = 26;
+// -----------------------------------------------------------------------------
+// CLogger::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CLogger::ConstructL()
+{
+ TParsePtrC parser(iSettings.iLogPath);
+ BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath());
+ User::LeaveIfError(iFs.Connect());
+ iDriveLockError = EFalse;
+}
+
+// -----------------------------------------------------------------------------
+// CLogger::CLogger
+// -----------------------------------------------------------------------------
+//
+CLogger::CLogger(CUserEmulatorScriptsView& aScriptView,CSettings& aSettings, CEikonEnv* aEikonEnv)
+ : iScriptView(aScriptView),iSettings(aSettings),iEEnv(aEikonEnv)
+{
+}
+
+// -----------------------------------------------------------------------------
+// CLogger::~CLogger
+// -----------------------------------------------------------------------------
+//
+CLogger::~CLogger()
+{
+ iFile.Close();
+ iFs.Close();
+}
+// -----------------------------------------------------------------------------
+// CLogger::WriteLogL
+// -----------------------------------------------------------------------------
+//
+void CLogger::WriteLogL(const TDesC16& aText, TBool aHeader, TBool aHash)
+{
+ if(Write(aText,aHeader,aHash)!=KErrNone)
+ {
+ if(!iDriveLockError)
+ {
+ iDriveLockError=ETrue;
+ CAknErrorNote* errorNote = new (ELeave) CAknErrorNote(ETrue);
+ errorNote->ExecuteLD(KDriveError);
+ }
+ }
+ else
+ iDriveLockError=EFalse;
+}
+// -----------------------------------------------------------------------------
+// CLogger::Write
+// -----------------------------------------------------------------------------
+//
+TInt CLogger::Write(const TDesC16& aText, TBool aHeader, TBool aHash)
+{
+ if( iSettings.iLogStatus)
+ {
+ TBool bExists = BaflUtils::FileExists(iFs, iSettings.iLogPath);
+ if(!bExists)
+ {
+ TParsePtrC parser(iSettings.iLogPath);
+ TRAPD(err, BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath()));
+ if(err != KErrNone)
+ return err;
+ CloseFileHandles();
+ TInt err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite);
+ if(err1 != KErrNone)
+ return err1;
+
+ TRAPD(err2,iScriptView.CmdGetSystemInfoL(ETrue));
+ }
+ else
+ {
+ //File exists..Check if the file is already open
+ TBool isOpen;
+ TInt err = iFs.IsFileOpen(iSettings.iLogPath,isOpen);
+ TInt err1=KErrNone;
+ if(err != KErrNone)
+ return err;
+
+ if(!isOpen)
+ {
+ err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite);
+ if(err1!=KErrNone)
+ return err1;
+ TRAPD(err,iScriptView.CmdGetSystemInfoL(ETrue));
+ }
+
+ }
+
+ iLogBuffer.Copy(aText);
+
+ if(!aHeader)
+ {
+ TTime time;
+ time.HomeTime();
+ TDateTime dateTime;
+ dateTime = time.DateTime();
+ TBuf8<KTimeRecordSize> timeRecord;
+ if(aHash)
+ timeRecord.Format(KHashTimeFormat, dateTime.Year(), dateTime.Month()+1,
+ dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000);
+ else
+ timeRecord.Format(KTimeFormat, dateTime.Year(), dateTime.Month()+1,
+ dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000);
+ timeRecord.Append(KComma);
+ iLogBuffer.Insert(0, timeRecord);
+ }
+ TInt res=iFile.Write(iLogBuffer);
+ if(res!=KErrNone)
+ return res;
+ res=iFile.Flush();
+ if(res!=KErrNone)
+ return res;
+ }
+ return KErrNone;
+}
+// -----------------------------------------------------------------------------
+// CLogger::WriteLogL
+// -----------------------------------------------------------------------------
+//
+void CLogger::WriteLogL(const TDesC8& aText, TBool aHeader, TBool aHash)
+{
+ if(Write(aText,aHeader,aHash)!=KErrNone)
+ {
+ if(!iDriveLockError)
+ {
+ iDriveLockError=ETrue;
+ CAknErrorNote* errorNote = new (ELeave) CAknErrorNote(ETrue);
+ errorNote->ExecuteLD(KDriveError);
+ }
+ }
+ else
+ iDriveLockError=EFalse;
+}
+// -----------------------------------------------------------------------------
+// CLogger::Write
+// -----------------------------------------------------------------------------
+//
+TInt CLogger::Write(const TDesC8& aText, TBool aHeader, TBool aHash)
+{
+ if( iSettings.iLogStatus)
+ {
+ TBool bExists = BaflUtils::FileExists(iFs, iSettings.iLogPath);
+ if(!bExists)
+ {
+ TParsePtrC parser(iSettings.iLogPath);
+ TRAPD(err, BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath()));
+ if(err != KErrNone)
+ return err;
+ CloseFileHandles();
+ TInt err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite);
+ if(err1 != KErrNone)
+ return err1;
+
+ TRAPD(err2,iScriptView.CmdGetSystemInfoL(ETrue));
+ }
+ else
+ {
+ //File exists..Check if the file is already open
+ TBool isOpen;
+ TInt err = iFs.IsFileOpen(iSettings.iLogPath,isOpen);
+ TInt err1=KErrNone;
+ if(err != KErrNone)
+ return err;
+
+ if(!isOpen)
+ {
+ err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite);
+ if(err1!=KErrNone)
+ return err1;
+ TRAPD(err,iScriptView.CmdGetSystemInfoL(ETrue));
+ }
+ }
+ iLogBuffer.Copy(aText);
+
+ //Log Date and time
+ _LIT8(KComma, ",");
+ _LIT8(KTimeFormat,"%04d-%02d-%02d %02d:%02d:%02d:%02d");
+ _LIT8(KHashTimeFormat,"#%04d-%02d-%02d %02d:%02d:%02d:%02d");
+
+ const TInt KTimeRecordSize = 20;
+
+ if(!aHeader)
+ {
+ TTime time;
+ time.HomeTime();
+ TDateTime dateTime;
+ dateTime = time.DateTime();
+ TBuf8<KTimeRecordSize> timeRecord;
+ if(aHash)
+ timeRecord.Format(KHashTimeFormat, dateTime.Year(), dateTime.Month()+1,
+ dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000);
+ else
+ timeRecord.Format(KTimeFormat, dateTime.Year(), dateTime.Month()+1,
+ dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000);
+ timeRecord.Append(KComma);
+ iLogBuffer.Insert(0, timeRecord);
+ }
+
+ TInt res=iFile.Write(iLogBuffer);
+ if(res!=KErrNone)
+ return res;
+ res=iFile.Flush();
+ if(res!=KErrNone)
+ return res;
+
+ }
+ return KErrNone;
+}
+// -----------------------------------------------------------------------------
+// CLogger::CloseFileHandles
+// -----------------------------------------------------------------------------
+//
+void CLogger::CloseFileHandles()
+{
+ iFile.Close();
+}