package com.juick.server.api.activity.model; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.juick.server.api.activity.helpers.LinkValueDeserializer; import com.juick.server.api.activity.model.activities.*; import com.juick.server.api.activity.model.objects.*; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property="type") @JsonSubTypes({ @JsonSubTypes.Type(value = Create.class, name = "Create"), @JsonSubTypes.Type(value = Delete.class, name = "Delete"), @JsonSubTypes.Type(value = Follow.class, name = "Follow"), @JsonSubTypes.Type(value = Accept.class, name = "Accept"), @JsonSubTypes.Type(value = Undo.class, name = "Undo"), @JsonSubTypes.Type(value = Like.class, name = "Like"), @JsonSubTypes.Type(value = Block.class, name = "Block"), @JsonSubTypes.Type(value = Announce.class, name = "Announce"), @JsonSubTypes.Type(value = Activity.class, name = "Activity"), @JsonSubTypes.Type(value = Image.class, name = "Image"), @JsonSubTypes.Type(value = Key.class, name = "Key"), @JsonSubTypes.Type(value = Link.class, name = "Link"), @JsonSubTypes.Type(value = Hashtag.class, name = "Hashtag"), @JsonSubTypes.Type(value = Mention.class, name = "Mention"), @JsonSubTypes.Type(value = Emoji.class, name = "Emoji"), @JsonSubTypes.Type(value = Note.class, name = "Note"), @JsonSubTypes.Type(value = OrderedCollection.class, name = "OrderedCollection"), @JsonSubTypes.Type(value = OrderedCollectionPage.class, name = "OrderedCollectionPage"), @JsonSubTypes.Type(value = Person.class, name = "Person") }) public abstract class Context { private List context; private String id; private String name; private Instant published; @JsonDeserialize(using = LinkValueDeserializer.class) private String url; private List to; private List tags; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getType() { return getClass().getSimpleName(); } @JsonProperty("@context") @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) public List getContext() { return context; } public final static String ACTIVITY_STREAMS_URI = "https://www.w3.org/ns/activitystreams"; public final static String SECURITY_URI = "https://w3id.org/security/v1"; public final static String LD_JSON_MEDIA_TYPE = "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""; public final static String ACTIVITY_MEDIA_TYPE = "application/activity+json"; public final static String ACTIVITYSTREAMS_PROFILE_MEDIA_TYPE = ACTIVITY_MEDIA_TYPE + "; profile=\"https://www.w3.org/ns/activitystreams\""; public Instant getPublished() { return published; } public void setPublished(Instant published) { this.published = published; } public List getTo() { return to; } public void setTo(List to) { this.to = to; } public static Context build(Context response) { response.context = new ArrayList(Arrays.asList(ACTIVITY_STREAMS_URI, SECURITY_URI)); response.context.add(Collections.singletonMap("Hashtag", "as:Hashtag")); return response; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @JsonProperty("tag") public List getTags() { return tags; } public void setTags(List tags) { this.tags = tags; } public String getName() { return name; } public void setName(String name) { this.name = name; } }