diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/models/Person.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/models/Person.java | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java new file mode 100644 index 000000000..f5c841bb4 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -0,0 +1,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; + } +} |