aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/models/Person.java
blob: f5c841bb4eebbf46ed63d28743001e0a08ed69ce (plain)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package org.wordpress.android.models;

import android.support.annotation.Nullable;

import org.json.JSONException;
import org.json.JSONObject;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.DateTimeUtils;
import org.wordpress.android.util.StringUtils;

public class Person {
    public enum PersonType { USER, FOLLOWER, EMAIL_FOLLOWER, VIEWER }

    private long personID;
    private int localTableBlogId;
    private String displayName;
    private String avatarUrl;
    private PersonType personType;

    // Only users have a role
    private Role role;

    // Users, followers & viewers has a username, email followers don't
    private String username;

    // Only followers & email followers have a subscribed date
    private String subscribed;

    public Person(long personID, int localTableBlogId) {
        this.personID = personID;
        this.localTableBlogId = localTableBlogId;
    }

    @Nullable
    public static Person userFromJSON(JSONObject json, int localTableBlogId) throws JSONException {
        if (json == null) {
            return null;
        }

        // Response parameters are in: https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/users/%24user_id/
        try {
            long personID = Long.parseLong(json.getString("ID"));
            Person person = new Person(personID, localTableBlogId);
            person.setUsername(json.optString("login"));
            person.setDisplayName(json.optString("name"));
            person.setAvatarUrl(json.optString("avatar_URL"));
            person.personType = PersonType.USER;
            // We don't support multiple roles, so the first role is picked just as it's in Calypso
            String role = json.getJSONArray("roles").optString(0);
            person.setRole(Role.fromString(role));

            return person;
        } catch (NumberFormatException e) {
            AppLog.e(AppLog.T.PEOPLE, "The ID parsed from the JSON couldn't be converted to long: " + e);
        }

        return null;
    }

    @Nullable
    public static Person followerFromJSON(JSONObject json, int localTableBlogId, boolean isEmailFollower)
            throws JSONException {
        if (json == null) {
            return null;
        }

        // Response parameters are in: https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/stats/followers/
        try {
            long personID = Long.parseLong(json.getString("ID"));
            Person person = new Person(personID, localTableBlogId);
            person.setDisplayName(json.optString("label"));
            person.setUsername(json.optString("login"));
            person.setAvatarUrl(json.optString("avatar"));
            person.setSubscribed(json.optString("date_subscribed"));
            person.personType = isEmailFollower ? PersonType.EMAIL_FOLLOWER : PersonType.FOLLOWER;

            return person;
        } catch (NumberFormatException e) {
            AppLog.e(AppLog.T.PEOPLE, "The ID parsed from the JSON couldn't be converted to long: " + e);
        }

        return null;
    }

    @Nullable
    public static Person viewerFromJSON(JSONObject json, int localTableBlogId) throws JSONException {
        if (json == null) {
            return null;
        }

        // Similar response parameters in:
        // https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/users/%24user_id/
        try {
            long personID = Long.parseLong(json.getString("ID"));
            Person person = new Person(personID, localTableBlogId);
            person.setUsername(json.optString("login"));
            person.setDisplayName(json.optString("name"));
            person.setAvatarUrl(json.optString("avatar_URL"));
            person.setPersonType(PersonType.VIEWER);

            return person;
        } catch (NumberFormatException e) {
            AppLog.e(AppLog.T.PEOPLE, "The ID parsed from the JSON couldn't be converted to long: " + e);
        }

        return null;
    }

    public long getPersonID() {
        return personID;
    }

    public int getLocalTableBlogId() {
        return localTableBlogId;
    }

    public String getUsername() {
        return StringUtils.notNullStr(username);
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getDisplayName() {
        return StringUtils.notNullStr(displayName);
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public String getAvatarUrl() {
        return StringUtils.notNullStr(avatarUrl);
    }

    public void setAvatarUrl(String avatarUrl) {
        this.avatarUrl = avatarUrl;
    }

    public String getSubscribed() {
        return StringUtils.notNullStr(subscribed);
    }

    public void setSubscribed(String subscribed) {
        this.subscribed = StringUtils.notNullStr(subscribed);
    }

    /*
     * converts iso8601 subscribed date to an actual java date
     */
    private transient java.util.Date dtSubscribed;
    public java.util.Date getDateSubscribed() {
        if (dtSubscribed == null)
            dtSubscribed = DateTimeUtils.dateFromIso8601(subscribed);
        return dtSubscribed;
    }

    public PersonType getPersonType() {
        return personType;
    }

    public void setPersonType(PersonType personType) {
        this.personType = personType;
    }
}