@@ -41,6 +41,7 @@ interface INode {
41
41
/* *
42
42
* Role of this node in its parent node if it exists,or null otherwise.
43
43
*/
44
+ @Deprecated(" use getContainmentLink()" )
44
45
val roleInParent: String?
45
46
46
47
/* *
@@ -61,6 +62,7 @@ interface INode {
61
62
* @param role the desired role
62
63
* @return iterable over the child nodes
63
64
*/
65
+ @Deprecated(" use IChildLink instead of String" )
64
66
fun getChildren (role : String? ): Iterable <INode >
65
67
66
68
/* *
@@ -76,6 +78,7 @@ interface INode {
76
78
* @param index target index within the role
77
79
* @param child child node to be moved
78
80
*/
81
+ @Deprecated(" use IChildLink instead of String" )
79
82
fun moveChild (role : String? , index : Int , child : INode )
80
83
81
84
/* *
@@ -90,6 +93,7 @@ interface INode {
90
93
*
91
94
* @see addNewChild
92
95
*/
96
+ @Deprecated(" use IChildLink instead of String" )
93
97
fun addNewChild (role : String? , index : Int , concept : IConcept ? ): INode
94
98
95
99
/* *
@@ -102,6 +106,7 @@ interface INode {
102
106
* @param concept reference to a concept, of which the new node is instance of
103
107
* @return new child node
104
108
*/
109
+ @Deprecated(" use IChildLink instead of String" )
105
110
fun addNewChild (role : String? , index : Int , concept : IConceptReference ? ): INode {
106
111
return addNewChild(role, index, concept?.resolve())
107
112
}
@@ -119,6 +124,7 @@ interface INode {
119
124
* @param role the desired reference role
120
125
* @return target node, or null if the target could not be found
121
126
*/
127
+ @Deprecated(" use IReferenceLink instead of String" )
122
128
fun getReferenceTarget (role : String ): INode ?
123
129
124
130
/* *
@@ -127,6 +133,7 @@ interface INode {
127
133
* @param role the desired reference role
128
134
* @return node reference to the target, or null if the target could not be found
129
135
*/
136
+ @Deprecated(" use IReferenceLink instead of String" )
130
137
fun getReferenceTargetRef (role : String ): INodeReference ? {
131
138
return getReferenceTarget(role)?.reference
132
139
}
@@ -137,6 +144,7 @@ interface INode {
137
144
* @param role the desired reference role
138
145
* @param target new target for this node's reference
139
146
*/
147
+ @Deprecated(" use IReferenceLink instead of String" )
140
148
fun setReferenceTarget (role : String , target : INode ? )
141
149
142
150
/* *
@@ -146,9 +154,10 @@ interface INode {
146
154
* @param role the desired reference role
147
155
* @param target reference to the new target for this node's reference
148
156
*/
157
+ @Deprecated(" use IReferenceLink instead of String" )
149
158
fun setReferenceTarget (role : String , target : INodeReference ? ) {
150
159
// Default implementation for backward compatibility only.
151
- setReferenceTarget(role, target?.resolveNode (getArea()))
160
+ setReferenceTarget(role, target?.resolveIn (getArea()!! ))
152
161
}
153
162
154
163
/* *
@@ -157,6 +166,7 @@ interface INode {
157
166
* @param role the desired property role
158
167
* @return property value, or null if there is no value
159
168
*/
169
+ @Deprecated(" use getPropertyValue(IProperty)" )
160
170
fun getPropertyValue (role : String ): String?
161
171
162
172
/* *
@@ -165,25 +175,27 @@ interface INode {
165
175
* @param role the desired property role
166
176
* @param value the new property value
167
177
*/
178
+ @Deprecated(" use setPropertyValue(IProperty, String?)" )
168
179
fun setPropertyValue (role : String , value : String? )
169
180
170
181
/* *
171
182
* Returns all property roles of this node.
172
183
*
173
184
* @return list of all property roles
174
185
*/
186
+ @Deprecated(" use getPropertyLinks()" )
175
187
fun getPropertyRoles (): List <String >
176
188
177
189
/* *
178
190
* Returns all reference roles of this node.
179
191
*
180
192
* @return list of all reference roles
181
193
*/
194
+ @Deprecated(" use getReferenceLinks()" )
182
195
fun getReferenceRoles (): List <String >
183
- }
184
196
185
- interface INodeEx : INode {
186
- fun usesRoleIds (): Boolean
197
+ // <editor-fold desc="non-string based API">
198
+ fun usesRoleIds (): Boolean = false
187
199
fun getContainmentLink (): IChildLink ? = roleInParent?.let { role ->
188
200
parent?.concept?.getAllChildLinks()?.find { (if (usesRoleIds()) it.getUID() else it.getSimpleName()) == role }
189
201
}
@@ -193,10 +205,54 @@ interface INodeEx : INode {
193
205
fun addNewChild (role : IChildLink , index : Int , concept : IConceptReference ? ): INode = addNewChild(role.key(this ), index, concept)
194
206
fun getReferenceTarget (link : IReferenceLink ): INode ? = getReferenceTarget(link.key(this ))
195
207
fun setReferenceTarget (link : IReferenceLink , target : INode ? ) = setReferenceTarget(link.key(this ), target)
196
- fun getReferenceTargetRef (role : IReferenceLink ): INodeReference ? = getReferenceTargetRef(role.key(this ))
197
208
fun setReferenceTarget (role : IReferenceLink , target : INodeReference ? ) = setReferenceTarget(role.key(this ), target)
209
+ fun removeReference (role : IReferenceLink ) = setReferenceTarget(role, null as INodeReference ? )
210
+ fun getReferenceTargetRef (role : IReferenceLink ): INodeReference ? = getReferenceTargetRef(role.key(this ))
198
211
fun getPropertyValue (property : IProperty ): String? = getPropertyValue(property.key(this ))
199
212
fun setPropertyValue (property : IProperty , value : String? ) = setPropertyValue(property.key(this ), value)
213
+
214
+ fun getReferenceLinks (): List <IReferenceLink > = getReferenceRoles().map { tryResolveReferenceLink(it) ? : ReferenceLinkFromName (it) }
215
+ fun getPropertyLinks (): List <IProperty > = getPropertyRoles().map { tryResolveProperty(it) ? : PropertyFromName (it) }
216
+ fun getAllProperties (): List <Pair <IProperty , String >> = getPropertyLinks().map { it to getPropertyValue(it) }.filterSecondNotNull()
217
+ fun getAllReferenceTargets (): List <Pair <IReferenceLink , INode >> = getReferenceLinks().map { it to getReferenceTarget(it) }.filterSecondNotNull()
218
+ fun getAllReferenceTargetRefs (): List <Pair <IReferenceLink , INodeReference >> = getReferenceLinks().map { it to getReferenceTargetRef(it) }.filterSecondNotNull()
219
+ // </editor-fold>
220
+ }
221
+
222
+ fun <T1 , T2 > List <Pair <T1 , T2 ?>>.filterSecondNotNull (): List <Pair <T1 , T2 >> = filter { it.second != null } as List <Pair <T1 , T2 >>
223
+
224
+ @Deprecated(" all members moved to INode" , ReplaceWith (" INode" ))
225
+ interface INodeEx : INode
226
+
227
+ interface IDeprecatedNodeDefaults : INode {
228
+ override val roleInParent: String? get() = getContainmentLink()?.getUID()
229
+ override fun getChildren (role : String? ): Iterable <INode > = getChildren(resolveChildLinkOrFallback(role))
230
+ override fun moveChild (role : String? , index : Int , child : INode ) = moveChild(resolveChildLinkOrFallback(role), index, child)
231
+ override fun addNewChild (role : String? , index : Int , concept : IConcept ? ): INode = addNewChild(resolveChildLinkOrFallback(role), index, concept)
232
+ override fun addNewChild (role : String? , index : Int , concept : IConceptReference ? ): INode = addNewChild(resolveChildLinkOrFallback(role), index, concept)
233
+ override fun getReferenceTarget (role : String ): INode ? = getReferenceTarget(resolveReferenceLinkOrFallback(role))
234
+ override fun getReferenceTargetRef (role : String ): INodeReference ? = getReferenceTargetRef(resolveReferenceLinkOrFallback(role))
235
+ override fun setReferenceTarget (role : String , target : INode ? ) = setReferenceTarget(resolveReferenceLinkOrFallback(role), target)
236
+ override fun setReferenceTarget (role : String , target : INodeReference ? ) = setReferenceTarget(resolveReferenceLinkOrFallback(role), target)
237
+ override fun getPropertyValue (role : String ): String? = getPropertyValue(resolvePropertyOrFallback(role))
238
+ override fun setPropertyValue (role : String , value : String? ) = setPropertyValue(resolvePropertyOrFallback(role), value)
239
+ override fun getPropertyRoles (): List <String > = getPropertyLinks().map { it.key(this ) }
240
+ override fun getReferenceRoles (): List <String > = getReferenceLinks().map { it.key(this ) }
241
+
242
+ override fun usesRoleIds (): Boolean = true
243
+ override fun getContainmentLink (): IChildLink ?
244
+ override fun getChildren (link : IChildLink ): Iterable <INode >
245
+ override fun moveChild (role : IChildLink , index : Int , child : INode )
246
+ override fun addNewChild (role : IChildLink , index : Int , concept : IConcept ? ): INode
247
+ override fun addNewChild (role : IChildLink , index : Int , concept : IConceptReference ? ): INode
248
+ override fun getReferenceTarget (link : IReferenceLink ): INode ?
249
+ override fun setReferenceTarget (link : IReferenceLink , target : INode ? )
250
+ override fun setReferenceTarget (role : IReferenceLink , target : INodeReference ? )
251
+ override fun getReferenceTargetRef (role : IReferenceLink ): INodeReference ?
252
+ override fun getPropertyValue (property : IProperty ): String?
253
+ override fun setPropertyValue (property : IProperty , value : String? )
254
+ override fun getPropertyLinks (): List <IProperty >
255
+ override fun getReferenceLinks (): List <IReferenceLink >
200
256
}
201
257
202
258
@Deprecated(" Use .key(INode), .key(IBranch), .key(ITransaction) or .key(ITree)" )
@@ -214,7 +270,7 @@ fun INode.getPropertyValue(property: IProperty): String? = if (this is INodeEx)
214
270
fun INode.setPropertyValue (property : IProperty , value : String? ): Unit = if (this is INodeEx ) setPropertyValue(property, value) else setPropertyValue(property.key(this ), value)
215
271
216
272
fun INode.getConcept (): IConcept ? = getConceptReference()?.resolve()
217
- fun INode.getResolvedReferenceTarget (role : String ): INode ? = getReferenceTargetRef(role)?.resolveNode (getArea())
273
+ fun INode.getResolvedReferenceTarget (role : String ): INode ? = getReferenceTargetRef(role)?.resolveIn (getArea()!! )
218
274
fun INode.getResolvedConcept (): IConcept ? = getConceptReference()?.resolve()
219
275
220
276
fun INode.addNewChild (role : String? , index : Int ): INode = addNewChild(role, index, null as IConceptReference ? )
@@ -238,6 +294,38 @@ fun INode.resolveProperty(role: String): IProperty {
238
294
? : throw RuntimeException (" Property '$role ' not found in concept ${c.getLongName()} " )
239
295
}
240
296
297
+ fun INode.tryResolveChildLink (role : String ): IChildLink ? {
298
+ val c = this .concept ? : return null
299
+ val allLinks = c.getAllChildLinks()
300
+ return allLinks.find { it.key(this ) == role }
301
+ ? : allLinks.find { it.getSimpleName() == role }
302
+ ? : allLinks.find { it.getUID() == role }
303
+ }
304
+ fun INode.resolveChildLinkOrFallback (role : String? ): IChildLink {
305
+ if (role == null ) return NullChildLink
306
+ return tryResolveChildLink(role) ? : IChildLink .fromName(role)
307
+ }
308
+ fun INode.tryResolveReferenceLink (role : String ): IReferenceLink ? {
309
+ val c = this .concept ? : return null
310
+ val allLinks = c.getAllReferenceLinks()
311
+ return allLinks.find { it.key(this ) == role }
312
+ ? : allLinks.find { it.getSimpleName() == role }
313
+ ? : allLinks.find { it.getUID() == role }
314
+ }
315
+ fun INode.resolveReferenceLinkOrFallback (role : String ): IReferenceLink {
316
+ return tryResolveReferenceLink(role) ? : IReferenceLink .fromName(role)
317
+ }
318
+ fun INode.tryResolveProperty (role : String ): IProperty ? {
319
+ val c = this .concept ? : return null
320
+ val allLinks = c.getAllProperties()
321
+ return allLinks.find { it.key(this ) == role }
322
+ ? : allLinks.find { it.getSimpleName() == role }
323
+ ? : allLinks.find { it.getUID() == role }
324
+ }
325
+ fun INode.resolvePropertyOrFallback (role : String ): IProperty {
326
+ return tryResolveProperty(role) ? : IProperty .fromName(role)
327
+ }
328
+
241
329
fun INode.remove () {
242
330
parent?.removeChild(this )
243
331
}
0 commit comments