--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/src/depreporter.cpp Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,234 @@
+/*
+* 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:
+* Reports Executable Dependency
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+#include "depreporter.h"
+
+/**
+Constructor: DepReporter class
+Initilize the parameters to data members.
+
+@internalComponent
+@released
+
+@param aMap - Reference to map data
+@param aReportType - Reference to report type.
+@param aXmlFile - Pointer to xml file name.
+*/
+DepReporter::DepReporter(const StringVsMapOfExeVsDep& aMap, const unsigned int& aReportType, const char* aXmlFile)
+: Reporter(aReportType,aXmlFile), iReportData(aMap)
+{
+}
+
+
+/**
+Destructor: DepReporter class
+
+@internalComponent
+@released
+*/
+DepReporter::~DepReporter()
+{
+}
+
+
+/**
+Generates the Report of mentioned type.
+
+Checks the validty of input data.
+Construct the report objects(Based on options).
+Traverse the Map and generate the report.
+
+@internalComponent
+@released
+
+@return Status - returns the status of the depreporter.
+ 'true' - for sucessful completion of the report.
+*/
+bool DepReporter::CreateReport()
+{
+ try
+ {
+ // Check for the empty map.
+ if (iReportData.empty() != 0)
+ {
+ throw ExceptionReporter(NODATATOREPORT);
+ }
+ // Check for valid Xml filename for report generation.
+ if (iReportType & XML_REPORT)
+ {
+ if (iXmlFileName.size() <= 0)
+ {
+ throw ExceptionReporter(XMLNAMENOTVALID);
+ }
+ }
+ ConstructReportObjects();
+ ProcessMapData();
+ }
+ catch (ExceptionReporter& aErrorReport)
+ {
+ throw aErrorReport;
+ }
+ return true;
+}
+
+
+/**
+Traverse the map and Creates the report.
+Both rom and rofs image is supported.
+
+@internalComponent
+@released
+*/
+void DepReporter::ProcessMapData(void)
+{
+ StringVsMapOfExeVsDep::const_iterator aIterMapBegin = iReportData.begin();
+ StringVsMapOfExeVsDep::const_iterator aIterMapEnd = iReportData.end();
+ const ExeNamesVsDepMapData* exeNamesVsDepMapDataAddress = 0;
+ ExeNamesVsDepMapData::const_iterator aIterExeNameBegin;
+ ExeNamesVsDepMapData::const_iterator aIterExeNameEnd;
+ const NameVsDepStatusData* nameVsDepStatusDataAddress = 0;
+ NameVsDepStatusData::const_iterator aIterNameVsDepBegin;
+ NameVsDepStatusData::const_iterator aIterNameVsDepEnd;
+
+ ConstructReport(KReportStart);
+
+ for (; aIterMapBegin != aIterMapEnd ; ++aIterMapBegin)
+ {
+ //If no dependency data found don't display the empty report
+ if(((*aIterMapBegin).second).size() == 0)
+ {
+ ExceptionReporter(NOMISSINGDEPS, (char*)(*aIterMapBegin).first.c_str()).Report();
+ continue;
+ }
+ ConstructReport(KReportStartElementHeader,aIterMapBegin->first);
+ exeNamesVsDepMapDataAddress = &aIterMapBegin->second;
+ if(exeNamesVsDepMapDataAddress->empty() != 0)
+ {
+ ConstructReport(KReportEndElementHeader);
+ continue;
+ }
+ aIterExeNameBegin = exeNamesVsDepMapDataAddress->begin();
+ aIterExeNameEnd = exeNamesVsDepMapDataAddress->end();
+
+ // Traverse the executable.
+ for( ; aIterExeNameBegin != aIterExeNameEnd ; ++aIterExeNameBegin)
+ {
+
+ ConstructReport(KReportStartExecutable,"",aIterExeNameBegin->first);
+ nameVsDepStatusDataAddress = &aIterExeNameBegin->second;
+ if(nameVsDepStatusDataAddress->empty() != 0)
+ {
+ ConstructReport(KReportEndExecutable);
+ continue;
+ }
+ aIterNameVsDepBegin = nameVsDepStatusDataAddress->begin();
+ aIterNameVsDepEnd = nameVsDepStatusDataAddress->end();
+
+ // Traverse the dependencies.
+ for(; aIterNameVsDepBegin != aIterNameVsDepEnd ; ++aIterNameVsDepBegin)
+ {
+ ConstructReport(KReportWriteDependency,"",
+ "", aIterNameVsDepBegin->first,
+ aIterNameVsDepBegin->second);
+ }
+ ConstructReport(KReportEndExecutable);
+ }
+ ConstructReport(KReportEndElementHeader);
+ ConstructReport(KReportWriteNote);
+ }
+ ConstructReport(KReportEnd);
+}
+
+
+/**
+Writes the Report sections to the report objects.
+
+@internalComponent
+@released
+
+@param aReportSection - Reference to Report section
+@param aImageName - Reference to Image Name string.
+@param aExeName - Reference to Executable string.
+@param aDepName - Reference to Dependency Name string.
+@param aDepStatus - Reference to Dependency Status string.
+*/
+void DepReporter::ConstructReport(EReportSection aReportSection, const String& aImageName,
+ const String& aExeName, const String& aDepName,
+ const String& aDepStatus)
+{
+ ReportWriter* iReportBasePointer = 0;
+ int count = iReportObjectList.size();
+ while(count)
+ {
+ iReportBasePointer = (ReportWriter*)iReportObjectList[count-1];
+ switch(aReportSection)
+ {
+ // Start Report document.
+ case KReportStart :
+ iReportBasePointer->StartReport();
+ break;
+
+ // End Report document.
+ case KReportEnd :
+ iReportBasePointer->EndReport();
+ break;
+
+ // Start element header info.
+ case KReportStartElementHeader :
+ iReportBasePointer->StartElementHeader(aImageName);
+ iReportBasePointer->WriteImageHeader(KCmdDependencyHeader);
+ break;
+
+ // End element header info.
+ case KReportEndElementHeader :
+ iReportBasePointer->EndElementHeader();
+ break;
+
+ // Start Executable info.
+ case KReportStartExecutable :
+ iReportBasePointer->StartExecutable(aExeName);
+ break;
+
+ // End Executable info.
+ case KReportEndExecutable :
+ iReportBasePointer->EndExecutable();
+ break;
+
+ // Write element details
+ case KReportWriteDependency :
+ iReportBasePointer->WriteElementDependencies(aDepName, aDepStatus);
+ break;
+
+ // Write a note about unknown dependency
+ case KReportWriteNote :
+ iReportBasePointer->WriteNote();
+ break;
+
+ // Do nothing..
+ default :
+ break;
+ }
+ --count;
+ }
+}