diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/JsonLdBuilder.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/JsonLdBuilder.kt index 23c0103..fe1702c 100644 --- a/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/JsonLdBuilder.kt +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/JsonLdBuilder.kt @@ -1,12 +1,13 @@ package dev.usbharu.activitystreams.impl.builder +import dev.usbharu.activitystreams.impl.type.AbstractJsonObjectBuilder import dev.usbharu.activitystreams.impl.type.BuilderContext import dev.usbharu.activitystreams.impl.type.JsonObjectBuilder import dev.usbharu.activitystreams.model.JsonLd import java.net.URI -open class JsonLdBuilder : JsonObjectBuilder { - override fun build(t: JsonLd, jsonObject: Map, builderContext: BuilderContext) { +open class JsonLdBuilder : AbstractJsonObjectBuilder() { + override fun internalBuild(t: JsonLd, jsonObject: Map, builderContext: BuilderContext) { t.value = jsonObject["@value"] t.id = jsonObject["@id"]?.toString()?.let { URI.create(it) } t.type = (jsonObject["@type"] as? List).orEmpty().map { URI.create(it) } diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/ObjectBuilder.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/ObjectBuilder.kt index c8068d3..468f29d 100644 --- a/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/ObjectBuilder.kt +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/builder/ObjectBuilder.kt @@ -1,13 +1,23 @@ package dev.usbharu.activitystreams.impl.builder +import dev.usbharu.activitystreams.impl.type.AbstractJsonObjectBuilder import dev.usbharu.activitystreams.impl.type.BuilderContext import dev.usbharu.activitystreams.impl.type.JsonObjectBuilder import dev.usbharu.activitystreams.model.JsonLd import dev.usbharu.activitystreams.model.core.Object +import dev.usbharu.activitystreams.model.other.LangString +import java.net.URI -class ObjectBuilder : JsonObjectBuilder { +open class ObjectBuilder : AbstractJsonObjectBuilder() { override fun build(t: Object, jsonObject: Map, builderContext: BuilderContext) { // t.name = } + override fun internalBuild(t: Object, jsonObject: Map, builderContext: BuilderContext) { + val langString = builderContext.typeFactory().factory(URI.create("")) as LangString + builderContext.getBuilder(LangString::class.java) + .build(langString, jsonObject["https://www.w3.org/ns/activitystreams#name"], builderContext) + t.name = + } + } \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/model/other/LangStringImpl.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/model/other/LangStringImpl.kt index 56b9c81..b84b066 100644 --- a/src/main/kotlin/dev/usbharu/activitystreams/impl/model/other/LangStringImpl.kt +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/model/other/LangStringImpl.kt @@ -1,10 +1,16 @@ package dev.usbharu.activitystreams.impl.model.other import dev.usbharu.activitystreams.model.other.LangString +import java.net.URI import java.util.* -class LangStringImpl(private val value: String?, private val map: Map) : LangString { - override fun getValue(): String? = value +class LangStringImpl( + override var value: Any?, + private val map: Map, + override var type: List = emptyList(), + override var id: URI? = null +) : LangString { + override fun getValue(): String? = value?.toString() override fun getValueByLanguageTag(locale: Locale): String? = map[locale.toLanguageTag()] diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/type/AbstractJsonObjectBuilder.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/AbstractJsonObjectBuilder.kt new file mode 100644 index 0000000..2bf5f31 --- /dev/null +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/AbstractJsonObjectBuilder.kt @@ -0,0 +1,12 @@ +package dev.usbharu.activitystreams.impl.type + +abstract class AbstractJsonObjectBuilder : JsonObjectBuilder { + override fun build(t: T, jsonObject: Map, builderContext: BuilderContext) { + val superclass = t.javaClass.superclass + if (superclass != Any::class.java) { + builderContext.getBuilder(superclass).build(t, jsonObject, builderContext) + } + } + + protected abstract fun internalBuild(t: T, jsonObject: Map, builderContext: BuilderContext) +} \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/type/BuilderContext.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/BuilderContext.kt index aacc330..84cd7a4 100644 --- a/src/main/kotlin/dev/usbharu/activitystreams/impl/type/BuilderContext.kt +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/BuilderContext.kt @@ -1,7 +1,13 @@ package dev.usbharu.activitystreams.impl.type +import dev.usbharu.activitystreams.model.JsonLd + class BuilderContext { - fun getBuilder():JsonObjectBuilder{ + fun getBuilder(clazz: Class): JsonObjectBuilder { + TODO() + } + + fun typeFactory(): TypeFactory { TODO() } } \ No newline at end of file diff --git a/src/main/kotlin/dev/usbharu/activitystreams/impl/type/JsonObjectBuilder.kt b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/JsonObjectBuilder.kt index 83c64ca..2326eaf 100644 --- a/src/main/kotlin/dev/usbharu/activitystreams/impl/type/JsonObjectBuilder.kt +++ b/src/main/kotlin/dev/usbharu/activitystreams/impl/type/JsonObjectBuilder.kt @@ -1,6 +1,6 @@ package dev.usbharu.activitystreams.impl.type -interface JsonObjectBuilder { +interface JsonObjectBuilder { fun build(t: T, jsonObject: Map, builderContext: BuilderContext) } // todo Abstract classでスーパークラスのjsonobjectbuilderを自動で呼び出す部分を作る \ No newline at end of file