--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imglib/filesystem/source/messageimplementation.cpp Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 class is used get the message strings and provides operations
+* to log them into log file
+* @internalComponent
+* @released
+*
+*/
+
+
+
+#include "messageimplementation.h"
+#include "errorhandler.h"
+
+using std::endl;
+using std::cout;
+typedef std::string String;
+
+char *errorMssgPrefix="FileSystem : Error:";
+char *warnMssgPrefix="FileSystem : Warning:";
+char *infoMssgPrefix="FileSystem : Information:";
+char *Space=" ";
+
+enum MessageArraySize{MAX=16};
+
+//Messages stored required for the program
+struct EnglishMessage MessageArray[MAX]=
+{
+ {FILEOPENERROR,"%s:%d: Could not open file : %s."},
+ {FILEREADERROR,"%s:%d: Could not read file : %s."},
+ {FILEWRITEERROR,"%s:%d: Could not write input image file."},
+ {MEMORYALLOCATIONERROR,"%s:%d: Memory allocation failure."},
+ {ENTRYCREATEMSG,"Creating the entry : %s."},
+ {BOOTSECTORERROR,"%s:%d: Boot Sector Error: %s."},
+ {BOOTSECTORCREATEMSG,"Creating bootsector : %s."},
+ {BOOTSECTORWRITEMSG,"Writing bootsector : %s"},
+ {FATTABLEWRITEMSG, "Writing FAT table for : %s"},
+ {IMAGESIZETOOBIG,"%s:%d: Current image size is greater than the given partition size: %s"},
+ {NOENTRIESFOUND,"%s:%d: No entries found under root."},
+ {EMPTYFILENAME,"%s:%d: Empty name received."},
+ {EMPTYSHORTNAMEERROR,"%s:%d: Empty short name."},
+ {CLUSTERERROR,"%s:%d: Cluster Instance error."},
+ {ROOTNOTFOUND,"%s:%d: None of the entries received."},
+ {UNKNOWNERROR,"%s:%d: Unknown exception occured."}
+};
+
+/**
+Constructor to reset the logging option flag.
+
+@internalComponent
+@released
+*/
+MessageImplementation::MessageImplementation()
+{
+ iLogging = false;
+}
+
+/**
+Destructor to close log file if logging is enabled and to clear the messaged.
+
+@internalComponent
+@released
+*/
+MessageImplementation::~MessageImplementation()
+{
+ if(iLogging)
+ {
+ fclose(iLogPtr);
+ }
+ iMessage.clear();
+}
+
+/**
+Function to Get Message stored in map.
+
+@internalComponent
+@released
+
+@param aMessageIndex - Index of the Message to be displayed
+@return Message string to be displayed
+*/
+char * MessageImplementation::GetMessageString(int aMessageIndex)
+{
+ Map::iterator p = iMessage.find(aMessageIndex);
+ if(p != iMessage.end())
+ {
+ return p->second;
+ }
+ else
+ {
+ if(aMessageIndex <= MAX)
+ {
+ return MessageArray[aMessageIndex-1].message;
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+}
+
+/**
+Function to log message in log file if logging is enable.
+
+@internalComponent
+@released
+
+@param aString - Message to be displayed
+*/
+void MessageImplementation::LogOutput(const char *aString)
+{
+ if (iLogging)
+ {
+ fputs(aString,iLogPtr);
+ fputs("\n",iLogPtr);
+ }
+}
+
+
+/**
+Function to display output and log message in log file if logging is enable.
+
+@internalComponent
+@released
+
+@param aString - Message to be displayed
+*/
+void MessageImplementation::Output(const char *aString)
+{
+
+ if (iLogging)
+ {
+ fputs(aString,iLogPtr);
+ fputs("\n",iLogPtr);
+ }
+ cout << aString << endl;
+}
+
+/**
+Function to Get Message stored in map and to display the Message
+
+@internalComponent
+@released
+
+@param aMessageType - The type of the message, whether it is Error or Warning or Information.
+@param aMsgIndex - The index of the information and the corresponding arguments.
+*/
+void MessageImplementation::ReportMessage(int aMessageType, int aMsgIndex,...)
+{
+ String reportMessage;
+ char* ptr;
+
+ va_list ap;
+ va_start(ap,aMsgIndex);
+
+ ptr = GetMessageString(aMsgIndex);
+
+ if(ptr)
+ {
+ switch (aMessageType)
+ {
+ case ERROR:
+ reportMessage += errorMssgPrefix;
+ break;
+ case WARNING:
+ reportMessage += warnMssgPrefix;
+ break;
+ case INFORMATION:
+ reportMessage += infoMssgPrefix;
+ break;
+ default:
+ break;
+ }
+ reportMessage += Space;
+ reportMessage.append(ptr);
+ int location = reportMessage.find('%',0);
+ //Erase the string from % to the end, because it is no where required.
+ reportMessage.erase(location);
+ reportMessage += va_arg(ap, char *);
+
+ LogOutput(reportMessage.c_str());
+ }
+}
+
+/**
+Function to start logging.
+
+@internalComponent
+@released
+
+@param aFileName - Name of the Log file
+*/
+void MessageImplementation::StartLogging(char *aFileName)
+{
+ char logFile[1024];
+ FILE *fptr;
+
+ strcpy(logFile,aFileName);
+
+ // open file for log etc.
+ if((fptr=fopen(logFile,"a"))==NULL)
+ {
+ ReportMessage(WARNING, FILEOPENERROR,aFileName);
+ }
+ else
+ {
+ iLogging = true;
+ iLogPtr=fptr;
+ }
+}
+
+/**
+Function to put Message string in map which is stored in message file.
+If file is not available the put message in map from Message Array structure.
+
+@internalComponent
+@released
+
+@param aFileName - Name of the Message file passed in
+*/
+void MessageImplementation::InitializeMessages()
+{
+ char *errStr;
+ int i;
+
+ for(i=0;i<MAX;i++)
+ {
+ errStr = new char[strlen(MessageArray[i].message) + 1];
+ strcpy(errStr, MessageArray[i].message);
+ iMessage.insert(std::pair<int,char*>(MessageArray[i].index,errStr));
+ }
+}