Skip to content

Commit e34e45b

Browse files
committed
feat(bulk-model-sync-lib): add logging for import size
1 parent d9b5a15 commit e34e45b

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

bulk-model-sync-lib/src/commonMain/kotlin/org/modelix/model/sync/bulk/ModelImporter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class ModelImporter(private val root: INode) {
5353
*/
5454
@JvmName("importData")
5555
fun import(data: ModelData) {
56+
logImportSize(data.root, logger)
5657
logger.info { "Building indices for import..." }
5758
originalIdToExisting.clear()
5859
postponedReferences.clear()

bulk-model-sync-lib/src/commonMain/kotlin/org/modelix/model/sync/bulk/Util.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,49 @@
1616

1717
package org.modelix.model.sync.bulk
1818

19+
import mu.KLogger
20+
import org.modelix.model.api.BuiltinLanguages
21+
import org.modelix.model.api.SimpleConcept
1922
import org.modelix.model.data.ModelData
2023
import org.modelix.model.data.NodeData
2124

2225
fun mergeModelData(vararg models: ModelData): ModelData {
2326
return ModelData(root = NodeData(children = models.map { it.root }))
2427
}
28+
29+
internal fun logImportSize(nodeData: NodeData, logger: KLogger) {
30+
logger.debug { "Number of modules: ${countMpsModules(nodeData)}" }
31+
logger.debug { "Number of models: ${countMpsModels(nodeData)}" }
32+
logger.debug { "Number of concepts: ${countConcepts(nodeData)}" }
33+
logger.debug { "Number of properties: ${countProperties(nodeData)}" }
34+
logger.debug { "Number of references: ${countReferences(nodeData)}" }
35+
}
36+
37+
private fun countProperties(data: NodeData): Int =
38+
data.properties.size + data.children.sumOf { countProperties(it) }
39+
40+
private fun countReferences(data: NodeData): Int =
41+
data.references.size + data.children.sumOf { countReferences(it) }
42+
43+
private fun countConcepts(data: NodeData): Int {
44+
val set = mutableSetOf<String>()
45+
countConceptsRec(data, set)
46+
return set.size
47+
}
48+
49+
private fun countConceptsRec(data: NodeData, set: MutableSet<String>) {
50+
data.concept?.let { set.add(it) }
51+
data.children.forEach { countConceptsRec(it, set) }
52+
}
53+
54+
private fun countMpsModels(data: NodeData) =
55+
countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Model)
56+
57+
private fun countMpsModules(data: NodeData) =
58+
countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Module)
59+
60+
private fun countSpecificConcept(data: NodeData, concept: SimpleConcept): Int {
61+
var count = if (data.concept == concept.getUID()) 1 else 0
62+
count += data.children.sumOf { countSpecificConcept(it, concept) }
63+
return count
64+
}

0 commit comments

Comments
 (0)