Skip to content

Commit 5e4e570

Browse files
committed
fix(model-sync-lib): extended ImportStats
1 parent 8a09143 commit 5e4e570

File tree

2 files changed

+71
-19
lines changed

2 files changed

+71
-19
lines changed
Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
11
package org.modelix.model.sync
22

33
class ImportStats {
4-
val additions: List<String> = mutableListOf()
5-
val deletions: List<String> = mutableListOf()
6-
val moves: List<String> = mutableListOf()
4+
val additions: List<Addition> = mutableListOf()
5+
val deletions: List<Deletion> = mutableListOf()
6+
val moves: List<Move> = mutableListOf()
77
val propertyChanges: List<PropertyChange> = mutableListOf()
88
val referenceChanges: List<ReferenceChange> = mutableListOf()
99

10-
fun addAddition(nodeId: String) {
11-
(additions as MutableList).add(nodeId)
10+
fun addAddition(nodeId: String?, parentId: String?, role: String?, index: Int) {
11+
(additions as MutableList).add(Addition(nodeId, parentId, role, index))
1212
}
1313

14-
fun addDeletion(nodeId: String) {
15-
(deletions as MutableList).add(nodeId)
14+
fun addDeletion(nodeId: String?, parentId: String?, role: String?, descendantIds: List<String>) {
15+
(deletions as MutableList).add(Deletion(nodeId, parentId, role, descendantIds))
1616
}
1717

18-
fun addMove(nodeId: String) {
19-
(moves as MutableList).add(nodeId)
18+
fun addMove(
19+
nodeId: String?,
20+
oldParentId: String?,
21+
oldRole: String?,
22+
oldIndex: Int,
23+
newParentId: String?,
24+
newRole: String?,
25+
newIndex: Int
26+
) {
27+
(moves as MutableList).add(
28+
Move(nodeId, oldParentId, oldRole, oldIndex, newParentId, newRole, newIndex))
2029
}
2130

2231
fun addPropertyChange(nodeId: String, property: String) {
@@ -27,8 +36,40 @@ class ImportStats {
2736
(referenceChanges as MutableList).add(ReferenceChange(nodeId, reference))
2837
}
2938

39+
fun getTotal() : Int = additions.size + deletions.size + moves.size + propertyChanges.size + referenceChanges.size
40+
41+
}
42+
43+
interface NodeChange {
44+
val nodeId: String?
45+
val parentId: String?
46+
val role: String?
3047
}
3148

49+
data class Addition(
50+
override val nodeId: String?,
51+
override val parentId: String?,
52+
override val role: String?,
53+
val index: Int
54+
) : NodeChange
55+
56+
data class Deletion(
57+
override val nodeId: String?,
58+
override val parentId: String?,
59+
override val role: String?,
60+
val descendantIds: List<String>
61+
) : NodeChange
62+
63+
data class Move(
64+
override val nodeId: String?,
65+
override val parentId: String?,
66+
override val role: String?,
67+
val oldIndex: Int,
68+
val newParentId: String?,
69+
val newRole: String?,
70+
val newIndex: Int
71+
) : NodeChange
72+
3273
data class PropertyChange(val nodeId: String, val property: String)
3374
data class ReferenceChange(val nodeId: String, val reference: String)
3475

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

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.modelix.model.sync
22

3-
import org.modelix.model.api.ConceptReference
4-
import org.modelix.model.api.INode
5-
import org.modelix.model.api.INodeReference
3+
import org.modelix.model.api.*
64
import org.modelix.model.data.ModelData
75
import org.modelix.model.data.NodeData
86
import java.io.File
@@ -164,37 +162,50 @@ class ModelImporter(private val root: INode, val stats: ImportStats? = null) {
164162
val createdNode = addNewChild(spec.role, index, concept)
165163
createdNode.setPropertyValue(NodeData.idPropertyKey, spec.originalId())
166164
if (this@ModelImporter.stats != null) {
167-
createdNode.originalId()?.let { stats.addAddition(it) }
165+
stats.addAddition(
166+
createdNode.originalId(),
167+
this.originalId(),
168+
createdNode.roleInParent,
169+
index
170+
)
168171
}
169172
return createdNode
170173
}
171174

172175
private fun INode.moveChildWithStats(role: String?, index: Int, child: INode) {
173176
if (this@ModelImporter.stats != null) {
174-
child.originalId()?.let { stats.addMove(it) }
177+
stats.addMove(
178+
child.originalId(),
179+
child.parent?.originalId(),
180+
child.roleInParent,
181+
child.index(),
182+
this.originalId(),
183+
role,
184+
index
185+
)
175186
}
176-
return moveChild(role, index, child)
187+
moveChild(role, index, child)
177188
}
178189

179190
private fun INode.removeChildWithStats(child: INode) {
180191
if (this@ModelImporter.stats != null) {
181-
child.originalId()?.let { stats.addDeletion(it) }
192+
stats.addDeletion(child.originalId(), parent?.originalId(), child.roleInParent, child.getDescendants(false).mapNotNull { it.originalId() }.toList())
182193
}
183-
return removeChild(child)
194+
removeChild(child)
184195
}
185196

186197
private fun INode.setPropertyValueWithStats(role: String, value: String?) {
187198
if (this@ModelImporter.stats != null) {
188199
this.originalId()?.let { stats.addPropertyChange(it, role) }
189200
}
190-
return setPropertyValue(role, value)
201+
setPropertyValue(role, value)
191202
}
192203

193204
private fun INode.setReferenceTargetWithStats(role: String, target: INodeReference?) {
194205
if (this@ModelImporter.stats != null) {
195206
this.originalId()?.let { stats.addReferenceChange(it, role) }
196207
}
197-
return setReferenceTarget(role, target)
208+
setReferenceTarget(role, target)
198209
}
199210

200211
}

0 commit comments

Comments
 (0)