diff -r 000000000000 -r 044383f39525 imgtools/imgcheck/src/exceptionimplementation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imgcheck/src/exceptionimplementation.cpp Tue Oct 27 16:36:35 2009 +0000 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2007-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 to log and/or display the error, warning and status +* messages. This is a sigleton class. +* +*/ + + +/** + @file + @internalComponent + @released +*/ + +#include "exceptionimplementation.h" + +enum MessageArraySize{MAX=42}; + +/** +Message objects are created and these objects holds the error, warning and status +message required by imgcheck tool. + +@internalComponent +@released +*/ +struct Messages MessageArray[MAX]= +{ + {UNKNOWNIMAGETYPE, "Error: Image Type Unknown: '%s'"}, + {UNKNOWNPREFIX,"Error: Option has Un-Known Prefix: '%s'"}, + {VALUEEXPECTED,"Error: Value expected for option: '%s'"}, + {VALUENOTEXPECTED,"Error: Value not expected for option: '%s'"}, + {UNKNOWNOPTION,"Error: Unknown option: '%s'"}, + {QUIETMODESELECTED,"Error: Quiet mode selected while not generating XML report"}, + {NOIMAGE,"Error: No images specified in the input"}, + {NOROMIMAGE,"Warning: ROM image not passed"}, + {XMLOPTION,"Warning: XML file name specified while not generating XML report"}, + {NOMEMORY,"Error:%s:%d: Insuffient program memory"}, + {FILENAMETOOBIG,"Error:'%s':%d: Improper File Name Size"}, + {XMLNAMENOTVALID,"Error: Not a valid Xml File name"}, + {REPORTTYPEINVALID,"Error: Not a valid report type"}, + {FILEOPENFAIL,"Error:%s:%d: Cannot Open file: '%s'"}, + {XSLCREATIONFAILED,"Warning:%s:%d: Unable to Create XSL file: '%s'"}, + {UNEXPECTEDNUMBEROFVALUE, "Error: Unexpected number of values received for option: '%s'"}, + {INVALIDVIDVALUE, "Error: Invalid VID value: '%s'"}, + {UNKNOWNSUPPRESSVAL, "Error: Unknown suppress value: '%s'"}, + {ALLCHECKSSUPPRESSED, "Error: All Validations suppressed"}, + {SUPPRESSCOMBINEDWITHVIDVAL, "Warning: VID values received but VID validation suppressed"}, + {SIDALLCOMBINEDWITHSID, "Warning: --sidall option received but SID validation suppressed"}, + {DATAOVERFLOW, "Overflow: Input value '%s'"}, + {VALIDIMAGE, "Success: Image(s) are valid"}, + {IMAGENAMEALREADYRECEIVED, "Warning: Image '%s' passed in multiple times, first one is considered and rest are ignored."}, + {UNKNOWNDBGVALUE , "Error: Invalid value is passed to --dbg, expected values are TRUE or FALSE."}, + {ONLYSINGLEDIRECTORYEXPECTED , "Error: Only single directory should be passed as input when E32Input is enabled."}, + {INVALIDDIRECTORY , "Error: Invalid directory or E32 file received as E32Input."}, + {INCORRECTVALUES , "Warning: The status reported for Dependency and SID check may not be correct in E32 input mode."}, + {NOVALIDATIONSENABLED , "Error: No validations are enabled."}, + {NOEXEPRESENT, "Error: No valid executables are present"}, + {E32INPUTNOTEXIST, "Error: Invalid E32 input '%s'"}, + {VALIDE32INPUT, "Success: E32 executable(s) are validated"}, + // Add the New Error and warning messages above this line + {GATHERINGDEPENDENCIES,"Gathering dependencies for '%s'"}, + {WRITINGINTOREPORTER,"'%s' Checker writing data into Reporter"}, + {COLLECTDEPDATA,"Collecting dependency data for '%s'"}, + {NOOFEXECUTABLES,"No of executables in '%s': %d"}, + {NOOFHEXECUTABLES,"No of hidden executables in '%s': %d"}, + {READINGIMAGE,"Reading image: '%s'"}, + {GATHERINGIDDATA,"Gathering %s data for '%s'"}, + {GENERATINGREPORT,"Generating '%s' Report"}, + {REPORTGENERATION,"Report generation %s"}, + //Add the new status informations below this line + {NODISKSPACE,"Error: No enough disk space for %s"} +}; + +/** +Static variables used to construct singleton class are initialized + +@internalComponent +@released +*/ +unsigned int ExceptionImplementation::iCmdFlag = 0; +ExceptionImplementation* ExceptionImplementation::iInstance = KNull; + +/** +Static function provides the way to get the instance of ExceptionImplementation +class. It takes aCmdFlag as argument, this argument contains the specified +commandline options and this flag is used to display the status information to +standard output upon receiving verbose mode flag. + +@internalComponent +@released + +@param aCmdFlag - has all the options received in commandline. + +@return - returns the instance +*/ +ExceptionImplementation* ExceptionImplementation::Instance(unsigned int aCmdFlag) +{ + if(iInstance == KNull) + { + iCmdFlag = aCmdFlag; + iInstance = new ExceptionImplementation(); + } + return iInstance; +} + +/** +Static function to delete the instance. + +@internalComponent +@released +*/ +void ExceptionImplementation::DeleteInstance() +{ + DELETE(iInstance); +} + +/** +Constructor opens the output stream and traverses through MessageArray objects to +initialize iMessage map. This map is used later to log the messages. + +@internalComponent +@released +*/ +ExceptionImplementation::ExceptionImplementation() +:iMsgIndex(0) +{ + iLogStream.open(gLogFileName.c_str(),Ios::out); + int i; + for(i = 0; i < MAX; i++) + { + iMessage.insert(std::make_pair(MessageArray[i].iIndex,MessageArray[i].iMessage)); + } +} + +/** +Destructor closes the output stream opened during construction. + +@internalComponent +@released +*/ +ExceptionImplementation::~ExceptionImplementation() +{ + iLogStream.close(); +} + +/** +Function returns the message equivalent to the recived enum value. + +@internalComponent +@released + +@param aMsgIndex - enum value +*/ +String& ExceptionImplementation::Message(const int aMsgIndex) +{ + iMsgIndex = aMsgIndex; + return iMessage[aMsgIndex]; +} + +/** +Function to log the error, warning and status information. +Irrespective of the messgae type all the messages are logged into the imgcheck +logfile. The warning and error messages are needed to be displayed on the command +prompt always. But the status information is displayed at standard output only if +the verbose mode is selected by the user. + +@internalComponent +@released + +@param aMsgIndex - enum value +*/ +void ExceptionImplementation::Log(const String aMsg) +{ + iLogStream << aMsg.c_str() << "\n"; + + if(iCmdFlag & KVerbose) + { + cout << aMsg.c_str() << endl; + } +} + +/** +Function to report the error and warning information. +Irrespective of the messgae type all the messages are logged into the imgcheck +logfile. The warning and error messages are needed to be displayed on the command +prompt always. + +@internalComponent +@released + +@param aMsgIndex - enum value +*/ +void ExceptionImplementation::Report(const String aMsg) +{ + iLogStream << aMsg.c_str() << "\n"; + if(aMsg.find("Success") != String::npos) + { + cout << aMsg.c_str() << endl; + } + else + { + cerr << aMsg.c_str() << endl; + } +}