@@ -420,84 +420,82 @@ class CLTree : ITree, IBulkTree {
420
420
fun visitChanges (oldVersion : ITree , visitor : ITreeChangeVisitor , bulkQuery : IBulkQuery ) {
421
421
require(oldVersion is CLTree ) { " Diff is only supported between two instances of CLTree" }
422
422
if (data.idToHash == oldVersion.data.idToHash) return
423
- NonBulkQuery .runWithDisabled {
424
- val changesOnly = visitor !is ITreeChangeVisitorEx
425
- nodesMap!! .visitChanges(
426
- oldVersion.nodesMap,
427
- object : CPHamtNode .IChangeVisitor {
428
- override fun visitChangesOnly (): Boolean {
429
- return changesOnly
430
- }
423
+ val changesOnly = visitor !is ITreeChangeVisitorEx
424
+ nodesMap!! .visitChanges(
425
+ oldVersion.nodesMap,
426
+ object : CPHamtNode .IChangeVisitor {
427
+ override fun visitChangesOnly (): Boolean {
428
+ return changesOnly
429
+ }
431
430
432
- override fun entryAdded (key : Long , value : KVEntryReference <CPNode >? ) {
433
- if (visitor is ITreeChangeVisitorEx ) {
434
- createElement(value, bulkQuery).map { element ->
435
- visitor.nodeAdded(element!! .id)
436
- }
431
+ override fun entryAdded (key : Long , value : KVEntryReference <CPNode >? ) {
432
+ if (visitor is ITreeChangeVisitorEx ) {
433
+ createElement(value, bulkQuery).map { element ->
434
+ visitor.nodeAdded(element!! .id)
437
435
}
438
436
}
437
+ }
439
438
440
- override fun entryRemoved (key : Long , value : KVEntryReference <CPNode >? ) {
441
- if (visitor is ITreeChangeVisitorEx ) {
442
- oldVersion.createElement(value, bulkQuery).map { element ->
443
- visitor.nodeRemoved(element!! .id)
444
- }
439
+ override fun entryRemoved (key : Long , value : KVEntryReference <CPNode >? ) {
440
+ if (visitor is ITreeChangeVisitorEx ) {
441
+ oldVersion.createElement(value, bulkQuery).map { element ->
442
+ visitor.nodeRemoved(element!! .id)
445
443
}
446
444
}
445
+ }
447
446
448
- override fun entryChanged (key : Long , oldValue : KVEntryReference <CPNode >? , newValue : KVEntryReference <CPNode >? ) {
449
- oldVersion.createElement(oldValue, bulkQuery).map { oldElement ->
450
- createElement(newValue, bulkQuery).map { newElement ->
451
- if (oldElement!! ::class != newElement!! ::class ) {
452
- throw RuntimeException (" Unsupported type change of node " + key + " from " + oldElement::class .simpleName + " to " + newElement::class .simpleName)
453
- }
454
- if (oldElement.parentId != newElement.parentId || oldElement.roleInParent != newElement.roleInParent) {
455
- visitor.containmentChanged(key)
456
- }
457
- oldElement.propertyRoles.asSequence()
458
- .plus(newElement.propertyRoles.asSequence())
459
- .distinct()
460
- .forEach { role: String ->
461
- if (oldElement.getPropertyValue(role) != newElement.getPropertyValue(role)) {
462
- visitor.propertyChanged(newElement.id, role)
463
- }
447
+ override fun entryChanged (key : Long , oldValue : KVEntryReference <CPNode >? , newValue : KVEntryReference <CPNode >? ) {
448
+ oldVersion.createElement(oldValue, bulkQuery).map { oldElement ->
449
+ createElement(newValue, bulkQuery).map { newElement ->
450
+ if (oldElement!! ::class != newElement!! ::class ) {
451
+ throw RuntimeException (" Unsupported type change of node " + key + " from " + oldElement::class .simpleName + " to " + newElement::class .simpleName)
452
+ }
453
+ if (oldElement.parentId != newElement.parentId || oldElement.roleInParent != newElement.roleInParent) {
454
+ visitor.containmentChanged(key)
455
+ }
456
+ oldElement.propertyRoles.asSequence()
457
+ .plus(newElement.propertyRoles.asSequence())
458
+ .distinct()
459
+ .forEach { role: String ->
460
+ if (oldElement.getPropertyValue(role) != newElement.getPropertyValue(role)) {
461
+ visitor.propertyChanged(newElement.id, role)
464
462
}
465
- oldElement.referenceRoles.asSequence()
466
- .plus(newElement. referenceRoles.asSequence() )
467
- .distinct( )
468
- .forEach { role : String ->
469
- if (oldElement.getReferenceTarget(role) != newElement.getReferenceTarget( role)) {
470
- visitor.referenceChanged( newElement.id, role)
471
- }
463
+ }
464
+ oldElement. referenceRoles.asSequence()
465
+ .plus(newElement.referenceRoles.asSequence() )
466
+ .distinct()
467
+ .forEach { role: String ->
468
+ if (oldElement.getReferenceTarget(role) != newElement.getReferenceTarget( role)) {
469
+ visitor.referenceChanged(newElement.id, role)
472
470
}
471
+ }
473
472
474
- bulkQuery.map(listOf (oldVersion.getChildren(oldElement, bulkQuery), getChildren(newElement, bulkQuery))) { it }.onSuccess { childrenLists ->
475
- val (oldChildrenList, newChildrenList) = childrenLists
476
- val oldChildren: MutableMap <String ?, MutableList <CPNode >> = HashMap ()
477
- val newChildren: MutableMap <String ?, MutableList <CPNode >> = HashMap ()
478
- oldChildrenList.forEach { oldChildren.getOrPut(it.roleInParent, { ArrayList () }).add(it) }
479
- newChildrenList.forEach { newChildren.getOrPut(it.roleInParent, { ArrayList () }).add(it) }
480
-
481
- val roles: MutableSet <String ?> = HashSet ()
482
- roles.addAll(oldChildren.keys)
483
- roles.addAll(newChildren.keys)
484
- for (role in roles) {
485
- val oldChildrenInRole = oldChildren[role]
486
- val newChildrenInRole = newChildren[role]
487
- val oldValues = oldChildrenInRole?.map { it.id }
488
- val newValues = newChildrenInRole?.map { it.id }
489
- if (oldValues != newValues) {
490
- visitor.childrenChanged(newElement.id, role)
491
- }
473
+ bulkQuery.map(listOf (oldVersion.getChildren(oldElement, bulkQuery), getChildren(newElement, bulkQuery))) { it }.onSuccess { childrenLists ->
474
+ val (oldChildrenList, newChildrenList) = childrenLists
475
+ val oldChildren: MutableMap <String ?, MutableList <CPNode >> = HashMap ()
476
+ val newChildren: MutableMap <String ?, MutableList <CPNode >> = HashMap ()
477
+ oldChildrenList.forEach { oldChildren.getOrPut(it.roleInParent, { ArrayList () }).add(it) }
478
+ newChildrenList.forEach { newChildren.getOrPut(it.roleInParent, { ArrayList () }).add(it) }
479
+
480
+ val roles: MutableSet <String ?> = HashSet ()
481
+ roles.addAll(oldChildren.keys)
482
+ roles.addAll(newChildren.keys)
483
+ for (role in roles) {
484
+ val oldChildrenInRole = oldChildren[role]
485
+ val newChildrenInRole = newChildren[role]
486
+ val oldValues = oldChildrenInRole?.map { it.id }
487
+ val newValues = newChildrenInRole?.map { it.id }
488
+ if (oldValues != newValues) {
489
+ visitor.childrenChanged(newElement.id, role)
492
490
}
493
491
}
494
492
}
495
493
}
496
494
}
497
- },
498
- bulkQuery ,
499
- )
500
- }
495
+ }
496
+ } ,
497
+ bulkQuery,
498
+ )
501
499
}
502
500
503
501
protected fun deleteElements (node : CPNode , idToHash : CPHamtNode ): CPHamtNode ? {
0 commit comments