Skip to content

Commit 3f8f5c7

Browse files
committed
Write namespaces and classes from famix in db
1 parent a00cb9e commit 3f8f5c7

1 file changed

Lines changed: 44 additions & 1 deletion

File tree

generator/org.svis.generator/src/org/svis/generator/famix/Famix2Famix.xtend

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)