aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/server/api/activity/model/Context.java
blob: 1d3f238cf654226100e4bf6aea6cfce3c330eca5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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<Object> context;

    private String id;

    private String name;

    private Instant published;

    @JsonDeserialize(using = LinkValueDeserializer.class)
    private String url;

    private List<String> to;

    private List<Context> 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<Object> 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<String> getTo() {
        return to;
    }

    public void setTo(List<String> 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<Context> getTags() {
        return tags;
    }

    public void setTags(List<Context> tags) {
        this.tags = tags;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}