package com.cellasoft.univrapp.criteria;
import android.net.Uri;
import com.cellasoft.univrapp.Config;
import com.cellasoft.univrapp.model.Item;
import com.cellasoft.univrapp.model.Item.Items;
import com.cellasoft.univrapp.utils.Lists;
import java.util.List;
public class LatestItems implements ItemCriteria {
public static final int ALL_CHANNELS = -1;
public int channelId = ALL_CHANNELS;
public static final byte NONE = 0;
public static final byte OLDER = 1;
public byte comparision = OLDER;
public static final byte NEWER = 2;
public Item compareToItem = null;
public int maxItems = Config.MAX_ITEMS;
public LatestItems(int channelId) {
this(channelId, null, OLDER, Config.MAX_ITEMS);
}
public LatestItems(Item compareToItem, byte comparision) {
this(compareToItem, comparision, Config.MAX_ITEMS);
}
public LatestItems(int channelId, Item compareToItem, byte comparision) {
this(channelId, compareToItem, comparision, Config.MAX_ITEMS);
}
public LatestItems(Item compareToItem, byte comparision, int maxItems) {
this(ALL_CHANNELS, compareToItem, comparision, maxItems);
}
public LatestItems(int channelId, Item compareToItem, byte comparision,
int maxItems) {
this.channelId = channelId;
this.compareToItem = compareToItem;
this.comparision = comparision;
this.maxItems = maxItems;
}
@Override
public String getSelection() {
StringBuilder sb = new StringBuilder();
if (channelId != ALL_CHANNELS) {
sb.append(Items.CHANNEL_ID + "=?");
}
if (compareToItem != null) {
if (sb.length() > 0) {
sb.append(" AND ");
}
if (comparision == OLDER) {
sb.append("(" + Items.UPDATE_TIME + "<? OR ("
+ Items.UPDATE_TIME + "=? AND (" + Items.PUB_DATE
+ "<? OR (" + Items.PUB_DATE + " =? AND " + Items.ID
+ ">?))))");
} else if (comparision == NEWER) {
sb.append("(" + Items.UPDATE_TIME + ">? OR ("
+ Items.UPDATE_TIME + "=? AND (" + Items.PUB_DATE
+ ">? OR (" + Items.PUB_DATE + " =? AND " + Items.ID
+ "<?))))");
}
}
if (sb.length() == 0)
return null;
else
return sb.toString();
}
@Override
public String[] getSelectionArgs() {
List<String> args = Lists.newArrayList();
if (channelId != ALL_CHANNELS) {
args.add(String.valueOf(channelId));
}
if (compareToItem != null) {
args.add(String.valueOf(compareToItem.updateTime));
args.add(String.valueOf(compareToItem.updateTime));
args.add(String.valueOf(compareToItem.pubDate.getTime()));
args.add(String.valueOf(compareToItem.pubDate.getTime()));
args.add(String.valueOf(compareToItem.id));
}
return args.toArray(new String[0]);
}
@Override
public String getOrderBy() {
if (comparision == OLDER) {
return Items.UPDATE_TIME + " DESC, " + Items.PUB_DATE + " DESC, "
+ Items.ID + " ASC";
} else {
return Items.UPDATE_TIME + " ASC, " + Items.PUB_DATE + " ASC, "
+ Items.ID + " DESC";
}
}
@Override
public Uri getContentUri() {
return Items.limit(maxItems);
}
}