diff -r 000000000000 -r 044383f39525 imgtools/imglib/filesystem/source/messageimplementation.cpp --- /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(MessageArray[i].index,errStr)); + } +}