apicompatanamdw/compatanalysercmd/headeranalyser/src/ReportGenerator.h
changeset 0 638b9c697799
child 3 ebe3f8f03b59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/ReportGenerator.h	Tue Jan 12 14:52:39 2010 +0530
@@ -0,0 +1,380 @@
+/*
+* 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 "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:  
+*
+*/
+
+
+#ifndef __REPORT_GENERATOR_H__
+#define __REPORT_GENERATOR_H__
+
+#include "CmdGlobals.h"
+
+#include <string>
+#include <map>
+#include <vector>
+
+#include "ReportIssue.h"
+
+using namespace std;
+
+XERCES_CPP_NAMESPACE_USE
+
+/**
+* The ReportGenerator defines an issue reporting interface for the analysis 
+* to use. It defines issue type IDs and issue severities and constructs 
+* the XML document based on the reported issues. The ReportGenerator also 
+* implements the saving of the resulting XML document to the file system.
+*/
+class ReportGenerator
+{
+public:
+    /**
+    * Destructor
+    */ 
+    ReportGenerator(string aOutputFile="");
+
+    /**
+    * Destructor
+    */ 
+    ~ReportGenerator();
+
+public:
+    /**
+    * Set style sheet settings
+    * @param aXSLFilename style sheet file
+    * @param aIncludeInXML true if to be included in XML
+    */ 
+    void setXSL(string aXSLFilename, bool aIncludeInXML);
+
+    /**
+    * Set DTD (Document Type Definition ) usage
+    * (method not used)
+    * @param aDTDFilename DTD filename
+    * @param aIncludeInDTD include DTD in XML
+    */
+    void setDTD(string aDTDFilename, bool aIncludeInDTD);
+
+    /**
+    * Start reporting, initalize XML-parser and create DOM document
+    */
+    void startReport();
+    
+    /**
+    * Finish report, dump DOM to file
+    */
+    void finishReport();
+    
+    /**
+    * Load strin tables
+    * @param aFilename if to be included in XML
+    */
+    void loadStringTables(string aFilename);
+    
+    /**
+    * Set command line parameters
+    * @param aParms map of command line parameters
+    */
+    void setCmdLineParms(map<string, string> aParms);
+
+    /**
+    * Set base and currentline versions
+    * @param aBaseline baseline version
+    * @param aCurrent current version
+    */
+    void setVersions(string aBaseline, string aCurrent);
+
+    /**
+    * Adds issue to report
+    * @param aIssue issue to report
+    * @return the issue id, -1 if the adding was not successful
+    */
+    int addIssue(ReportIssue* aIssue);
+
+    /**
+    * Adds issue to the report. This node is marked as the cause for the issue
+    * @param aFile header file
+    * @param aFQName fully qualified name of the node
+    * @param aIdentityId  identity= Class, ExportedFunction, Enumeration, etc.
+    * @param aTypeId  what was happened ( something was removed, addded, changed..) 
+    * @param aBCSeverityId how severe the issue was for binary compatibility
+    * @param aSCSeverityId how severe the issue was for source compatibility
+    * @param aIgnoreInformation reason to ignore
+    * @param aLineNumber line number of the issue (0 always)
+    * @param aCompareFileName compare file
+	* @param aCompilationError compilation error reason
+    * @return the issue id, -1 if the addition was not successful
+    */
+    int addIssue(const string& aFile, 
+                const string& aFQName, const TIssueIdentity& aIdentityId, 
+                const TIssueType& aTypeId, const TBCSeverity& aBCSeverityId, 
+                const TSCSeverity& aSCSeverityId, const string& aIgnoreInformation,
+                int aLineNumber, const string& aCompareFileName, const string& aCompilationError, bool alineNoNeeded = true);
+private:
+    /**
+    * Preprocess issue list. Remove removed subclasses and merges similar issues
+    * of the same function
+    */
+	void preprocessIssueList();
+
+    /**
+    * Preprocess issue list.
+    */
+	TIssueIdentity functionMapping(const vector<TIssueIdentity> & ids);
+
+    /**
+    * Merges similar issues of the same function
+    */
+	void mergeFunctionIssues();
+    
+    /**
+    * Removes duplicates from the issue list, merges the different functions
+    */
+	void removeRemovedSubClasses();
+
+    /**
+    * Dump XSL data to file (not used)
+    */
+	void dumpXSLToFile();
+
+    /**
+    * Dump DTD data to file (not used)
+    */
+    void dumpDTDToFile();
+
+    /**
+    * Dump DOM data to file
+    */
+    void dumpDOMToFile();
+
+    /**
+    * Genarate version id nodes
+    */
+    void generateVersionIdNodes();
+
+    /**
+    * Initialise DOM
+    */
+    void initialiseDOM();
+
+    /**
+    * Uninitialize DOM
+    */
+    void uninitialiseDOM();
+
+    /**
+    * Generate issue list
+    */
+    void generateIssueList();
+
+    /**
+    * Generate issues for header
+    */
+    //void generateIssuesForHeader();
+
+    /**
+    * Get given commandline parameter value
+    */
+    string getCmdLineParm(string aParm);
+
+    /**
+    * Create documentation URL string
+    */
+    string createDocumentationUrlString(string element);
+
+    /**
+    * Create node with the given name
+    * @return aName node name
+    * @return pointer to DOMElement
+    */
+    DOMElement* createOpenNode(const char* aName);
+
+    /**
+    * Create node to hold report header data
+    * @return pointer to DOMElement
+    */
+    DOMElement* createHeaderNode();
+
+    /**
+    * Create node to hold list of issues found
+    * @return pointer to DOMElement
+    */
+    DOMElement* createIssueListNode();
+
+    /**
+    * Create issue node
+    * @return pointer to DOMElement
+    */
+    DOMElement* createIssueNode(ReportIssue* aIssue);
+
+    /**
+    * Create headerfile node
+    * @return the pointer to DOM node
+    */
+    DOMElement* createHeaderFileNode();
+
+    /**
+    * Create time stamp node
+    * @return pointer to DOMElement
+    */
+    DOMElement* createTimestampNode();
+
+    /**
+    * Create text node
+    * @param aNodeName name of the node
+    * @param aNodeText text of the node
+    * @return pointer to DOMElement
+    */
+    DOMElement* createSimpleTextNode(const char* aNodeName, const char* aNodeText);
+
+    /**
+    * Create text node
+    * @param aNodeName name of the node
+    * @param aInteger converted to string
+    * @return pointer to DOMElement
+    */
+    DOMElement* createSimpleTextNode(const char* aNodeName, const int aInteger);
+    
+    /**
+    * Create text node
+    * @param aNodeName name of the node
+    * @param aNodeText text of the node
+    * @return pointer to DOMElement
+    */
+    DOMElement* createSimpleTextNode(const char* aNodeName, const XMLCh* aNodeText);
+
+	/**
+    * Create attribute node
+    * @param aNodeName name of the node
+    * @param aNodeAPI attribute value (API name) of the node
+    * @param aNodeCategory attribute value (API category) of the node
+    * @return pointer to DOMElement
+    */
+	DOMElement* createAPIAttributeNode(const char* aNodeName, const char* aNodeAPI,const char* aNodeCategory);
+
+    /**
+    * Create commandline node node. The node consists of commandline parameters.
+    * @return pointer to DOMElement
+    */
+    DOMElement* createCmdLineNode();
+        
+    /**
+    * Create parameter node
+    * @param aKey parameter key
+    * @param aValue parameter key value
+    * @return pointer to DOMElement
+    */
+    DOMElement* createParmNode(const char* aKey, const char* aValue);
+    
+    /**
+    * Create issue node
+    * @return pointer to DOMElement
+    */
+    DOMElement* createIssueNode(ReportIssue& aIssue);
+    
+    /**
+    * Create severity node
+    * @return pointer to DOMElement
+    */
+    //DOMElement* createSeverityNode(const int aId);
+    DOMElement* createSeverityNode();
+    
+    /**
+    * Append children to node
+    * @param aParent parent node
+    * @param aChildren children to append
+    */
+    void appendChildrenToNode(DOMElement* aParent, const vector<DOMElement*>& aChildren);
+
+    // START -- Support for file checksum and comments
+
+    /**
+    * Calculate file CRC.
+    * @param aFilename file to calculate
+    * @param aCrcResult CRC value calculated
+    */    
+    void getFileCRC( const char* aFilename, char* aCrcResult );
+
+    /**
+    * Get issue CRC
+    * @param aIssueIdsVector vector of issue ids
+    * @param aCrcResult calculated CRC
+    */
+	void getIssuesCRC( const vector<string>& aIssueIdsVector, char* aCrcResult );
+    // END   -- Support for file checksum and comments
+
+private:
+    //! output file
+    string          iOutputFile;
+
+    //! output file
+    string          iXSLFile;
+
+    //! output file
+    string          iDTDFile;
+    
+    //! Baseline version name
+    string          iBaselineVersion;
+    
+    //! //! Baseline version name
+    string          iCurrentVersion;
+    
+    //! Embed style sheet or not
+    bool            iEmbedXSL;
+        
+    //! Embed style Document Type Definition or not
+    bool            iEmbedDTD;
+
+    //! The whole XML document
+    XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*    iDOMDocument;
+        
+    //! Root node
+    XERCES_CPP_NAMESPACE_QUALIFIER DOMElement*     iDOMRoot;
+    
+    //! Commandline parameters to Header analyser
+    map<string,string> iParams;
+
+    // START -- Support for file checksum and comments
+    //! Table of CRC values
+    unsigned long*	iCrcTable;
+    // END   -- Support for file checksum and comments
+        
+    // Struct to compare issue pointers 
+    struct compareReportIssuePointers
+	{
+	bool operator()(const ReportIssue * s1,const ReportIssue * s2) const
+		{
+		return (*s1) < (*s2);
+		};
+	};
+
+    //! 
+	typedef map<const ReportIssue*,ReportIssue*,compareReportIssuePointers> issueVector;
+
+    //! Entry to add to issue map
+    typedef pair<string, issueVector*>  issueEntry;
+
+    //! Map holding issues
+    typedef map<string, issueVector*>   issueMap;
+
+    //! Iterator for traversing issue map
+    typedef issueMap::iterator          issueMapIterator;
+
+    //! Map holding issues
+    issueMap                            iIssueMap;
+
+     //! ID of the issue
+    int iIssueId;
+};
+#endif