mirror of https://github.com/usbharu/Hideout.git
feat: ActivityPubのデシリアライズ部分の旧バージョンのモデルを持ってきた
This commit is contained in:
parent
32483abfe0
commit
4c62651da5
|
@ -16,6 +16,8 @@ repositories {
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
detektPlugins(libs.detekt.formatting)
|
detektPlugins(libs.detekt.formatting)
|
||||||
|
implementation("dev.usbharu:hideout-core:0.0.1")
|
||||||
|
implementation(libs.bundles.jackson)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
package dev.usbharu
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
println("Hello World!")
|
|
||||||
}
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Accept @JsonCreator constructor(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
@JsonDeserialize(using = ObjectDeserializer::class)
|
||||||
|
@JsonProperty("object")
|
||||||
|
val apObject: Object,
|
||||||
|
override val actor: String
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Accept")
|
||||||
|
),
|
||||||
|
HasActor {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Accept
|
||||||
|
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Accept(" +
|
||||||
|
"apObject=$apObject, " +
|
||||||
|
"actor='$actor'" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
|
||||||
|
open class Announce @JsonCreator constructor(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
@JsonProperty("object")
|
||||||
|
val apObject: String,
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
val published: String,
|
||||||
|
val to: List<String> = emptyList(),
|
||||||
|
val cc: List<String> = emptyList()
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Announce")
|
||||||
|
),
|
||||||
|
HasActor,
|
||||||
|
HasId {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Announce
|
||||||
|
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (published != other.published) return false
|
||||||
|
if (to != other.to) return false
|
||||||
|
if (cc != other.cc) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + published.hashCode()
|
||||||
|
result = 31 * result + to.hashCode()
|
||||||
|
result = 31 * result + cc.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Announce(" +
|
||||||
|
"apObject='$apObject', " +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"published='$published', " +
|
||||||
|
"to=$to, " +
|
||||||
|
"cc=$cc" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
|
||||||
|
open class Block(
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
@JsonProperty("object") val apObject: String
|
||||||
|
) :
|
||||||
|
Object(listOf("Block")), HasId, HasActor {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Block
|
||||||
|
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Block(" +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"apObject='$apObject'" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Create(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
val name: String? = null,
|
||||||
|
@JsonDeserialize(using = ObjectDeserializer::class)
|
||||||
|
@JsonProperty("object")
|
||||||
|
val apObject: Object,
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
val to: List<String> = emptyList(),
|
||||||
|
val cc: List<String> = emptyList()
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Create")
|
||||||
|
),
|
||||||
|
HasId,
|
||||||
|
HasActor {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Create
|
||||||
|
|
||||||
|
if (name != other.name) return false
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (to != other.to) return false
|
||||||
|
if (cc != other.cc) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + (name?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + to.hashCode()
|
||||||
|
result = 31 * result + cc.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Create(" +
|
||||||
|
"name=$name, " +
|
||||||
|
"apObject=$apObject, " +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"to=$to, " +
|
||||||
|
"cc=$cc" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Delete(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
@JsonDeserialize(using = ObjectDeserializer::class)
|
||||||
|
@JsonProperty("object")
|
||||||
|
val apObject: Object,
|
||||||
|
val published: String,
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String
|
||||||
|
) : Object(add(type, "Delete")), HasId, HasActor {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Delete
|
||||||
|
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (published != other.published) return false
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + published.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Delete(" +
|
||||||
|
"apObject=$apObject, " +
|
||||||
|
"published='$published', " +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id'" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonSetter
|
||||||
|
import com.fasterxml.jackson.annotation.Nulls
|
||||||
|
|
||||||
|
open class Document(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
@JsonSetter(nulls = Nulls.AS_EMPTY)
|
||||||
|
override val name: String = "",
|
||||||
|
val mediaType: String,
|
||||||
|
val url: String
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Document")
|
||||||
|
),
|
||||||
|
HasName {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Document
|
||||||
|
|
||||||
|
if (mediaType != other.mediaType) return false
|
||||||
|
if (url != other.url) return false
|
||||||
|
if (name != other.name) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + mediaType.hashCode()
|
||||||
|
result = 31 * result + url.hashCode()
|
||||||
|
result = 31 * result + name.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "Document(mediaType=$mediaType, url=$url, name='$name') ${super.toString()}"
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
open class Emoji(
|
||||||
|
type: List<String>,
|
||||||
|
override val name: String,
|
||||||
|
override val id: String,
|
||||||
|
val updated: String,
|
||||||
|
val icon: Image
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Emoji")
|
||||||
|
),
|
||||||
|
HasName,
|
||||||
|
HasId {
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Emoji(" +
|
||||||
|
"name='$name', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"updated='$updated', " +
|
||||||
|
"icon=$icon" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Emoji
|
||||||
|
|
||||||
|
if (name != other.name) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (updated != other.updated) return false
|
||||||
|
if (icon != other.icon) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + name.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + updated.hashCode()
|
||||||
|
result = 31 * result + icon.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
enum class ExtendedActivityVocabulary {
|
||||||
|
Object,
|
||||||
|
Link,
|
||||||
|
Activity,
|
||||||
|
IntransitiveActivity,
|
||||||
|
Collection,
|
||||||
|
OrderedCollection,
|
||||||
|
CollectionPage,
|
||||||
|
OrderedCollectionPage,
|
||||||
|
Accept,
|
||||||
|
Add,
|
||||||
|
Announce,
|
||||||
|
Arrive,
|
||||||
|
Block,
|
||||||
|
Create,
|
||||||
|
Delete,
|
||||||
|
Dislike,
|
||||||
|
Flag,
|
||||||
|
Follow,
|
||||||
|
Ignore,
|
||||||
|
Invite,
|
||||||
|
Join,
|
||||||
|
Leave,
|
||||||
|
Like,
|
||||||
|
Listen,
|
||||||
|
Move,
|
||||||
|
Offer,
|
||||||
|
Question,
|
||||||
|
Reject,
|
||||||
|
Read,
|
||||||
|
Remove,
|
||||||
|
TentativeReject,
|
||||||
|
TentativeAccept,
|
||||||
|
Travel,
|
||||||
|
Undo,
|
||||||
|
Update,
|
||||||
|
View,
|
||||||
|
Application,
|
||||||
|
Group,
|
||||||
|
Organization,
|
||||||
|
Person,
|
||||||
|
Service,
|
||||||
|
Article,
|
||||||
|
Audio,
|
||||||
|
Document,
|
||||||
|
Event,
|
||||||
|
Image,
|
||||||
|
Note,
|
||||||
|
Page,
|
||||||
|
Place,
|
||||||
|
Profile,
|
||||||
|
Relationship,
|
||||||
|
Tombstone,
|
||||||
|
Video,
|
||||||
|
Mention,
|
||||||
|
Emoji
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
enum class ExtendedVocabulary {
|
||||||
|
Emoji
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
|
||||||
|
open class Follow(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
@JsonProperty("object") val apObject: String,
|
||||||
|
override val actor: String,
|
||||||
|
val id: String? = null
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Follow")
|
||||||
|
),
|
||||||
|
HasActor {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Follow
|
||||||
|
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + (id?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Follow(" +
|
||||||
|
"apObject='$apObject', " +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id=$id" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
interface HasActor {
|
||||||
|
val actor: String
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
interface HasId {
|
||||||
|
val id: String
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
interface HasName {
|
||||||
|
val name: String
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
open class Image(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
val mediaType: String? = null,
|
||||||
|
val url: String
|
||||||
|
) : Object(
|
||||||
|
add(type, "Image")
|
||||||
|
) {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Image
|
||||||
|
|
||||||
|
if (mediaType != other.mediaType) return false
|
||||||
|
if (url != other.url) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + (mediaType?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + url.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Image(" +
|
||||||
|
"mediaType=$mediaType, " +
|
||||||
|
"url='$url'" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonAutoDetect
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
|
import com.fasterxml.jackson.databind.JsonDeserializer
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
|
import com.fasterxml.jackson.databind.JsonSerializer
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize
|
||||||
|
|
||||||
|
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
|
||||||
|
open class JsonLd {
|
||||||
|
@JsonProperty("@context")
|
||||||
|
@JsonDeserialize(contentUsing = ContextDeserializer::class)
|
||||||
|
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY, using = ContextSerializer::class)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
|
var context: List<String> = emptyList()
|
||||||
|
set(value) {
|
||||||
|
field = value.filterNotNull().filter { it.isNotBlank() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonCreator
|
||||||
|
constructor(context: List<String?>?) {
|
||||||
|
if (context != null) {
|
||||||
|
this.context = context.filterNotNull().filter { it.isNotBlank() }
|
||||||
|
} else {
|
||||||
|
this.context = emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected constructor()
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other !is JsonLd) return false
|
||||||
|
|
||||||
|
return context == other.context
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int = context.hashCode()
|
||||||
|
|
||||||
|
override fun toString(): String = "JsonLd(context=$context)"
|
||||||
|
}
|
||||||
|
|
||||||
|
class ContextDeserializer : JsonDeserializer<String>() {
|
||||||
|
|
||||||
|
override fun deserialize(
|
||||||
|
p0: com.fasterxml.jackson.core.JsonParser?,
|
||||||
|
p1: com.fasterxml.jackson.databind.DeserializationContext?
|
||||||
|
): String {
|
||||||
|
val readTree: JsonNode = p0?.codec?.readTree(p0) ?: return ""
|
||||||
|
if (readTree.isValueNode) {
|
||||||
|
return readTree.textValue()
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ContextSerializer : JsonSerializer<List<String>>() {
|
||||||
|
|
||||||
|
@Deprecated("Deprecated in Java")
|
||||||
|
override fun isEmpty(value: List<String>?): Boolean = value.isNullOrEmpty()
|
||||||
|
|
||||||
|
override fun isEmpty(provider: SerializerProvider?, value: List<String>?): Boolean = value.isNullOrEmpty()
|
||||||
|
|
||||||
|
override fun serialize(value: List<String>?, gen: JsonGenerator?, serializers: SerializerProvider) {
|
||||||
|
if (value.isNullOrEmpty()) {
|
||||||
|
serializers.defaultSerializeNull(gen)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (value.size == 1) {
|
||||||
|
gen?.writeString(value[0])
|
||||||
|
} else {
|
||||||
|
gen?.writeStartArray()
|
||||||
|
value.forEach {
|
||||||
|
gen?.writeString(it)
|
||||||
|
}
|
||||||
|
gen?.writeEndArray()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
open class Key(
|
||||||
|
override val id: String,
|
||||||
|
val owner: String,
|
||||||
|
val publicKeyPem: String
|
||||||
|
) : Object(
|
||||||
|
type = add(list = emptyList(), type = "Key")
|
||||||
|
),
|
||||||
|
HasId {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Key
|
||||||
|
|
||||||
|
if (owner != other.owner) return false
|
||||||
|
if (publicKeyPem != other.publicKeyPem) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + owner.hashCode()
|
||||||
|
result = 31 * result + publicKeyPem.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "Key(owner=$owner, publicKeyPem=$publicKeyPem, id='$id') ${super.toString()}"
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Like(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
@JsonProperty("object") val apObject: String,
|
||||||
|
val content: String,
|
||||||
|
@JsonDeserialize(contentUsing = ObjectDeserializer::class) val tag: List<Object> = emptyList()
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Like")
|
||||||
|
),
|
||||||
|
HasId,
|
||||||
|
HasActor {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Like
|
||||||
|
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (content != other.content) return false
|
||||||
|
if (tag != other.tag) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + content.hashCode()
|
||||||
|
result = 31 * result + tag.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Like(" +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"apObject='$apObject', " +
|
||||||
|
"content='$content', " +
|
||||||
|
"tag=$tag" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Note
|
||||||
|
@Suppress("LongParameterList", "CyclomaticComplexMethod")
|
||||||
|
constructor(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
override val id: String,
|
||||||
|
val attributedTo: String,
|
||||||
|
val content: String,
|
||||||
|
val published: String,
|
||||||
|
val to: List<String> = emptyList(),
|
||||||
|
val cc: List<String> = emptyList(),
|
||||||
|
val sensitive: Boolean = false,
|
||||||
|
val inReplyTo: String? = null,
|
||||||
|
val attachment: List<Document> = emptyList(),
|
||||||
|
@JsonDeserialize(contentUsing = ObjectDeserializer::class)
|
||||||
|
val tag: List<Object> = emptyList(),
|
||||||
|
val quoteUri: String? = null,
|
||||||
|
val quoteUrl: String? = null,
|
||||||
|
@JsonProperty("_misskey_quote")
|
||||||
|
val misskeyQuote: String? = null
|
||||||
|
) : Object(
|
||||||
|
type = add(type, "Note")
|
||||||
|
),
|
||||||
|
HasId {
|
||||||
|
|
||||||
|
@Suppress("CyclomaticComplexMethod", "CognitiveComplexMethod")
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Note
|
||||||
|
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (attributedTo != other.attributedTo) return false
|
||||||
|
if (content != other.content) return false
|
||||||
|
if (published != other.published) return false
|
||||||
|
if (to != other.to) return false
|
||||||
|
if (cc != other.cc) return false
|
||||||
|
if (sensitive != other.sensitive) return false
|
||||||
|
if (inReplyTo != other.inReplyTo) return false
|
||||||
|
if (attachment != other.attachment) return false
|
||||||
|
if (tag != other.tag) return false
|
||||||
|
if (quoteUri != other.quoteUri) return false
|
||||||
|
if (quoteUrl != other.quoteUrl) return false
|
||||||
|
if (misskeyQuote != other.misskeyQuote) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("CyclomaticComplexMethod")
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + attributedTo.hashCode()
|
||||||
|
result = 31 * result + content.hashCode()
|
||||||
|
result = 31 * result + published.hashCode()
|
||||||
|
result = 31 * result + to.hashCode()
|
||||||
|
result = 31 * result + cc.hashCode()
|
||||||
|
result = 31 * result + sensitive.hashCode()
|
||||||
|
result = 31 * result + (inReplyTo?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + attachment.hashCode()
|
||||||
|
result = 31 * result + tag.hashCode()
|
||||||
|
result = 31 * result + (quoteUri?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (quoteUrl?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (misskeyQuote?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Note(" +
|
||||||
|
"id='$id', " +
|
||||||
|
"attributedTo='$attributedTo', " +
|
||||||
|
"content='$content', " +
|
||||||
|
"published='$published', " +
|
||||||
|
"to=$to, " +
|
||||||
|
"cc=$cc, " +
|
||||||
|
"sensitive=$sensitive, " +
|
||||||
|
"inReplyTo=$inReplyTo, " +
|
||||||
|
"attachment=$attachment, " +
|
||||||
|
"tag=$tag, " +
|
||||||
|
"quoteUri=$quoteUri, " +
|
||||||
|
"quoteUrl=$quoteUrl, " +
|
||||||
|
"misskeyQuote=$misskeyQuote" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
|
import com.fasterxml.jackson.databind.JsonSerializer
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize
|
||||||
|
|
||||||
|
open class Object : JsonLd {
|
||||||
|
@JsonSerialize(using = TypeSerializer::class)
|
||||||
|
var type: List<String> = emptyList()
|
||||||
|
set(value) {
|
||||||
|
field = value.filter { it.isNotBlank() }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected constructor()
|
||||||
|
constructor(type: List<String>) : super() {
|
||||||
|
this.type = type.filter { it.isNotBlank() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Object
|
||||||
|
|
||||||
|
return type == other.type
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + type.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "Object(type=$type) ${super.toString()}"
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@JvmStatic
|
||||||
|
protected fun add(list: List<String>, type: String): List<String> {
|
||||||
|
val toMutableList = list.toMutableList()
|
||||||
|
toMutableList.add(type)
|
||||||
|
return toMutableList.distinct()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TypeSerializer : JsonSerializer<List<String>>() {
|
||||||
|
override fun serialize(value: List<String>?, gen: JsonGenerator?, serializers: SerializerProvider?) {
|
||||||
|
if (value?.size == 1) {
|
||||||
|
gen?.writeString(value[0])
|
||||||
|
} else {
|
||||||
|
gen?.writeStartArray()
|
||||||
|
value?.forEach {
|
||||||
|
gen?.writeString(it)
|
||||||
|
}
|
||||||
|
gen?.writeEndArray()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationContext
|
||||||
|
import com.fasterxml.jackson.databind.JsonDeserializer
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
|
import dev.usbharu.hideout.activitypub.domain.model.*
|
||||||
|
|
||||||
|
class ObjectDeserializer : JsonDeserializer<Object>() {
|
||||||
|
@Suppress("LongMethod", "CyclomaticComplexMethod")
|
||||||
|
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): Object? {
|
||||||
|
requireNotNull(p)
|
||||||
|
val treeNode: JsonNode = requireNotNull(p.codec?.readTree(p))
|
||||||
|
if (treeNode.isValueNode) {
|
||||||
|
return ObjectValue(
|
||||||
|
emptyList(),
|
||||||
|
treeNode.asText()
|
||||||
|
)
|
||||||
|
} else if (treeNode.isObject) {
|
||||||
|
val type = treeNode["type"]
|
||||||
|
val activityType = if (type.isArray) {
|
||||||
|
type.firstNotNullOf { jsonNode: JsonNode ->
|
||||||
|
ExtendedActivityVocabulary.entries.firstOrNull { it.name.equals(jsonNode.asText(), true) }
|
||||||
|
}
|
||||||
|
} else if (type.isValueNode) {
|
||||||
|
ExtendedActivityVocabulary.entries.firstOrNull { it.name.equals(type.asText(), true) }
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
return when (activityType) {
|
||||||
|
ExtendedActivityVocabulary.Follow -> p.codec.treeToValue(treeNode, Follow::class.java)
|
||||||
|
ExtendedActivityVocabulary.Note -> p.codec.treeToValue(treeNode, Note::class.java)
|
||||||
|
ExtendedActivityVocabulary.Object -> p.codec.treeToValue(treeNode, Object::class.java)
|
||||||
|
ExtendedActivityVocabulary.Link -> null
|
||||||
|
ExtendedActivityVocabulary.Activity -> null
|
||||||
|
ExtendedActivityVocabulary.IntransitiveActivity -> null
|
||||||
|
ExtendedActivityVocabulary.Collection -> null
|
||||||
|
ExtendedActivityVocabulary.OrderedCollection -> null
|
||||||
|
ExtendedActivityVocabulary.CollectionPage -> null
|
||||||
|
ExtendedActivityVocabulary.OrderedCollectionPage -> null
|
||||||
|
ExtendedActivityVocabulary.Accept -> p.codec.treeToValue(treeNode, Accept::class.java)
|
||||||
|
ExtendedActivityVocabulary.Add -> null
|
||||||
|
ExtendedActivityVocabulary.Announce -> p.codec.treeToValue(treeNode, Announce::class.java)
|
||||||
|
ExtendedActivityVocabulary.Arrive -> null
|
||||||
|
ExtendedActivityVocabulary.Block -> p.codec.treeToValue(treeNode, Block::class.java)
|
||||||
|
ExtendedActivityVocabulary.Create -> p.codec.treeToValue(treeNode, Create::class.java)
|
||||||
|
ExtendedActivityVocabulary.Delete -> p.codec.treeToValue(treeNode, Delete::class.java)
|
||||||
|
ExtendedActivityVocabulary.Dislike -> null
|
||||||
|
ExtendedActivityVocabulary.Flag -> null
|
||||||
|
ExtendedActivityVocabulary.Ignore -> null
|
||||||
|
ExtendedActivityVocabulary.Invite -> null
|
||||||
|
ExtendedActivityVocabulary.Join -> null
|
||||||
|
ExtendedActivityVocabulary.Leave -> null
|
||||||
|
ExtendedActivityVocabulary.Like -> p.codec.treeToValue(treeNode, Like::class.java)
|
||||||
|
ExtendedActivityVocabulary.Listen -> null
|
||||||
|
ExtendedActivityVocabulary.Move -> null
|
||||||
|
ExtendedActivityVocabulary.Offer -> null
|
||||||
|
ExtendedActivityVocabulary.Question -> null
|
||||||
|
ExtendedActivityVocabulary.Reject -> p.codec.treeToValue(treeNode, Reject::class.java)
|
||||||
|
ExtendedActivityVocabulary.Read -> null
|
||||||
|
ExtendedActivityVocabulary.Remove -> null
|
||||||
|
ExtendedActivityVocabulary.TentativeReject -> null
|
||||||
|
ExtendedActivityVocabulary.TentativeAccept -> null
|
||||||
|
ExtendedActivityVocabulary.Travel -> null
|
||||||
|
ExtendedActivityVocabulary.Undo -> p.codec.treeToValue(treeNode, Undo::class.java)
|
||||||
|
ExtendedActivityVocabulary.Update -> null
|
||||||
|
ExtendedActivityVocabulary.View -> null
|
||||||
|
ExtendedActivityVocabulary.Application -> null
|
||||||
|
ExtendedActivityVocabulary.Group -> null
|
||||||
|
ExtendedActivityVocabulary.Organization -> null
|
||||||
|
ExtendedActivityVocabulary.Person -> p.codec.treeToValue(treeNode, Person::class.java)
|
||||||
|
ExtendedActivityVocabulary.Service -> null
|
||||||
|
ExtendedActivityVocabulary.Article -> null
|
||||||
|
ExtendedActivityVocabulary.Audio -> null
|
||||||
|
ExtendedActivityVocabulary.Document -> p.codec.treeToValue(treeNode, Document::class.java)
|
||||||
|
ExtendedActivityVocabulary.Event -> null
|
||||||
|
ExtendedActivityVocabulary.Image -> p.codec.treeToValue(treeNode, Image::class.java)
|
||||||
|
ExtendedActivityVocabulary.Page -> null
|
||||||
|
ExtendedActivityVocabulary.Place -> null
|
||||||
|
ExtendedActivityVocabulary.Profile -> null
|
||||||
|
ExtendedActivityVocabulary.Relationship -> null
|
||||||
|
ExtendedActivityVocabulary.Tombstone -> p.codec.treeToValue(treeNode, Tombstone::class.java)
|
||||||
|
ExtendedActivityVocabulary.Video -> null
|
||||||
|
ExtendedActivityVocabulary.Mention -> null
|
||||||
|
ExtendedActivityVocabulary.Emoji -> p.codec.treeToValue(treeNode, Emoji::class.java)
|
||||||
|
null -> null
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator
|
||||||
|
|
||||||
|
@Suppress("VariableNaming")
|
||||||
|
open class ObjectValue @JsonCreator constructor(type: List<String>, var `object`: String) : Object(
|
||||||
|
type
|
||||||
|
) {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as ObjectValue
|
||||||
|
|
||||||
|
return `object` == other.`object`
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + `object`.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "ObjectValue(`object`='$`object`') ${super.toString()}"
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
open class Person
|
||||||
|
@Suppress("LongParameterList")
|
||||||
|
constructor(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
val name: String?,
|
||||||
|
override val id: String,
|
||||||
|
var preferredUsername: String,
|
||||||
|
var summary: String?,
|
||||||
|
var inbox: String,
|
||||||
|
var outbox: String,
|
||||||
|
var url: String,
|
||||||
|
private var icon: Image?,
|
||||||
|
var publicKey: Key,
|
||||||
|
var endpoints: Map<String, String> = emptyMap(),
|
||||||
|
var followers: String?,
|
||||||
|
var following: String?,
|
||||||
|
val manuallyApprovesFollowers: Boolean? = false
|
||||||
|
) : Object(add(type, "Person")), HasId {
|
||||||
|
|
||||||
|
@Suppress("CyclomaticComplexMethod", "CognitiveComplexMethod")
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Person
|
||||||
|
|
||||||
|
if (name != other.name) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (preferredUsername != other.preferredUsername) return false
|
||||||
|
if (summary != other.summary) return false
|
||||||
|
if (inbox != other.inbox) return false
|
||||||
|
if (outbox != other.outbox) return false
|
||||||
|
if (url != other.url) return false
|
||||||
|
if (icon != other.icon) return false
|
||||||
|
if (publicKey != other.publicKey) return false
|
||||||
|
if (endpoints != other.endpoints) return false
|
||||||
|
if (followers != other.followers) return false
|
||||||
|
if (following != other.following) return false
|
||||||
|
if (manuallyApprovesFollowers != other.manuallyApprovesFollowers) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("CyclomaticComplexMethod")
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + (name?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + preferredUsername.hashCode()
|
||||||
|
result = 31 * result + (summary?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + inbox.hashCode()
|
||||||
|
result = 31 * result + outbox.hashCode()
|
||||||
|
result = 31 * result + url.hashCode()
|
||||||
|
result = 31 * result + (icon?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + publicKey.hashCode()
|
||||||
|
result = 31 * result + endpoints.hashCode()
|
||||||
|
result = 31 * result + (followers?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (following?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (manuallyApprovesFollowers?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Person(" +
|
||||||
|
"name=$name, " +
|
||||||
|
"id='$id', " +
|
||||||
|
"preferredUsername='$preferredUsername', " +
|
||||||
|
"summary=$summary, " +
|
||||||
|
"inbox='$inbox', " +
|
||||||
|
"outbox='$outbox', " +
|
||||||
|
"url='$url', " +
|
||||||
|
"icon=$icon, " +
|
||||||
|
"publicKey=$publicKey, " +
|
||||||
|
"endpoints=$endpoints, " +
|
||||||
|
"followers=$followers, " +
|
||||||
|
"following=$following, " +
|
||||||
|
"manuallyApprovesFollowers=$manuallyApprovesFollowers" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Reject(
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
@JsonDeserialize(using = ObjectDeserializer::class) @JsonProperty("object") val apObject: Object
|
||||||
|
) : Object(listOf("Reject")), HasId, HasActor {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Reject
|
||||||
|
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Reject(" +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"apObject=$apObject" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
open class Tombstone(type: List<String> = emptyList(), override val id: String) :
|
||||||
|
Object(add(type, "Tombstone")),
|
||||||
|
HasId {
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Tombstone
|
||||||
|
|
||||||
|
return id == other.id
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "Tombstone(id='$id') ${super.toString()}"
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 usbharu
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dev.usbharu.hideout.activitypub.domain.model
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||||
|
|
||||||
|
open class Undo(
|
||||||
|
type: List<String> = emptyList(),
|
||||||
|
override val actor: String,
|
||||||
|
override val id: String,
|
||||||
|
@JsonDeserialize(using = ObjectDeserializer::class)
|
||||||
|
@JsonProperty("object") val apObject: Object,
|
||||||
|
val published: String?
|
||||||
|
) : Object(add(type, "Undo")), HasId, HasActor {
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as Undo
|
||||||
|
|
||||||
|
if (actor != other.actor) return false
|
||||||
|
if (id != other.id) return false
|
||||||
|
if (apObject != other.apObject) return false
|
||||||
|
if (published != other.published) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + actor.hashCode()
|
||||||
|
result = 31 * result + id.hashCode()
|
||||||
|
result = 31 * result + apObject.hashCode()
|
||||||
|
result = 31 * result + (published?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "Undo(" +
|
||||||
|
"actor='$actor', " +
|
||||||
|
"id='$id', " +
|
||||||
|
"apObject=$apObject, " +
|
||||||
|
"published=$published" +
|
||||||
|
")" +
|
||||||
|
" ${super.toString()}"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue