package fr.ydelouis.selfoss.entity; import android.os.Parcel; import android.os.Parcelable; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import org.apache.commons.lang3.StringEscapeUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.TimeZone; import fr.ydelouis.selfoss.model.ArticleDao; @DatabaseTable(daoClass = ArticleDao.class) @JsonIgnoreProperties(ignoreUnknown = true) public class Article implements Parcelable { private static final SimpleDateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); static { DATETIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); } @DatabaseField(id = true, columnName = ArticleDao.COLUMN_ID) private int id; @DatabaseField(columnName = ArticleDao.COLUMN_DATETIME) private long dateTime; @DatabaseField private String title; @DatabaseField private String content; @DatabaseField(columnName = ArticleDao.COLUMN_UNREAD) private boolean unread; @DatabaseField(columnName = ArticleDao.COLUMN_STARRED) private boolean starred; @DatabaseField(columnName = ArticleDao.COLUMN_SOURCE_ID) private int sourceId; @DatabaseField private String thumbnail; @DatabaseField private String icon; @DatabaseField private String uid; @DatabaseField private String link; @DatabaseField @JsonProperty("sourcetitle") private String sourceTitle; @DatabaseField(columnName = ArticleDao.COLUMN_TAGS) private String tags; @DatabaseField private String imageUrl; @DatabaseField(columnName = ArticleDao.COLUMN_UPDATE_TIME) @JsonProperty("updatetime") private String updateTime; public Article() { } @JsonProperty("id") public void setId(Object id) { if (id instanceof Number) { this.id = (Integer) id; } else if (id instanceof String) { this.id = Integer.valueOf((String) id); } } @JsonProperty("datetime") public void setDateTime(String dateTimeStr) throws ParseException { dateTime = DATETIME_FORMAT.parse(dateTimeStr).getTime(); } @JsonProperty("unread") public void setUnread(Object unread) { if (unread instanceof Boolean) { this.unread = (Boolean) unread; } else if (unread instanceof String) { this.unread = "1".equals(unread); } } @JsonProperty("starred") public void setStarred(Object starred) { if (starred instanceof Boolean) { this.starred = (Boolean) starred; } else if (starred instanceof String) { this.starred = "1".equals(starred); } } @JsonProperty("source") public void setSourceId(Object sourceId) { if (sourceId instanceof Number) { this.sourceId = (Integer) sourceId; } else if (sourceId instanceof String) { this.sourceId = Integer.valueOf((String) sourceId); } } public int getId() { return Math.abs(id); } public void setId(int id) { this.id = id; } public long getDateTime() { return dateTime; } public void setDateTime(long dateTime) { this.dateTime = dateTime; } public String getTitle() { return title; } @JsonProperty("title") public void setTitle(String title) { this.title = StringEscapeUtils.unescapeHtml4(title); } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public boolean isUnread() { return unread; } public void setUnread(boolean unread) { this.unread = unread; } public boolean isStarred() { return starred; } public void setStarred(boolean starred) { this.starred = starred; } public int getSourceId() { return sourceId; } public void setSourceId(int sourceId) { this.sourceId = sourceId; } public String getThumbnail() { return thumbnail; } public void setThumbnail(String thumbnail) { this.thumbnail = thumbnail; } public boolean hasIcon() { return icon != null && !icon.isEmpty(); } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getSourceTitle() { return sourceTitle; } public void setSourceTitle(String sourceTitle) { this.sourceTitle = sourceTitle; } public String getTags() { return tags; } public void setTags(String tags) { this.tags = tags; } public String getImageUrl() { return imageUrl; } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } public String getUpdateTime() { return updateTime; } public void setUpdateTime(String updateTime) { this.updateTime = updateTime; } public boolean hasImage() { return imageUrl != null; } public boolean isCached() { return id < 0; } public void setCached(boolean cached) { if (cached) { this.id = - getId(); } else { this.id = getId(); } } @Override public boolean equals(Object o) { if (!(o instanceof Article)) return false; return getId() == ((Article) o).getId(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeLong(this.dateTime); dest.writeString(this.title); dest.writeString(this.content); dest.writeByte(unread ? (byte) 1 : (byte) 0); dest.writeByte(starred ? (byte) 1 : (byte) 0); dest.writeInt(this.sourceId); dest.writeString(this.thumbnail); dest.writeString(this.icon); dest.writeString(this.uid); dest.writeString(this.link); dest.writeString(this.sourceTitle); dest.writeString(this.tags); dest.writeString(this.imageUrl); dest.writeString(this.updateTime); } private Article(Parcel in) { this.id = in.readInt(); this.dateTime = in.readLong(); this.title = in.readString(); this.content = in.readString(); this.unread = in.readByte() != 0; this.starred = in.readByte() != 0; this.sourceId = in.readInt(); this.thumbnail = in.readString(); this.icon = in.readString(); this.uid = in.readString(); this.link = in.readString(); this.sourceTitle = in.readString(); this.tags = in.readString(); this.imageUrl = in.readString(); this.updateTime = in.readString(); } public static Parcelable.Creator<Article> CREATOR = new Parcelable.Creator<Article>() { public Article createFromParcel(Parcel source) { return new Article(source); } public Article[] newArray(int size) { return new Article[size]; } }; }