@@ -44,6 +44,10 @@ import org.neo4j.graphdb.GraphDatabaseService
4444import org.svis.lib.database.Database
4545import org.svis.lib.database.DBConnector
4646import org.neo4j.graphdb.Node
47+ import org.neo4j.graphdb.Label
48+ import org.neo4j.graphdb.Transaction
49+ import org.neo4j.graphdb.traversal.Evaluators
50+ import org.neo4j.graphdb.Direction
4751
4852class Famix2Famix extends WorkflowComponentWithConfig {
4953 var GraphDatabaseService graph
@@ -64,35 +68,56 @@ class Famix2Famix extends WorkflowComponentWithConfig {
6468 log. info(" Famix2Famix has started." )
6569
6670 if (fromDB) {
71+
6772 val famixRoot = famixFactory. createRoot
6873 val famixDocument = famixFactory. createDocument
6974 famixRoot. document = famixDocument
7075 graph = Database :: getInstance(" ../databases/graph.db" )
7176 dbConnector = new DBConnector (graph)
72- var result = graph. execute(' ' '
73- MATCH (s:Package)
74- RETURN s
75- ' ' ' )
76- result. forEach [ row |
77- println(row)
78- val tx = graph. beginTx
79- val node = row. get(" s" ) as Node
80- try {
77+
78+ val ts = graph. beginTx
79+ try {
80+ val nodes = graph. findNodes(Label . label(" Package" ))
81+ val namespaces = newHashMap
82+ val namespaceNodes = newArrayList
83+ while (nodes. hasNext) {
84+ val node = nodes. next
8185 val name = node. getProperty(" name" ) as String
8286 val fqn = node. getProperty(" fqn" ) as String
8387 val id = node. getId. toString
8488 val namespace = famixFactory. createFAMIXNamespace
8589 namespace. value = name
8690 namespace. fqn = fqn
8791 namespace. name = id
92+ namespace. id = id
93+ namespaces. put(node. id, namespace)
94+ namespaceNodes. add(node)
8895 famixDocument. elements + = namespace
89- tx. success
90- } catch (Exception e) {
91- print(e)
92- } finally {
93- tx. close
9496 }
95- ]
97+ for (node : namespaceNodes) {
98+ println(node. getProperty(" name" ))
99+ val td = graph. traversalDescription. breadthFirst. relationships(Rels . CONTAINS , Direction . INCOMING ).
100+ 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
113+ }
114+ }
115+ ts. success
116+ } catch (Exception e) {
117+ print(e)
118+ } finally {
119+ ts. close
120+ }
96121 ctx. set(" famix" , famixRoot)
97122 val resource = new ResourceImpl ()
98123 resource. contents + = famixRoot
0 commit comments