-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathIConceptReference.kt
50 lines (41 loc) · 1.62 KB
/
IConceptReference.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package org.modelix.model.api
import org.modelix.model.api.meta.NullConcept
import org.modelix.model.area.IArea
/**
* Reference to an [IConcept].
*/
@Deprecated("use ConceptReference")
interface IConceptReference {
companion object {
private var deserializers: Map<Any, ((String) -> IConceptReference?)> = LinkedHashMap()
@Deprecated("use ConceptReference()")
fun deserialize(serialized: String?): ConceptReference? {
if (serialized == null) return null
val refs = deserializers.values.mapNotNull { deserialize(serialized) }
return when (refs.size) {
0 -> ConceptReference(serialized)
1 -> refs.first()
else -> throw RuntimeException("Multiple deserializers applicable to $serialized")
}
}
@Deprecated("use ILanguageRepository.register")
fun registerDeserializer(key: Any, deserializer: ((String) -> IConceptReference?)) {
deserializers = deserializers + (key to deserializer)
}
@Deprecated("use ILanguageRepository.unregister")
fun unregisterSerializer(key: Any) {
deserializers = deserializers - key
}
}
/**
* Returns the unique id of this concept reference.
*
* @return uid of this concept reference
*/
fun getUID(): String
@Deprecated("use ILanguageRepository.resolveConcept")
fun resolve(area: IArea?): IConcept?
@Deprecated("use getUID()")
fun serialize(): String
}
fun IConceptReference?.upcast(): ConceptReference = this?.let { it as ConceptReference } ?: NullConcept.getReference()