@@ -45,7 +45,6 @@ import org.svis.lib.database.Database
4545import org.svis.lib.database.DBConnector
4646import org.neo4j.graphdb.Node
4747import org.neo4j.graphdb.Label
48- import org.neo4j.graphdb.Transaction
4948import org.neo4j.graphdb.traversal.Evaluators
5049import org.neo4j.graphdb.Direction
5150
@@ -68,50 +67,37 @@ class Famix2Famix extends WorkflowComponentWithConfig {
6867 log. info(" Famix2Famix has started." )
6968
7069 if (fromDB) {
71-
7270 val famixRoot = famixFactory. createRoot
7371 val famixDocument = famixFactory. createDocument
7472 famixRoot. document = famixDocument
7573 graph = Database :: getInstance(" ../databases/graph.db" )
7674 dbConnector = new DBConnector (graph)
77-
75+
76+ // Create Namespaces
7877 val ts = graph. beginTx
7978 try {
80- val nodes = graph. findNodes(Label . label(" Package" ))
8179 val namespaces = newHashMap
82- val namespaceNodes = newArrayList
80+ val parentNamespaces = newHashMap
81+ val packageLabel = Label . label(" Package" )
82+ val nodes = graph. findNodes(packageLabel)
8383 while (nodes. hasNext) {
8484 val node = nodes. next
85- val name = node. getProperty(" name" ) as String
86- val fqn = node. getProperty(" fqn" ) as String
87- val id = node. getId. toString
88- val namespace = famixFactory. createFAMIXNamespace
89- namespace. value = name
90- namespace. fqn = fqn
91- namespace. name = id
92- namespace. id = id
93- namespaces. put(node. id, namespace)
94- namespaceNodes. add(node)
85+ var namespace = createNamespace(node)
9586 famixDocument. elements + = namespace
96- }
97- for (node : namespaceNodes) {
98- println(node. getProperty(" name" ))
87+ namespaces. put(node. id, namespace)
9988 val td = graph. traversalDescription. breadthFirst. relationships(Rels . CONTAINS , Direction . INCOMING ).
10089 evaluator(Evaluators . toDepth(1 ))
101- var parentNodes = td. traverse(node). nodes
102- val parentNamespaces = newArrayList
103- for (pNode : parentNodes) {
104- val id = pNode. id
105- if (namespaces. containsKey(id) && id != node. id)
106- parentNamespaces. add(pNode)
107- }
108- val ns = namespaces. get(node. id)
109- for (pNode : parentNamespaces) {
110- var ref = famixFactory. createIntegerReference
111- ref. ref = namespaces. get(pNode. id)
112- ns. parentScope = ref
90+ for (parentNode : td. traverse(node). nodes) {
91+ if (parentNode. id != node. id && parentNode. hasLabel(packageLabel)) {
92+ parentNamespaces. put(node. id,parentNode. id)
93+ }
11394 }
11495 }
96+ parentNamespaces. forEach[childId , parentId |
97+ var ref = famixFactory. createIntegerReference
98+ ref. ref = namespaces. get(parentId)
99+ namespaces. get(childId). parentScope = ref
100+ ]
115101 ts. success
116102 } catch (Exception e) {
117103 print(e)
@@ -612,4 +598,16 @@ class Famix2Famix extends WorkflowComponentWithConfig {
612598 enumValues. removeAll(duplicateEnumValues)
613599 structures. removeAll(duplicateAnnotationTypes)
614600 }
601+
602+ def createNamespace (Node node ) {
603+ val namespace = famixFactory. createFAMIXNamespace
604+ val name = node. getProperty(" name" ) as String
605+ val fqn = node. getProperty(" fqn" ) as String
606+ val id = node. getId. toString
607+ namespace. value = name
608+ namespace. fqn = fqn
609+ namespace. name = id
610+ namespace. id = id
611+ return namespace
612+ }
615613}
0 commit comments