Skip to content

Commit 1a53205

Browse files
committed
fix(bulk-model-sync-lib): add logging for ModelImporter
1 parent 2c4cd02 commit 1a53205

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

bulk-model-sync-lib/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ kotlin {
2222
dependencies {
2323
implementation(project(":model-api"))
2424
implementation(libs.kotlin.serialization.json)
25+
implementation(libs.kotlin.logging)
2526
}
2627
}
2728

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

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

19+
import mu.KotlinLogging
1920
import org.modelix.model.api.ConceptReference
2021
import org.modelix.model.api.INode
2122
import org.modelix.model.api.INodeReference
@@ -41,6 +42,9 @@ class ModelImporter(private val root: INode) {
4142
private val originalIdToExisting: MutableMap<String, INode> = mutableMapOf()
4243
private val postponedReferences = ArrayList<() -> Unit>()
4344
private val nodesToRemove = HashSet<INode>()
45+
private var numExpectedNodes = 0
46+
private var currentNodeProgress = 0
47+
private val logger = KotlinLogging.logger {}
4448

4549
/**
4650
* Incrementally updates this importers root based on the provided [ModelData] specification.
@@ -49,17 +53,34 @@ class ModelImporter(private val root: INode) {
4953
*/
5054
@JvmName("importData")
5155
fun import(data: ModelData) {
56+
logger.info { "Building indices for import..." }
5257
originalIdToExisting.clear()
5358
postponedReferences.clear()
5459
nodesToRemove.clear()
60+
numExpectedNodes = countExpectedNodes(data.root)
61+
currentNodeProgress = 0
5562
buildExistingIndex(root)
63+
64+
logger.info { "Importing nodes..." }
5665
data.root.originalId()?.let { originalIdToExisting[it] = root }
5766
syncNode(root, data.root)
67+
68+
logger.info { "Synchronizing references..." }
5869
postponedReferences.forEach { it.invoke() }
70+
71+
logger.info { "Removing extra nodes..." }
5972
nodesToRemove.forEach { it.remove() }
73+
74+
logger.info { "Synchronization finished." }
6075
}
6176

77+
private fun countExpectedNodes(data: NodeData): Int =
78+
1 + data.children.sumOf { countExpectedNodes(it) }
79+
6280
private fun syncNode(node: INode, data: NodeData) {
81+
currentNodeProgress += 1
82+
// print instead of log, so that the progress line can be overwritten by the carriage return
83+
print("\r($currentNodeProgress / $numExpectedNodes) Synchronizing nodes... ")
6384
syncProperties(node, data)
6485
syncChildren(node, data)
6586
syncReferences(node, data)

0 commit comments

Comments
 (0)