@@ -16,9 +16,10 @@ import kotlin.time.Duration.Companion.seconds
16
16
17
17
private const val TEMP_ID_PREFIX = " tmp-"
18
18
19
- class LightModelClient (
19
+ class LightModelClient internal constructor (
20
20
val connection : IConnection ,
21
21
val transactionManager : ITransactionManager ,
22
+ val autoFilterNonLoadedNodes : Boolean ,
22
23
val debugName : String = " "
23
24
) {
24
25
@@ -331,11 +332,17 @@ class LightModelClient(
331
332
get() = requiresRead { getData().parent?.let { getNodeAdapter(it) } }
332
333
333
334
override fun getChildren (role : String? ): List <NodeAdapter > {
334
- return requiresRead { getData().children[role]?.map { getNodeAdapter(it) } ? : emptyList() }
335
+ return requiresRead {
336
+ val children = getData().children[role]?.map { getNodeAdapter(it) } ? : emptyList()
337
+ if (autoFilterNonLoadedNodes) children.filterLoaded() else children
338
+ }
335
339
}
336
340
337
341
override val allChildren: List <NodeAdapter >
338
- get() = requiresRead { getData().children.flatMap { it.value }.map { getNodeAdapter(it) } }
342
+ get() = requiresRead {
343
+ val children = getData().children.flatMap { it.value }.map { getNodeAdapter(it) }
344
+ if (autoFilterNonLoadedNodes) children.filterLoaded() else children
345
+ }
339
346
340
347
override fun getConceptReference (): IConceptReference ? {
341
348
return requiresRead { getData().concept?.let { ConceptReference (it) } }
@@ -459,6 +466,7 @@ class LightModelClient(
459
466
460
467
override fun getReferenceTarget (role : String ): NodeAdapter ? {
461
468
return getReferenceTargetRef(role)?.let { getNode(it.nodeId) }
469
+ ?.takeIf { ! autoFilterNonLoadedNodes || it.isLoaded() }
462
470
}
463
471
464
472
override fun getReferenceTargetRef (role : String ): LightClientNodeReference ? {
@@ -692,6 +700,7 @@ abstract class LightModelClientBuilder {
692
700
private var httpEngineFactory: HttpClientEngineFactory <* >? = null
693
701
private var debugName: String = " "
694
702
private var transactionManager: ITransactionManager = ReadWriteLockTransactionManager ()
703
+ private var autoFilterNonLoadedNodes: Boolean = false
695
704
696
705
protected abstract fun getDefaultEngineFactory (): HttpClientEngineFactory <* >
697
706
@@ -708,9 +717,14 @@ abstract class LightModelClientBuilder {
708
717
))
709
718
),
710
719
transactionManager,
711
- debugName
720
+ autoFilterNonLoadedNodes = autoFilterNonLoadedNodes,
721
+ debugName = debugName
712
722
)
713
723
}
724
+ fun autoFilterNonLoadedNodes (value : Boolean = true): LightModelClientBuilder {
725
+ autoFilterNonLoadedNodes = value
726
+ return this
727
+ }
714
728
fun autoTransactions (): LightModelClientBuilder {
715
729
transactionManager = AutoTransactions (transactionManager)
716
730
return this
@@ -796,5 +810,5 @@ fun NodeData.asUpdateData(): NodeUpdateData {
796
810
}
797
811
798
812
fun INode.isLoaded () = isValid
799
- fun Iterable< INode>.filterLoaded () = filter { it.isLoaded() }
800
- fun Sequence< INode>.filterLoaded () = filter { it.isLoaded() }
813
+ fun < T : INode > Iterable<T >.filterLoaded () = filter { it.isLoaded() }
814
+ fun < T : INode > Sequence<T >.filterLoaded () = filter { it.isLoaded() }
0 commit comments