Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ object ExposedThingBuilder {
title = thingAnnotation.title
objectType = Type(thingAnnotation.type)
val contexts = clazz.findAnnotations<Context>()
if(contexts.isNotEmpty()){
if (contexts.isNotEmpty()) {
val context = org.eclipse.thingweb.thing.schema.Context(DEFAULT_CONTEXT)
contexts.forEach {
context.addContext(it.prefix, it.url)
if (it.prefix.isEmpty()) context.addContext(it.url) else context.addContext(it.prefix, it.url)
}
objectContext = context
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ annotation class Thing(val id: String, val title: String, val description: Strin
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@Repeatable
annotation class Context(val prefix: String, val url : String)
annotation class Context(val prefix: String = "", val url : String)

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
Expand Down
12 changes: 6 additions & 6 deletions kotlin-wot/src/main/kotlin/thing/ContextSerializer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ internal class ContextSerializer : JsonSerializer<Context>() {
gen: JsonGenerator,
serializers: SerializerProvider
) {
val defaultUrl: String? = context.defaultUrl
val defaultUrls: List<String> = context.defaultUrls
val prefixedUrls: Map<String, String> = context.prefixedUrls
val hasDefaultUrl = defaultUrl != null
val hasDefaultUrls = defaultUrls.isNotEmpty()
val hasPrefixedUrls = prefixedUrls.isNotEmpty()
if (hasDefaultUrl && hasPrefixedUrls) {
if (hasDefaultUrls && hasPrefixedUrls) {
gen.writeStartArray()
}
if (hasDefaultUrl) {
gen.writeString(defaultUrl)
defaultUrls.forEach {
gen.writeString(it)
}
if (hasPrefixedUrls) {
gen.writeObject(prefixedUrls)
}
if (hasDefaultUrl && hasPrefixedUrls) {
if (hasDefaultUrls && hasPrefixedUrls) {
gen.writeEndArray()
}
}
Expand Down
19 changes: 0 additions & 19 deletions kotlin-wot/src/main/kotlin/thing/ThingDescription.kt
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,6 @@ data class ThingDescription @JsonCreator constructor(
securityDefinitions[name] = securityScheme
}

fun getPropertiesByObjectType(objectType: String): Map<String, PropertyAffordance<*>> {
return getPropertiesByExpandedObjectType(getExpandedObjectType(objectType))
}

private fun getPropertiesByExpandedObjectType(objectType: String): Map<String, PropertyAffordance<*>> {
return properties.filter { (_, property) ->
property.objectType?.defaultType?.let { getExpandedObjectType(it) } == objectType
}.toMap()
}

fun getExpandedObjectType(objectType: String): String {

val parts = objectType.split(":", limit = 2)
val prefix = if (parts.size == 2) parts[0] else null
val suffix = parts.last()

return objectContext?.getUrl(prefix)?.let { "$it#$suffix" } ?: objectType
}

fun toJson() : String{
return try {
JsonMapper.instance.writeValueAsString(this)
Expand Down
21 changes: 7 additions & 14 deletions kotlin-wot/src/main/kotlin/thing/schema/Context.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,35 +16,28 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize
*/
@JsonDeserialize(using = ContextDeserializer::class)
@JsonSerialize(using = ContextSerializer::class)
//@Serializable(with = ContextSerializer::class)
data class Context(private val urls: MutableMap<String?, String> = HashMap()) {
data class Context(val defaultUrls: MutableList<String> = mutableListOf(), private val prefixeUrls: MutableMap<String, String> = HashMap()) {

constructor(url: String) : this() {
addContext(url)
}

constructor(prefix: String?, url: String) : this() {
constructor(prefix: String, url: String) : this() {
addContext(prefix, url)
}

fun addContext(url: String): Context {
return addContext(null, url)
}

fun getUrl(prefix: String?): String? {
return urls[prefix]
defaultUrls.add(url)
return this
}

fun addContext(prefix: String?, url: String): Context {
urls[prefix] = url
fun addContext(prefix: String, url: String): Context {
prefixeUrls[prefix] = url
return this
}

val defaultUrl: String?
get() = urls[null] // Directly accessing the map

val prefixedUrls: Map<String, String>
get() = urls.entries
get() = prefixeUrls.entries
.filter { (key, _) -> key != null }
.associate { (key, value) -> key!! to value }
}