package com.cellasoft.univrapp.model;
import android.net.Uri;
import android.provider.BaseColumns;
import com.cellasoft.univrapp.loader.ItemLoader;
import com.cellasoft.univrapp.manager.ContentManager;
import com.cellasoft.univrapp.provider.Provider;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
public class Item implements ActionSupport, Comparable<Item>, Serializable {
public static final int UNREAD = 0;
public static final int READ = 1;
public static final int TEMPORARILY_MARKED_AS_READ = 2;
public static final int KEPT_UNREAD = 3;
private static final long serialVersionUID = 8512014197691115155L;
// All <item> node name
public int id;
public String title;
public String link;
public String description;
public String category;
public Date pubDate;
public String guid;
public int read;
public long updateTime;
public Channel channel;
public Item() {
this.id = 0;
this.read = UNREAD;
this.pubDate = new Timestamp(System.currentTimeMillis());
}
public Item(int id) {
this();
this.id = id;
}
// constructor with parameters
public Item(String title, String link, String description, Date pubDate,
String guid) {
this.title = title;
this.link = link;
this.description = description;
if (pubDate != null)
this.pubDate = pubDate;
this.guid = guid;
}
public Item(Item item) {
this.id = item.id;
this.title = item.title;
this.link = item.link;
this.description = item.description;
this.pubDate = item.pubDate;
this.guid = item.guid;
this.read = item.read;
this.updateTime = item.updateTime;
this.channel = item.channel;
}
public static Item findItemById(int id, ItemLoader loader) {
return ContentManager.loadItem(id, loader,
ContentManager.LIGHTWEIGHT_CHANNEL_LOADER);
}
public boolean isRead() {
return this.read == READ;
}
@Override
public int compareTo(Item another) {
if (another == null)
return 1;
return another.pubDate.compareTo(pubDate);
}
@Override
public int hashCode() {
return 31 + ((link == null) ? 0 : link.hashCode());
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Item other = (Item) obj;
if (id != 0 && other.id != 0) {
return id == other.id;
} else if (link == null) {
if (other.link != null)
return false;
} else if (!link.equals(other.link))
return false;
return true;
}
public void markItemAsRead() {
ContentManager.markItemAsRead(this);
}
@Override
public boolean save() {
return ContentManager.saveItem(this);
}
@Override
public void delete() {
ContentManager.deleteItem(this);
}
@Override
public boolean exist() {
return ContentManager.existItem(this);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Title: ").append(title).append("\n");
sb.append("Link: ").append(link).append('\n');
sb.append("Description: ").append(description).append("\n");
sb.append("Date: ").append(pubDate).append('\n');
sb.append("Guid: ").append(guid).append('\n');
return sb.toString();
}
public static final class Items implements BaseColumns {
public static final Uri CONTENT_URI = Uri.parse("content://"
+ Provider.AUTHORITY + "/items");
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.cellasoft.univrapp.provider.items";
public static final String ID = "ID";
public static final String TITLE = "TITLE";
public static final String DESCRIPTION = "DESCRIPTION";
public static final String PUB_DATE = "PUB_DATE";
public static final String LINK = "LINK";
public static final String READ = "READ";
public static final String CHANNEL_ID = "CHANNEL_ID";
public static final String UPDATE_TIME = "UPDATE_TIME";
public static final String UNREAD_COUNT = "UNREAD";
public static final String COUNT = "COUNT(DISTINCT ID)";
public static final Uri hasTagAndLimit(int limit) {
return Uri.parse("content://" + Provider.AUTHORITY + "/items/tag/"
+ limit);
}
public static final Uri count() {
return Uri
.parse("content://" + Provider.AUTHORITY + "/items/count");
}
public static final Uri countUnreadEachChannel() {
return Uri.parse("content://" + Provider.AUTHORITY
+ "/items/unread");
}
public static final Uri countUnread() {
return Uri.parse("content://" + Provider.AUTHORITY
+ "/items/unread/all");
}
public static final Uri limit(int limit) {
return Uri.parse("content://" + Provider.AUTHORITY + "/items/"
+ limit);
}
public static final Uri limitAndStartAt(int limit, int offset) {
return Uri.parse("content://" + Provider.AUTHORITY + "/items/"
+ limit + "/" + offset);
}
}
}