From 9100b5bda037fcd1b051b98585744077132320bc Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sun, 22 Aug 2021 00:13:02 +0300 Subject: Type-safe ActivityStreams deserialization --- .../com/juick/www/api/activity/model/Activity.java | 9 +++++--- .../com/juick/www/api/activity/model/Context.java | 10 +++++++-- .../juick/www/api/activity/model/objects/Note.java | 6 +++--- .../www/api/activity/model/objects/Tombstone.java | 24 ++++++++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/juick/www/api/activity/model/objects/Tombstone.java (limited to 'src/main/java/com/juick/www/api/activity/model') diff --git a/src/main/java/com/juick/www/api/activity/model/Activity.java b/src/main/java/com/juick/www/api/activity/model/Activity.java index d2f905af..7cc0b13f 100644 --- a/src/main/java/com/juick/www/api/activity/model/Activity.java +++ b/src/main/java/com/juick/www/api/activity/model/Activity.java @@ -19,6 +19,8 @@ package com.juick.www.api.activity.model; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.juick.www.api.activity.helpers.ActivityIdDeserializer; +import com.juick.www.api.activity.helpers.ContextDeserializer; + import org.apache.commons.lang3.StringUtils; import java.util.UUID; @@ -27,7 +29,7 @@ public abstract class Activity extends Context { @JsonDeserialize(using = ActivityIdDeserializer.class) private String actor; - private Object object; + private Context object; public String getActor() { return actor; @@ -40,11 +42,12 @@ public abstract class Activity extends Context { } } - public Object getObject() { + @JsonDeserialize(using = ContextDeserializer.class) + public Context getObject() { return object; } - public void setObject(Object object) { + public void setObject(Context object) { this.object = object; } } diff --git a/src/main/java/com/juick/www/api/activity/model/Context.java b/src/main/java/com/juick/www/api/activity/model/Context.java index d7b23539..edfa89b1 100644 --- a/src/main/java/com/juick/www/api/activity/model/Context.java +++ b/src/main/java/com/juick/www/api/activity/model/Context.java @@ -30,7 +30,7 @@ import java.util.List; import java.util.Map; @JsonIgnoreProperties(ignoreUnknown = true) -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property="type") +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property="type", defaultImpl = Context.class) @JsonSubTypes({ @JsonSubTypes.Type(value = Create.class, name = "Create"), @JsonSubTypes.Type(value = Update.class, name = "Update"), @@ -55,7 +55,7 @@ import java.util.Map; @JsonSubTypes.Type(value = Person.class, name = "Person"), @JsonSubTypes.Type(value = Application.class, name = "Application") }) -public abstract class Context { +public class Context { private List context; @@ -120,6 +120,12 @@ public abstract class Context { return response; } + public Context() {} + + public Context(String id) { + setId(id); + } + public String getUrl() { return url; } diff --git a/src/main/java/com/juick/www/api/activity/model/objects/Note.java b/src/main/java/com/juick/www/api/activity/model/objects/Note.java index 66470b5c..7889b172 100644 --- a/src/main/java/com/juick/www/api/activity/model/objects/Note.java +++ b/src/main/java/com/juick/www/api/activity/model/objects/Note.java @@ -26,7 +26,7 @@ public class Note extends Context { private String content; private String attributedTo; private String inReplyTo; - private List attachment; + private List attachment; private List to; private List cc; private boolean sensitive; @@ -48,11 +48,11 @@ public class Note extends Context { } @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) - public List getAttachment() { + public List getAttachment() { return attachment; } - public void setAttachment(List attachment) { + public void setAttachment(List attachment) { this.attachment = attachment; } diff --git a/src/main/java/com/juick/www/api/activity/model/objects/Tombstone.java b/src/main/java/com/juick/www/api/activity/model/objects/Tombstone.java new file mode 100644 index 00000000..1a229299 --- /dev/null +++ b/src/main/java/com/juick/www/api/activity/model/objects/Tombstone.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2008-2021, Juick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.juick.www.api.activity.model.objects; + +import com.juick.www.api.activity.model.Context; + +public class Tombstone extends Context { + +} \ No newline at end of file -- cgit v1.2.3