Open
Graph Drawing
Framework

 v.2012.05
 

DinoUmlToGraphConverter.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 
00007  ***************************************************************/
00008  
00045 #ifdef _MSC_VER
00046 #pragma once
00047 #endif
00048 
00049 #ifndef OGDF_DINO_UML_TO_GRAPH_CONVERTER_H
00050 #define OGDF_DINO_UML_TO_GRAPH_CONVERTER_H
00051 
00052 #include <ogdf/fileformats/DinoXmlParser.h>
00053 #include <ogdf/fileformats/DinoUmlModelGraph.h>
00054 #include <ogdf/fileformats/DinoUmlDiagramGraph.h>
00055 #include <ogdf/basic/UMLGraph.h>
00056 
00057 namespace ogdf {
00058 
00059     //---------------------------------------------------------
00060     // D i n o U m l T o G r a p h C o n v e r t e r
00061     //---------------------------------------------------------
00080     class OGDF_EXPORT DinoUmlToGraphConverter {
00081 
00082     private:
00083 
00085         DinoXmlParser *m_xmlParser;
00086 
00088         DinoUmlModelGraph *m_modelGraph;
00089 
00093         SList<DinoUmlDiagramGraph*> m_diagramGraphs;
00094 
00099         SList<UMLGraph*> m_diagramGraphsInUMLGraphFormat;
00100 
00102         enum PredefinedInfoIndex { 
00103             xmi = 0, 
00104             xmiContent,
00105             xmiId,
00106             umlModel,
00107             umlNamespaceOwnedElement,
00108             umlClass,
00109             name,
00110             umlGeneralization,
00111             child,
00112             parent,
00113             umlAssociation,
00114             umlAssociationConnection,
00115             umlAssociationEnd,
00116             type,
00117             umlDiagram,
00118             rootUmlDiagramElement,
00119             umlDiagramElement,
00120             geometry,
00121             subject,
00122             umlPackage,
00123             umlInterface,
00124             umlDependency,
00125             client,
00126             supplier,
00127             diagramType,
00128             classDiagram,
00129             moduleDiagram,
00130             
00131             nextPredefinedInfoIndex 
00132         };
00133 
00144         Hashing<int,NodeElement*> m_idToNode;
00145 
00149         Hashing<int,EdgeElement*> m_idToEdge;
00150 
00157         ofstream *m_logFile;
00158 
00159     public:
00160 
00174         DinoUmlToGraphConverter(const char *fileName);
00175 
00182         ~DinoUmlToGraphConverter();
00183 
00187         const DinoUmlModelGraph &getModelGraph() const { 
00188             return *m_modelGraph; 
00189         }
00190 
00194         const SList<DinoUmlDiagramGraph*> & getDiagramGraphs () const {
00195             return m_diagramGraphs;
00196         }
00197 
00201         const SList<UMLGraph*> & getDiagramGraphsInUMLGraphFormat () const {
00202             return m_diagramGraphsInUMLGraphFormat;
00203         }
00204 
00208         void printDiagramsInUMLGraphFormat(ofstream &os);
00209 
00213         void printIdToNodeMappingTable(ofstream &os);
00214 
00215     private:
00216 
00221         void initializePredefinedInfoIndices();
00222 
00230         bool createModelGraph(DinoUmlModelGraph &modelGraph);
00231 
00244         bool traversePackagesAndInsertClassifierNodes(const XmlTagObject &currentRootTag, 
00245                                                       String currentPackageName,
00246                                                       DinoUmlModelGraph &modelGraph);
00247 
00260         bool insertSpecificClassifierNodes(const XmlTagObject &currentRootTag,
00261                                            String currentPackageName,
00262                                            int desiredClassifier,
00263                                            DinoUmlModelGraph &modelGraph);
00264 
00277         bool traversePackagesAndInsertAssociationEdges(const XmlTagObject &currentRootTag, 
00278                                                        DinoUmlModelGraph &modelGraph);
00279     
00292         bool traversePackagesAndInsertGeneralizationEdges(const XmlTagObject &currentRootTag, 
00293                                                           DinoUmlModelGraph &modelGraph);
00294         
00295 
00302         bool insertDependencyEdges(const XmlTagObject &currentRootTag, 
00303                                    DinoUmlModelGraph &modelGraph);
00304 
00312         bool createDiagramGraphs();
00313 
00320         bool createDiagramGraphsInUMLGraphFormat(SList<UMLGraph*> &diagramGraphsInUMLGraphFormat);
00321 
00322         
00323     }; // class DinoUmlToGraphConverter
00324 
00325 
00326 } // end namespace ogdf
00327 
00328 #endif