Skip to content

Commit d278cfd

Browse files
committed
feat(vue-model-api): let root nodes of readonly bindings be readonly
1 parent fcae6cc commit d278cfd

File tree

11 files changed

+895
-516
lines changed

11 files changed

+895
-516
lines changed

model-api/src/jsMain/kotlin/org/modelix/model/api/NodeAdapterJS.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,12 @@ class NodeAdapterJS(val node: INode) : INodeJS_ {
113113
}
114114

115115
override fun setReferenceTargetNode(role: ReferenceRole, target: INodeJS?) {
116-
val unwrappedTarget = if (target == null) null else (target as NodeAdapterJS).node
117-
node.asWritableNode().setReferenceTarget(IReferenceLinkReference.fromRoleOrString(role), unwrappedTarget?.asWritableNode())
116+
if (target is NodeAdapterJS) {
117+
node.asWritableNode().setReferenceTarget(IReferenceLinkReference.fromRoleOrString(role), target.node.asWritableNode())
118+
} else {
119+
val targetRef = target?.getReference()
120+
setReferenceTargetRef(role, targetRef)
121+
}
118122
}
119123

120124
override fun setReferenceTargetRef(role: ReferenceRole, target: INodeReferenceJS?) {

model-client/src/jsMain/kotlin/org/modelix/model/client2/ClientJS.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,16 @@ sealed class IdSchemeJS() {
9494
}
9595

9696
@JsExport
97-
data class VersionInformationWithModelTree(val version: VersionInformationJS, val tree: MutableModelTreeJs)
97+
data class VersionInformationWithModelTree(
98+
/**
99+
* The version information.
100+
*/
101+
val version: VersionInformationJS,
102+
/**
103+
* The model tree associated with the version.
104+
*/
105+
val tree: MutableModelTreeJs,
106+
)
98107

99108
/**
100109
* JS-API for [ModelClientV2].
@@ -104,6 +113,7 @@ data class VersionInformationWithModelTree(val version: VersionInformationJS, va
104113
* See https://issues.modelix.org/issue/MODELIX-962
105114
*/
106115
@JsExport
116+
@Suppress("TooManyFunctions")
107117
interface ClientJS {
108118

109119
/**
@@ -211,10 +221,14 @@ data class ReplicatedModelParameters(
211221
val repositoryId: String,
212222
val branchId: String? = null,
213223
val idScheme: IdSchemeJS,
224+
val readonly: Boolean = false,
214225
val versionHash: String? = null,
215226
) {
216227
init {
217228
require((branchId != null) xor (versionHash != null)) { "Exactly one of branchId or versionHash must be provided" }
229+
if (versionHash != null) {
230+
require(readonly) { "versionHash requires readonly=true" }
231+
}
218232
}
219233
}
220234

model-client/src/jsTest/kotlin/org/modelix/model/client2/ReplicatedModelHashTest.kt

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.modelix.model.client2
2+
3+
import kotlin.test.Test
4+
import kotlin.test.assertFailsWith
5+
6+
class ReplicatedModelParametersTest {
7+
8+
@Test
9+
fun test_valid_branchId() {
10+
// Valid: branchId is positional 2nd arg
11+
ReplicatedModelParameters("repo", "branch", IdSchemeJS.MODELIX)
12+
}
13+
14+
@Test
15+
fun test_valid_versionHash_with_readonly() {
16+
// Valid: versionHash with readonly=true (branchId must be null)
17+
ReplicatedModelParameters(
18+
repositoryId = "repo",
19+
branchId = null,
20+
idScheme = IdSchemeJS.MODELIX,
21+
readonly = true,
22+
versionHash = "hash",
23+
)
24+
}
25+
26+
@Test
27+
fun test_invalid_both_branchId_and_versionHash() {
28+
// Invalid: cannot specify both branchId and versionHash
29+
assertFailsWith<IllegalArgumentException> {
30+
ReplicatedModelParameters(
31+
repositoryId = "repo",
32+
branchId = "branch",
33+
idScheme = IdSchemeJS.MODELIX,
34+
versionHash = "hash",
35+
)
36+
}
37+
}
38+
39+
@Test
40+
fun test_invalid_neither_branchId_nor_versionHash() {
41+
// Invalid: must specify either branchId or versionHash
42+
assertFailsWith<IllegalArgumentException> {
43+
ReplicatedModelParameters(
44+
repositoryId = "repo",
45+
branchId = null,
46+
idScheme = IdSchemeJS.MODELIX,
47+
)
48+
}
49+
}
50+
51+
@Test
52+
fun test_invalid_versionHash_without_readonly() {
53+
// Invalid: versionHash requires readonly=true
54+
assertFailsWith<IllegalArgumentException> {
55+
ReplicatedModelParameters(
56+
repositoryId = "repo",
57+
branchId = null,
58+
idScheme = IdSchemeJS.MODELIX,
59+
readonly = false,
60+
versionHash = "hash",
61+
)
62+
}
63+
}
64+
}

0 commit comments

Comments
 (0)