@@ -67,7 +67,8 @@ class Famix2Famix extends WorkflowComponentWithConfig {
6767
6868 override protected invokeInternal (WorkflowContext ctx , ProgressMonitor monitor , Issues issues ) {
6969 log. info(" Famix2Famix has started." )
70-
70+ // FAMIX to DB
71+ // DB to FAMIX
7172 if (FAMIXSettings . FAMIX_PARSER == = FamixParser :: JQA_BYTECODE ) {
7273 val famixRoot = famixFactory. createRoot
7374 val famixDocument = famixFactory. createDocument
@@ -386,6 +387,20 @@ class Famix2Famix extends WorkflowComponentWithConfig {
386387 attributes. clear
387388 enumValues. clear
388389 structures. clear
390+ graph = Database :: getInstance(" ../databases/famix_graph.db" )
391+ val document = famixRoot. document
392+ val rootPackages = document. elements. filter(FAMIXNamespace ). filter[parentScope == = null ]
393+ subPackages + = document. elements. filter(FAMIXNamespace ). filter[parentScope !== null ]
394+ allStructures + = document. elements. filter(FAMIXStructure )
395+ var tx = graph. beginTx
396+ try {
397+ rootPackages. forEach [ root |
398+ toDB(root, null )
399+ ]
400+ tx. success
401+ } finally {
402+ tx. close
403+ }
389404 return famixRoot
390405 }
391406
@@ -857,4 +872,32 @@ class Famix2Famix extends WorkflowComponentWithConfig {
857872 }
858873 }
859874 }
875+
876+ def Node toDB (FAMIXNamespace namespace , Node parent ) {
877+ val node = graph. createNode(DBLabel . PACKAGE )
878+ node. setProperty(" name" , namespace. value)
879+ node. setProperty(" fqn" , namespace. fqn)
880+ if (parent !== null ) {
881+ parent. createRelationshipTo(node, Rels . CONTAINS )
882+ }
883+ allStructures. filter[container. ref. equals(namespace)]. forEach[toDB(node)]
884+ subPackages. filter[parentScope. ref. equals(namespace)]. forEach[toDB(node)]
885+ return node
886+ }
887+
888+ def Node toDB (FAMIXStructure structure , Node parent ) {
889+ val node = graph. createNode
890+ switch structure {
891+ FAMIXClass : {
892+ node. addLabel(DBLabel . CLASS )
893+ node. setProperty(" fqn" , structure. fqn)
894+ // md5 von JQAssisstant?
895+ node. setProperty(" md5" , structure. id)
896+ }
897+ }
898+ node. setProperty(" name" , structure. value)
899+ parent. createRelationshipTo(node, Rels . CONTAINS )
900+ structures. filter[container. ref. equals(structure)]. forEach[toDB(node)]
901+ return node
902+ }
860903}
0 commit comments