| 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; |
| } |
| } |