aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/models/Person.java
diff options
context:
space:
mode:
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.java174
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;
+ }
+}