| package org.wordpress.android.models; |
| |
| import android.text.TextUtils; |
| |
| import org.json.JSONObject; |
| import org.wordpress.android.util.DateTimeUtils; |
| import org.wordpress.android.util.HtmlUtils; |
| import org.wordpress.android.util.JSONUtils; |
| import org.wordpress.android.util.StringUtils; |
| |
| public class ReaderComment { |
| public long commentId; |
| public long blogId; |
| public long postId; |
| public long parentId; |
| |
| private String authorName; |
| private String authorAvatar; |
| private String authorUrl; |
| private String status; |
| private String text; |
| |
| private String published; |
| public long timestamp; |
| |
| public long authorId; |
| public long authorBlogId; |
| |
| public int numLikes; |
| public boolean isLikedByCurrentUser; |
| |
| public int pageNumber; |
| |
| // not stored in db - denotes the indentation level when displaying this comment |
| public transient int level = 0; |
| |
| public static ReaderComment fromJson(JSONObject json, long blogId) { |
| if (json == null) { |
| throw new IllegalArgumentException("null json comment"); |
| } |
| |
| ReaderComment comment = new ReaderComment(); |
| |
| comment.blogId = blogId; |
| comment.commentId = json.optLong("ID"); |
| comment.status = JSONUtils.getString(json, "status"); |
| |
| // note that content may contain html, adapter needs to handle it |
| comment.text = HtmlUtils.stripScript(JSONUtils.getString(json, "content")); |
| |
| comment.published = JSONUtils.getString(json, "date"); |
| comment.timestamp = DateTimeUtils.timestampFromIso8601(comment.published); |
| |
| JSONObject jsonPost = json.optJSONObject("post"); |
| if (jsonPost != null) { |
| comment.postId = jsonPost.optLong("ID"); |
| } |
| |
| JSONObject jsonAuthor = json.optJSONObject("author"); |
| if (jsonAuthor!=null) { |
| // author names may contain html entities (esp. pingbacks) |
| comment.authorName = JSONUtils.getStringDecoded(jsonAuthor, "name"); |
| comment.authorAvatar = JSONUtils.getString(jsonAuthor, "avatar_URL"); |
| comment.authorUrl = JSONUtils.getString(jsonAuthor, "URL"); |
| comment.authorId = jsonAuthor.optLong("ID"); |
| comment.authorBlogId = jsonAuthor.optLong("site_ID"); |
| } |
| |
| JSONObject jsonParent = json.optJSONObject("parent"); |
| if (jsonParent != null) { |
| comment.parentId = jsonParent.optLong("ID"); |
| } |
| |
| // like info is found under meta/data/likes when meta=likes query param is used |
| JSONObject jsonLikes = JSONUtils.getJSONChild(json, "meta/data/likes"); |
| if (jsonLikes != null) { |
| comment.numLikes = jsonLikes.optInt("found"); |
| comment.isLikedByCurrentUser = JSONUtils.getBool(jsonLikes, "i_like"); |
| } |
| |
| return comment; |
| } |
| |
| public String getAuthorName() { |
| return StringUtils.notNullStr(authorName); |
| } |
| |
| public void setAuthorName(String authorName) { |
| this.authorName = StringUtils.notNullStr(authorName); |
| } |
| |
| public String getAuthorAvatar() { |
| return StringUtils.notNullStr(authorAvatar); |
| } |
| public void setAuthorAvatar(String authorAvatar) { |
| this.authorAvatar = StringUtils.notNullStr(authorAvatar); |
| } |
| |
| public String getAuthorUrl() { |
| return StringUtils.notNullStr(authorUrl); |
| } |
| public void setAuthorUrl(String authorUrl) { |
| this.authorUrl = StringUtils.notNullStr(authorUrl); |
| } |
| |
| public String getText() { |
| return StringUtils.notNullStr(text); |
| } |
| public void setText(String text) { |
| this.text = StringUtils.notNullStr(text); |
| } |
| |
| public String getStatus() { |
| return StringUtils.notNullStr(status); |
| } |
| public void setStatus(String status) { |
| this.status = StringUtils.notNullStr(status); |
| } |
| |
| public String getPublished() { |
| return StringUtils.notNullStr(published); |
| } |
| public void setPublished(String published) { |
| this.published = StringUtils.notNullStr(published); |
| } |
| |
| public boolean hasAuthorUrl() { |
| return !TextUtils.isEmpty(authorUrl); |
| } |
| |
| public boolean hasAuthorBlogId() { |
| return (authorBlogId != 0); |
| } |
| |
| public boolean hasAuthorAvatar() { |
| return !TextUtils.isEmpty(authorAvatar); |
| } |
| } |