File tree Expand file tree Collapse file tree 3 files changed +26
-0
lines changed
model-api/src/commonMain/kotlin/org/modelix/model/api Expand file tree Collapse file tree 3 files changed +26
-0
lines changed Original file line number Diff line number Diff line change @@ -30,6 +30,16 @@ interface IChildLink : ILink {
30
30
companion object {
31
31
fun fromName (name : String ): IChildLink = ChildLinkFromName (name)
32
32
}
33
+
34
+ /* *
35
+ * Whether children with this role are returned in a meaningful order and whether they are allowed to be reordered.
36
+ *
37
+ * Children returned for an unordered role might be returned in a different order in subsequent request.
38
+ * If a child role is not ordered, implementations of [[INode.moveChild]] are allowed to fail
39
+ * when instructed to move a node in between existing nodes.
40
+ */
41
+ val isOrdered
42
+ get() = true
33
43
}
34
44
35
45
data class ChildLinkFromName (override val name : String ) : LinkFromName(), IChildLink {
Original file line number Diff line number Diff line change @@ -380,6 +380,21 @@ fun INode.tryResolveProperty(role: String): IProperty? {
380
380
? : allLinks.find { it.getSimpleName() == role }
381
381
? : allLinks.find { it.getUID() == role }
382
382
}
383
+
384
+ /* *
385
+ * Resolves whether the child link is ordered or not.
386
+ *
387
+ * Assume children to be ordered by default.
388
+ * Unordered children are the special case that can be declared by setting [[IChildLink.isOrdered]] to `false`.
389
+ */
390
+ fun INode.isChildRoleOrdered (role : String? ): Boolean {
391
+ return if (role == null ) {
392
+ true
393
+ } else {
394
+ this .tryResolveChildLink(role)?.isOrdered ? : true
395
+ }
396
+ }
397
+
383
398
fun INode.resolvePropertyOrFallback (role : String ): IProperty {
384
399
return tryResolveProperty(role) ? : IProperty .fromName(role)
385
400
}
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ class SimpleChildLink(
19
19
override val isOptional : Boolean ,
20
20
override val targetConcept : IConcept ,
21
21
private val uid : String? = null ,
22
+ override val isOrdered : Boolean = true ,
22
23
) : IChildLink {
23
24
var owner: SimpleConcept ? = null
24
25
override val childConcept: IConcept = targetConcept
You can’t perform that action at this time.
0 commit comments